From 67f01088278dd304b56a60e2469b86091b91122e Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Mon, 11 Oct 2021 23:14:50 -0700 Subject: [PATCH] viewer: pause audio cache on playback --- app/render/previewautocacher.cpp | 11 ++++++++++- app/render/previewautocacher.h | 4 ++++ app/widget/viewer/viewer.cpp | 6 ++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/render/previewautocacher.cpp b/app/render/previewautocacher.cpp index 86cfaa384..03a94efd9 100644 --- a/app/render/previewautocacher.cpp +++ b/app/render/previewautocacher.cpp @@ -41,6 +41,7 @@ const bool PreviewAutoCacher::kRealTimeWaveformsEnabled = true; PreviewAutoCacher::PreviewAutoCacher() : viewer_node_(nullptr), use_custom_range_(false), + pause_audio_(false), single_frame_render_(nullptr) { // Set defaults @@ -532,6 +533,14 @@ void PreviewAutoCacher::CancelAudioTasks(bool and_wait_for_them_to_finish) CancelTasks(audio_tasks_, and_wait_for_them_to_finish); } +void PreviewAutoCacher::SetAudioPaused(bool e) +{ + pause_audio_ = e; + if (!e) { + TryRender(); + } +} + void PreviewAutoCacher::NodeAdded(Node *node) { graph_update_queue_.append({QueuedJob::kNodeAdded, node, NodeInput(), nullptr}); @@ -672,7 +681,7 @@ void PreviewAutoCacher::TryRender() } // Handle audio tasks - while (!audio_iterator_.isEmpty() && audio_tasks_.size() < max_tasks) { + while (!audio_iterator_.isEmpty() && audio_tasks_.size() < max_tasks && !pause_audio_) { // Copy first range in list TimeRange r = audio_iterator_.first(); diff --git a/app/render/previewautocacher.h b/app/render/previewautocacher.h index 246b0d1ff..ad4665da3 100644 --- a/app/render/previewautocacher.h +++ b/app/render/previewautocacher.h @@ -99,6 +99,8 @@ public: return queued_frame_iterator_.IsCustomRange() && queued_frame_iterator_.HasNext(); } + void SetAudioPaused(bool e); + signals: void StopCacheProxyTasks(); @@ -182,6 +184,8 @@ private: TimeRangeList invalidated_video_; TimeRangeList invalidated_audio_; + bool pause_audio_; + RenderTicketPtr single_frame_render_; QList >*> hash_tasks_; diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 627613e40..7054fab40 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -634,6 +634,8 @@ void ViewerWidget::PlayInternal(int speed, bool in_to_out_only) viewer->PauseInternal(); viewer->ClearVideoAutoCacherQueue(); } + + viewer->auto_cacher_.SetAudioPaused(true); } // If the playhead is beyond the end, restart at 0 @@ -722,6 +724,10 @@ void ViewerWidget::PauseInternal() tempo_processor_.Close(); } + foreach (ViewerWidget* viewer, instances_) { + viewer->auto_cacher_.SetAudioPaused(false); + } + UpdateTextureFromNode(); }