From 1e098496beb5530030250cf0e326f2547f61c142 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Mon, 30 May 2022 22:08:29 -0700 Subject: [PATCH] reimplement sfr queue clearing --- app/render/previewautocacher.cpp | 12 ++++++++++++ app/render/previewautocacher.h | 2 ++ app/widget/viewer/viewer.cpp | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/render/previewautocacher.cpp b/app/render/previewautocacher.cpp index 1ace48877..caa604ef1 100644 --- a/app/render/previewautocacher.cpp +++ b/app/render/previewautocacher.cpp @@ -83,6 +83,18 @@ RenderTicketPtr PreviewAutoCacher::GetRangeOfAudio(TimeRange range, RenderTicket return RenderAudio(copied_viewer_node_->GetConnectedSampleOutput(), range, priority, nullptr); } +void PreviewAutoCacher::ClearSingleFrameRenders() +{ + QMap > copy = video_immediate_passthroughs_; + for (auto it=copy.cbegin(); it!=copy.cend(); it++) { + it.key()->Cancel(); + if (!it.key()->IsRunning()) { + RenderManager::instance()->RemoveTicket(it.key()->GetTicket()); + emit it.key()->GetTicket()->Finished(); + } + } +} + void PreviewAutoCacher::VideoInvalidatedFromCache(const TimeRange &range) { PlaybackCache *cache = static_cast(sender()); diff --git a/app/render/previewautocacher.h b/app/render/previewautocacher.h index 18c688261..e5d95aa2f 100644 --- a/app/render/previewautocacher.h +++ b/app/render/previewautocacher.h @@ -55,6 +55,8 @@ public: RenderTicketPtr GetRangeOfAudio(TimeRange range, RenderTicketPriority prioritize); + void ClearSingleFrameRenders(); + /** * @brief Set the viewer node to auto-cache */ diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 64769237a..89dbd4d37 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -665,8 +665,7 @@ void ViewerWidget::ForceRequeueFromCurrentTime() // Allow half a second for requeue to complete static const rational kRequeueWaitTime(1); - qDebug() << "FIXME: Should be able to clear our frames"; - //ClearVideoAutoCacherQueue(); + auto_cacher_->ClearSingleFrameRenders(); queue_watchers_.clear(); int queue = DeterminePlaybackQueueSize(); playback_queue_next_frame_ = GetTimestamp() + playback_speed_ * Timecode::time_to_timestamp(kRequeueWaitTime, timebase(), Timecode::kFloor);; @@ -822,6 +821,7 @@ void ViewerWidget::PauseInternal() qDeleteAll(queue_watchers_); queue_watchers_.clear(); + auto_cacher_->ClearSingleFrameRenders(); playback_backup_timer_.stop();