Fix samples-moved (and invalid use of not initialized CubicInterpolation)
[ardour.git] / libs / ardour / dsp_filter.cc
index 7470a583d385cab4162d86bb0d9821e243985020..cff1128aa17198b934f415ad7967e8dda72be515 100644 (file)
@@ -53,7 +53,7 @@ ARDOUR::DSP::mmult (float *data, float *mult, const uint32_t n_samples) {
 
 float
 ARDOUR::DSP::log_meter (float power) {
-       // compare to gtk2_ardour/logmeter.h
+       // compare to libs/ardour/log_meter.h
        static const float lower_db = -192.f;
        static const float upper_db = 0.f;
        static const float non_linearity = 8.0;
@@ -67,7 +67,7 @@ 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];
@@ -75,7 +75,7 @@ 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)
+ARDOUR::DSP::process_map (BufferSet* bufs, const ChanMapping& in, const ChanMapping& out, pframes_t nframes, samplecnt_t offset, const DataType& dt)
 {
        const ChanMapping::Mappings& im (in.mappings());
        const ChanMapping::Mappings& om (out.mappings());
@@ -197,9 +197,9 @@ Biquad::configure (double a1, double a2, double b0, double b1, double b2)
 void
 Biquad::compute (Type type, double freq, double Q, double gain)
 {
-       if (Q <= .001)     { Q = 0.001; }
-       if (freq <= 1.)    { freq = 1.; }
-       if (freq >= _rate) { freq = _rate; }
+       if (Q <= .001)  { Q = 0.001; }
+       if (freq <= 1.) { freq = 1.; }
+       if (freq >= 0.4998 * _rate) { freq = 0.4998 * _rate; }
 
        /* Compute biquad filter settings.
         * Based on 'Cookbook formulae for audio EQ biquad filter coefficents'
@@ -354,6 +354,7 @@ FFTSpectrum::~FFTSpectrum ()
 void
 FFTSpectrum::init (uint32_t window_size, double rate)
 {
+       assert (window_size > 0);
        Glib::Threads::Mutex::Lock lk (fft_planner_lock);
 
        _fft_window_size = window_size;