encoder pre-emphasis now in 16-bits
[opus.git] / libcelt / kiss_fftr.h
1 #ifndef KISS_FTR_H
2 #define KISS_FTR_H
3
4 #include "kiss_fft.h"
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 #define kiss_fftr_alloc SUF(kiss_fftr_alloc,KF_SUFFIX)
10
11 #define kiss_fftr_alloc SUF(kiss_fftr_alloc,KF_SUFFIX)
12 #define kiss_fftr_twiddles SUF(kiss_fftr_twiddles,KF_SUFFIX)
13 #define kiss_fftr SUF(kiss_fftr,KF_SUFFIX)
14 #define kiss_fftri SUF(kiss_fftri,KF_SUFFIX)
15
16 /* 
17  
18  Real optimized version can save about 45% cpu time vs. complex fft of a real seq.
19
20  
21  
22  */
23
24 struct kiss_fftr_state{
25       kiss_fft_cfg substate;
26       kiss_twiddle_cpx * super_twiddles;
27 #ifdef USE_SIMD    
28       long pad;
29 #endif    
30    };
31
32 typedef struct kiss_fftr_state *kiss_fftr_cfg;
33
34
35 kiss_fftr_cfg kiss_fftr_alloc(int nfft,void * mem, size_t * lenmem);
36 /*
37  nfft must be even
38
39  If you don't care to allocate space, use mem = lenmem = NULL 
40 */
41
42
43 /*
44  input timedata has nfft scalar points
45  output freqdata has nfft/2+1 complex points, packed into nfft scalar points
46 */
47 void kiss_fftr_twiddles(kiss_fftr_cfg st,kiss_fft_scalar *freqdata);
48
49 void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_scalar *freqdata);
50 void kiss_fftr_inplace(kiss_fftr_cfg st, kiss_fft_scalar *X);
51
52 void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_scalar *freqdata, kiss_fft_scalar *timedata);
53
54 /*
55  input freqdata has  nfft/2+1 complex points, packed into nfft scalar points
56  output timedata has nfft scalar points
57 */
58
59 #define kiss_fftr_free speex_free
60
61 #ifdef __cplusplus
62 }
63 #endif
64 #endif