Changed strategy about ffmpeg fft usage. Using system ffmpeg rather than bundled...
[gsoc2010-fftw-neon:gsoc2010-fftw-neon.git] / dft / simd / nonportable / arm / ffmpeg / ffmpeg_fft.h
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18
19 #ifndef AVCODEC_AVFFT_H
20 #define AVCODEC_AVFFT_H
21
22 typedef float FFTSample;
23
24 typedef struct FFTComplex {
25     FFTSample re, im;
26 } FFTComplex;
27
28 //#define FFTC_SZ 32
29 typedef struct FFTContext FFTContext;
30
31 /**
32  * Set up a complex FFT.
33  * @param nbits           log2 of the length of the input array
34  * @param inverse         if 0 perform the forward transform, if 1 perform the inverse
35  */
36 FFTContext *av_fft_init(int nbits, int inverse);
37
38 /**
39  * Do the permutation needed BEFORE calling ff_fft_calc().
40  */
41 void av_fft_permute(FFTContext *s, FFTComplex *z);
42
43 /**
44  * Do a complex FFT with the parameters defined in av_fft_init(). The
45  * input data must be permuted before. No 1.0/sqrt(n) normalization is done.
46  */
47 void av_fft_calc(FFTContext *s, FFTComplex *z);
48
49 void av_fft_end(FFTContext *s);
50
51 /* Real Discrete Fourier Transform */
52
53 enum RDFTransformType {
54     DFT_R2C,
55     IDFT_C2R,
56     IDFT_R2C,
57     DFT_C2R,
58 };
59
60 //#define RDFTC_SZ 56
61 typedef struct RDFTContext RDFTContext;
62
63 /**
64  * Set up a real FFT.
65  * @param nbits           log2 of the length of the input array
66  * @param trans           the type of transform
67  */
68 RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans);
69 void av_rdft_calc(RDFTContext *s, FFTSample *data);
70 void av_rdft_end(RDFTContext *s);
71
72 /* Discrete Cosine Transform */
73
74 typedef struct DCTContext DCTContext;
75
76 enum DCTTransformType {
77     DCT_II = 0,
78     DCT_III,
79     DCT_I,
80     DST_I,
81 };
82
83 /**
84  * Set up DCT.
85  * @param nbits           size of the input array:
86  *                        (1 << nbits)     for DCT-II, DCT-III and DST-I
87  *                        (1 << nbits) + 1 for DCT-I
88  *
89  * @note the first element of the input of DST-I is ignored
90  */
91 DCTContext *av_dct_init(int nbits, enum DCTTransformType type);
92 void av_dct_calc(DCTContext *s, FFTSample *data);
93 void av_dct_end (DCTContext *s);
94
95 #endif /* AVCODEC_AVFFT_H */