From 906f802422da1c600ace85878f5bdd05e3caa1a3 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Tue, 4 Oct 2022 21:51:05 -0700 Subject: [PATCH] viewer: only render sequence waveforms when waveform view is visible --- app/node/output/viewer/viewer.cpp | 21 +++++++++++++-------- app/node/output/viewer/viewer.h | 4 +++- app/widget/viewer/viewer.cpp | 4 ++++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/app/node/output/viewer/viewer.cpp b/app/node/output/viewer/viewer.cpp index 34ec101d6..50d90f0b3 100644 --- a/app/node/output/viewer/viewer.cpp +++ b/app/node/output/viewer/viewer.cpp @@ -39,7 +39,8 @@ ViewerOutput::ViewerOutput(bool create_buffer_inputs, bool create_default_stream video_length_(0), audio_length_(0), autocache_input_video_(false), - autocache_input_audio_(false) + autocache_input_audio_(false), + waveform_requests_enabled_(false) { AddInput(kVideoParamsInput, NodeValue::kVideoParams, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable | kInputFlagArray | kInputFlagHidden)); @@ -231,7 +232,9 @@ void ViewerOutput::InvalidateCache(const TimeRange& range, const QString& from, } } else if (from == kSamplesInput) { TimeRange max_range = InputTimeAdjustment(from, element, TimeRange(0, GetAudioLength())); - connected->waveform_cache()->Request(range.Intersected(max_range)); + if (waveform_requests_enabled_) { + connected->waveform_cache()->Request(range.Intersected(max_range)); + } if (autocache_input_audio_) { connected->audio_playback_cache()->Request(range.Intersected(max_range)); } @@ -387,13 +390,15 @@ Node::ValueHint ViewerOutput::GetConnectedSampleValueHint() return GetValueHintForInput(kSamplesInput); } -void ViewerOutput::ConnectedToPreviewEvent() +void ViewerOutput::SetWaveformEnabled(bool e) { - if (Node *connected = this->GetConnectedSampleOutput()) { - TimeRange max_range = InputTimeAdjustment(kSamplesInput, -1, TimeRange(0, GetAudioLength())); - TimeRangeList invalid = connected->waveform_cache()->GetInvalidatedRanges(max_range); - for (const TimeRange &r : invalid) { - connected->waveform_cache()->Request(r); + if ((waveform_requests_enabled_ = e)) { + if (Node *connected = this->GetConnectedSampleOutput()) { + TimeRange max_range = InputTimeAdjustment(kSamplesInput, -1, TimeRange(0, GetAudioLength())); + TimeRangeList invalid = connected->waveform_cache()->GetInvalidatedRanges(max_range); + for (const TimeRange &r : invalid) { + connected->waveform_cache()->Request(r); + } } } } diff --git a/app/node/output/viewer/viewer.h b/app/node/output/viewer/viewer.h index 4a1bf10a2..b99ebc30b 100644 --- a/app/node/output/viewer/viewer.h +++ b/app/node/output/viewer/viewer.h @@ -182,7 +182,7 @@ public: virtual ValueHint GetConnectedSampleValueHint(); - virtual void ConnectedToPreviewEvent() override; + void SetWaveformEnabled(bool e); bool IsVideoAutoCacheEnabled() const { qDebug() << "sequence ac is a stub"; return false; } void SetVideoAutoCacheEnabled(bool e) { qDebug() << "sequence ac is a stub"; } @@ -251,6 +251,8 @@ private: EncodingParams last_used_encoding_params_; + bool waveform_requests_enabled_; + }; } diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 32c1f9ebe..3beb3f44e 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -708,6 +708,10 @@ void ViewerWidget::UpdateWaveformViewFromMode() waveform_view_->setVisible(waveform_mode_ == kWFViewerAndWaveform || waveform_mode_ == kWFWaveformOnly || (waveform_mode_ == kWFAutomatic && prefer_waveform)); waveform_view_->setSizePolicy(QSizePolicy::Expanding, waveform_mode_ == kWFViewerAndWaveform ? QSizePolicy::Maximum : QSizePolicy::Expanding); + + if (GetConnectedNode()) { + GetConnectedNode()->SetWaveformEnabled(waveform_view_->isVisible()); + } } void ViewerWidget::QueueNextAudioBuffer()