From b73826d04f53cf29640f9f4b5983bfbfa6e6f77a Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Wed, 20 Jun 2018 01:01:51 -0700 Subject: [PATCH] added timecode displays (finally) --- panels/project.cpp | 2 +- panels/timeline.cpp | 29 ++++++++++++++++++++++++++++- panels/viewer.h | 3 ++- panels/viewer.ui | 14 ++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/panels/project.cpp b/panels/project.cpp index 797f24d03..54b83c63f 100644 --- a/panels/project.cpp +++ b/panels/project.cpp @@ -153,7 +153,7 @@ Media* Project::import_file(QString file) { pg->fmt_ctx = pFormatCtx; // cleaned up in PG pg->media = m; connect(pg, SIGNAL(finished()), pg, SLOT(deleteLater())); - pg->run(); + pg->start(QThread::LowPriority); delete [] filename; return m; diff --git a/panels/timeline.cpp b/panels/timeline.cpp index b5266fb1a..b9cc21533 100644 --- a/panels/timeline.cpp +++ b/panels/timeline.cpp @@ -12,6 +12,7 @@ #include "panels/viewer.h" #include "playback/cacher.h" #include "playback/playback.h" +#include "ui_viewer.h" #include #include @@ -149,6 +150,19 @@ void Timeline::redo() { } } +QString frame_to_timecode(long f) { + int int_fps = qRound(sequence->frame_rate); + int hours = f/ (3600 * int_fps); + int mins = f / (60*int_fps) % 60; + int secs = f/int_fps % 60; + int frames = f%int_fps; + return QString(QString::number(hours).rightJustified(2, '0') + + ":" + QString::number(mins).rightJustified(2, '0') + + ":" + QString::number(secs).rightJustified(2, '0') + + ":" + QString::number(frames).rightJustified(2, '0') + ); +} + void Timeline::repaint_timeline() { if (playing) { playhead = round(playhead_start + ((QDateTime::currentMSecsSinceEpoch()-start_msecs) * 0.001 * sequence->frame_rate)); @@ -160,6 +174,7 @@ void Timeline::repaint_timeline() { panel_viewer->viewer_widget->update(); last_frame = playhead; } + panel_viewer->ui->currentTimecode->setText(frame_to_timecode(playhead)); } void Timeline::redraw_all_clips() { @@ -170,6 +185,8 @@ void Timeline::redraw_all_clips() { ui->video_area->redraw_clips(); ui->audio_area->redraw_clips(); ui->headers->update(); + + panel_viewer->ui->endTimecode->setText(frame_to_timecode(sequence->getEndFrame())); } void Timeline::select_all() { @@ -225,13 +242,23 @@ void Timeline::delete_selection(bool ripple_delete) { } } +int lerp(int a, int b, float t) { + return ((1.0f - t) * a) + (t * b); +} + void Timeline::set_zoom(bool in) { if (in) { zoom *= 2; } else { zoom /= 2; } - ui->timeline_area->horizontalScrollBar()->setValue(getScreenPointFromFrame(playhead) - (ui->timeline_area->width()/2)); + ui->timeline_area->horizontalScrollBar()->setValue( + lerp( + ui->timeline_area->horizontalScrollBar()->value(), + getScreenPointFromFrame(playhead) - (ui->timeline_area->width()/2), + 0.99f + ) + ); redraw_all_clips(); } diff --git a/panels/viewer.h b/panels/viewer.h index 7aa0856dc..63be105bc 100644 --- a/panels/viewer.h +++ b/panels/viewer.h @@ -24,6 +24,7 @@ public: ViewerWidget* viewer_widget; + Ui::Viewer *ui; private slots: void on_pushButton_clicked(); @@ -36,7 +37,7 @@ private slots: void on_pushButton_3_clicked(); private: - Ui::Viewer *ui; + }; #endif // VIEWER_H diff --git a/panels/viewer.ui b/panels/viewer.ui index 73b45a1b1..341263c20 100644 --- a/panels/viewer.ui +++ b/panels/viewer.ui @@ -79,6 +79,13 @@ 0 + + + + 00:00:00;00 + + + @@ -285,6 +292,13 @@ + + + + 00:00:00;00 + + +