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 02110-1301 USA 17 */ 18 19#include "libavutil/mem.h" 20#include "avfft.h" 21#include "fft.h" 22#include "rdft.h" 23#include "dct.h" 24 25/* FFT */ 26 27FFTContext *av_fft_init(int nbits, int inverse) 28{ 29 FFTContext *s = av_malloc(sizeof(*s)); 30 31 if (s && ff_fft_init(s, nbits, inverse)) 32 av_freep(&s); 33 34 return s; 35} 36 37void av_fft_permute(FFTContext *s, FFTComplex *z) 38{ 39 s->fft_permute(s, z); 40} 41 42void av_fft_calc(FFTContext *s, FFTComplex *z) 43{ 44 s->fft_calc(s, z); 45} 46 47void av_fft_end(FFTContext *s) 48{ 49 if (s) { 50 ff_fft_end(s); 51 av_free(s); 52 } 53} 54 55#if CONFIG_MDCT 56 57FFTContext *av_mdct_init(int nbits, int inverse, double scale) 58{ 59 FFTContext *s = av_malloc(sizeof(*s)); 60 61 if (s && ff_mdct_init(s, nbits, inverse, scale)) 62 av_freep(&s); 63 64 return s; 65} 66 67void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input) 68{ 69 s->imdct_calc(s, output, input); 70} 71 72void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input) 73{ 74 s->imdct_half(s, output, input); 75} 76 77void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input) 78{ 79 s->mdct_calc(s, output, input); 80} 81 82void av_mdct_end(FFTContext *s) 83{ 84 if (s) { 85 ff_mdct_end(s); 86 av_free(s); 87 } 88} 89 90#endif /* CONFIG_MDCT */ 91 92#if CONFIG_RDFT 93 94RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans) 95{ 96 RDFTContext *s = av_malloc(sizeof(*s)); 97 98 if (s && ff_rdft_init(s, nbits, trans)) 99 av_freep(&s); 100 101 return s; 102} 103 104void av_rdft_calc(RDFTContext *s, FFTSample *data) 105{ 106 s->rdft_calc(s, data); 107} 108 109void av_rdft_end(RDFTContext *s) 110{ 111 if (s) { 112 ff_rdft_end(s); 113 av_free(s); 114 } 115} 116 117#endif /* CONFIG_RDFT */ 118 119#if CONFIG_DCT 120 121DCTContext *av_dct_init(int nbits, enum DCTTransformType inverse) 122{ 123 DCTContext *s = av_malloc(sizeof(*s)); 124 125 if (s && ff_dct_init(s, nbits, inverse)) 126 av_freep(&s); 127 128 return s; 129} 130 131void av_dct_calc(DCTContext *s, FFTSample *data) 132{ 133 s->dct_calc(s, data); 134} 135 136void av_dct_end(DCTContext *s) 137{ 138 if (s) { 139 ff_dct_end(s); 140 av_free(s); 141 } 142} 143 144#endif /* CONFIG_DCT */ 145