summaryrefslogtreecommitdiff
path: root/libs/ardour/meter.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/meter.cc')
-rw-r--r--libs/ardour/meter.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc
index 1ce610d13c..66e0a98dd3 100644
--- a/libs/ardour/meter.cc
+++ b/libs/ardour/meter.cc
@@ -57,6 +57,14 @@ PeakMeter::reset ()
}
void
+PeakMeter::reset_max ()
+{
+ for (size_t i = 0; i < _max_peak_power.size(); ++i) {
+ _max_peak_power[i] = -INFINITY;
+ }
+}
+
+void
PeakMeter::setup (const ChanCount& in)
{
uint32_t limit = in.get(DataType::AUDIO);
@@ -68,11 +76,13 @@ PeakMeter::setup (const ChanCount& in)
while (_peak_power.size() < limit) {
_peak_power.push_back (0);
- _visible_peak_power.push_back (0);
+ _visible_peak_power.push_back (minus_infinity());
+ _max_peak_power.push_back (minus_infinity());
}
assert(_peak_power.size() == limit);
assert(_visible_peak_power.size() == limit);
+ assert(_max_peak_power.size() == limit);
}
/** To be driven by the Meter signal from IO.
@@ -102,6 +112,10 @@ PeakMeter::meter ()
new_peak = minus_infinity();
}
+ /* update max peak */
+
+ _max_peak_power[n] = std::max (new_peak, _max_peak_power[n]);
+
if (Config->get_meter_falloff() == 0.0f || new_peak > _visible_peak_power[n]) {
_visible_peak_power[n] = new_peak;
} else {