fixed-point: initial support for using the fixed-point MDCT (rest is still all
[opus.git] / libcelt / kiss_fft.h
index a040eaf..fb1c9d0 100644 (file)
@@ -33,11 +33,18 @@ extern "C" {
 
 #ifdef FIXED_POINT
 #include "arch.h"      
-#  define kiss_fft_scalar spx_int16_t
+#ifdef DOUBLE_PRECISION
+#  define kiss_fft_scalar celt_int32_t
+#  define kiss_twiddle_scalar celt_int32_t
+#else
+#  define kiss_fft_scalar celt_int16_t
+#  define kiss_twiddle_scalar celt_int16_t
+#endif
 #else
 # ifndef kiss_fft_scalar
 /*  default is float */
 #   define kiss_fft_scalar float
+#   define kiss_twiddle_scalar float
 # endif
 #endif
 
@@ -46,9 +53,14 @@ typedef struct {
     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;
 
-/* 
+/** 
  *  kiss_fft_alloc
  *  
  *  Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
@@ -73,7 +85,11 @@ typedef struct kiss_fft_state* kiss_fft_cfg;
 
 kiss_fft_cfg kiss_fft_alloc(int nfft,void * mem,size_t * lenmem); 
 
-/*
+/** 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)
  *
  * Perform an FFT on a complex input buffer.
@@ -86,17 +102,17 @@ kiss_fft_cfg kiss_fft_alloc(int nfft,void * mem,size_t * lenmem);
 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);
 
-/*
+/**
  A more generic version of the above function. It reads its input from every Nth sample.
  * */
 void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride);
 void kiss_ifft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride);
 
-/* If kiss_fft_alloc allocated a buffer, it is one contiguous 
+/** If kiss_fft_alloc allocated a buffer, it is one contiguous 
    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.
 */