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);