From aac47ba77603e593ca60ecc995f7c574d513b227 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 13 Apr 2020 12:58:04 +1000 Subject: [PATCH] viewer: re-queue video renderer even when beyond the length Ensures video renderer always renders where the playhead is. --- app/render/backend/videorenderbackend.cpp | 11 ++++++++--- app/render/backend/videorenderbackend.h | 2 ++ app/widget/viewer/viewer.cpp | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/render/backend/videorenderbackend.cpp b/app/render/backend/videorenderbackend.cpp index 7b97ea1f5..c98649789 100644 --- a/app/render/backend/videorenderbackend.cpp +++ b/app/render/backend/videorenderbackend.cpp @@ -165,7 +165,7 @@ VideoRenderFrameCache *VideoRenderBackend::frame_cache() QString VideoRenderBackend::GetCachedFrame(const rational &time) { - last_time_requested_ = time; + UpdateLastRequestedTime(time); if (viewer_node() == nullptr) { // Nothing is connected - nothing to show or render @@ -182,8 +182,6 @@ QString VideoRenderBackend::GetCachedFrame(const rational &time) return nullptr; } - Requeue(); - // Find frame in map QByteArray frame_hash = frame_cache_.TimeToHash(time); @@ -196,6 +194,13 @@ QString VideoRenderBackend::GetCachedFrame(const rational &time) return QString(); } +void VideoRenderBackend::UpdateLastRequestedTime(const rational &time) +{ + last_time_requested_ = time; + + Requeue(); +} + NodeInput *VideoRenderBackend::GetDependentInput() { return viewer_node()->texture_input(); diff --git a/app/render/backend/videorenderbackend.h b/app/render/backend/videorenderbackend.h index 885860537..a73d46df2 100644 --- a/app/render/backend/videorenderbackend.h +++ b/app/render/backend/videorenderbackend.h @@ -66,6 +66,8 @@ public: QString GetCachedFrame(const rational& time); + void UpdateLastRequestedTime(const rational& time); + VideoRenderFrameCache* frame_cache(); const VideoRenderingParams& params() const; diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index d8bde137b..442691e08 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -320,6 +320,7 @@ void ViewerWidget::UpdateTextureFromNode(const rational& time) { if (!GetConnectedNode() || time >= GetConnectedNode()->Length()) { main_gl_widget()->SetImage(QString()); + video_renderer_->UpdateLastRequestedTime(time); } else { QString frame_fn = video_renderer_->GetCachedFrame(time);