Apply band caps to the band allocation table.
[opus.git] / libcelt / kiss_fft.h
index 12e6d15..84de121 100644 (file)
@@ -55,7 +55,7 @@ extern "C" {
 
 #ifdef DOUBLE_PRECISION
 #  define kiss_fft_scalar celt_int32
-#  define kiss_twiddle_scalar celt_int32
+#  define kiss_twiddle_scalar celt_int16
 #  define KF_SUFFIX _celt_double
 #else
 #  define kiss_fft_scalar celt_int16
@@ -71,7 +71,7 @@ extern "C" {
 # endif
 #endif
 
-
+#if 0
 /* This adds a suffix to all the kiss_fft functions so we
    can easily link with more than one copy of the fft */
 #define CAT_SUFFIX(a,b) a ## b
@@ -85,6 +85,7 @@ extern "C" {
 #define kiss_ifft_stride SUF(kiss_ifft_stride,KF_SUFFIX)
 #define kiss_fft_free SUF(kiss_fft_free,KF_SUFFIX)
 
+#endif
 
 typedef struct {
     kiss_fft_scalar r;
@@ -96,7 +97,24 @@ typedef struct {
    kiss_twiddle_scalar i;
 }kiss_twiddle_cpx;
 
-typedef struct kiss_fft_state* kiss_fft_cfg;
+#define MAXFACTORS 8
+/* e.g. an fft of length 128 has 4 factors
+ as far as kissfft is concerned
+ 4*4*4*2
+ */
+
+typedef struct kiss_fft_state{
+    int nfft;
+#ifndef FIXED_POINT
+    kiss_fft_scalar scale;
+#endif
+    int shift;
+    celt_int16 factors[2*MAXFACTORS];
+    const celt_int16 *bitrev;
+    const kiss_twiddle_cpx *twiddles;
+} kiss_fft_state;
+
+//typedef struct kiss_fft_state* kiss_fft_cfg;
 
 /** 
  *  kiss_fft_alloc
@@ -121,9 +139,9 @@ typedef struct kiss_fft_state* kiss_fft_cfg;
  *      buffer size in *lenmem.
  * */
 
-kiss_fft_cfg kiss_fft_alloc_twiddles(int nfft,void * mem,size_t * lenmem,  kiss_fft_cfg base);
+kiss_fft_state *kiss_fft_alloc_twiddles(int nfft,void * mem,size_t * lenmem, const kiss_fft_state *base);
 
-kiss_fft_cfg kiss_fft_alloc(int nfft,void * mem,size_t * lenmem); 
+kiss_fft_state *kiss_fft_alloc(int nfft,void * mem,size_t * lenmem);
 
 /**
  * kiss_fft(cfg,in_out_buf)
@@ -135,10 +153,10 @@ kiss_fft_cfg kiss_fft_alloc(int nfft,void * mem,size_t * lenmem);
  * Note that each element is complex and can be accessed like
     f[k].r and f[k].i
  * */
-void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
-void kiss_ifft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
+void kiss_fft(const kiss_fft_state *cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
+void kiss_ifft(const kiss_fft_state *cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
 
-void kiss_fft_free(kiss_fft_cfg cfg);
+void kiss_fft_free(const kiss_fft_state *cfg);
 
 
 #ifdef __cplusplus