Saved 4 kB of stack usage in find_spectral_pitch() by doing the FFT in-place
[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     
10 /* 
11  
12  Real optimized version can save about 45% cpu time vs. complex fft of a real seq.
13
14  
15  
16  */
17
18 struct kiss_fftr_state{
19       kiss_fft_cfg substate;
20       kiss_twiddle_cpx * super_twiddles;
21 #ifdef USE_SIMD    
22       long pad;
23 #endif    
24    };
25
26 typedef struct kiss_fftr_state *kiss_fftr_cfg;
27
28
29 kiss_fftr_cfg kiss_fftr_alloc(int nfft,void * mem, size_t * lenmem);
30 /*
31  nfft must be even
32
33  If you don't care to allocate space, use mem = lenmem = NULL 
34 */
35
36
37 /*
38  input timedata has nfft scalar points
39  output freqdata has nfft/2+1 complex points, packed into nfft scalar points
40 */
41
42 void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_scalar *freqdata);
43
44 void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_scalar *freqdata, kiss_fft_scalar *timedata);
45
46 /*
47  input freqdata has  nfft/2+1 complex points, packed into nfft scalar points
48  output timedata has nfft scalar points
49 */
50
51 #define kiss_fftr_free speex_free
52
53 #ifdef __cplusplus
54 }
55 #endif
56 #endif