make Session::get_remote_nth_stripable() ignore hidden stripables unless asked.
[ardour.git] / libs / ardour / dsp_filter.cc
index 3b93c9c6f3e71cba0fd227d20b8f06f8e519e90b..0eef61a0f4b5a032fe2f346662e724f522ad1d3f 100644 (file)
@@ -21,6 +21,7 @@
 #include <stdlib.h>
 #include <cmath>
 #include "ardour/dB.h"
+#include "ardour/buffer.h"
 #include "ardour/dsp_filter.h"
 
 #ifdef COMPILER_MSVC
@@ -66,13 +67,42 @@ ARDOUR::DSP::log_meter_coeff (float coeff) {
 }
 
 void
-ARDOUR::DSP::peaks (float *data, float &min, float &max, uint32_t n_samples) {
+ARDOUR::DSP::peaks (const float *data, float &min, float &max, uint32_t n_samples) {
        for (uint32_t i = 0; i < n_samples; ++i) {
                if (data[i] < min) min = data[i];
                if (data[i] > max) max = data[i];
        }
 }
 
+void
+ARDOUR::DSP::process_map (BufferSet* bufs, const ChanMapping& in, const ChanMapping& out, pframes_t nframes, framecnt_t offset, const DataType& dt)
+{
+       const ChanMapping::Mappings& im (in.mappings());
+       const ChanMapping::Mappings& om (out.mappings());
+
+       for (ChanMapping::Mappings::const_iterator tm = im.begin(); tm != im.end(); ++tm) {
+               if (tm->first != dt) { continue; }
+               for (ChanMapping::TypeMapping::const_iterator i = tm->second.begin(); i != tm->second.end(); ++i) {
+                       bool valid;
+                       const uint32_t idx = out.get (dt, i->second, &valid);
+                       if (valid && idx != i->first) {
+                               bufs->get (dt, idx).read_from (bufs->get (dt, i->first), nframes, offset, offset);
+                       }
+               }
+       }
+       for (ChanMapping::Mappings::const_iterator tm = im.begin(); tm != im.end(); ++tm) {
+               if (tm->first != dt) { continue; }
+               for (ChanMapping::TypeMapping::const_iterator i = tm->second.begin(); i != tm->second.end(); ++i) {
+                       bool valid;
+                       in.get_src (dt, i->first, &valid);
+                       if (!valid) {
+                               bufs->get (dt, i->second).silence (nframes, offset);
+                       }
+               }
+       }
+
+}
+
 LowPass::LowPass (double samplerate, float freq)
        : _rate (samplerate)
        , _z (0)
@@ -390,7 +420,7 @@ FFTSpectrum::execute ()
 
 float
 FFTSpectrum::power_at_bin (const uint32_t b, const float norm) const {
-       assert (b >= 0 && b < _fft_data_size);
+       assert (b < _fft_data_size);
        const float a = _fft_power[b] * norm;
        return a > 1e-12 ? 10.0 * fast_log10 (a) : -INFINITY;
 }