Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6148 | serge | 1 | /* |
2 | * AC-3 Audio Decoder |
||
3 | * This code was developed as part of Google Summer of Code 2006. |
||
4 | * E-AC-3 support was added as part of Google Summer of Code 2007. |
||
5 | * |
||
6 | * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com) |
||
7 | * Copyright (c) 2007-2008 Bartlomiej Wolowiec |
||
8 | * Copyright (c) 2007 Justin Ruggles |
||
9 | * |
||
10 | * This file is part of FFmpeg. |
||
11 | * |
||
12 | * FFmpeg is free software; you can redistribute it and/or |
||
13 | * modify it under the terms of the GNU Lesser General Public |
||
14 | * License as published by the Free Software Foundation; either |
||
15 | * version 2.1 of the License, or (at your option) any later version. |
||
16 | * |
||
17 | * FFmpeg is distributed in the hope that it will be useful, |
||
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||
20 | * Lesser General Public License for more details. |
||
21 | * |
||
22 | * You should have received a copy of the GNU Lesser General Public |
||
23 | * License along with FFmpeg; if not, write to the Free Software |
||
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||
25 | */ |
||
26 | |||
27 | #include |
||
28 | #include |
||
29 | #include |
||
30 | #include |
||
31 | |||
32 | #include "libavutil/crc.h" |
||
33 | #include "libavutil/opt.h" |
||
34 | #include "internal.h" |
||
35 | #include "aac_ac3_parser.h" |
||
36 | #include "ac3_parser.h" |
||
37 | #include "ac3dec.h" |
||
38 | #include "ac3dec_data.h" |
||
39 | #include "kbdwin.h" |
||
40 | |||
41 | /** |
||
42 | * table for ungrouping 3 values in 7 bits. |
||
43 | * used for exponents and bap=2 mantissas |
||
44 | */ |
||
45 | static uint8_t ungroup_3_in_7_bits_tab[128][3]; |
||
46 | |||
47 | /** tables for ungrouping mantissas */ |
||
48 | static int b1_mantissas[32][3]; |
||
49 | static int b2_mantissas[128][3]; |
||
50 | static int b3_mantissas[8]; |
||
51 | static int b4_mantissas[128][2]; |
||
52 | static int b5_mantissas[16]; |
||
53 | |||
54 | /** |
||
55 | * Quantization table: levels for symmetric. bits for asymmetric. |
||
56 | * reference: Table 7.18 Mapping of bap to Quantizer |
||
57 | */ |
||
58 | static const uint8_t quantization_tab[16] = { |
||
59 | 0, 3, 5, 7, 11, 15, |
||
60 | 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 |
||
61 | }; |
||
62 | |||
63 | /** dynamic range table. converts codes to scale factors. */ |
||
64 | static float dynamic_range_tab[256]; |
||
65 | |||
66 | /** Adjustments in dB gain */ |
||
67 | static const float gain_levels[9] = { |
||
68 | LEVEL_PLUS_3DB, |
||
69 | LEVEL_PLUS_1POINT5DB, |
||
70 | LEVEL_ONE, |
||
71 | LEVEL_MINUS_1POINT5DB, |
||
72 | LEVEL_MINUS_3DB, |
||
73 | LEVEL_MINUS_4POINT5DB, |
||
74 | LEVEL_MINUS_6DB, |
||
75 | LEVEL_ZERO, |
||
76 | LEVEL_MINUS_9DB |
||
77 | }; |
||
78 | |||
79 | /** |
||
80 | * Table for default stereo downmixing coefficients |
||
81 | * reference: Section 7.8.2 Downmixing Into Two Channels |
||
82 | */ |
||
83 | static const uint8_t ac3_default_coeffs[8][5][2] = { |
||
84 | { { 2, 7 }, { 7, 2 }, }, |
||
85 | { { 4, 4 }, }, |
||
86 | { { 2, 7 }, { 7, 2 }, }, |
||
87 | { { 2, 7 }, { 5, 5 }, { 7, 2 }, }, |
||
88 | { { 2, 7 }, { 7, 2 }, { 6, 6 }, }, |
||
89 | { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, }, |
||
90 | { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, }, |
||
91 | { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, }, |
||
92 | }; |
||
93 | |||
94 | /** |
||
95 | * Symmetrical Dequantization |
||
96 | * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization |
||
97 | * Tables 7.19 to 7.23 |
||
98 | */ |
||
99 | static inline int |
||
100 | symmetric_dequant(int code, int levels) |
||
101 | { |
||
102 | return ((code - (levels >> 1)) << 24) / levels; |
||
103 | } |
||
104 | |||
105 | /* |
||
106 | * Initialize tables at runtime. |
||
107 | */ |
||
108 | static av_cold void ac3_tables_init(void) |
||
109 | { |
||
110 | int i; |
||
111 | |||
112 | /* generate table for ungrouping 3 values in 7 bits |
||
113 | reference: Section 7.1.3 Exponent Decoding */ |
||
114 | for (i = 0; i < 128; i++) { |
||
115 | ungroup_3_in_7_bits_tab[i][0] = i / 25; |
||
116 | ungroup_3_in_7_bits_tab[i][1] = (i % 25) / 5; |
||
117 | ungroup_3_in_7_bits_tab[i][2] = (i % 25) % 5; |
||
118 | } |
||
119 | |||
120 | /* generate grouped mantissa tables |
||
121 | reference: Section 7.3.5 Ungrouping of Mantissas */ |
||
122 | for (i = 0; i < 32; i++) { |
||
123 | /* bap=1 mantissas */ |
||
124 | b1_mantissas[i][0] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][0], 3); |
||
125 | b1_mantissas[i][1] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][1], 3); |
||
126 | b1_mantissas[i][2] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][2], 3); |
||
127 | } |
||
128 | for (i = 0; i < 128; i++) { |
||
129 | /* bap=2 mantissas */ |
||
130 | b2_mantissas[i][0] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][0], 5); |
||
131 | b2_mantissas[i][1] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][1], 5); |
||
132 | b2_mantissas[i][2] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][2], 5); |
||
133 | |||
134 | /* bap=4 mantissas */ |
||
135 | b4_mantissas[i][0] = symmetric_dequant(i / 11, 11); |
||
136 | b4_mantissas[i][1] = symmetric_dequant(i % 11, 11); |
||
137 | } |
||
138 | /* generate ungrouped mantissa tables |
||
139 | reference: Tables 7.21 and 7.23 */ |
||
140 | for (i = 0; i < 7; i++) { |
||
141 | /* bap=3 mantissas */ |
||
142 | b3_mantissas[i] = symmetric_dequant(i, 7); |
||
143 | } |
||
144 | for (i = 0; i < 15; i++) { |
||
145 | /* bap=5 mantissas */ |
||
146 | b5_mantissas[i] = symmetric_dequant(i, 15); |
||
147 | } |
||
148 | |||
149 | /* generate dynamic range table |
||
150 | reference: Section 7.7.1 Dynamic Range Control */ |
||
151 | for (i = 0; i < 256; i++) { |
||
152 | int v = (i >> 5) - ((i >> 7) << 3) - 5; |
||
153 | dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20); |
||
154 | } |
||
155 | } |
||
156 | |||
157 | /** |
||
158 | * AVCodec initialization |
||
159 | */ |
||
160 | static av_cold int ac3_decode_init(AVCodecContext *avctx) |
||
161 | { |
||
162 | AC3DecodeContext *s = avctx->priv_data; |
||
163 | int i; |
||
164 | |||
165 | s->avctx = avctx; |
||
166 | |||
167 | ff_ac3_common_init(); |
||
168 | ac3_tables_init(); |
||
169 | ff_mdct_init(&s->imdct_256, 8, 1, 1.0); |
||
170 | ff_mdct_init(&s->imdct_512, 9, 1, 1.0); |
||
171 | ff_kbd_window_init(s->window, 5.0, 256); |
||
172 | ff_dsputil_init(&s->dsp, avctx); |
||
173 | avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT); |
||
174 | ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT); |
||
175 | ff_fmt_convert_init(&s->fmt_conv, avctx); |
||
176 | av_lfg_init(&s->dith_state, 0); |
||
177 | |||
178 | avctx->sample_fmt = AV_SAMPLE_FMT_FLTP; |
||
179 | |||
180 | /* allow downmixing to stereo or mono */ |
||
181 | if (avctx->channels > 0 && avctx->request_channels > 0 && |
||
182 | avctx->request_channels < avctx->channels && |
||
183 | avctx->request_channels <= 2) { |
||
184 | avctx->channels = avctx->request_channels; |
||
185 | } |
||
186 | s->downmixed = 1; |
||
187 | |||
188 | for (i = 0; i < AC3_MAX_CHANNELS; i++) { |
||
189 | s->xcfptr[i] = s->transform_coeffs[i]; |
||
190 | s->dlyptr[i] = s->delay[i]; |
||
191 | } |
||
192 | |||
193 | return 0; |
||
194 | } |
||
195 | |||
196 | /** |
||
197 | * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream. |
||
198 | * GetBitContext within AC3DecodeContext must point to |
||
199 | * the start of the synchronized AC-3 bitstream. |
||
200 | */ |
||
201 | static int ac3_parse_header(AC3DecodeContext *s) |
||
202 | { |
||
203 | GetBitContext *gbc = &s->gbc; |
||
204 | int i; |
||
205 | |||
206 | /* read the rest of the bsi. read twice for dual mono mode. */ |
||
207 | i = !s->channel_mode; |
||
208 | do { |
||
209 | skip_bits(gbc, 5); // skip dialog normalization |
||
210 | if (get_bits1(gbc)) |
||
211 | skip_bits(gbc, 8); //skip compression |
||
212 | if (get_bits1(gbc)) |
||
213 | skip_bits(gbc, 8); //skip language code |
||
214 | if (get_bits1(gbc)) |
||
215 | skip_bits(gbc, 7); //skip audio production information |
||
216 | } while (i--); |
||
217 | |||
218 | skip_bits(gbc, 2); //skip copyright bit and original bitstream bit |
||
219 | |||
220 | /* skip the timecodes (or extra bitstream information for Alternate Syntax) |
||
221 | TODO: read & use the xbsi1 downmix levels */ |
||
222 | if (get_bits1(gbc)) |
||
223 | skip_bits(gbc, 14); //skip timecode1 / xbsi1 |
||
224 | if (get_bits1(gbc)) |
||
225 | skip_bits(gbc, 14); //skip timecode2 / xbsi2 |
||
226 | |||
227 | /* skip additional bitstream info */ |
||
228 | if (get_bits1(gbc)) { |
||
229 | i = get_bits(gbc, 6); |
||
230 | do { |
||
231 | skip_bits(gbc, 8); |
||
232 | } while (i--); |
||
233 | } |
||
234 | |||
235 | return 0; |
||
236 | } |
||
237 | |||
238 | /** |
||
239 | * Common function to parse AC-3 or E-AC-3 frame header |
||
240 | */ |
||
241 | static int parse_frame_header(AC3DecodeContext *s) |
||
242 | { |
||
243 | AC3HeaderInfo hdr; |
||
244 | int err; |
||
245 | |||
246 | err = avpriv_ac3_parse_header(&s->gbc, &hdr); |
||
247 | if (err) |
||
248 | return err; |
||
249 | |||
250 | /* get decoding parameters from header info */ |
||
251 | s->bit_alloc_params.sr_code = hdr.sr_code; |
||
252 | s->bitstream_mode = hdr.bitstream_mode; |
||
253 | s->channel_mode = hdr.channel_mode; |
||
254 | s->channel_layout = hdr.channel_layout; |
||
255 | s->lfe_on = hdr.lfe_on; |
||
256 | s->bit_alloc_params.sr_shift = hdr.sr_shift; |
||
257 | s->sample_rate = hdr.sample_rate; |
||
258 | s->bit_rate = hdr.bit_rate; |
||
259 | s->channels = hdr.channels; |
||
260 | s->fbw_channels = s->channels - s->lfe_on; |
||
261 | s->lfe_ch = s->fbw_channels + 1; |
||
262 | s->frame_size = hdr.frame_size; |
||
263 | s->center_mix_level = hdr.center_mix_level; |
||
264 | s->surround_mix_level = hdr.surround_mix_level; |
||
265 | s->num_blocks = hdr.num_blocks; |
||
266 | s->frame_type = hdr.frame_type; |
||
267 | s->substreamid = hdr.substreamid; |
||
268 | |||
269 | if (s->lfe_on) { |
||
270 | s->start_freq[s->lfe_ch] = 0; |
||
271 | s->end_freq[s->lfe_ch] = 7; |
||
272 | s->num_exp_groups[s->lfe_ch] = 2; |
||
273 | s->channel_in_cpl[s->lfe_ch] = 0; |
||
274 | } |
||
275 | |||
276 | if (hdr.bitstream_id <= 10) { |
||
277 | s->eac3 = 0; |
||
278 | s->snr_offset_strategy = 2; |
||
279 | s->block_switch_syntax = 1; |
||
280 | s->dither_flag_syntax = 1; |
||
281 | s->bit_allocation_syntax = 1; |
||
282 | s->fast_gain_syntax = 0; |
||
283 | s->first_cpl_leak = 0; |
||
284 | s->dba_syntax = 1; |
||
285 | s->skip_syntax = 1; |
||
286 | memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht)); |
||
287 | return ac3_parse_header(s); |
||
288 | } else if (CONFIG_EAC3_DECODER) { |
||
289 | s->eac3 = 1; |
||
290 | return ff_eac3_parse_header(s); |
||
291 | } else { |
||
292 | av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n"); |
||
293 | return AVERROR(ENOSYS); |
||
294 | } |
||
295 | } |
||
296 | |||
297 | /** |
||
298 | * Set stereo downmixing coefficients based on frame header info. |
||
299 | * reference: Section 7.8.2 Downmixing Into Two Channels |
||
300 | */ |
||
301 | static void set_downmix_coeffs(AC3DecodeContext *s) |
||
302 | { |
||
303 | int i; |
||
304 | float cmix = gain_levels[s-> center_mix_level]; |
||
305 | float smix = gain_levels[s->surround_mix_level]; |
||
306 | float norm0, norm1; |
||
307 | |||
308 | for (i = 0; i < s->fbw_channels; i++) { |
||
309 | s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]]; |
||
310 | s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]]; |
||
311 | } |
||
312 | if (s->channel_mode > 1 && s->channel_mode & 1) { |
||
313 | s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix; |
||
314 | } |
||
315 | if (s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) { |
||
316 | int nf = s->channel_mode - 2; |
||
317 | s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB; |
||
318 | } |
||
319 | if (s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) { |
||
320 | int nf = s->channel_mode - 4; |
||
321 | s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix; |
||
322 | } |
||
323 | |||
324 | /* renormalize */ |
||
325 | norm0 = norm1 = 0.0; |
||
326 | for (i = 0; i < s->fbw_channels; i++) { |
||
327 | norm0 += s->downmix_coeffs[i][0]; |
||
328 | norm1 += s->downmix_coeffs[i][1]; |
||
329 | } |
||
330 | norm0 = 1.0f / norm0; |
||
331 | norm1 = 1.0f / norm1; |
||
332 | for (i = 0; i < s->fbw_channels; i++) { |
||
333 | s->downmix_coeffs[i][0] *= norm0; |
||
334 | s->downmix_coeffs[i][1] *= norm1; |
||
335 | } |
||
336 | |||
337 | if (s->output_mode == AC3_CHMODE_MONO) { |
||
338 | for (i = 0; i < s->fbw_channels; i++) |
||
339 | s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] + |
||
340 | s->downmix_coeffs[i][1]) * LEVEL_MINUS_3DB; |
||
341 | } |
||
342 | } |
||
343 | |||
344 | /** |
||
345 | * Decode the grouped exponents according to exponent strategy. |
||
346 | * reference: Section 7.1.3 Exponent Decoding |
||
347 | */ |
||
348 | static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps, |
||
349 | uint8_t absexp, int8_t *dexps) |
||
350 | { |
||
351 | int i, j, grp, group_size; |
||
352 | int dexp[256]; |
||
353 | int expacc, prevexp; |
||
354 | |||
355 | /* unpack groups */ |
||
356 | group_size = exp_strategy + (exp_strategy == EXP_D45); |
||
357 | for (grp = 0, i = 0; grp < ngrps; grp++) { |
||
358 | expacc = get_bits(gbc, 7); |
||
359 | dexp[i++] = ungroup_3_in_7_bits_tab[expacc][0]; |
||
360 | dexp[i++] = ungroup_3_in_7_bits_tab[expacc][1]; |
||
361 | dexp[i++] = ungroup_3_in_7_bits_tab[expacc][2]; |
||
362 | } |
||
363 | |||
364 | /* convert to absolute exps and expand groups */ |
||
365 | prevexp = absexp; |
||
366 | for (i = 0, j = 0; i < ngrps * 3; i++) { |
||
367 | prevexp += dexp[i] - 2; |
||
368 | if (prevexp > 24U) |
||
369 | return -1; |
||
370 | switch (group_size) { |
||
371 | case 4: dexps[j++] = prevexp; |
||
372 | dexps[j++] = prevexp; |
||
373 | case 2: dexps[j++] = prevexp; |
||
374 | case 1: dexps[j++] = prevexp; |
||
375 | } |
||
376 | } |
||
377 | return 0; |
||
378 | } |
||
379 | |||
380 | /** |
||
381 | * Generate transform coefficients for each coupled channel in the coupling |
||
382 | * range using the coupling coefficients and coupling coordinates. |
||
383 | * reference: Section 7.4.3 Coupling Coordinate Format |
||
384 | */ |
||
385 | static void calc_transform_coeffs_cpl(AC3DecodeContext *s) |
||
386 | { |
||
387 | int bin, band, ch; |
||
388 | |||
389 | bin = s->start_freq[CPL_CH]; |
||
390 | for (band = 0; band < s->num_cpl_bands; band++) { |
||
391 | int band_start = bin; |
||
392 | int band_end = bin + s->cpl_band_sizes[band]; |
||
393 | for (ch = 1; ch <= s->fbw_channels; ch++) { |
||
394 | if (s->channel_in_cpl[ch]) { |
||
395 | int cpl_coord = s->cpl_coords[ch][band] << 5; |
||
396 | for (bin = band_start; bin < band_end; bin++) { |
||
397 | s->fixed_coeffs[ch][bin] = |
||
398 | MULH(s->fixed_coeffs[CPL_CH][bin] << 4, cpl_coord); |
||
399 | } |
||
400 | if (ch == 2 && s->phase_flags[band]) { |
||
401 | for (bin = band_start; bin < band_end; bin++) |
||
402 | s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin]; |
||
403 | } |
||
404 | } |
||
405 | } |
||
406 | bin = band_end; |
||
407 | } |
||
408 | } |
||
409 | |||
410 | /** |
||
411 | * Grouped mantissas for 3-level 5-level and 11-level quantization |
||
412 | */ |
||
413 | typedef struct { |
||
414 | int b1_mant[2]; |
||
415 | int b2_mant[2]; |
||
416 | int b4_mant; |
||
417 | int b1; |
||
418 | int b2; |
||
419 | int b4; |
||
420 | } mant_groups; |
||
421 | |||
422 | /** |
||
423 | * Decode the transform coefficients for a particular channel |
||
424 | * reference: Section 7.3 Quantization and Decoding of Mantissas |
||
425 | */ |
||
426 | static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m) |
||
427 | { |
||
428 | int start_freq = s->start_freq[ch_index]; |
||
429 | int end_freq = s->end_freq[ch_index]; |
||
430 | uint8_t *baps = s->bap[ch_index]; |
||
431 | int8_t *exps = s->dexps[ch_index]; |
||
432 | int32_t *coeffs = s->fixed_coeffs[ch_index]; |
||
433 | int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index]; |
||
434 | GetBitContext *gbc = &s->gbc; |
||
435 | int freq; |
||
436 | |||
437 | for (freq = start_freq; freq < end_freq; freq++) { |
||
438 | int bap = baps[freq]; |
||
439 | int mantissa; |
||
440 | switch (bap) { |
||
441 | case 0: |
||
442 | /* random noise with approximate range of -0.707 to 0.707 */ |
||
443 | if (dither) |
||
444 | mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008; |
||
445 | else |
||
446 | mantissa = 0; |
||
447 | break; |
||
448 | case 1: |
||
449 | if (m->b1) { |
||
450 | m->b1--; |
||
451 | mantissa = m->b1_mant[m->b1]; |
||
452 | } else { |
||
453 | int bits = get_bits(gbc, 5); |
||
454 | mantissa = b1_mantissas[bits][0]; |
||
455 | m->b1_mant[1] = b1_mantissas[bits][1]; |
||
456 | m->b1_mant[0] = b1_mantissas[bits][2]; |
||
457 | m->b1 = 2; |
||
458 | } |
||
459 | break; |
||
460 | case 2: |
||
461 | if (m->b2) { |
||
462 | m->b2--; |
||
463 | mantissa = m->b2_mant[m->b2]; |
||
464 | } else { |
||
465 | int bits = get_bits(gbc, 7); |
||
466 | mantissa = b2_mantissas[bits][0]; |
||
467 | m->b2_mant[1] = b2_mantissas[bits][1]; |
||
468 | m->b2_mant[0] = b2_mantissas[bits][2]; |
||
469 | m->b2 = 2; |
||
470 | } |
||
471 | break; |
||
472 | case 3: |
||
473 | mantissa = b3_mantissas[get_bits(gbc, 3)]; |
||
474 | break; |
||
475 | case 4: |
||
476 | if (m->b4) { |
||
477 | m->b4 = 0; |
||
478 | mantissa = m->b4_mant; |
||
479 | } else { |
||
480 | int bits = get_bits(gbc, 7); |
||
481 | mantissa = b4_mantissas[bits][0]; |
||
482 | m->b4_mant = b4_mantissas[bits][1]; |
||
483 | m->b4 = 1; |
||
484 | } |
||
485 | break; |
||
486 | case 5: |
||
487 | mantissa = b5_mantissas[get_bits(gbc, 4)]; |
||
488 | break; |
||
489 | default: /* 6 to 15 */ |
||
490 | /* Shift mantissa and sign-extend it. */ |
||
491 | mantissa = get_sbits(gbc, quantization_tab[bap]); |
||
492 | mantissa <<= 24 - quantization_tab[bap]; |
||
493 | break; |
||
494 | } |
||
495 | coeffs[freq] = mantissa >> exps[freq]; |
||
496 | } |
||
497 | } |
||
498 | |||
499 | /** |
||
500 | * Remove random dithering from coupling range coefficients with zero-bit |
||
501 | * mantissas for coupled channels which do not use dithering. |
||
502 | * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0) |
||
503 | */ |
||
504 | static void remove_dithering(AC3DecodeContext *s) { |
||
505 | int ch, i; |
||
506 | |||
507 | for (ch = 1; ch <= s->fbw_channels; ch++) { |
||
508 | if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) { |
||
509 | for (i = s->start_freq[CPL_CH]; i < s->end_freq[CPL_CH]; i++) { |
||
510 | if (!s->bap[CPL_CH][i]) |
||
511 | s->fixed_coeffs[ch][i] = 0; |
||
512 | } |
||
513 | } |
||
514 | } |
||
515 | } |
||
516 | |||
517 | static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch, |
||
518 | mant_groups *m) |
||
519 | { |
||
520 | if (!s->channel_uses_aht[ch]) { |
||
521 | ac3_decode_transform_coeffs_ch(s, ch, m); |
||
522 | } else { |
||
523 | /* if AHT is used, mantissas for all blocks are encoded in the first |
||
524 | block of the frame. */ |
||
525 | int bin; |
||
526 | if (!blk && CONFIG_EAC3_DECODER) |
||
527 | ff_eac3_decode_transform_coeffs_aht_ch(s, ch); |
||
528 | for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) { |
||
529 | s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin]; |
||
530 | } |
||
531 | } |
||
532 | } |
||
533 | |||
534 | /** |
||
535 | * Decode the transform coefficients. |
||
536 | */ |
||
537 | static void decode_transform_coeffs(AC3DecodeContext *s, int blk) |
||
538 | { |
||
539 | int ch, end; |
||
540 | int got_cplchan = 0; |
||
541 | mant_groups m; |
||
542 | |||
543 | m.b1 = m.b2 = m.b4 = 0; |
||
544 | |||
545 | for (ch = 1; ch <= s->channels; ch++) { |
||
546 | /* transform coefficients for full-bandwidth channel */ |
||
547 | decode_transform_coeffs_ch(s, blk, ch, &m); |
||
548 | /* transform coefficients for coupling channel come right after the |
||
549 | coefficients for the first coupled channel*/ |
||
550 | if (s->channel_in_cpl[ch]) { |
||
551 | if (!got_cplchan) { |
||
552 | decode_transform_coeffs_ch(s, blk, CPL_CH, &m); |
||
553 | calc_transform_coeffs_cpl(s); |
||
554 | got_cplchan = 1; |
||
555 | } |
||
556 | end = s->end_freq[CPL_CH]; |
||
557 | } else { |
||
558 | end = s->end_freq[ch]; |
||
559 | } |
||
560 | do |
||
561 | s->fixed_coeffs[ch][end] = 0; |
||
562 | while (++end < 256); |
||
563 | } |
||
564 | |||
565 | /* zero the dithered coefficients for appropriate channels */ |
||
566 | remove_dithering(s); |
||
567 | } |
||
568 | |||
569 | /** |
||
570 | * Stereo rematrixing. |
||
571 | * reference: Section 7.5.4 Rematrixing : Decoding Technique |
||
572 | */ |
||
573 | static void do_rematrixing(AC3DecodeContext *s) |
||
574 | { |
||
575 | int bnd, i; |
||
576 | int end, bndend; |
||
577 | |||
578 | end = FFMIN(s->end_freq[1], s->end_freq[2]); |
||
579 | |||
580 | for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) { |
||
581 | if (s->rematrixing_flags[bnd]) { |
||
582 | bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd + 1]); |
||
583 | for (i = ff_ac3_rematrix_band_tab[bnd]; i < bndend; i++) { |
||
584 | int tmp0 = s->fixed_coeffs[1][i]; |
||
585 | s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i]; |
||
586 | s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i]; |
||
587 | } |
||
588 | } |
||
589 | } |
||
590 | } |
||
591 | |||
592 | /** |
||
593 | * Inverse MDCT Transform. |
||
594 | * Convert frequency domain coefficients to time-domain audio samples. |
||
595 | * reference: Section 7.9.4 Transformation Equations |
||
596 | */ |
||
597 | static inline void do_imdct(AC3DecodeContext *s, int channels) |
||
598 | { |
||
599 | int ch; |
||
600 | |||
601 | for (ch = 1; ch <= channels; ch++) { |
||
602 | if (s->block_switch[ch]) { |
||
603 | int i; |
||
604 | float *x = s->tmp_output + 128; |
||
605 | for (i = 0; i < 128; i++) |
||
606 | x[i] = s->transform_coeffs[ch][2 * i]; |
||
607 | s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x); |
||
608 | s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1], |
||
609 | s->tmp_output, s->window, 128); |
||
610 | for (i = 0; i < 128; i++) |
||
611 | x[i] = s->transform_coeffs[ch][2 * i + 1]; |
||
612 | s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch - 1], x); |
||
613 | } else { |
||
614 | s->imdct_512.imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]); |
||
615 | s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1], |
||
616 | s->tmp_output, s->window, 128); |
||
617 | memcpy(s->delay[ch - 1], s->tmp_output + 128, 128 * sizeof(float)); |
||
618 | } |
||
619 | } |
||
620 | } |
||
621 | |||
622 | /** |
||
623 | * Upmix delay samples from stereo to original channel layout. |
||
624 | */ |
||
625 | static void ac3_upmix_delay(AC3DecodeContext *s) |
||
626 | { |
||
627 | int channel_data_size = sizeof(s->delay[0]); |
||
628 | switch (s->channel_mode) { |
||
629 | case AC3_CHMODE_DUALMONO: |
||
630 | case AC3_CHMODE_STEREO: |
||
631 | /* upmix mono to stereo */ |
||
632 | memcpy(s->delay[1], s->delay[0], channel_data_size); |
||
633 | break; |
||
634 | case AC3_CHMODE_2F2R: |
||
635 | memset(s->delay[3], 0, channel_data_size); |
||
636 | case AC3_CHMODE_2F1R: |
||
637 | memset(s->delay[2], 0, channel_data_size); |
||
638 | break; |
||
639 | case AC3_CHMODE_3F2R: |
||
640 | memset(s->delay[4], 0, channel_data_size); |
||
641 | case AC3_CHMODE_3F1R: |
||
642 | memset(s->delay[3], 0, channel_data_size); |
||
643 | case AC3_CHMODE_3F: |
||
644 | memcpy(s->delay[2], s->delay[1], channel_data_size); |
||
645 | memset(s->delay[1], 0, channel_data_size); |
||
646 | break; |
||
647 | } |
||
648 | } |
||
649 | |||
650 | /** |
||
651 | * Decode band structure for coupling, spectral extension, or enhanced coupling. |
||
652 | * The band structure defines how many subbands are in each band. For each |
||
653 | * subband in the range, 1 means it is combined with the previous band, and 0 |
||
654 | * means that it starts a new band. |
||
655 | * |
||
656 | * @param[in] gbc bit reader context |
||
657 | * @param[in] blk block number |
||
658 | * @param[in] eac3 flag to indicate E-AC-3 |
||
659 | * @param[in] ecpl flag to indicate enhanced coupling |
||
660 | * @param[in] start_subband subband number for start of range |
||
661 | * @param[in] end_subband subband number for end of range |
||
662 | * @param[in] default_band_struct default band structure table |
||
663 | * @param[out] num_bands number of bands (optionally NULL) |
||
664 | * @param[out] band_sizes array containing the number of bins in each band (optionally NULL) |
||
665 | */ |
||
666 | static void decode_band_structure(GetBitContext *gbc, int blk, int eac3, |
||
667 | int ecpl, int start_subband, int end_subband, |
||
668 | const uint8_t *default_band_struct, |
||
669 | int *num_bands, uint8_t *band_sizes) |
||
670 | { |
||
671 | int subbnd, bnd, n_subbands, n_bands=0; |
||
672 | uint8_t bnd_sz[22]; |
||
673 | uint8_t coded_band_struct[22]; |
||
674 | const uint8_t *band_struct; |
||
675 | |||
676 | n_subbands = end_subband - start_subband; |
||
677 | |||
678 | /* decode band structure from bitstream or use default */ |
||
679 | if (!eac3 || get_bits1(gbc)) { |
||
680 | for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) { |
||
681 | coded_band_struct[subbnd] = get_bits1(gbc); |
||
682 | } |
||
683 | band_struct = coded_band_struct; |
||
684 | } else if (!blk) { |
||
685 | band_struct = &default_band_struct[start_subband+1]; |
||
686 | } else { |
||
687 | /* no change in band structure */ |
||
688 | return; |
||
689 | } |
||
690 | |||
691 | /* calculate number of bands and band sizes based on band structure. |
||
692 | note that the first 4 subbands in enhanced coupling span only 6 bins |
||
693 | instead of 12. */ |
||
694 | if (num_bands || band_sizes ) { |
||
695 | n_bands = n_subbands; |
||
696 | bnd_sz[0] = ecpl ? 6 : 12; |
||
697 | for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) { |
||
698 | int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12; |
||
699 | if (band_struct[subbnd - 1]) { |
||
700 | n_bands--; |
||
701 | bnd_sz[bnd] += subbnd_size; |
||
702 | } else { |
||
703 | bnd_sz[++bnd] = subbnd_size; |
||
704 | } |
||
705 | } |
||
706 | } |
||
707 | |||
708 | /* set optional output params */ |
||
709 | if (num_bands) |
||
710 | *num_bands = n_bands; |
||
711 | if (band_sizes) |
||
712 | memcpy(band_sizes, bnd_sz, n_bands); |
||
713 | } |
||
714 | |||
715 | /** |
||
716 | * Decode a single audio block from the AC-3 bitstream. |
||
717 | */ |
||
718 | static int decode_audio_block(AC3DecodeContext *s, int blk) |
||
719 | { |
||
720 | int fbw_channels = s->fbw_channels; |
||
721 | int channel_mode = s->channel_mode; |
||
722 | int i, bnd, seg, ch; |
||
723 | int different_transforms; |
||
724 | int downmix_output; |
||
725 | int cpl_in_use; |
||
726 | GetBitContext *gbc = &s->gbc; |
||
727 | uint8_t bit_alloc_stages[AC3_MAX_CHANNELS] = { 0 }; |
||
728 | |||
729 | /* block switch flags */ |
||
730 | different_transforms = 0; |
||
731 | if (s->block_switch_syntax) { |
||
732 | for (ch = 1; ch <= fbw_channels; ch++) { |
||
733 | s->block_switch[ch] = get_bits1(gbc); |
||
734 | if (ch > 1 && s->block_switch[ch] != s->block_switch[1]) |
||
735 | different_transforms = 1; |
||
736 | } |
||
737 | } |
||
738 | |||
739 | /* dithering flags */ |
||
740 | if (s->dither_flag_syntax) { |
||
741 | for (ch = 1; ch <= fbw_channels; ch++) { |
||
742 | s->dither_flag[ch] = get_bits1(gbc); |
||
743 | } |
||
744 | } |
||
745 | |||
746 | /* dynamic range */ |
||
747 | i = !s->channel_mode; |
||
748 | do { |
||
749 | if (get_bits1(gbc)) { |
||
750 | s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)] - 1.0) * |
||
751 | s->drc_scale) + 1.0; |
||
752 | } else if (blk == 0) { |
||
753 | s->dynamic_range[i] = 1.0f; |
||
754 | } |
||
755 | } while (i--); |
||
756 | |||
757 | /* spectral extension strategy */ |
||
758 | if (s->eac3 && (!blk || get_bits1(gbc))) { |
||
759 | s->spx_in_use = get_bits1(gbc); |
||
760 | if (s->spx_in_use) { |
||
761 | int dst_start_freq, dst_end_freq, src_start_freq, |
||
762 | start_subband, end_subband; |
||
763 | |||
764 | /* determine which channels use spx */ |
||
765 | if (s->channel_mode == AC3_CHMODE_MONO) { |
||
766 | s->channel_uses_spx[1] = 1; |
||
767 | } else { |
||
768 | for (ch = 1; ch <= fbw_channels; ch++) |
||
769 | s->channel_uses_spx[ch] = get_bits1(gbc); |
||
770 | } |
||
771 | |||
772 | /* get the frequency bins of the spx copy region and the spx start |
||
773 | and end subbands */ |
||
774 | dst_start_freq = get_bits(gbc, 2); |
||
775 | start_subband = get_bits(gbc, 3) + 2; |
||
776 | if (start_subband > 7) |
||
777 | start_subband += start_subband - 7; |
||
778 | end_subband = get_bits(gbc, 3) + 5; |
||
779 | if (end_subband > 7) |
||
780 | end_subband += end_subband - 7; |
||
781 | dst_start_freq = dst_start_freq * 12 + 25; |
||
782 | src_start_freq = start_subband * 12 + 25; |
||
783 | dst_end_freq = end_subband * 12 + 25; |
||
784 | |||
785 | /* check validity of spx ranges */ |
||
786 | if (start_subband >= end_subband) { |
||
787 | av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension " |
||
788 | "range (%d >= %d)\n", start_subband, end_subband); |
||
789 | return AVERROR_INVALIDDATA; |
||
790 | } |
||
791 | if (dst_start_freq >= src_start_freq) { |
||
792 | av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension " |
||
793 | "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq); |
||
794 | return AVERROR_INVALIDDATA; |
||
795 | } |
||
796 | |||
797 | s->spx_dst_start_freq = dst_start_freq; |
||
798 | s->spx_src_start_freq = src_start_freq; |
||
799 | s->spx_dst_end_freq = dst_end_freq; |
||
800 | |||
801 | decode_band_structure(gbc, blk, s->eac3, 0, |
||
802 | start_subband, end_subband, |
||
803 | ff_eac3_default_spx_band_struct, |
||
804 | &s->num_spx_bands, |
||
805 | s->spx_band_sizes); |
||
806 | } else { |
||
807 | for (ch = 1; ch <= fbw_channels; ch++) { |
||
808 | s->channel_uses_spx[ch] = 0; |
||
809 | s->first_spx_coords[ch] = 1; |
||
810 | } |
||
811 | } |
||
812 | } |
||
813 | |||
814 | /* spectral extension coordinates */ |
||
815 | if (s->spx_in_use) { |
||
816 | for (ch = 1; ch <= fbw_channels; ch++) { |
||
817 | if (s->channel_uses_spx[ch]) { |
||
818 | if (s->first_spx_coords[ch] || get_bits1(gbc)) { |
||
819 | float spx_blend; |
||
820 | int bin, master_spx_coord; |
||
821 | |||
822 | s->first_spx_coords[ch] = 0; |
||
823 | spx_blend = get_bits(gbc, 5) * (1.0f/32); |
||
824 | master_spx_coord = get_bits(gbc, 2) * 3; |
||
825 | |||
826 | bin = s->spx_src_start_freq; |
||
827 | for (bnd = 0; bnd < s->num_spx_bands; bnd++) { |
||
828 | int bandsize; |
||
829 | int spx_coord_exp, spx_coord_mant; |
||
830 | float nratio, sblend, nblend, spx_coord; |
||
831 | |||
832 | /* calculate blending factors */ |
||
833 | bandsize = s->spx_band_sizes[bnd]; |
||
834 | nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend; |
||
835 | nratio = av_clipf(nratio, 0.0f, 1.0f); |
||
836 | nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3) |
||
837 | // to give unity variance |
||
838 | sblend = sqrtf(1.0f - nratio); |
||
839 | bin += bandsize; |
||
840 | |||
841 | /* decode spx coordinates */ |
||
842 | spx_coord_exp = get_bits(gbc, 4); |
||
843 | spx_coord_mant = get_bits(gbc, 2); |
||
844 | if (spx_coord_exp == 15) spx_coord_mant <<= 1; |
||
845 | else spx_coord_mant += 4; |
||
846 | spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord); |
||
847 | spx_coord = spx_coord_mant * (1.0f / (1 << 23)); |
||
848 | |||
849 | /* multiply noise and signal blending factors by spx coordinate */ |
||
850 | s->spx_noise_blend [ch][bnd] = nblend * spx_coord; |
||
851 | s->spx_signal_blend[ch][bnd] = sblend * spx_coord; |
||
852 | } |
||
853 | } |
||
854 | } else { |
||
855 | s->first_spx_coords[ch] = 1; |
||
856 | } |
||
857 | } |
||
858 | } |
||
859 | |||
860 | /* coupling strategy */ |
||
861 | if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) { |
||
862 | memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS); |
||
863 | if (!s->eac3) |
||
864 | s->cpl_in_use[blk] = get_bits1(gbc); |
||
865 | if (s->cpl_in_use[blk]) { |
||
866 | /* coupling in use */ |
||
867 | int cpl_start_subband, cpl_end_subband; |
||
868 | |||
869 | if (channel_mode < AC3_CHMODE_STEREO) { |
||
870 | av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n"); |
||
871 | return AVERROR_INVALIDDATA; |
||
872 | } |
||
873 | |||
874 | /* check for enhanced coupling */ |
||
875 | if (s->eac3 && get_bits1(gbc)) { |
||
876 | /* TODO: parse enhanced coupling strategy info */ |
||
877 | avpriv_request_sample(s->avctx, "Enhanced coupling"); |
||
878 | return AVERROR_PATCHWELCOME; |
||
879 | } |
||
880 | |||
881 | /* determine which channels are coupled */ |
||
882 | if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) { |
||
883 | s->channel_in_cpl[1] = 1; |
||
884 | s->channel_in_cpl[2] = 1; |
||
885 | } else { |
||
886 | for (ch = 1; ch <= fbw_channels; ch++) |
||
887 | s->channel_in_cpl[ch] = get_bits1(gbc); |
||
888 | } |
||
889 | |||
890 | /* phase flags in use */ |
||
891 | if (channel_mode == AC3_CHMODE_STEREO) |
||
892 | s->phase_flags_in_use = get_bits1(gbc); |
||
893 | |||
894 | /* coupling frequency range */ |
||
895 | cpl_start_subband = get_bits(gbc, 4); |
||
896 | cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 : |
||
897 | get_bits(gbc, 4) + 3; |
||
898 | if (cpl_start_subband >= cpl_end_subband) { |
||
899 | av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n", |
||
900 | cpl_start_subband, cpl_end_subband); |
||
901 | return AVERROR_INVALIDDATA; |
||
902 | } |
||
903 | s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37; |
||
904 | s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37; |
||
905 | |||
906 | decode_band_structure(gbc, blk, s->eac3, 0, cpl_start_subband, |
||
907 | cpl_end_subband, |
||
908 | ff_eac3_default_cpl_band_struct, |
||
909 | &s->num_cpl_bands, s->cpl_band_sizes); |
||
910 | } else { |
||
911 | /* coupling not in use */ |
||
912 | for (ch = 1; ch <= fbw_channels; ch++) { |
||
913 | s->channel_in_cpl[ch] = 0; |
||
914 | s->first_cpl_coords[ch] = 1; |
||
915 | } |
||
916 | s->first_cpl_leak = s->eac3; |
||
917 | s->phase_flags_in_use = 0; |
||
918 | } |
||
919 | } else if (!s->eac3) { |
||
920 | if (!blk) { |
||
921 | av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must " |
||
922 | "be present in block 0\n"); |
||
923 | return AVERROR_INVALIDDATA; |
||
924 | } else { |
||
925 | s->cpl_in_use[blk] = s->cpl_in_use[blk-1]; |
||
926 | } |
||
927 | } |
||
928 | cpl_in_use = s->cpl_in_use[blk]; |
||
929 | |||
930 | /* coupling coordinates */ |
||
931 | if (cpl_in_use) { |
||
932 | int cpl_coords_exist = 0; |
||
933 | |||
934 | for (ch = 1; ch <= fbw_channels; ch++) { |
||
935 | if (s->channel_in_cpl[ch]) { |
||
936 | if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(gbc)) { |
||
937 | int master_cpl_coord, cpl_coord_exp, cpl_coord_mant; |
||
938 | s->first_cpl_coords[ch] = 0; |
||
939 | cpl_coords_exist = 1; |
||
940 | master_cpl_coord = 3 * get_bits(gbc, 2); |
||
941 | for (bnd = 0; bnd < s->num_cpl_bands; bnd++) { |
||
942 | cpl_coord_exp = get_bits(gbc, 4); |
||
943 | cpl_coord_mant = get_bits(gbc, 4); |
||
944 | if (cpl_coord_exp == 15) |
||
945 | s->cpl_coords[ch][bnd] = cpl_coord_mant << 22; |
||
946 | else |
||
947 | s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21; |
||
948 | s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord); |
||
949 | } |
||
950 | } else if (!blk) { |
||
951 | av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must " |
||
952 | "be present in block 0\n"); |
||
953 | return AVERROR_INVALIDDATA; |
||
954 | } |
||
955 | } else { |
||
956 | /* channel not in coupling */ |
||
957 | s->first_cpl_coords[ch] = 1; |
||
958 | } |
||
959 | } |
||
960 | /* phase flags */ |
||
961 | if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) { |
||
962 | for (bnd = 0; bnd < s->num_cpl_bands; bnd++) { |
||
963 | s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0; |
||
964 | } |
||
965 | } |
||
966 | } |
||
967 | |||
968 | /* stereo rematrixing strategy and band structure */ |
||
969 | if (channel_mode == AC3_CHMODE_STEREO) { |
||
970 | if ((s->eac3 && !blk) || get_bits1(gbc)) { |
||
971 | s->num_rematrixing_bands = 4; |
||
972 | if (cpl_in_use && s->start_freq[CPL_CH] <= 61) { |
||
973 | s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37); |
||
974 | } else if (s->spx_in_use && s->spx_src_start_freq <= 61) { |
||
975 | s->num_rematrixing_bands--; |
||
976 | } |
||
977 | for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) |
||
978 | s->rematrixing_flags[bnd] = get_bits1(gbc); |
||
979 | } else if (!blk) { |
||
980 | av_log(s->avctx, AV_LOG_WARNING, "Warning: " |
||
981 | "new rematrixing strategy not present in block 0\n"); |
||
982 | s->num_rematrixing_bands = 0; |
||
983 | } |
||
984 | } |
||
985 | |||
986 | /* exponent strategies for each channel */ |
||
987 | for (ch = !cpl_in_use; ch <= s->channels; ch++) { |
||
988 | if (!s->eac3) |
||
989 | s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch)); |
||
990 | if (s->exp_strategy[blk][ch] != EXP_REUSE) |
||
991 | bit_alloc_stages[ch] = 3; |
||
992 | } |
||
993 | |||
994 | /* channel bandwidth */ |
||
995 | for (ch = 1; ch <= fbw_channels; ch++) { |
||
996 | s->start_freq[ch] = 0; |
||
997 | if (s->exp_strategy[blk][ch] != EXP_REUSE) { |
||
998 | int group_size; |
||
999 | int prev = s->end_freq[ch]; |
||
1000 | if (s->channel_in_cpl[ch]) |
||
1001 | s->end_freq[ch] = s->start_freq[CPL_CH]; |
||
1002 | else if (s->channel_uses_spx[ch]) |
||
1003 | s->end_freq[ch] = s->spx_src_start_freq; |
||
1004 | else { |
||
1005 | int bandwidth_code = get_bits(gbc, 6); |
||
1006 | if (bandwidth_code > 60) { |
||
1007 | av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code); |
||
1008 | return AVERROR_INVALIDDATA; |
||
1009 | } |
||
1010 | s->end_freq[ch] = bandwidth_code * 3 + 73; |
||
1011 | } |
||
1012 | group_size = 3 << (s->exp_strategy[blk][ch] - 1); |
||
1013 | s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size; |
||
1014 | if (blk > 0 && s->end_freq[ch] != prev) |
||
1015 | memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS); |
||
1016 | } |
||
1017 | } |
||
1018 | if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) { |
||
1019 | s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) / |
||
1020 | (3 << (s->exp_strategy[blk][CPL_CH] - 1)); |
||
1021 | } |
||
1022 | |||
1023 | /* decode exponents for each channel */ |
||
1024 | for (ch = !cpl_in_use; ch <= s->channels; ch++) { |
||
1025 | if (s->exp_strategy[blk][ch] != EXP_REUSE) { |
||
1026 | s->dexps[ch][0] = get_bits(gbc, 4) << !ch; |
||
1027 | if (decode_exponents(gbc, s->exp_strategy[blk][ch], |
||
1028 | s->num_exp_groups[ch], s->dexps[ch][0], |
||
1029 | &s->dexps[ch][s->start_freq[ch]+!!ch])) { |
||
1030 | av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n"); |
||
1031 | return AVERROR_INVALIDDATA; |
||
1032 | } |
||
1033 | if (ch != CPL_CH && ch != s->lfe_ch) |
||
1034 | skip_bits(gbc, 2); /* skip gainrng */ |
||
1035 | } |
||
1036 | } |
||
1037 | |||
1038 | /* bit allocation information */ |
||
1039 | if (s->bit_allocation_syntax) { |
||
1040 | if (get_bits1(gbc)) { |
||
1041 | s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift; |
||
1042 | s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift; |
||
1043 | s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)]; |
||
1044 | s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)]; |
||
1045 | s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)]; |
||
1046 | for (ch = !cpl_in_use; ch <= s->channels; ch++) |
||
1047 | bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); |
||
1048 | } else if (!blk) { |
||
1049 | av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must " |
||
1050 | "be present in block 0\n"); |
||
1051 | return AVERROR_INVALIDDATA; |
||
1052 | } |
||
1053 | } |
||
1054 | |||
1055 | /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */ |
||
1056 | if (!s->eac3 || !blk) { |
||
1057 | if (s->snr_offset_strategy && get_bits1(gbc)) { |
||
1058 | int snr = 0; |
||
1059 | int csnr; |
||
1060 | csnr = (get_bits(gbc, 6) - 15) << 4; |
||
1061 | for (i = ch = !cpl_in_use; ch <= s->channels; ch++) { |
||
1062 | /* snr offset */ |
||
1063 | if (ch == i || s->snr_offset_strategy == 2) |
||
1064 | snr = (csnr + get_bits(gbc, 4)) << 2; |
||
1065 | /* run at least last bit allocation stage if snr offset changes */ |
||
1066 | if (blk && s->snr_offset[ch] != snr) { |
||
1067 | bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1); |
||
1068 | } |
||
1069 | s->snr_offset[ch] = snr; |
||
1070 | |||
1071 | /* fast gain (normal AC-3 only) */ |
||
1072 | if (!s->eac3) { |
||
1073 | int prev = s->fast_gain[ch]; |
||
1074 | s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)]; |
||
1075 | /* run last 2 bit allocation stages if fast gain changes */ |
||
1076 | if (blk && prev != s->fast_gain[ch]) |
||
1077 | bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); |
||
1078 | } |
||
1079 | } |
||
1080 | } else if (!s->eac3 && !blk) { |
||
1081 | av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n"); |
||
1082 | return AVERROR_INVALIDDATA; |
||
1083 | } |
||
1084 | } |
||
1085 | |||
1086 | /* fast gain (E-AC-3 only) */ |
||
1087 | if (s->fast_gain_syntax && get_bits1(gbc)) { |
||
1088 | for (ch = !cpl_in_use; ch <= s->channels; ch++) { |
||
1089 | int prev = s->fast_gain[ch]; |
||
1090 | s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)]; |
||
1091 | /* run last 2 bit allocation stages if fast gain changes */ |
||
1092 | if (blk && prev != s->fast_gain[ch]) |
||
1093 | bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); |
||
1094 | } |
||
1095 | } else if (s->eac3 && !blk) { |
||
1096 | for (ch = !cpl_in_use; ch <= s->channels; ch++) |
||
1097 | s->fast_gain[ch] = ff_ac3_fast_gain_tab[4]; |
||
1098 | } |
||
1099 | |||
1100 | /* E-AC-3 to AC-3 converter SNR offset */ |
||
1101 | if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) { |
||
1102 | skip_bits(gbc, 10); // skip converter snr offset |
||
1103 | } |
||
1104 | |||
1105 | /* coupling leak information */ |
||
1106 | if (cpl_in_use) { |
||
1107 | if (s->first_cpl_leak || get_bits1(gbc)) { |
||
1108 | int fl = get_bits(gbc, 3); |
||
1109 | int sl = get_bits(gbc, 3); |
||
1110 | /* run last 2 bit allocation stages for coupling channel if |
||
1111 | coupling leak changes */ |
||
1112 | if (blk && (fl != s->bit_alloc_params.cpl_fast_leak || |
||
1113 | sl != s->bit_alloc_params.cpl_slow_leak)) { |
||
1114 | bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2); |
||
1115 | } |
||
1116 | s->bit_alloc_params.cpl_fast_leak = fl; |
||
1117 | s->bit_alloc_params.cpl_slow_leak = sl; |
||
1118 | } else if (!s->eac3 && !blk) { |
||
1119 | av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must " |
||
1120 | "be present in block 0\n"); |
||
1121 | return AVERROR_INVALIDDATA; |
||
1122 | } |
||
1123 | s->first_cpl_leak = 0; |
||
1124 | } |
||
1125 | |||
1126 | /* delta bit allocation information */ |
||
1127 | if (s->dba_syntax && get_bits1(gbc)) { |
||
1128 | /* delta bit allocation exists (strategy) */ |
||
1129 | for (ch = !cpl_in_use; ch <= fbw_channels; ch++) { |
||
1130 | s->dba_mode[ch] = get_bits(gbc, 2); |
||
1131 | if (s->dba_mode[ch] == DBA_RESERVED) { |
||
1132 | av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n"); |
||
1133 | return AVERROR_INVALIDDATA; |
||
1134 | } |
||
1135 | bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); |
||
1136 | } |
||
1137 | /* channel delta offset, len and bit allocation */ |
||
1138 | for (ch = !cpl_in_use; ch <= fbw_channels; ch++) { |
||
1139 | if (s->dba_mode[ch] == DBA_NEW) { |
||
1140 | s->dba_nsegs[ch] = get_bits(gbc, 3) + 1; |
||
1141 | for (seg = 0; seg < s->dba_nsegs[ch]; seg++) { |
||
1142 | s->dba_offsets[ch][seg] = get_bits(gbc, 5); |
||
1143 | s->dba_lengths[ch][seg] = get_bits(gbc, 4); |
||
1144 | s->dba_values[ch][seg] = get_bits(gbc, 3); |
||
1145 | } |
||
1146 | /* run last 2 bit allocation stages if new dba values */ |
||
1147 | bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); |
||
1148 | } |
||
1149 | } |
||
1150 | } else if (blk == 0) { |
||
1151 | for (ch = 0; ch <= s->channels; ch++) { |
||
1152 | s->dba_mode[ch] = DBA_NONE; |
||
1153 | } |
||
1154 | } |
||
1155 | |||
1156 | /* Bit allocation */ |
||
1157 | for (ch = !cpl_in_use; ch <= s->channels; ch++) { |
||
1158 | if (bit_alloc_stages[ch] > 2) { |
||
1159 | /* Exponent mapping into PSD and PSD integration */ |
||
1160 | ff_ac3_bit_alloc_calc_psd(s->dexps[ch], |
||
1161 | s->start_freq[ch], s->end_freq[ch], |
||
1162 | s->psd[ch], s->band_psd[ch]); |
||
1163 | } |
||
1164 | if (bit_alloc_stages[ch] > 1) { |
||
1165 | /* Compute excitation function, Compute masking curve, and |
||
1166 | Apply delta bit allocation */ |
||
1167 | if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch], |
||
1168 | s->start_freq[ch], s->end_freq[ch], |
||
1169 | s->fast_gain[ch], (ch == s->lfe_ch), |
||
1170 | s->dba_mode[ch], s->dba_nsegs[ch], |
||
1171 | s->dba_offsets[ch], s->dba_lengths[ch], |
||
1172 | s->dba_values[ch], s->mask[ch])) { |
||
1173 | av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n"); |
||
1174 | return AVERROR_INVALIDDATA; |
||
1175 | } |
||
1176 | } |
||
1177 | if (bit_alloc_stages[ch] > 0) { |
||
1178 | /* Compute bit allocation */ |
||
1179 | const uint8_t *bap_tab = s->channel_uses_aht[ch] ? |
||
1180 | ff_eac3_hebap_tab : ff_ac3_bap_tab; |
||
1181 | s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch], |
||
1182 | s->start_freq[ch], s->end_freq[ch], |
||
1183 | s->snr_offset[ch], |
||
1184 | s->bit_alloc_params.floor, |
||
1185 | bap_tab, s->bap[ch]); |
||
1186 | } |
||
1187 | } |
||
1188 | |||
1189 | /* unused dummy data */ |
||
1190 | if (s->skip_syntax && get_bits1(gbc)) { |
||
1191 | int skipl = get_bits(gbc, 9); |
||
1192 | while (skipl--) |
||
1193 | skip_bits(gbc, 8); |
||
1194 | } |
||
1195 | |||
1196 | /* unpack the transform coefficients |
||
1197 | this also uncouples channels if coupling is in use. */ |
||
1198 | decode_transform_coeffs(s, blk); |
||
1199 | |||
1200 | /* TODO: generate enhanced coupling coordinates and uncouple */ |
||
1201 | |||
1202 | /* recover coefficients if rematrixing is in use */ |
||
1203 | if (s->channel_mode == AC3_CHMODE_STEREO) |
||
1204 | do_rematrixing(s); |
||
1205 | |||
1206 | /* apply scaling to coefficients (headroom, dynrng) */ |
||
1207 | for (ch = 1; ch <= s->channels; ch++) { |
||
1208 | float gain = 1.0 / 4194304.0f; |
||
1209 | if (s->channel_mode == AC3_CHMODE_DUALMONO) { |
||
1210 | gain *= s->dynamic_range[2 - ch]; |
||
1211 | } else { |
||
1212 | gain *= s->dynamic_range[0]; |
||
1213 | } |
||
1214 | s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch], |
||
1215 | s->fixed_coeffs[ch], gain, 256); |
||
1216 | } |
||
1217 | |||
1218 | /* apply spectral extension to high frequency bins */ |
||
1219 | if (s->spx_in_use && CONFIG_EAC3_DECODER) { |
||
1220 | ff_eac3_apply_spectral_extension(s); |
||
1221 | } |
||
1222 | |||
1223 | /* downmix and MDCT. order depends on whether block switching is used for |
||
1224 | any channel in this block. this is because coefficients for the long |
||
1225 | and short transforms cannot be mixed. */ |
||
1226 | downmix_output = s->channels != s->out_channels && |
||
1227 | !((s->output_mode & AC3_OUTPUT_LFEON) && |
||
1228 | s->fbw_channels == s->out_channels); |
||
1229 | if (different_transforms) { |
||
1230 | /* the delay samples have already been downmixed, so we upmix the delay |
||
1231 | samples in order to reconstruct all channels before downmixing. */ |
||
1232 | if (s->downmixed) { |
||
1233 | s->downmixed = 0; |
||
1234 | ac3_upmix_delay(s); |
||
1235 | } |
||
1236 | |||
1237 | do_imdct(s, s->channels); |
||
1238 | |||
1239 | if (downmix_output) { |
||
1240 | s->ac3dsp.downmix(s->outptr, s->downmix_coeffs, |
||
1241 | s->out_channels, s->fbw_channels, 256); |
||
1242 | } |
||
1243 | } else { |
||
1244 | if (downmix_output) { |
||
1245 | s->ac3dsp.downmix(s->xcfptr + 1, s->downmix_coeffs, |
||
1246 | s->out_channels, s->fbw_channels, 256); |
||
1247 | } |
||
1248 | |||
1249 | if (downmix_output && !s->downmixed) { |
||
1250 | s->downmixed = 1; |
||
1251 | s->ac3dsp.downmix(s->dlyptr, s->downmix_coeffs, s->out_channels, |
||
1252 | s->fbw_channels, 128); |
||
1253 | } |
||
1254 | |||
1255 | do_imdct(s, s->out_channels); |
||
1256 | } |
||
1257 | |||
1258 | return 0; |
||
1259 | } |
||
1260 | |||
1261 | /** |
||
1262 | * Decode a single AC-3 frame. |
||
1263 | */ |
||
1264 | static int ac3_decode_frame(AVCodecContext * avctx, void *data, |
||
1265 | int *got_frame_ptr, AVPacket *avpkt) |
||
1266 | { |
||
1267 | AVFrame *frame = data; |
||
1268 | const uint8_t *buf = avpkt->data; |
||
1269 | int buf_size = avpkt->size; |
||
1270 | AC3DecodeContext *s = avctx->priv_data; |
||
1271 | int blk, ch, err, ret; |
||
1272 | const uint8_t *channel_map; |
||
1273 | const float *output[AC3_MAX_CHANNELS]; |
||
1274 | |||
1275 | /* copy input buffer to decoder context to avoid reading past the end |
||
1276 | of the buffer, which can be caused by a damaged input stream. */ |
||
1277 | if (buf_size >= 2 && AV_RB16(buf) == 0x770B) { |
||
1278 | // seems to be byte-swapped AC-3 |
||
1279 | int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1; |
||
1280 | s->dsp.bswap16_buf((uint16_t *)s->input_buffer, (const uint16_t *)buf, cnt); |
||
1281 | } else |
||
1282 | memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE)); |
||
1283 | buf = s->input_buffer; |
||
1284 | /* initialize the GetBitContext with the start of valid AC-3 Frame */ |
||
1285 | init_get_bits(&s->gbc, buf, buf_size * 8); |
||
1286 | |||
1287 | /* parse the syncinfo */ |
||
1288 | err = parse_frame_header(s); |
||
1289 | |||
1290 | if (err) { |
||
1291 | switch (err) { |
||
1292 | case AAC_AC3_PARSE_ERROR_SYNC: |
||
1293 | av_log(avctx, AV_LOG_ERROR, "frame sync error\n"); |
||
1294 | return AVERROR_INVALIDDATA; |
||
1295 | case AAC_AC3_PARSE_ERROR_BSID: |
||
1296 | av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n"); |
||
1297 | break; |
||
1298 | case AAC_AC3_PARSE_ERROR_SAMPLE_RATE: |
||
1299 | av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n"); |
||
1300 | break; |
||
1301 | case AAC_AC3_PARSE_ERROR_FRAME_SIZE: |
||
1302 | av_log(avctx, AV_LOG_ERROR, "invalid frame size\n"); |
||
1303 | break; |
||
1304 | case AAC_AC3_PARSE_ERROR_FRAME_TYPE: |
||
1305 | /* skip frame if CRC is ok. otherwise use error concealment. */ |
||
1306 | /* TODO: add support for substreams and dependent frames */ |
||
1307 | if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) { |
||
1308 | av_log(avctx, AV_LOG_WARNING, "unsupported frame type : " |
||
1309 | "skipping frame\n"); |
||
1310 | *got_frame_ptr = 0; |
||
1311 | return buf_size; |
||
1312 | } else { |
||
1313 | av_log(avctx, AV_LOG_ERROR, "invalid frame type\n"); |
||
1314 | } |
||
1315 | break; |
||
1316 | case AAC_AC3_PARSE_ERROR_CRC: |
||
1317 | case AAC_AC3_PARSE_ERROR_CHANNEL_CFG: |
||
1318 | break; |
||
1319 | default: // Normal AVERROR do not try to recover. |
||
1320 | *got_frame_ptr = 0; |
||
1321 | return err; |
||
1322 | } |
||
1323 | } else { |
||
1324 | /* check that reported frame size fits in input buffer */ |
||
1325 | if (s->frame_size > buf_size) { |
||
1326 | av_log(avctx, AV_LOG_ERROR, "incomplete frame\n"); |
||
1327 | err = AAC_AC3_PARSE_ERROR_FRAME_SIZE; |
||
1328 | } else if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) { |
||
1329 | /* check for crc mismatch */ |
||
1330 | if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], |
||
1331 | s->frame_size - 2)) { |
||
1332 | av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n"); |
||
1333 | err = AAC_AC3_PARSE_ERROR_CRC; |
||
1334 | } |
||
1335 | } |
||
1336 | } |
||
1337 | |||
1338 | /* if frame is ok, set audio parameters */ |
||
1339 | if (!err) { |
||
1340 | avctx->sample_rate = s->sample_rate; |
||
1341 | avctx->bit_rate = s->bit_rate; |
||
1342 | } |
||
1343 | |||
1344 | /* channel config */ |
||
1345 | if (!err || (s->channels && s->out_channels != s->channels)) { |
||
1346 | s->out_channels = s->channels; |
||
1347 | s->output_mode = s->channel_mode; |
||
1348 | if (s->lfe_on) |
||
1349 | s->output_mode |= AC3_OUTPUT_LFEON; |
||
1350 | if (avctx->request_channels > 0 && avctx->request_channels <= 2 && |
||
1351 | avctx->request_channels < s->channels) { |
||
1352 | s->out_channels = avctx->request_channels; |
||
1353 | s->output_mode = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO; |
||
1354 | s->channel_layout = avpriv_ac3_channel_layout_tab[s->output_mode]; |
||
1355 | } |
||
1356 | avctx->channels = s->out_channels; |
||
1357 | avctx->channel_layout = s->channel_layout; |
||
1358 | |||
1359 | s->loro_center_mix_level = gain_levels[s-> center_mix_level]; |
||
1360 | s->loro_surround_mix_level = gain_levels[s->surround_mix_level]; |
||
1361 | s->ltrt_center_mix_level = LEVEL_MINUS_3DB; |
||
1362 | s->ltrt_surround_mix_level = LEVEL_MINUS_3DB; |
||
1363 | /* set downmixing coefficients if needed */ |
||
1364 | if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) && |
||
1365 | s->fbw_channels == s->out_channels)) { |
||
1366 | set_downmix_coeffs(s); |
||
1367 | } |
||
1368 | } else if (!s->channels) { |
||
1369 | av_log(avctx, AV_LOG_ERROR, "unable to determine channel mode\n"); |
||
1370 | return AVERROR_INVALIDDATA; |
||
1371 | } |
||
1372 | avctx->channels = s->out_channels; |
||
1373 | |||
1374 | /* set audio service type based on bitstream mode for AC-3 */ |
||
1375 | avctx->audio_service_type = s->bitstream_mode; |
||
1376 | if (s->bitstream_mode == 0x7 && s->channels > 1) |
||
1377 | avctx->audio_service_type = AV_AUDIO_SERVICE_TYPE_KARAOKE; |
||
1378 | |||
1379 | /* get output buffer */ |
||
1380 | frame->nb_samples = s->num_blocks * AC3_BLOCK_SIZE; |
||
1381 | if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) |
||
1382 | return ret; |
||
1383 | |||
1384 | /* decode the audio blocks */ |
||
1385 | channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on]; |
||
1386 | for (ch = 0; ch < AC3_MAX_CHANNELS; ch++) { |
||
1387 | output[ch] = s->output[ch]; |
||
1388 | s->outptr[ch] = s->output[ch]; |
||
1389 | } |
||
1390 | for (ch = 0; ch < s->channels; ch++) { |
||
1391 | if (ch < s->out_channels) |
||
1392 | s->outptr[channel_map[ch]] = (float *)frame->data[ch]; |
||
1393 | } |
||
1394 | for (blk = 0; blk < s->num_blocks; blk++) { |
||
1395 | if (!err && decode_audio_block(s, blk)) { |
||
1396 | av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n"); |
||
1397 | err = 1; |
||
1398 | } |
||
1399 | if (err) |
||
1400 | for (ch = 0; ch < s->out_channels; ch++) |
||
1401 | memcpy(((float*)frame->data[ch]) + AC3_BLOCK_SIZE*blk, output[ch], sizeof(**output) * AC3_BLOCK_SIZE); |
||
1402 | for (ch = 0; ch < s->out_channels; ch++) |
||
1403 | output[ch] = s->outptr[channel_map[ch]]; |
||
1404 | for (ch = 0; ch < s->out_channels; ch++) { |
||
1405 | if (!ch || channel_map[ch]) |
||
1406 | s->outptr[channel_map[ch]] += AC3_BLOCK_SIZE; |
||
1407 | } |
||
1408 | } |
||
1409 | |||
1410 | av_frame_set_decode_error_flags(frame, err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0); |
||
1411 | |||
1412 | /* keep last block for error concealment in next frame */ |
||
1413 | for (ch = 0; ch < s->out_channels; ch++) |
||
1414 | memcpy(s->output[ch], output[ch], sizeof(**output) * AC3_BLOCK_SIZE); |
||
1415 | |||
1416 | *got_frame_ptr = 1; |
||
1417 | |||
1418 | return FFMIN(buf_size, s->frame_size); |
||
1419 | } |
||
1420 | |||
1421 | /** |
||
1422 | * Uninitialize the AC-3 decoder. |
||
1423 | */ |
||
1424 | static av_cold int ac3_decode_end(AVCodecContext *avctx) |
||
1425 | { |
||
1426 | AC3DecodeContext *s = avctx->priv_data; |
||
1427 | ff_mdct_end(&s->imdct_512); |
||
1428 | ff_mdct_end(&s->imdct_256); |
||
1429 | |||
1430 | return 0; |
||
1431 | } |
||
1432 | |||
1433 | #define OFFSET(x) offsetof(AC3DecodeContext, x) |
||
1434 | #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM) |
||
1435 | static const AVOption options[] = { |
||
1436 | { "drc_scale", "percentage of dynamic range compression to apply", OFFSET(drc_scale), AV_OPT_TYPE_FLOAT, {.dbl = 1.0}, 0.0, 1.0, PAR }, |
||
1437 | |||
1438 | {"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 2, 0, "dmix_mode"}, |
||
1439 | {"ltrt_cmixlev", "Lt/Rt Center Mix Level", OFFSET(ltrt_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, |
||
1440 | {"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, |
||
1441 | {"loro_cmixlev", "Lo/Ro Center Mix Level", OFFSET(loro_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, |
||
1442 | {"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, |
||
1443 | |||
1444 | { NULL}, |
||
1445 | }; |
||
1446 | |||
1447 | static const AVClass ac3_decoder_class = { |
||
1448 | .class_name = "AC3 decoder", |
||
1449 | .item_name = av_default_item_name, |
||
1450 | .option = options, |
||
1451 | .version = LIBAVUTIL_VERSION_INT, |
||
1452 | }; |
||
1453 | |||
1454 | AVCodec ff_ac3_decoder = { |
||
1455 | .name = "ac3", |
||
1456 | .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"), |
||
1457 | .type = AVMEDIA_TYPE_AUDIO, |
||
1458 | .id = AV_CODEC_ID_AC3, |
||
1459 | .priv_data_size = sizeof (AC3DecodeContext), |
||
1460 | .init = ac3_decode_init, |
||
1461 | .close = ac3_decode_end, |
||
1462 | .decode = ac3_decode_frame, |
||
1463 | .capabilities = CODEC_CAP_DR1, |
||
1464 | .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, |
||
1465 | AV_SAMPLE_FMT_NONE }, |
||
1466 | .priv_class = &ac3_decoder_class, |
||
1467 | }; |
||
1468 | |||
1469 | #if CONFIG_EAC3_DECODER |
||
1470 | static const AVClass eac3_decoder_class = { |
||
1471 | .class_name = "E-AC3 decoder", |
||
1472 | .item_name = av_default_item_name, |
||
1473 | .option = options, |
||
1474 | .version = LIBAVUTIL_VERSION_INT, |
||
1475 | }; |
||
1476 | |||
1477 | AVCodec ff_eac3_decoder = { |
||
1478 | .name = "eac3", |
||
1479 | .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52B (AC-3, E-AC-3)"), |
||
1480 | .type = AVMEDIA_TYPE_AUDIO, |
||
1481 | .id = AV_CODEC_ID_EAC3, |
||
1482 | .priv_data_size = sizeof (AC3DecodeContext), |
||
1483 | .init = ac3_decode_init, |
||
1484 | .close = ac3_decode_end, |
||
1485 | .decode = ac3_decode_frame, |
||
1486 | .capabilities = CODEC_CAP_DR1, |
||
1487 | .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, |
||
1488 | AV_SAMPLE_FMT_NONE }, |
||
1489 | .priv_class = &eac3_decoder_class, |
||
1490 | }; |
||
1491 | #endif>>>>>>>>>>=>=>=>=>>=>=>=>=>><>=>><>=>><>=>><>><>=>=>>=>=>>><>><>>=>=>=>>><>=><=>=><=>>=>=>=>=>=>>>>>>=>>>>=>>>=>=><=>>>><>>><>=>>>>>>>>=>>=>>><>>>>>>>><> |