From 3c6f5846c9649b270115758f3566462f7474ac13 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Thu, 20 Aug 2015 13:15:54 +0200 Subject: [PATCH] src/spectral/fft.c: if Ooura is used, make sure the fft size is a power of two --- src/spectral/fft.c | 5 +++++ tests/src/spectral/test-fft.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/spectral/fft.c b/src/spectral/fft.c index 3b29b8ee..5be398f5 100644 --- a/src/spectral/fft.c +++ b/src/spectral/fft.c @@ -167,6 +167,11 @@ aubio_fft_t * new_aubio_fft (uint_t winsize) { s->fftSetup = vDSP_create_fftsetupD(s->log2fftsize, FFT_RADIX2); #endif #else // using OOURA + if (aubio_is_power_of_two(winsize) != 1) { + AUBIO_ERR("fft: can only create with sizes power of two," + " requested %d\n", winsize); + return NULL; + } s->winsize = winsize; s->fft_size = winsize / 2 + 1; s->compspec = new_fvec(winsize); diff --git a/tests/src/spectral/test-fft.c b/tests/src/spectral/test-fft.c index beef5ca3..72db5302 100644 --- a/tests/src/spectral/test-fft.c +++ b/tests/src/spectral/test-fft.c @@ -2,6 +2,7 @@ int main (void) { + int return_code = 0; uint_t i, n_iters = 100; // number of iterations uint_t win_s = 500; // window size fvec_t * in = new_fvec (win_s); // input buffer @@ -10,6 +11,11 @@ int main (void) // create fft object aubio_fft_t * fft = new_aubio_fft(win_s); + if (!fft) { + return_code = 1; + goto beach; + } + // fill input with some data in->data[0] = 1; in->data[1] = 2; @@ -33,9 +39,10 @@ int main (void) // cleam up //fvec_print(out); del_aubio_fft(fft); +beach: del_fvec(in); del_cvec(fftgrain); del_fvec(out); aubio_cleanup(); - return 0; + return return_code; } -- 2.11.0