From d13f68593be16a48bd29abb1901b81b8c7d692d1 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Wed, 26 May 2021 18:00:12 +1000 Subject: [PATCH] audiomonitor: fix param sync issue that caused crashes --- app/audio/audiomanager.cpp | 4 ++-- app/panel/audiomonitor/audiomonitor.h | 5 +++++ app/widget/audiomonitor/audiomonitor.cpp | 24 +++++++++++++----------- app/widget/audiomonitor/audiomonitor.h | 5 +++++ app/window/mainwindow/mainwindow.cpp | 4 +++- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/app/audio/audiomanager.cpp b/app/audio/audiomanager.cpp index da2f48387..6a2bee79c 100644 --- a/app/audio/audiomanager.cpp +++ b/app/audio/audiomanager.cpp @@ -164,9 +164,9 @@ void AudioManager::SetOutputParams(const AudioParams ¶ms) // Refresh output device SetOutputDevice(output_device_info_); - - emit AudioParamsChanged(output_params_); } + + emit AudioParamsChanged(output_params_); } void AudioManager::SetInputDevice(const QAudioDeviceInfo &info) diff --git a/app/panel/audiomonitor/audiomonitor.h b/app/panel/audiomonitor/audiomonitor.h index 1c5c06aa8..5d4b49c49 100644 --- a/app/panel/audiomonitor/audiomonitor.h +++ b/app/panel/audiomonitor/audiomonitor.h @@ -35,6 +35,11 @@ class AudioMonitorPanel : public PanelWidget public: AudioMonitorPanel(QWidget* parent = nullptr); + bool IsPlaying() const + { + return audio_monitor_->IsPlaying(); + } + void SetParams(const AudioParams& params) { audio_monitor_->SetParams(params); diff --git a/app/widget/audiomonitor/audiomonitor.cpp b/app/widget/audiomonitor/audiomonitor.cpp index 2e709a143..6363465c5 100644 --- a/app/widget/audiomonitor/audiomonitor.cpp +++ b/app/widget/audiomonitor/audiomonitor.cpp @@ -49,17 +49,19 @@ AudioMonitor::AudioMonitor(QWidget *parent) : void AudioMonitor::SetParams(const AudioParams ¶ms) { - params_ = params; + if (params_ != params) { + params_ = params; - for (int i=0;i v(params_.channel_count(), 0); - if (file_ || waveform_) { + if (IsPlaying()) { // Determines how many milliseconds have passed since last update qint64 current_time = QDateTime::currentMSecsSinceEpoch(); qint64 delta_time = current_time - last_time_; @@ -308,7 +310,7 @@ void AudioMonitor::paintGL() } } - if (all_zeroes && !file_ && !waveform_) { + if (all_zeroes && !IsPlaying()) { // Optimize by disabling the update loop SetUpdateLoop(false); } diff --git a/app/widget/audiomonitor/audiomonitor.h b/app/widget/audiomonitor/audiomonitor.h index 87803b74d..1570618bc 100644 --- a/app/widget/audiomonitor/audiomonitor.h +++ b/app/widget/audiomonitor/audiomonitor.h @@ -38,6 +38,11 @@ class AudioMonitor : public QOpenGLWidget public: AudioMonitor(QWidget* parent = nullptr); + bool IsPlaying() const + { + return file_ || waveform_; + } + public slots: void SetParams(const AudioParams& params); diff --git a/app/window/mainwindow/mainwindow.cpp b/app/window/mainwindow/mainwindow.cpp index 8fb4a2bc7..297de30c7 100644 --- a/app/window/mainwindow/mainwindow.cpp +++ b/app/window/mainwindow/mainwindow.cpp @@ -692,7 +692,9 @@ void MainWindow::SaveCustomShortcuts() void MainWindow::UpdateAudioMonitorParams(ViewerOutput *viewer) { - audio_monitor_panel_->SetParams(viewer ? viewer->GetAudioParams() : AudioParams()); + if (!audio_monitor_panel_->IsPlaying()) { + audio_monitor_panel_->SetParams(viewer ? viewer->GetAudioParams() : AudioParams()); + } } void MainWindow::FocusedPanelChanged(PanelWidget *panel)