diff options
Diffstat (limited to 'lib/rbcodec/codecs/libwmavoice/avfft.h')
-rw-r--r-- | lib/rbcodec/codecs/libwmavoice/avfft.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libwmavoice/avfft.h b/lib/rbcodec/codecs/libwmavoice/avfft.h new file mode 100644 index 0000000000..be2d9c7e10 --- /dev/null +++ b/lib/rbcodec/codecs/libwmavoice/avfft.h | |||
@@ -0,0 +1,99 @@ | |||
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 | typedef struct FFTContext FFTContext; | ||
29 | |||
30 | /** | ||
31 | * Set up a complex FFT. | ||
32 | * @param nbits log2 of the length of the input array | ||
33 | * @param inverse if 0 perform the forward transform, if 1 perform the inverse | ||
34 | */ | ||
35 | FFTContext *av_fft_init(int nbits, int inverse); | ||
36 | |||
37 | /** | ||
38 | * Do the permutation needed BEFORE calling ff_fft_calc(). | ||
39 | */ | ||
40 | void av_fft_permute(FFTContext *s, FFTComplex *z); | ||
41 | |||
42 | /** | ||
43 | * Do a complex FFT with the parameters defined in av_fft_init(). The | ||
44 | * input data must be permuted before. No 1.0/sqrt(n) normalization is done. | ||
45 | */ | ||
46 | void av_fft_calc(FFTContext *s, FFTComplex *z); | ||
47 | |||
48 | void av_fft_end(FFTContext *s); | ||
49 | |||
50 | FFTContext *av_mdct_init(int nbits, int inverse, double scale); | ||
51 | void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); | ||
52 | void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); | ||
53 | void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); | ||
54 | void av_mdct_end(FFTContext *s); | ||
55 | |||
56 | /* Real Discrete Fourier Transform */ | ||
57 | |||
58 | enum RDFTransformType { | ||
59 | DFT_R2C, | ||
60 | IDFT_C2R, | ||
61 | IDFT_R2C, | ||
62 | DFT_C2R, | ||
63 | }; | ||
64 | |||
65 | typedef struct RDFTContext RDFTContext; | ||
66 | |||
67 | /** | ||
68 | * Set up a real FFT. | ||
69 | * @param nbits log2 of the length of the input array | ||
70 | * @param trans the type of transform | ||
71 | */ | ||
72 | RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); | ||
73 | void av_rdft_calc(RDFTContext *s, FFTSample *data); | ||
74 | void av_rdft_end(RDFTContext *s); | ||
75 | |||
76 | /* Discrete Cosine Transform */ | ||
77 | |||
78 | typedef struct DCTContext DCTContext; | ||
79 | |||
80 | enum DCTTransformType { | ||
81 | DCT_II = 0, | ||
82 | DCT_III, | ||
83 | DCT_I, | ||
84 | DST_I, | ||
85 | }; | ||
86 | |||
87 | /** | ||
88 | * Set up DCT. | ||
89 | * @param nbits size of the input array: | ||
90 | * (1 << nbits) for DCT-II, DCT-III and DST-I | ||
91 | * (1 << nbits) + 1 for DCT-I | ||
92 | * | ||
93 | * @note the first element of the input of DST-I is ignored | ||
94 | */ | ||
95 | DCTContext *av_dct_init(int nbits, enum DCTTransformType type); | ||
96 | void av_dct_calc(DCTContext *s, FFTSample *data); | ||
97 | void av_dct_end (DCTContext *s); | ||
98 | |||
99 | #endif /* AVCODEC_AVFFT_H */ | ||