00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "libavutil/mem.h"
00020 #include "avfft.h"
00021 #include "fft.h"
00022 #include "rdft.h"
00023 #include "dct.h"
00024
00025
00026
00027 FFTContext *av_fft_init(int nbits, int inverse)
00028 {
00029 FFTContext *s = av_malloc(sizeof(*s));
00030
00031 if (s && ff_fft_init(s, nbits, inverse))
00032 av_freep(&s);
00033
00034 return s;
00035 }
00036
00037 void av_fft_permute(FFTContext *s, FFTComplex *z)
00038 {
00039 s->fft_permute(s, z);
00040 }
00041
00042 void av_fft_calc(FFTContext *s, FFTComplex *z)
00043 {
00044 s->fft_calc(s, z);
00045 }
00046
00047 void av_fft_end(FFTContext *s)
00048 {
00049 if (s) {
00050 ff_fft_end(s);
00051 av_free(s);
00052 }
00053 }
00054
00055 #if CONFIG_MDCT
00056
00057 FFTContext *av_mdct_init(int nbits, int inverse, double scale)
00058 {
00059 FFTContext *s = av_malloc(sizeof(*s));
00060
00061 if (s && ff_mdct_init(s, nbits, inverse, scale))
00062 av_freep(&s);
00063
00064 return s;
00065 }
00066
00067 void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input)
00068 {
00069 s->imdct_calc(s, output, input);
00070 }
00071
00072 void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input)
00073 {
00074 s->imdct_half(s, output, input);
00075 }
00076
00077 void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input)
00078 {
00079 s->mdct_calc(s, output, input);
00080 }
00081
00082 void av_mdct_end(FFTContext *s)
00083 {
00084 if (s) {
00085 ff_mdct_end(s);
00086 av_free(s);
00087 }
00088 }
00089
00090 #endif
00091
00092 #if CONFIG_RDFT
00093
00094 RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans)
00095 {
00096 RDFTContext *s = av_malloc(sizeof(*s));
00097
00098 if (s && ff_rdft_init(s, nbits, trans))
00099 av_freep(&s);
00100
00101 return s;
00102 }
00103
00104 void av_rdft_calc(RDFTContext *s, FFTSample *data)
00105 {
00106 s->rdft_calc(s, data);
00107 }
00108
00109 void av_rdft_end(RDFTContext *s)
00110 {
00111 if (s) {
00112 ff_rdft_end(s);
00113 av_free(s);
00114 }
00115 }
00116
00117 #endif
00118
00119 #if CONFIG_DCT
00120
00121 DCTContext *av_dct_init(int nbits, enum DCTTransformType inverse)
00122 {
00123 DCTContext *s = av_malloc(sizeof(*s));
00124
00125 if (s && ff_dct_init(s, nbits, inverse))
00126 av_freep(&s);
00127
00128 return s;
00129 }
00130
00131 void av_dct_calc(DCTContext *s, FFTSample *data)
00132 {
00133 s->dct_calc(s, data);
00134 }
00135
00136 void av_dct_end(DCTContext *s)
00137 {
00138 if (s) {
00139 ff_dct_end(s);
00140 av_free(s);
00141 }
00142 }
00143
00144 #endif