ffmpeg / libavcodec / avfft.h @ 2912e87a
History  View  Annotate  Download (2.84 KB)
1 
/*


2 
* This file is part of Libav.

3 
*

4 
* Libav 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 
* Libav 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 Libav; if not, write to the Free Software

16 
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021101301 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 DCTII, DCTIII and DSTI

91 
* (1 << nbits) + 1 for DCTI

92 
*

93 
* @note the first element of the input of DSTI 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 */ 