Mercurial > libavcodec.hg
annotate avfft.h @ 12483:0159a19bfff7 libavcodec
aacdec: Rework channel mapping compatibility hacks.
For a PCE based configuration map the channels solely based on tags.
For an indexed configuration map the channels solely based on position.
This works with all known exotic samples including al17, elem_id0, bad_concat,
and lfe_is_sce.
author | alexc |
---|---|
date | Fri, 10 Sep 2010 18:01:48 +0000 |
parents | fdafbcef52f5 |
children |
rev | line source |
---|---|
11392 | 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 | |
11535
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
80 enum DCTTransformType { |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
81 DCT_II = 0, |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
82 DCT_III, |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
83 DCT_I, |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
84 DST_I, |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
85 }; |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
86 |
11392 | 87 /** |
12024 | 88 * Set up DCT. |
11535
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
89 * @param nbits size of the input array: |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
90 * (1 << nbits) for DCT-II, DCT-III and DST-I |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
91 * (1 << nbits) + 1 for DCT-I |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
92 * |
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
93 * @note the first element of the input of DST-I is ignored |
11392 | 94 */ |
11535
f468aac92300
Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents:
11392
diff
changeset
|
95 DCTContext *av_dct_init(int nbits, enum DCTTransformType type); |
11392 | 96 void av_dct_calc(DCTContext *s, FFTSample *data); |
97 void av_dct_end (DCTContext *s); | |
98 | |
99 #endif /* AVCODEC_AVFFT_H */ |