use audio waveform constants to determine min/max zoom levels
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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&){}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user