From 094f4a8e446156323fea82c0fdbbe7d1ecb9a282 Mon Sep 17 00:00:00 2001 From: Mike Solar Date: Sun, 12 Jul 2026 19:45:42 +0800 Subject: [PATCH] Fix audio waveform view scene rect and timebase refresh - AudioWaveformView now uses the video frame rate as its timebase (falling back to the default sequence frame rate), preventing the enormous scene rect that froze the UI when it previously used the audio sample rate. - Call UpdateSceneRect() after changing the waveform timebase so the QGraphicsScene bounds are recomputed immediately. - Refresh the waveform view's viewer/timebase whenever the waveform visibility mode changes, ensuring the correct timebase is applied even if the node was connected earlier with a different setting. --- app/widget/viewer/audiowaveformview.cpp | 9 +++++---- app/widget/viewer/viewer.cpp | 6 ++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/widget/viewer/audiowaveformview.cpp b/app/widget/viewer/audiowaveformview.cpp index 5b9331c70..f3bb2a08a 100644 --- a/app/widget/viewer/audiowaveformview.cpp +++ b/app/widget/viewer/audiowaveformview.cpp @@ -67,11 +67,12 @@ void AudioWaveformView::SetViewer(ViewerOutput *playback) connect(playback_, &ViewerOutput::ConnectedWaveformChanged, viewport(), static_cast(&QWidget::update)); - SetTimebase(playback_->GetVideoParams().frame_rate_as_time_base()); - if (timebase().isNull()) { - SetTimebase( - playback_->GetAudioParams().sample_rate_as_time_base()); + rational tb = playback_->GetVideoParams().frame_rate_as_time_base(); + if (tb.isNull()) { + tb = OLIVE_CONFIG("DefaultSequenceFrameRate").value().flipped(); } + SetTimebase(tb); + UpdateSceneRect(); } } diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index ce174501c..a3bb443c9 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -826,6 +826,12 @@ void ViewerWidget::UpdateWaveformViewFromMode() if (GetConnectedNode()) { GetConnectedNode()->SetWaveformEnabled(waveform_view_->isVisible()); + + if (waveform_view_->isVisible()) { + waveform_view_->SetViewer(GetConnectedNode()); + } else { + waveform_view_->SetViewer(nullptr); + } } }