src/spectral/fft.c: if Ooura is used, make sure the fft size is a power of two
authorPaul Brossier <piem@piem.org>
Thu, 20 Aug 2015 11:15:54 +0000 (13:15 +0200)
committerPaul Brossier <piem@piem.org>
Thu, 20 Aug 2015 11:15:54 +0000 (13:15 +0200)
src/spectral/fft.c
tests/src/spectral/test-fft.c

index 3b29b8e..5be398f 100644 (file)
@@ -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);
index beef5ca..72db530 100644 (file)
@@ -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;
 }