diff dsp/transforms/FFT.cpp @ 299:5f2c9119a94a

* A few fixes prompted by vamp-plugin-tester
author Chris Cannam <c.cannam@qmul.ac.uk>
date Mon, 08 Jun 2009 12:30:20 +0000
parents 255e431ae3d4
children e5907ae6de17
line wrap: on
line diff
--- a/dsp/transforms/FFT.cpp	Fri Jun 05 15:12:39 2009 +0000
+++ b/dsp/transforms/FFT.cpp	Mon Jun 08 12:30:20 2009 +0000
@@ -199,6 +199,12 @@
     m_n(n),
     m_private(0)
 {
+    if (m_n & 1) {
+        std::cerr << "Error: Odd FFT size " << m_n
+                  << " not supported in this implementation"
+                  << std::endl;
+        return;
+    }
     KissFFTRec *rec = new KissFFTRec;
     rec->forward = kiss_fft_alloc(m_n, 0, 0, 0);
     rec->inverse = kiss_fft_alloc(m_n, 1, 0, 0);
@@ -209,6 +215,7 @@
 
 FFT::~FFT()
 {
+    if (!m_private) return;
     KissFFTRec *rec = (KissFFTRec *)m_private;
     kiss_fft_free(rec->forward);
     kiss_fft_free(rec->inverse);
@@ -221,6 +228,7 @@
              const double *rin, const double *iin,
              double *rout, double *iout)
 {
+    if (!m_private) return;
     KissFFTRec *rec = (KissFFTRec *)m_private;
     for (int i = 0; i < m_n; ++i) {
         rec->in[i].r = rin[i];
@@ -255,6 +263,12 @@
     m_n(n),
     m_private(0)
 {
+    if (m_n & 1) {
+        std::cerr << "Error: Odd FFT size " << m_n
+                  << " not supported in this implementation"
+                  << std::endl;
+        return;
+    }
     KissFFTRealRec *rec = new KissFFTRealRec;
     rec->forward = kiss_fftr_alloc(m_n, 0, 0, 0);
     rec->inverse = kiss_fftr_alloc(m_n, 1, 0, 0);
@@ -264,6 +278,7 @@
 
 FFTReal::~FFTReal()
 {
+    if (!m_private) return;
     KissFFTRealRec *rec = (KissFFTRealRec *)m_private;
     kiss_fftr_free(rec->forward);
     kiss_fftr_free(rec->inverse);
@@ -275,6 +290,7 @@
                  const double *rin,
                  double *rout, double *iout)
 {
+    if (!m_private) return;
     KissFFTRealRec *rec = (KissFFTRealRec *)m_private;
     if (inverse) {
         kiss_fftr(rec->inverse, rin, rec->out);