summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-07-03 22:40:00 +0200
committerCarl Hetherington <cth@carlh.net>2021-07-03 22:48:07 +0200
commitfa4da415f1788bed17eefd05ba8d49b8ad847613 (patch)
tree3f17524f7cce451a07cb0ca64e4de996813a7932
parent2d4e8c5f69cc694625ad95dcee554499605f823b (diff)
Use std::vector rather than a raw array.
-rw-r--r--src/lib/audio_filter.cc18
-rw-r--r--src/lib/audio_filter.h7
-rw-r--r--test/audio_filter_test.cc3
3 files changed, 9 insertions, 19 deletions
diff --git a/src/lib/audio_filter.cc b/src/lib/audio_filter.cc
index 281ac9668..96af75674 100644
--- a/src/lib/audio_filter.cc
+++ b/src/lib/audio_filter.cc
@@ -30,11 +30,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.reserve(_M + 1);
/* Impulse response */
@@ -73,12 +73,6 @@ AudioFilter::sinc_blackman (float cutoff, bool invert) const
}
-AudioFilter::~AudioFilter ()
-{
- delete[] _ir;
-}
-
-
shared_ptr<AudioBuffers>
AudioFilter::run (shared_ptr<const AudioBuffers> in)
{
@@ -147,15 +141,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.reserve (_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];
diff --git a/src/lib/audio_filter.h b/src/lib/audio_filter.h
index 922cc5fdb..86fdce590 100644
--- a/src/lib/audio_filter.h
+++ b/src/lib/audio_filter.h
@@ -23,6 +23,7 @@
#include <memory>
+#include <vector>
class AudioBuffers;
@@ -43,7 +44,7 @@ public:
}
}
- virtual ~AudioFilter ();
+ virtual ~AudioFilter () {}
std::shared_ptr<AudioBuffers> run (std::shared_ptr<const AudioBuffers> in);
@@ -53,9 +54,9 @@ protected:
friend struct audio_filter_impulse_kernel_test;
friend struct audio_filter_impulse_input_test;
- float* sinc_blackman (float cutoff, bool invert) const;
+ std::vector<float> sinc_blackman (float cutoff, bool invert) const;
- float* _ir = nullptr;
+ std::vector<float> _ir;
int _M;
std::shared_ptr<AudioBuffers> _tail;
};
diff --git a/test/audio_filter_test.cc b/test/audio_filter_test.cc
index d4fc550f1..a25878637 100644
--- a/test/audio_filter_test.cc
+++ b/test/audio_filter_test.cc
@@ -63,9 +63,8 @@ audio_filter_impulse_test_one (AudioFilter& f, int block_size, int num_blocks)
BOOST_AUTO_TEST_CASE (audio_filter_impulse_kernel_test)
{
AudioFilter f (0.02);
- delete[] f._ir;
- f._ir = new float[f._M + 1];
+ f._ir.reserve(f._M + 1);
f._ir[0] = 1;
for (int i = 1; i <= f._M; ++i) {
f._ir[i] = 0;