diff options
author | Robin Gareus <robin@gareus.org> | 2016-07-11 22:36:00 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-07-11 22:36:00 +0200 |
commit | 57df370e2abf175c3141a2e904758bfd3f95e114 (patch) | |
tree | 9da57212aa569b7dc7f3de74c4c6d3af7acf3dcb /libs/ardour/dsp_filter.cc | |
parent | 4537f5fb20b2f43394ef1b47aecfd320fce0c2bb (diff) |
add a convenient lua forward mapped buffers method
Diffstat (limited to 'libs/ardour/dsp_filter.cc')
-rw-r--r-- | libs/ardour/dsp_filter.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/libs/ardour/dsp_filter.cc b/libs/ardour/dsp_filter.cc index d39d03b9b9..7470a583d3 100644 --- a/libs/ardour/dsp_filter.cc +++ b/libs/ardour/dsp_filter.cc @@ -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 @@ -73,6 +74,35 @@ ARDOUR::DSP::peaks (float *data, float &min, float &max, uint32_t n_samples) { } } +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) |