summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/dsp_load_calculator.h
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-02-14 00:04:29 +0100
committerRobin Gareus <robin@gareus.org>2019-02-14 00:04:29 +0100
commitedc34b8d054a53f5ec1766917bf807f06946863f (patch)
tree3c0fd8777efc26059e158dc4f74a8e06a3f7ce1d /libs/ardour/ardour/dsp_load_calculator.h
parentd03574987c3a1b00aae0530ad7c3db1e5cdc39ae (diff)
Optimize DSP-load calculation, pre-calculate fall-off once
Diffstat (limited to 'libs/ardour/ardour/dsp_load_calculator.h')
-rw-r--r--libs/ardour/ardour/dsp_load_calculator.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/libs/ardour/ardour/dsp_load_calculator.h b/libs/ardour/ardour/dsp_load_calculator.h
index 88b327bb30..32f24285cf 100644
--- a/libs/ardour/ardour/dsp_load_calculator.h
+++ b/libs/ardour/ardour/dsp_load_calculator.h
@@ -32,6 +32,7 @@ public:
: m_max_time_us(0)
, m_start_timestamp_us(0)
, m_stop_timestamp_us(0)
+ , m_alpha(0)
, m_dsp_load(0)
{
@@ -39,11 +40,13 @@ public:
void set_max_time(double samplerate, uint32_t period_size) {
m_max_time_us = period_size * 1e6 / samplerate;
+ m_alpha = 0.2f * (m_max_time_us * 1e-6f);
}
void set_max_time_us(uint64_t max_time_us) {
assert(max_time_us != 0);
m_max_time_us = max_time_us;
+ m_alpha = 0.2f * (m_max_time_us * 1e-6f);
}
int64_t get_max_time_us() const { return m_max_time_us; }
@@ -79,9 +82,8 @@ public:
if ((calc_avg_load && load > .95f) || (!calc_avg_load && (load > m_dsp_load || load > 1.f))) {
m_dsp_load = load;
} else {
- const float alpha = 0.2f * (m_max_time_us * 1e-6f);
m_dsp_load = std::min (1.f, m_dsp_load);
- m_dsp_load += alpha * (load - m_dsp_load) + 1e-12;
+ m_dsp_load += m_alpha * (load - m_dsp_load) + 1e-12;
}
}
@@ -122,6 +124,7 @@ private: // data
int64_t m_max_time_us;
int64_t m_start_timestamp_us;
int64_t m_stop_timestamp_us;
+ float m_alpha;
float m_dsp_load;
};