From e9c97407aadfbd02afaa55a27f14bc3dc0a537dc Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Mon, 20 Mar 2023 10:41:47 -0700 Subject: [PATCH] viewer: improve visual appearance of scrubbing --- app/render/previewautocacher.cpp | 12 ++++++++++++ app/render/previewautocacher.h | 1 + app/widget/viewer/viewer.cpp | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/render/previewautocacher.cpp b/app/render/previewautocacher.cpp index 3e349b34f..9bf78ce10 100644 --- a/app/render/previewautocacher.cpp +++ b/app/render/previewautocacher.cpp @@ -108,6 +108,18 @@ void PreviewAutoCacher::ClearSingleFrameRenders() } } +void PreviewAutoCacher::ClearSingleFrameRendersThatArentRunning() +{ + QMap > copy = video_immediate_passthroughs_; + for (auto it=copy.cbegin(); it!=copy.cend(); it++) { + if (!it.key()->IsRunning()) { + it.key()->Cancel(); + RenderManager::instance()->RemoveTicket(it.key()->GetTicket()); + emit it.key()->GetTicket()->Finished(); + } + } +} + void PreviewAutoCacher::VideoInvalidatedFromCache(ViewerOutput *context, const TimeRange &range) { PlaybackCache *cache = static_cast(sender()); diff --git a/app/render/previewautocacher.h b/app/render/previewautocacher.h index 7cabdcd48..c88f85695 100644 --- a/app/render/previewautocacher.h +++ b/app/render/previewautocacher.h @@ -54,6 +54,7 @@ public: RenderTicketPtr GetRangeOfAudio(ViewerOutput *viewer, TimeRange range); void ClearSingleFrameRenders(); + void ClearSingleFrameRendersThatArentRunning(); /** * @brief Set the viewer node to auto-cache diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index bc9a4ffce..61d4c3028 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -900,7 +900,7 @@ void ViewerWidget::UpdateTextureFromNode() nonqueue_watchers_.append(watcher); // Clear queue because we want this frame more than any others - RenderManager::instance()->GetCacher()->ClearSingleFrameRenders(); + RenderManager::instance()->GetCacher()->ClearSingleFrameRendersThatArentRunning(); DetectMulticamNode(time);