Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * AC-3 DSP functions | ||
3 | * Copyright (c) 2011 Justin Ruggles | ||
4 | * | ||
5 | * This file is part of FFmpeg. | ||
6 | * | ||
7 | * FFmpeg is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU Lesser General Public | ||
9 | * License as published by the Free Software Foundation; either | ||
10 | * version 2.1 of the License, or (at your option) any later version. | ||
11 | * | ||
12 | * FFmpeg is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * Lesser General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU Lesser General Public | ||
18 | * License along with FFmpeg; if not, write to the Free Software | ||
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | */ | ||
21 | |||
22 | #include <math.h> | ||
23 | #include <stdlib.h> | ||
24 | #include <string.h> | ||
25 | |||
26 | #include "config.h" | ||
27 | #include "libavutil/attributes.h" | ||
28 | #include "libavutil/common.h" | ||
29 | #include "libavutil/intmath.h" | ||
30 | #include "libavutil/mem_internal.h" | ||
31 | |||
32 | #include "ac3defs.h" | ||
33 | #include "ac3dsp.h" | ||
34 | #include "ac3tab.h" | ||
35 | #include "mathops.h" | ||
36 | |||
37 | 3702 | static void ac3_exponent_min_c(uint8_t *exp, int num_reuse_blocks, int nb_coefs) | |
38 | { | ||
39 | int blk, i; | ||
40 | |||
41 |
2/2✓ Branch 0 taken 689 times.
✓ Branch 1 taken 3013 times.
|
3702 | if (!num_reuse_blocks) |
42 | 689 | return; | |
43 | |||
44 |
2/2✓ Branch 0 taken 771328 times.
✓ Branch 1 taken 3013 times.
|
774341 | for (i = 0; i < nb_coefs; i++) { |
45 | 771328 | uint8_t min_exp = *exp; | |
46 | 771328 | uint8_t *exp1 = exp + 256; | |
47 |
2/2✓ Branch 0 taken 3189504 times.
✓ Branch 1 taken 771328 times.
|
3960832 | for (blk = 0; blk < num_reuse_blocks; blk++) { |
48 | 3189504 | uint8_t next_exp = *exp1; | |
49 |
2/2✓ Branch 0 taken 505270 times.
✓ Branch 1 taken 2684234 times.
|
3189504 | if (next_exp < min_exp) |
50 | 505270 | min_exp = next_exp; | |
51 | 3189504 | exp1 += 256; | |
52 | } | ||
53 | 771328 | *exp++ = min_exp; | |
54 | } | ||
55 | } | ||
56 | |||
57 | 3825 | static void float_to_fixed24_c(int32_t *dst, const float *src, size_t len) | |
58 | { | ||
59 | 3825 | const float scale = 1 << 24; | |
60 | do { | ||
61 | 327984 | *dst++ = lrintf(*src++ * scale); | |
62 | 327984 | *dst++ = lrintf(*src++ * scale); | |
63 | 327984 | *dst++ = lrintf(*src++ * scale); | |
64 | 327984 | *dst++ = lrintf(*src++ * scale); | |
65 | 327984 | *dst++ = lrintf(*src++ * scale); | |
66 | 327984 | *dst++ = lrintf(*src++ * scale); | |
67 | 327984 | *dst++ = lrintf(*src++ * scale); | |
68 | 327984 | *dst++ = lrintf(*src++ * scale); | |
69 | 327984 | len -= 8; | |
70 |
2/2✓ Branch 0 taken 324159 times.
✓ Branch 1 taken 3825 times.
|
327984 | } while (len > 0); |
71 | 3825 | } | |
72 | |||
73 | 45230 | static void ac3_bit_alloc_calc_bap_c(int16_t *mask, int16_t *psd, | |
74 | int start, int end, | ||
75 | int snr_offset, int floor, | ||
76 | const uint8_t *bap_tab, uint8_t *bap) | ||
77 | { | ||
78 | int bin, band, band_end; | ||
79 | |||
80 | /* special case, if snr offset is -960, set all bap's to zero */ | ||
81 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 45230 times.
|
45230 | if (snr_offset == -960) { |
82 | ✗ | memset(bap, 0, AC3_MAX_COEFS); | |
83 | ✗ | return; | |
84 | } | ||
85 | |||
86 | 45230 | bin = start; | |
87 | 45230 | band = ff_ac3_bin_to_band_tab[start]; | |
88 | do { | ||
89 | 1433176 | int m = (FFMAX(mask[band] - snr_offset - floor, 0) & 0x1FE0) + floor; | |
90 | 1433176 | band_end = ff_ac3_band_start_tab[++band]; | |
91 | 1433176 | band_end = FFMIN(band_end, end); | |
92 | |||
93 |
2/2✓ Branch 0 taken 5490671 times.
✓ Branch 1 taken 1433176 times.
|
6923847 | for (; bin < band_end; bin++) { |
94 | 5490671 | int address = av_clip_uintp2((psd[bin] - m) >> 5, 6); | |
95 | 5490671 | bap[bin] = bap_tab[address]; | |
96 | } | ||
97 |
2/2✓ Branch 0 taken 1387946 times.
✓ Branch 1 taken 45230 times.
|
1433176 | } while (end > band_end); |
98 | } | ||
99 | |||
100 | 136194 | static void ac3_update_bap_counts_c(uint16_t mant_cnt[16], uint8_t *bap, | |
101 | int len) | ||
102 | { | ||
103 |
2/2✓ Branch 0 taken 15639534 times.
✓ Branch 1 taken 136194 times.
|
15775728 | while (len-- > 0) |
104 | 15639534 | mant_cnt[bap[len]]++; | |
105 | 136194 | } | |
106 | |||
107 | DECLARE_ALIGNED(16, const uint16_t, ff_ac3_bap_bits)[16] = { | ||
108 | 0, 0, 0, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 | ||
109 | }; | ||
110 | |||
111 | 10607 | static int ac3_compute_mantissa_size_c(uint16_t mant_cnt[6][16]) | |
112 | { | ||
113 | int blk, bap; | ||
114 | 10607 | int bits = 0; | |
115 | |||
116 |
2/2✓ Branch 0 taken 63642 times.
✓ Branch 1 taken 10607 times.
|
74249 | for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) { |
117 | // bap=1 : 3 mantissas in 5 bits | ||
118 | 63642 | bits += (mant_cnt[blk][1] / 3) * 5; | |
119 | // bap=2 : 3 mantissas in 7 bits | ||
120 | // bap=4 : 2 mantissas in 7 bits | ||
121 | 63642 | bits += ((mant_cnt[blk][2] / 3) + (mant_cnt[blk][4] >> 1)) * 7; | |
122 | // bap=3 : 1 mantissa in 3 bits | ||
123 | 63642 | bits += mant_cnt[blk][3] * 3; | |
124 | // bap=5 to 15 : get bits per mantissa from table | ||
125 |
2/2✓ Branch 0 taken 700062 times.
✓ Branch 1 taken 63642 times.
|
763704 | for (bap = 5; bap < 16; bap++) |
126 | 700062 | bits += mant_cnt[blk][bap] * ff_ac3_bap_bits[bap]; | |
127 | } | ||
128 | 10607 | return bits; | |
129 | } | ||
130 | |||
131 | 5592 | static void ac3_extract_exponents_c(uint8_t *exp, int32_t *coef, int nb_coefs) | |
132 | { | ||
133 | int i; | ||
134 | |||
135 |
2/2✓ Branch 0 taken 4318272 times.
✓ Branch 1 taken 5592 times.
|
4323864 | for (i = 0; i < nb_coefs; i++) { |
136 | 4318272 | int v = abs(coef[i]); | |
137 |
2/2✓ Branch 0 taken 3287422 times.
✓ Branch 1 taken 1030850 times.
|
4318272 | exp[i] = v ? 23 - av_log2(v) : 24; |
138 | } | ||
139 | 5592 | } | |
140 | |||
141 | 4154 | static void ac3_sum_square_butterfly_int32_c(int64_t sum[4], | |
142 | const int32_t *coef0, | ||
143 | const int32_t *coef1, | ||
144 | int len) | ||
145 | { | ||
146 | int i; | ||
147 | |||
148 | 4154 | sum[0] = sum[1] = sum[2] = sum[3] = 0; | |
149 | |||
150 |
2/2✓ Branch 0 taken 87672 times.
✓ Branch 1 taken 4154 times.
|
91826 | for (i = 0; i < len; i++) { |
151 | 87672 | int lt = coef0[i]; | |
152 | 87672 | int rt = coef1[i]; | |
153 | 87672 | int md = lt + rt; | |
154 | 87672 | int sd = lt - rt; | |
155 | 87672 | MAC64(sum[0], lt, lt); | |
156 | 87672 | MAC64(sum[1], rt, rt); | |
157 | 87672 | MAC64(sum[2], md, md); | |
158 | 87672 | MAC64(sum[3], sd, sd); | |
159 | } | ||
160 | 4154 | } | |
161 | |||
162 | 13106 | static void ac3_sum_square_butterfly_float_c(float sum[4], | |
163 | const float *coef0, | ||
164 | const float *coef1, | ||
165 | int len) | ||
166 | { | ||
167 | int i; | ||
168 | |||
169 | 13106 | sum[0] = sum[1] = sum[2] = sum[3] = 0; | |
170 | |||
171 |
2/2✓ Branch 0 taken 275664 times.
✓ Branch 1 taken 13106 times.
|
288770 | for (i = 0; i < len; i++) { |
172 | 275664 | float lt = coef0[i]; | |
173 | 275664 | float rt = coef1[i]; | |
174 | 275664 | float md = lt + rt; | |
175 | 275664 | float sd = lt - rt; | |
176 | 275664 | sum[0] += lt * lt; | |
177 | 275664 | sum[1] += rt * rt; | |
178 | 275664 | sum[2] += md * md; | |
179 | 275664 | sum[3] += sd * sd; | |
180 | } | ||
181 | 13106 | } | |
182 | |||
183 | 342 | static void ac3_downmix_5_to_2_symmetric_c(float **samples, float **matrix, | |
184 | int len) | ||
185 | { | ||
186 | int i; | ||
187 | float v0, v1; | ||
188 | 342 | float front_mix = matrix[0][0]; | |
189 | 342 | float center_mix = matrix[0][1]; | |
190 | 342 | float surround_mix = matrix[0][3]; | |
191 | |||
192 |
2/2✓ Branch 0 taken 87552 times.
✓ Branch 1 taken 342 times.
|
87894 | for (i = 0; i < len; i++) { |
193 | 87552 | v0 = samples[0][i] * front_mix + | |
194 | 87552 | samples[1][i] * center_mix + | |
195 | 87552 | samples[3][i] * surround_mix; | |
196 | |||
197 | 87552 | v1 = samples[1][i] * center_mix + | |
198 | 87552 | samples[2][i] * front_mix + | |
199 | 87552 | samples[4][i] * surround_mix; | |
200 | |||
201 | 87552 | samples[0][i] = v0; | |
202 | 87552 | samples[1][i] = v1; | |
203 | } | ||
204 | 342 | } | |
205 | |||
206 | 342 | static void ac3_downmix_5_to_1_symmetric_c(float **samples, float **matrix, | |
207 | int len) | ||
208 | { | ||
209 | int i; | ||
210 | 342 | float front_mix = matrix[0][0]; | |
211 | 342 | float center_mix = matrix[0][1]; | |
212 | 342 | float surround_mix = matrix[0][3]; | |
213 | |||
214 |
2/2✓ Branch 0 taken 87552 times.
✓ Branch 1 taken 342 times.
|
87894 | for (i = 0; i < len; i++) { |
215 | 87552 | samples[0][i] = samples[0][i] * front_mix + | |
216 | 87552 | samples[1][i] * center_mix + | |
217 | 87552 | samples[2][i] * front_mix + | |
218 | 87552 | samples[3][i] * surround_mix + | |
219 | 87552 | samples[4][i] * surround_mix; | |
220 | } | ||
221 | 342 | } | |
222 | |||
223 | 764 | static void ac3_downmix_c(float **samples, float **matrix, | |
224 | int out_ch, int in_ch, int len) | ||
225 | { | ||
226 | int i, j; | ||
227 | float v0, v1; | ||
228 | |||
229 |
2/2✓ Branch 0 taken 379 times.
✓ Branch 1 taken 385 times.
|
764 | if (out_ch == 2) { |
230 |
2/2✓ Branch 0 taken 96896 times.
✓ Branch 1 taken 379 times.
|
97275 | for (i = 0; i < len; i++) { |
231 | 96896 | v0 = v1 = 0.0f; | |
232 |
2/2✓ Branch 0 taken 387584 times.
✓ Branch 1 taken 96896 times.
|
484480 | for (j = 0; j < in_ch; j++) { |
233 | 387584 | v0 += samples[j][i] * matrix[0][j]; | |
234 | 387584 | v1 += samples[j][i] * matrix[1][j]; | |
235 | } | ||
236 | 96896 | samples[0][i] = v0; | |
237 | 96896 | samples[1][i] = v1; | |
238 | } | ||
239 |
1/2✓ Branch 0 taken 385 times.
✗ Branch 1 not taken.
|
385 | } else if (out_ch == 1) { |
240 |
2/2✓ Branch 0 taken 98432 times.
✓ Branch 1 taken 385 times.
|
98817 | for (i = 0; i < len; i++) { |
241 | 98432 | v0 = 0.0f; | |
242 |
2/2✓ Branch 0 taken 393728 times.
✓ Branch 1 taken 98432 times.
|
492160 | for (j = 0; j < in_ch; j++) |
243 | 393728 | v0 += samples[j][i] * matrix[0][j]; | |
244 | 98432 | samples[0][i] = v0; | |
245 | } | ||
246 | } | ||
247 | 764 | } | |
248 | |||
249 | 330 | static void ac3_downmix_5_to_2_symmetric_c_fixed(int32_t **samples, int16_t **matrix, | |
250 | int len) | ||
251 | { | ||
252 | int i; | ||
253 | int64_t v0, v1; | ||
254 | 330 | int16_t front_mix = matrix[0][0]; | |
255 | 330 | int16_t center_mix = matrix[0][1]; | |
256 | 330 | int16_t surround_mix = matrix[0][3]; | |
257 | |||
258 |
2/2✓ Branch 0 taken 84480 times.
✓ Branch 1 taken 330 times.
|
84810 | for (i = 0; i < len; i++) { |
259 | 84480 | v0 = (int64_t)samples[0][i] * front_mix + | |
260 | 84480 | (int64_t)samples[1][i] * center_mix + | |
261 | 84480 | (int64_t)samples[3][i] * surround_mix; | |
262 | |||
263 | 84480 | v1 = (int64_t)samples[1][i] * center_mix + | |
264 | 84480 | (int64_t)samples[2][i] * front_mix + | |
265 | 84480 | (int64_t)samples[4][i] * surround_mix; | |
266 | |||
267 | 84480 | samples[0][i] = (v0+2048)>>12; | |
268 | 84480 | samples[1][i] = (v1+2048)>>12; | |
269 | } | ||
270 | 330 | } | |
271 | |||
272 | 330 | static void ac3_downmix_5_to_1_symmetric_c_fixed(int32_t **samples, int16_t **matrix, | |
273 | int len) | ||
274 | { | ||
275 | int i; | ||
276 | int64_t v0; | ||
277 | 330 | int16_t front_mix = matrix[0][0]; | |
278 | 330 | int16_t center_mix = matrix[0][1]; | |
279 | 330 | int16_t surround_mix = matrix[0][3]; | |
280 | |||
281 |
2/2✓ Branch 0 taken 84480 times.
✓ Branch 1 taken 330 times.
|
84810 | for (i = 0; i < len; i++) { |
282 | 84480 | v0 = (int64_t)samples[0][i] * front_mix + | |
283 | 84480 | (int64_t)samples[1][i] * center_mix + | |
284 | 84480 | (int64_t)samples[2][i] * front_mix + | |
285 | 84480 | (int64_t)samples[3][i] * surround_mix + | |
286 | 84480 | (int64_t)samples[4][i] * surround_mix; | |
287 | |||
288 | 84480 | samples[0][i] = (v0+2048)>>12; | |
289 | } | ||
290 | 330 | } | |
291 | |||
292 | 372 | static void ac3_downmix_c_fixed(int32_t **samples, int16_t **matrix, | |
293 | int out_ch, int in_ch, int len) | ||
294 | { | ||
295 | int i, j; | ||
296 | int64_t v0, v1; | ||
297 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 372 times.
|
372 | if (out_ch == 2) { |
298 | ✗ | for (i = 0; i < len; i++) { | |
299 | ✗ | v0 = v1 = 0; | |
300 | ✗ | for (j = 0; j < in_ch; j++) { | |
301 | ✗ | v0 += (int64_t)samples[j][i] * matrix[0][j]; | |
302 | ✗ | v1 += (int64_t)samples[j][i] * matrix[1][j]; | |
303 | } | ||
304 | ✗ | samples[0][i] = (v0+2048)>>12; | |
305 | ✗ | samples[1][i] = (v1+2048)>>12; | |
306 | } | ||
307 |
1/2✓ Branch 0 taken 372 times.
✗ Branch 1 not taken.
|
372 | } else if (out_ch == 1) { |
308 |
2/2✓ Branch 0 taken 95104 times.
✓ Branch 1 taken 372 times.
|
95476 | for (i = 0; i < len; i++) { |
309 | 95104 | v0 = 0; | |
310 |
2/2✓ Branch 0 taken 380416 times.
✓ Branch 1 taken 95104 times.
|
475520 | for (j = 0; j < in_ch; j++) |
311 | 380416 | v0 += (int64_t)samples[j][i] * matrix[0][j]; | |
312 | 95104 | samples[0][i] = (v0+2048)>>12; | |
313 | } | ||
314 | } | ||
315 | 372 | } | |
316 | |||
317 | 1032 | void ff_ac3dsp_downmix_fixed(AC3DSPContext *c, int32_t **samples, int16_t **matrix, | |
318 | int out_ch, int in_ch, int len) | ||
319 | { | ||
320 |
3/4✓ Branch 0 taken 1029 times.
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1029 times.
|
1032 | if (c->in_channels != in_ch || c->out_channels != out_ch) { |
321 | 3 | c->in_channels = in_ch; | |
322 | 3 | c->out_channels = out_ch; | |
323 | 3 | c->downmix_fixed = NULL; | |
324 | |||
325 |
4/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
|
3 | if (in_ch == 5 && out_ch == 2 && |
326 | 1 | !(matrix[1][0] | matrix[0][2] | | |
327 | 1 | matrix[1][3] | matrix[0][4] | | |
328 | 1 | (matrix[0][1] ^ matrix[1][1]) | | |
329 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | (matrix[0][0] ^ matrix[1][2]))) { |
330 | 1 | c->downmix_fixed = ac3_downmix_5_to_2_symmetric_c_fixed; | |
331 |
3/4✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | } else if (in_ch == 5 && out_ch == 1 && |
332 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | matrix[0][0] == matrix[0][2] && |
333 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | matrix[0][3] == matrix[0][4]) { |
334 | 1 | c->downmix_fixed = ac3_downmix_5_to_1_symmetric_c_fixed; | |
335 | } | ||
336 | } | ||
337 | |||
338 |
2/2✓ Branch 0 taken 660 times.
✓ Branch 1 taken 372 times.
|
1032 | if (c->downmix_fixed) |
339 | 660 | c->downmix_fixed(samples, matrix, len); | |
340 | else | ||
341 | 372 | ac3_downmix_c_fixed(samples, matrix, out_ch, in_ch, len); | |
342 | 1032 | } | |
343 | |||
344 | 1448 | void ff_ac3dsp_downmix(AC3DSPContext *c, float **samples, float **matrix, | |
345 | int out_ch, int in_ch, int len) | ||
346 | { | ||
347 |
3/4✓ Branch 0 taken 1437 times.
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1437 times.
|
1448 | if (c->in_channels != in_ch || c->out_channels != out_ch) { |
348 | 11 | int **matrix_cmp = (int **)matrix; | |
349 | |||
350 | 11 | c->in_channels = in_ch; | |
351 | 11 | c->out_channels = out_ch; | |
352 | 11 | c->downmix = NULL; | |
353 | |||
354 |
4/4✓ Branch 0 taken 6 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 3 times.
|
11 | if (in_ch == 5 && out_ch == 2 && |
355 | 3 | !(matrix_cmp[1][0] | matrix_cmp[0][2] | | |
356 | 3 | matrix_cmp[1][3] | matrix_cmp[0][4] | | |
357 | 3 | (matrix_cmp[0][1] ^ matrix_cmp[1][1]) | | |
358 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | (matrix_cmp[0][0] ^ matrix_cmp[1][2]))) { |
359 | 3 | c->downmix = ac3_downmix_5_to_2_symmetric_c; | |
360 |
3/4✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
|
8 | } else if (in_ch == 5 && out_ch == 1 && |
361 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | matrix_cmp[0][0] == matrix_cmp[0][2] && |
362 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | matrix_cmp[0][3] == matrix_cmp[0][4]) { |
363 | 3 | c->downmix = ac3_downmix_5_to_1_symmetric_c; | |
364 | } | ||
365 | |||
366 | #if ARCH_X86 | ||
367 | 11 | ff_ac3dsp_set_downmix_x86(c); | |
368 | #endif | ||
369 | } | ||
370 | |||
371 |
2/2✓ Branch 0 taken 684 times.
✓ Branch 1 taken 764 times.
|
1448 | if (c->downmix) |
372 | 684 | c->downmix(samples, matrix, len); | |
373 | else | ||
374 | 764 | ac3_downmix_c(samples, matrix, out_ch, in_ch, len); | |
375 | 1448 | } | |
376 | |||
377 | 118 | av_cold void ff_ac3dsp_init(AC3DSPContext *c) | |
378 | { | ||
379 | 118 | c->ac3_exponent_min = ac3_exponent_min_c; | |
380 | 118 | c->float_to_fixed24 = float_to_fixed24_c; | |
381 | 118 | c->bit_alloc_calc_bap = ac3_bit_alloc_calc_bap_c; | |
382 | 118 | c->update_bap_counts = ac3_update_bap_counts_c; | |
383 | 118 | c->compute_mantissa_size = ac3_compute_mantissa_size_c; | |
384 | 118 | c->extract_exponents = ac3_extract_exponents_c; | |
385 | 118 | c->sum_square_butterfly_int32 = ac3_sum_square_butterfly_int32_c; | |
386 | 118 | c->sum_square_butterfly_float = ac3_sum_square_butterfly_float_c; | |
387 | 118 | c->in_channels = 0; | |
388 | 118 | c->out_channels = 0; | |
389 | 118 | c->downmix = NULL; | |
390 | 118 | c->downmix_fixed = NULL; | |
391 | |||
392 | #if ARCH_AARCH64 | ||
393 | ff_ac3dsp_init_aarch64(c); | ||
394 | #elif ARCH_ARM | ||
395 | ff_ac3dsp_init_arm(c); | ||
396 | #elif ARCH_X86 | ||
397 | 118 | ff_ac3dsp_init_x86(c); | |
398 | #elif ARCH_MIPS | ||
399 | ff_ac3dsp_init_mips(c); | ||
400 | #elif ARCH_RISCV | ||
401 | ff_ac3dsp_init_riscv(c); | ||
402 | #endif | ||
403 | 118 | } | |
404 |