From 5edb8f5d4a625958b5c599d0bb0e26ec6b03698e Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 3 Sep 2021 13:46:37 -0700 Subject: [PATCH] reduce waveform scale Exponentially improves performance (at the expense of higher zoom levels but they were probably already too extreme) --- app/audio/audiovisualwaveform.cpp | 2 +- app/widget/timebased/timebasedview.cpp | 5 ----- app/widget/timebased/timebasedview.h | 2 -- app/widget/timebased/timescaledobject.cpp | 6 ++++-- app/widget/timebased/timescaledobject.h | 2 ++ app/widget/timelinewidget/timelinewidget.cpp | 1 - 6 files changed, 7 insertions(+), 11 deletions(-) diff --git a/app/audio/audiovisualwaveform.cpp b/app/audio/audiovisualwaveform.cpp index 82c9a3b2d..7f3d06abd 100644 --- a/app/audio/audiovisualwaveform.cpp +++ b/app/audio/audiovisualwaveform.cpp @@ -32,7 +32,7 @@ AudioVisualWaveform::AudioVisualWaveform() : { // Must be a power of 2 static const rational kMinimumSampleRate = rational(1, 8); - static const rational kMaximumSampleRate = 8192; + static const rational kMaximumSampleRate = 1024; for (rational i=kMinimumSampleRate; i<=kMaximumSampleRate; i*=2) { mipmapped_data_.insert({i, Sample()}); diff --git a/app/widget/timebased/timebasedview.cpp b/app/widget/timebased/timebasedview.cpp index b9ae6b68f..05a749976 100644 --- a/app/widget/timebased/timebasedview.cpp +++ b/app/widget/timebased/timebasedview.cpp @@ -29,8 +29,6 @@ namespace olive { -const double TimeBasedView::kMaximumScale = 8192; - TimeBasedView::TimeBasedView(QWidget *parent) : HandMovableView(parent), playhead_scene_left_(-1), @@ -53,9 +51,6 @@ TimeBasedView::TimeBasedView(QWidget *parent) : // Signal to update bounding rect when the scene changes connect(&scene_, &QGraphicsScene::changed, this, &TimeBasedView::UpdateSceneRect); - // Always enforce maximum scale - SetMaximumScale(kMaximumScale); - // Workaround for Qt drawing issues with the default MinimalViewportUpdate. While this might be // slower (Qt documentation says it may actually be faster in some situations), // MinimalViewportUpdate causes all sorts of graphical crud building up in the scene diff --git a/app/widget/timebased/timebasedview.h b/app/widget/timebased/timebasedview.h index d7a6f4b49..247948b61 100644 --- a/app/widget/timebased/timebasedview.h +++ b/app/widget/timebased/timebasedview.h @@ -36,8 +36,6 @@ class TimeBasedView : public HandMovableView, public TimeScaledObject public: TimeBasedView(QWidget* parent = nullptr); - static const double kMaximumScale; - void EnableSnap(const QVector &points); void DisableSnap(); bool IsSnapped() const diff --git a/app/widget/timebased/timescaledobject.cpp b/app/widget/timebased/timescaledobject.cpp index 3d74ed026..93da7c171 100644 --- a/app/widget/timebased/timescaledobject.cpp +++ b/app/widget/timebased/timescaledobject.cpp @@ -27,14 +27,16 @@ namespace olive { +// Keep this aligned with the kMaximumSampleRate in AudioVisualWaveform +const double TimeScaledObject::kMaximumScale = 1024; + const int TimeScaledObject::kCalculateDimensionsPadding = 10; TimeScaledObject::TimeScaledObject() : scale_(1.0), min_scale_(0), - max_scale_(DBL_MAX) + max_scale_(kMaximumScale) { - } void TimeScaledObject::SetTimebase(const rational &timebase) diff --git a/app/widget/timebased/timescaledobject.h b/app/widget/timebased/timescaledobject.h index c9e86eeb2..cf734fb60 100644 --- a/app/widget/timebased/timescaledobject.h +++ b/app/widget/timebased/timescaledobject.h @@ -54,6 +54,8 @@ public: double TimeToScene(const rational& time) const; rational SceneToTime(const double &x, bool round = false) const; + static const double kMaximumScale; + protected: virtual void TimebaseChangedEvent(const rational&){} diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index 862178736..fcb22b3e1 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -179,7 +179,6 @@ TimelineWidget::TimelineWidget(QWidget *parent) : // FIXME: Magic number SetScale(90.0); - SetMaximumScale(TimeBasedView::kMaximumScale); SetAutoSetTimebase(false); connect(Core::instance(), &Core::ToolChanged, this, &TimelineWidget::ToolChanged);