License for the kiss-fft headers
[opus.git] / libcelt / kiss_fftr.c
index 1f63365..ee8d7bb 100644 (file)
@@ -23,6 +23,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 #endif
 
 #include "os_support.h"
+#include "mathops.h"
 #include "kiss_fftr.h"
 #include "_kiss_fft_guts.h"
 
@@ -60,7 +61,7 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft,void * mem,size_t * lenmem)
     st->substate->scale *= .5;
 #endif
 
-#if defined (FIXED_POINT) && !defined(DOUBLE_PRECISION)
+#if defined (FIXED_POINT) && (!defined(DOUBLE_PRECISION) || defined(MIXED_PRECISION))
     for (i=0;i<twiddle_size;++i) {
        celt_word32_t phase = i+(nfft>>1);
        kf_cexp2(st->super_twiddles+i, DIV32(SHL32(phase,16),nfft));
@@ -127,6 +128,12 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_scalar
    kiss_fftr_twiddles(st,freqdata);
 }
 
+void kiss_fftr_inplace(kiss_fftr_cfg st, kiss_fft_scalar *X)
+{
+   kf_work((kiss_fft_cpx*)X, NULL, 1,1, st->substate->factors,st->substate, 1, 1, 1);
+   kiss_fftr_twiddles(st,X);
+}
+
 void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_scalar *freqdata,kiss_fft_scalar *timedata)
 {
    /* input buffer timedata is stored row-wise */