use audio waveform constants to determine min/max zoom levels

This commit is contained in:
itsmattkc
2021-09-28 21:35:24 -07:00
parent 337cb4838d
commit c29939b523
6 changed files with 15 additions and 18 deletions
+7 -9
View File
@@ -27,13 +27,12 @@
namespace olive {
const rational AudioVisualWaveform::kMinimumSampleRate = rational(1, 8);
const rational AudioVisualWaveform::kMaximumSampleRate = 1024;
AudioVisualWaveform::AudioVisualWaveform() :
channels_(0)
{
// Must be a power of 2
static const rational kMinimumSampleRate = rational(1, 8);
static const rational kMaximumSampleRate = 1024;
for (rational i=kMinimumSampleRate; i<=kMaximumSampleRate; i*=2) {
mipmapped_data_.insert({i, Sample()});
}
@@ -431,15 +430,14 @@ int AudioVisualWaveform::time_to_samples(const double &time, double sample_rate)
std::map<rational, AudioVisualWaveform::Sample>::const_iterator AudioVisualWaveform::GetMipmapForScale(double scale) const
{
// Find largest mipmap for this scale (or the largest if we don't find one sufficient)
auto using_mipmap = mipmapped_data_.cend();
using_mipmap--;
for (auto it=mipmapped_data_.cbegin(); it!=mipmapped_data_.cend(); it++) {
if (it->first.toDouble() >= scale) {
using_mipmap = it;
break;
return it;
}
}
return using_mipmap;
// We don't have a mipmap large enough for this scale, so just return the largest we have
return std::prev(mipmapped_data_.cend());
}
void AudioVisualWaveform::ExpandMinMax(AudioVisualWaveform::SamplePerChannel &sum, float value)
+4
View File
@@ -107,6 +107,10 @@ public:
static void DrawWaveform(QPainter* painter, const QRect &rect, const double &scale, const AudioVisualWaveform& samples, const rational &start_time);
// Must be a power of 2
static const rational kMinimumSampleRate;
static const rational kMaximumSampleRate;
private:
static void ExpandMinMax(SamplePerChannel &sum, float value);
@@ -128,8 +128,6 @@ NodeParamView::NodeParamView(QWidget *parent) :
// Set a default scale - FIXME: Hardcoded
SetScale(120);
SetMaximumScale(TimeBasedView::kMaximumScale);
// Pickup on widget focus changes
connect(qApp,
&QApplication::focusChanged,
+2 -4
View File
@@ -23,19 +23,17 @@
#include <cfloat>
#include <QtMath>
#include "audio/audiovisualwaveform.h"
#include "common/clamp.h"
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_(kMaximumScale)
max_scale_(AudioVisualWaveform::kMaximumSampleRate.toDouble())
{
}
+1 -2
View File
@@ -44,6 +44,7 @@ public:
static rational SceneToTime(const double &x, const double& x_scale, const rational& timebase, bool round = false);
const double& GetScale() const;
const double &GetMaximumScale() const { return max_scale_; }
void SetScale(const double& scale);
@@ -54,8 +55,6 @@ 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&){}
+1 -1
View File
@@ -68,7 +68,7 @@ void ZoomTool::MouseRelease(TimelineViewMouseEvent *event)
// Normalize scale to 1.0 scale
double scene_width = (scene_right - scene_left) / parent()->GetScale();
double new_scale = qMin(TimeBasedView::kMaximumScale, static_cast<double>(reference_view->viewport()->width()) / scene_width);
double new_scale = qMin(parent()->GetFirstTimelineView()->GetMaximumScale(), static_cast<double>(reference_view->viewport()->width()) / scene_width);
parent()->SetScale(new_scale);