Add a SET_LTP call to allow on the fly activation/deactivation of the long term
[opus.git] / libcelt / kiss_fft.h
index b58a5f0..f71a839 100644 (file)
@@ -35,21 +35,47 @@ extern "C" {
 #include "arch.h"      
 #ifdef DOUBLE_PRECISION
 #  define kiss_fft_scalar celt_int32_t
+#  define kiss_twiddle_scalar celt_int32_t
+#  define KF_SUFFIX _celt_double
 #else
 #  define kiss_fft_scalar celt_int16_t
+#  define kiss_twiddle_scalar celt_int16_t
+#  define KF_SUFFIX _celt_single
 #endif
 #else
 # ifndef kiss_fft_scalar
 /*  default is float */
 #   define kiss_fft_scalar float
+#   define kiss_twiddle_scalar float
+#   define KF_SUFFIX _celt_single
 # endif
 #endif
 
+
+/* 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
+#define SUF(a,b) CAT_SUFFIX(a, b)
+
+#define kiss_fft_alloc SUF(kiss_fft_alloc,KF_SUFFIX)
+#define kf_work SUF(kf_work,KF_SUFFIX)
+#define ki_work SUF(ki_work,KF_SUFFIX)
+#define kiss_fft SUF(kiss_fft,KF_SUFFIX)
+#define kiss_ifft SUF(kiss_ifft,KF_SUFFIX)
+#define kiss_fft_stride SUF(kiss_fft_stride,KF_SUFFIX)
+#define kiss_ifft_stride SUF(kiss_ifft_stride,KF_SUFFIX)
+
+
 typedef struct {
     kiss_fft_scalar r;
     kiss_fft_scalar i;
 }kiss_fft_cpx;
 
+typedef struct {
+   kiss_twiddle_scalar r;
+   kiss_twiddle_scalar i;
+}kiss_twiddle_cpx;
+
 typedef struct kiss_fft_state* kiss_fft_cfg;
 
 /** 
@@ -77,6 +103,13 @@ typedef struct kiss_fft_state* kiss_fft_cfg;
 
 kiss_fft_cfg kiss_fft_alloc(int nfft,void * mem,size_t * lenmem); 
 
+void kf_work(kiss_fft_cpx * Fout,const kiss_fft_cpx * f,const size_t fstride,
+             int in_stride,int * factors,const kiss_fft_cfg st,int N,int s2,int m2);
+
+/** Internal function. Can be useful when you want to do the bit-reversing yourself */
+void ki_work(kiss_fft_cpx * Fout, const kiss_fft_cpx * f, const size_t fstride,
+             int in_stride,int * factors,const kiss_fft_cfg st,int N,int s2,int m2);
+
 /**
  * kiss_fft(cfg,in_out_buf)
  *
@@ -100,12 +133,6 @@ void kiss_ifft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fou
    buffer and can be simply free()d when no longer needed*/
 #define kiss_fft_free celt_free
 
-/**
- Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up 
- your compiler output to call this before you exit.
-*/
-void kiss_fft_cleanup(void);
-       
 
 #ifdef __cplusplus
 }