X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmeter.cc;h=430306c91a00c8cb9b40c497b15f581111f22194;hb=444b9e89033aa4171254a3622c583e1d791c7e9f;hp=fa9ee2fc6b1a7c13433021f283809312869d87a9;hpb=239da0efb58849e545ec44aeb839d41b8e4792cf;p=ardour.git diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc index fa9ee2fc6b..430306c91a 100644 --- a/libs/ardour/meter.cc +++ b/libs/ardour/meter.cc @@ -78,7 +78,7 @@ PeakMeter::~PeakMeter () * (runs in jack realtime context) */ void -PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/, pframes_t nframes, bool) +PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/, double /*speed*/, pframes_t nframes, bool) { if (!_active && !_pending_active) { return; @@ -87,6 +87,7 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr const bool do_reset_dpm = _reset_dpm; _reset_max = false; _reset_dpm = false; + _combined_peak = 0; // cerr << "meter " << name() << " runs with " << bufs.available() << " inputs\n"; @@ -136,11 +137,12 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr // Meter audio in to the rest of the peaks for (uint32_t i = 0; i < n_audio; ++i, ++n) { if (bufs.get_audio(i).silent()) { - ; + _peak_buffer[n] = 0; } else { _peak_buffer[n] = compute_peak (bufs.get_audio(i).data(), nframes, _peak_buffer[n]); + _peak_buffer[n] = std::min (_peak_buffer[n], 100.f); // cut off at +40dBFS for falloff. _max_peak_signal[n] = std::max(_peak_buffer[n], _max_peak_signal[n]); // todo sync reset - _combined_peak =std::max(_peak_buffer[n], _combined_peak); + _combined_peak = std::max(_peak_buffer[n], _combined_peak); } if (do_reset_max) { @@ -235,14 +237,23 @@ PeakMeter::can_support_io_configuration (const ChanCount& in, ChanCount& out) bool PeakMeter::configure_io (ChanCount in, ChanCount out) { + bool changed = false; if (out != in) { // always 1:1 return false; } + if (current_meters != in) { + changed = true; + } + current_meters = in; set_max_channels (in); + if (changed) { + reset_max(); + } + return Processor::configure_io (in, out); } @@ -364,7 +375,6 @@ PeakMeter::meter_level(uint32_t n, MeterType type) { break; case MeterMCP: mcptmp = _combined_peak; - _combined_peak = 0; return accurate_coefficient_to_dB(mcptmp); case MeterMaxSignal: assert(0);