From 93bdf409b9d168384f5d95420bcbf483cf545036 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Wed, 29 Sep 2021 10:33:17 -0700 Subject: [PATCH] viewer: ensure prequeue is done before starting --- app/widget/viewer/viewer.cpp | 16 +++++++++------- app/widget/viewer/viewer.h | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 75050b34e..23a330f0f 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -57,7 +57,7 @@ ViewerWidget::ViewerWidget(QWidget *parent) : color_menu_enabled_(true), time_changed_from_timer_(false), prequeuing_video_(false), - prequeuing_audio_(false), + prequeuing_audio_(0), audio_playback_device_(nullptr) { // Set up main layout @@ -425,7 +425,6 @@ void ViewerWidget::StartAudioOutput() void ViewerWidget::QueueNextAudioBuffer() { - // NOTE: Hardcoded 2 second interval rational queue_end = audio_playback_queue_time_ + (kAudioPlaybackInterval * playback_speed_); // Clamp queue end by zero and the audio length @@ -474,8 +473,11 @@ void ViewerWidget::ReceivedAudioBufferForPlayback() audio_playback_device_->Push(pack); if (prequeuing_audio_) { - prequeuing_audio_ = false; - FinishPlayPreprocess(); + prequeuing_audio_--; + + if (!prequeuing_audio_) { + FinishPlayPreprocess(); + } } } } @@ -676,9 +678,9 @@ void ViewerWidget::PlayInternal(int speed, bool in_to_out_only) tempo_processor_.Open(GetConnectedNode()->GetAudioParams(), std::abs(playback_speed_)); } audio_playback_device_ = std::make_shared(); - prequeuing_audio_ = true; + prequeuing_audio_ = 2; // Queue two buffers ahead of time audio_playback_queue_time_ = GetTime(); - for (int i=0; i<2; i++) { + for (int i=0; i nonqueue_watchers_;