From 4ab43800575bf9fc0b0d0f3ec678054bc4f60d88 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 27 Apr 2021 00:54:46 +1000 Subject: [PATCH] audiomonitor: update parameters immediately when panels are focused --- app/panel/audiomonitor/audiomonitor.h | 5 +++++ app/widget/audiomonitor/audiomonitor.cpp | 21 +++++++++++++++++++++ app/window/mainwindow/mainwindow.cpp | 16 ++++++++++++++-- app/window/mainwindow/mainwindow.h | 2 ++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/app/panel/audiomonitor/audiomonitor.h b/app/panel/audiomonitor/audiomonitor.h index 2483338c1..1c5c06aa8 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); + void SetParams(const AudioParams& params) + { + audio_monitor_->SetParams(params); + } + private: virtual void Retranslate() override; diff --git a/app/widget/audiomonitor/audiomonitor.cpp b/app/widget/audiomonitor/audiomonitor.cpp index 5237219e8..2fa9a08df 100644 --- a/app/widget/audiomonitor/audiomonitor.cpp +++ b/app/widget/audiomonitor/audiomonitor.cpp @@ -58,6 +58,8 @@ void AudioMonitor::SetParams(const AudioParams ¶ms) peaked_.resize(params_.channel_count()); peaked_.fill(false); + + update(); } void AudioMonitor::OutputDeviceSet(AudioPlaybackCache *cache, qint64 offset, int playback_speed) @@ -72,6 +74,11 @@ void AudioMonitor::OutputDeviceSet(AudioPlaybackCache *cache, qint64 offset, int return; } + if (offset > file_->size()) { + Stop(); + return; + } + file_->seek(offset); playback_speed_ = playback_speed; @@ -86,6 +93,8 @@ void AudioMonitor::Stop() delete file_; file_ = nullptr; waveform_ = nullptr; + + SetUpdateLoop(false); } void AudioMonitor::OutputPushed(const QByteArray &d) @@ -103,6 +112,10 @@ void AudioMonitor::OutputAudioVisualWaveformSet(const AudioVisualWaveform *wavef { Stop(); + if (start >= waveform->length()) { + return; + } + waveform_ = waveform; waveform_time_ = start; @@ -240,8 +253,16 @@ void AudioMonitor::paintGL() if (file_) { UpdateValuesFromFile(v, delta_time); + + if (file_->atEnd()) { + Stop(); + } } else if (waveform_) { UpdateValuesFromWaveform(v, delta_time); + + if (waveform_time_ >= waveform_->length()) { + Stop(); + } } last_time_ = current_time; diff --git a/app/window/mainwindow/mainwindow.cpp b/app/window/mainwindow/mainwindow.cpp index e46f53b58..8fb4a2bc7 100644 --- a/app/window/mainwindow/mainwindow.cpp +++ b/app/window/mainwindow/mainwindow.cpp @@ -194,6 +194,7 @@ TimelinePanel* MainWindow::OpenSequence(Sequence *sequence, bool enable_focus) if (enable_focus) { TimelineFocused(sequence); + UpdateAudioMonitorParams(sequence); } return panel; @@ -689,17 +690,28 @@ void MainWindow::SaveCustomShortcuts() } +void MainWindow::UpdateAudioMonitorParams(ViewerOutput *viewer) +{ + audio_monitor_panel_->SetParams(viewer ? viewer->GetAudioParams() : AudioParams()); +} + void MainWindow::FocusedPanelChanged(PanelWidget *panel) { - TimelinePanel* timeline = dynamic_cast(panel); + // Update audio monitor panel + TimeBasedPanel* tbp = dynamic_cast(panel); + if (tbp) { + UpdateAudioMonitorParams(tbp->GetConnectedViewer()); + } + // Signal timeline focus + TimelinePanel* timeline = dynamic_cast(panel); if (timeline) { TimelineFocused(timeline->GetConnectedViewer()); return; } + // Signal project panel focus ProjectPanel* project = dynamic_cast(panel); - if (project) { UpdateTitle(); node_panel_->SetGraph(project->project()); diff --git a/app/window/mainwindow/mainwindow.h b/app/window/mainwindow/mainwindow.h index 65b513a12..18c54f401 100644 --- a/app/window/mainwindow/mainwindow.h +++ b/app/window/mainwindow/mainwindow.h @@ -140,6 +140,8 @@ private: void SaveCustomShortcuts(); + void UpdateAudioMonitorParams(ViewerOutput* viewer); + QByteArray premaximized_state_; // Standard panels