From 2fd897c380f8272cd6ff1a74133627a2900cbace Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 5 Jun 2020 04:31:44 +1000 Subject: [PATCH] viewer: keep track of viewer length Useful for determining if the view should be updated from a length change. --- app/widget/viewer/viewer.cpp | 13 +++++++++++-- app/widget/viewer/viewer.h | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 9e43f45b1..a2ba023e0 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -187,6 +187,7 @@ void ViewerWidget::ConnectNodeInternal(ViewerOutput *n) SampleFormat::kInternalFormat)); SizeChangedSlot(n->video_params().width(), n->video_params().height()); + last_length_ = rational(); LengthChangedSlot(n->GetLength()); ColorManager* using_manager; @@ -1180,8 +1181,16 @@ void ViewerWidget::SizeChangedSlot(int width, int height) void ViewerWidget::LengthChangedSlot(const rational &length) { - controls_->SetEndTime(Timecode::time_to_timestamp(length, timebase())); - UpdateMinimumScale(); + if (last_length_ != length) { + controls_->SetEndTime(Timecode::time_to_timestamp(length, timebase())); + UpdateMinimumScale(); + + if (length < last_length_ && GetTime() >= length) { + ForceUpdate(); + } + + last_length_ = length; + } } void ViewerWidget::SetDividerFromMenu(QAction *action) diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 19c774688..6e63f9be0 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -249,6 +249,8 @@ private: CacheTask* our_cache_background_task_; + rational last_length_; + static CacheTask* cache_background_task_; static int busy_viewers_;