Fix checking of frame channels vs stream channels.
[dcpomatic.git] / src / lib / audio_filter.cc
index 281ac966831c8e80de73609a96a12132a763d67a..94994ba81036fd1fad2fa16785d37d76ec0d76bb 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "audio_filter.h"
 #include "audio_buffers.h"
+#include "maths_util.h"
 #include "util.h"
 #include <cmath>
 
@@ -30,11 +31,11 @@ using std::min;
 using std::shared_ptr;
 
 
-/** @return array of floats which the caller must destroy with delete[] */
-float *
+std::vector<float>
 AudioFilter::sinc_blackman (float cutoff, bool invert) const
 {
-       float* ir = new float[_M + 1];
+       auto ir = std::vector<float>();
+       ir.resize(_M + 1);
 
        /* Impulse response */
 
@@ -73,19 +74,13 @@ AudioFilter::sinc_blackman (float cutoff, bool invert) const
 }
 
 
-AudioFilter::~AudioFilter ()
-{
-       delete[] _ir;
-}
-
-
 shared_ptr<AudioBuffers>
 AudioFilter::run (shared_ptr<const AudioBuffers> in)
 {
        auto out = make_shared<AudioBuffers>(in->channels(), in->frames());
 
        if (!_tail) {
-               _tail.reset (new AudioBuffers (in->channels(), _M + 1));
+               _tail = make_shared<AudioBuffers>(in->channels(), _M + 1);
                _tail->make_silent ();
        }
 
@@ -147,15 +142,11 @@ BandPassAudioFilter::BandPassAudioFilter (float transition_bandwidth, float lowe
        auto lpf = sinc_blackman (lower, false);
        auto hpf = sinc_blackman (higher, true);
 
-       delete[] _ir;
-       _ir = new float[_M + 1];
+       _ir.resize(_M + 1);
        for (int i = 0; i <= _M; ++i) {
                _ir[i] = lpf[i] + hpf[i];
        }
 
-       delete[] lpf;
-       delete[] hpf;
-
        /* We now have a band-stop, so invert for band-pass */
        for (int i = 0; i <= _M; ++i) {
                _ir[i] = -_ir[i];