From 2f30a2f719d885a71b3ae425376ced14d3373174 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Sat, 2 Oct 2021 12:30:18 -0700 Subject: [PATCH] viewer: complete prequeue if there's no more audio Fixes #1760 --- app/widget/viewer/viewer.cpp | 17 ++++++++++++----- app/widget/viewer/viewer.h | 2 ++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 72a063b27..88f9e1c79 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -410,6 +410,14 @@ void ViewerWidget::ClearVideoAutoCacherQueue() auto_cacher_.CancelVideoTasks(); } +void ViewerWidget::DecrementPrequeuedAudio() +{ + prequeuing_audio_--; + if (!prequeuing_audio_) { + FinishPlayPreprocess(); + } +} + void ViewerWidget::QueueNextAudioBuffer() { rational queue_end = audio_playback_queue_time_ + (kAudioPlaybackInterval * playback_speed_); @@ -418,6 +426,9 @@ void ViewerWidget::QueueNextAudioBuffer() queue_end = clamp(queue_end, rational(0), GetConnectedNode()->GetAudioLength()); if (queue_end == audio_playback_queue_time_) { // This will queue nothing, so stop the loop here + if (prequeuing_audio_) { + DecrementPrequeuedAudio(); + } return; } @@ -459,13 +470,9 @@ void ViewerWidget::ReceivedAudioBufferForPlayback() if (!pack.isEmpty()) { if (prequeuing_audio_) { // Add to prequeued audio buffer - prequeuing_audio_--; - prequeued_audio_.append(pack); - if (!prequeuing_audio_) { - FinishPlayPreprocess(); - } + DecrementPrequeuedAudio(); } else { // Push directly to audio manager AudioManager::instance()->PushToOutput(GetConnectedNode()->GetAudioParams(), pack); diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 2766cca8d..7a1115fce 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -215,6 +215,8 @@ private: void ClearVideoAutoCacherQueue(); + void DecrementPrequeuedAudio(); + QStackedWidget* stack_; ViewerSizer* sizer_;