00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef AVCODEC_AVFFT_H
00020 #define AVCODEC_AVFFT_H
00021
00035 typedef float FFTSample;
00036
00037 typedef struct FFTComplex {
00038 FFTSample re, im;
00039 } FFTComplex;
00040
00041 typedef struct FFTContext FFTContext;
00042
00048 FFTContext *av_fft_init(int nbits, int inverse);
00049
00053 void av_fft_permute(FFTContext *s, FFTComplex *z);
00054
00059 void av_fft_calc(FFTContext *s, FFTComplex *z);
00060
00061 void av_fft_end(FFTContext *s);
00062
00063 FFTContext *av_mdct_init(int nbits, int inverse, double scale);
00064 void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
00065 void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input);
00066 void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
00067 void av_mdct_end(FFTContext *s);
00068
00069
00070
00071 enum RDFTransformType {
00072 DFT_R2C,
00073 IDFT_C2R,
00074 IDFT_R2C,
00075 DFT_C2R,
00076 };
00077
00078 typedef struct RDFTContext RDFTContext;
00079
00085 RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans);
00086 void av_rdft_calc(RDFTContext *s, FFTSample *data);
00087 void av_rdft_end(RDFTContext *s);
00088
00089
00090
00091 typedef struct DCTContext DCTContext;
00092
00093 enum DCTTransformType {
00094 DCT_II = 0,
00095 DCT_III,
00096 DCT_I,
00097 DST_I,
00098 };
00099
00108 DCTContext *av_dct_init(int nbits, enum DCTTransformType type);
00109 void av_dct_calc(DCTContext *s, FFTSample *data);
00110 void av_dct_end (DCTContext *s);
00111
00116 #endif