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