FFmpeg
Loading...
Searching...
No Matches
ac3dec.c
Go to the documentation of this file.
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 <bartek.wolowiec@gmail.com>
8 * Copyright (c) 2007 Justin Ruggles <justin.ruggles@gmail.com>
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 "config_components.h"
28
29#include <stdio.h>
30#include <stddef.h>
31#include <math.h>
32#include <string.h>
33
36#include "libavutil/crc.h"
38#include "libavutil/intmath.h"
39#include "libavutil/mem.h"
40#include "libavutil/opt.h"
41#include "libavutil/thread.h"
42#include "bswapdsp.h"
43#include "ac3_parser_internal.h"
44#include "ac3dec.h"
45#include "ac3dec_data.h"
46#include "ac3defs.h"
47#include "decode.h"
48#include "kbdwin.h"
49
50#if (!USE_FIXED)
51/** dynamic range table. converts codes to scale factors. */
52static float dynamic_range_tab[256];
54
55/*
56 * Initialize tables at runtime.
57 */
59{
60 /* generate dynamic range table
61 reference: Section 7.7.1 Dynamic Range Control */
62 for (int i = 0; i < 256; i++) {
63 int v = (i >> 5) - ((i >> 7) << 3) - 5;
64 dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
65 }
66
67 /* generate compr dynamic range table
68 reference: Section 7.7.2 Heavy Compression */
69 for (int i = 0; i < 256; i++) {
70 int v = (i >> 4) - ((i >> 7) << 4) - 4;
71 ff_ac3_heavy_dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0xF) | 0x10);
72 }
74}
75#endif
76
77static void ac3_downmix(AVCodecContext *avctx)
78{
79 AC3DecodeContext *s = avctx->priv_data;
82
83 /* allow downmixing to stereo or mono */
84 if (avctx->ch_layout.nb_channels > 1 &&
85 !av_channel_layout_compare(&s->downmix_layout, &mono)) {
88 } else if (avctx->ch_layout.nb_channels > 2 &&
89 !av_channel_layout_compare(&s->downmix_layout, &stereo)) {
92 }
93}
94
95/**
96 * AVCodec initialization
97 */
99{
100 AC3DecodeContext *s = avctx->priv_data;
101 const float scale = 1.0f;
102 int i, ret;
103
104 s->avctx = avctx;
105
106 if ((ret = av_tx_init(&s->tx_128, &s->tx_fn_128, IMDCT_TYPE, 1, 128, &scale, 0)))
107 return ret;
108
109 if ((ret = av_tx_init(&s->tx_256, &s->tx_fn_256, IMDCT_TYPE, 1, 256, &scale, 0)))
110 return ret;
111
112 AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
113 ff_bswapdsp_init(&s->bdsp);
114
115#if (USE_FIXED)
117#else
118 ff_fmt_convert_init(&s->fmt_conv);
120#endif
121 if (!s->fdsp)
122 return AVERROR(ENOMEM);
123
124 ff_ac3dsp_init(&s->ac3dsp);
125 av_lfg_init(&s->dith_state, 0);
126
127 if (USE_FIXED)
129 else
131
132 ac3_downmix(avctx);
133 s->downmixed = 1;
134
135 for (i = 0; i < AC3_MAX_CHANNELS; i++) {
136 s->xcfptr[i] = s->transform_coeffs[i];
137 s->dlyptr[i] = s->delay[i];
138 }
139
140#if USE_FIXED
142#else
143 static AVOnce init_static_once = AV_ONCE_INIT;
144 ff_thread_once(&init_static_once, ac3_float_tables_init);
145#endif
146
147 return 0;
148}
149
151{
152 AC3DecodeContext *s = avctx->priv_data;
153
154 memset(&s->frame_type, 0, sizeof(*s) - offsetof(AC3DecodeContext, frame_type));
155
156 AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
157 av_lfg_init(&s->dith_state, 0);
158}
159
160/**
161 * Common function to parse AC-3 or E-AC-3 frame header
162 */
163static int parse_frame_header(AC3DecodeContext *s)
164{
165 AC3HeaderInfo hdr;
166 int err;
167
168 err = ff_ac3_parse_header(&s->gbc, &hdr);
169 if (err)
170 return err;
171
172 /* get decoding parameters from header info */
173 s->bit_alloc_params.sr_code = hdr.sr_code;
174 s->bitstream_id = hdr.bitstream_id;
175 s->bitstream_mode = hdr.bitstream_mode;
176 s->channel_mode = hdr.channel_mode;
177 s->lfe_on = hdr.lfe_on;
178 s->bit_alloc_params.sr_shift = hdr.sr_shift;
179 s->sample_rate = hdr.sample_rate;
180 s->bit_rate = hdr.bit_rate;
181 s->channels = hdr.channels;
182 s->fbw_channels = s->channels - s->lfe_on;
183 s->lfe_ch = s->fbw_channels + 1;
184 s->frame_size = hdr.frame_size;
185 s->superframe_size += hdr.frame_size;
186 s->preferred_downmix = AC3_DMIXMOD_NOTINDICATED;
187 if (hdr.bitstream_id <= 10) {
188 s->center_mix_level = hdr.center_mix_level;
189 s->surround_mix_level = hdr.surround_mix_level;
190 }
191 s->center_mix_level_ltrt = 4; // -3.0dB
192 s->surround_mix_level_ltrt = 4; // -3.0dB
193 s->lfe_mix_level_exists = 0;
194 s->num_blocks = hdr.num_blocks;
195 s->frame_type = hdr.frame_type;
196 s->substreamid = hdr.substreamid;
197 s->dolby_surround_mode = hdr.dolby_surround_mode;
198 s->dolby_surround_ex_mode = AC3_DSUREXMOD_NOTINDICATED;
199 s->dolby_headphone_mode = AC3_DHEADPHONMOD_NOTINDICATED;
200
201 if (s->lfe_on) {
202 s->start_freq[s->lfe_ch] = 0;
203 s->end_freq[s->lfe_ch] = 7;
204 s->num_exp_groups[s->lfe_ch] = 2;
205 s->channel_in_cpl[s->lfe_ch] = 0;
206 }
207
208 if (s->bitstream_id <= 10) {
209 s->eac3 = 0;
210 s->snr_offset_strategy = 2;
211 s->block_switch_syntax = 1;
212 s->dither_flag_syntax = 1;
213 s->bit_allocation_syntax = 1;
214 s->fast_gain_syntax = 0;
215 s->first_cpl_leak = 0;
216 s->dba_syntax = 1;
217 s->skip_syntax = 1;
218 memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
219 /* volume control params */
220 for (int i = 0; i < (s->channel_mode ? 1 : 2); i++) {
221 s->dialog_normalization[i] = hdr.dialog_normalization[i];
222 if (s->dialog_normalization[i] == 0) {
223 s->dialog_normalization[i] = -31;
224 }
225 if (s->target_level != 0) {
226 s->level_gain[i] = powf(2.0f,
227 (float)(s->target_level - s->dialog_normalization[i])/6.0f);
228 }
229 s->compression_exists[i] = hdr.compression_exists[i];
230 if (s->compression_exists[i]) {
231 s->heavy_dynamic_range[i] = AC3_HEAVY_RANGE(hdr.heavy_dynamic_range[i]);
232 }
233 }
234 return 0;
235 } else if (CONFIG_EAC3_DECODER) {
236 s->eac3 = 1;
237 return ff_eac3_parse_header(s, &hdr);
238 } else {
239 av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
240 return AVERROR(ENOSYS);
241 }
242}
243
244/**
245 * Set stereo downmixing coefficients based on frame header info.
246 * reference: Section 7.8.2 Downmixing Into Two Channels
247 */
248static int set_downmix_coeffs(AC3DecodeContext *s)
249{
250 int i;
251 float cmix = ff_ac3_gain_levels[s-> center_mix_level];
252 float smix = ff_ac3_gain_levels[s->surround_mix_level];
253 float norm0, norm1;
254 float downmix_coeffs[2][AC3_MAX_CHANNELS];
255
256 if (!s->downmix_coeffs[0]) {
257 s->downmix_coeffs[0] = av_malloc_array(2 * AC3_MAX_CHANNELS,
258 sizeof(**s->downmix_coeffs));
259 if (!s->downmix_coeffs[0])
260 return AVERROR(ENOMEM);
261 s->downmix_coeffs[1] = s->downmix_coeffs[0] + AC3_MAX_CHANNELS;
262 }
263
264 for (i = 0; i < s->fbw_channels; i++) {
265 downmix_coeffs[0][i] = ff_ac3_gain_levels[ff_ac3_default_coeffs[s->channel_mode][i][0]];
266 downmix_coeffs[1][i] = ff_ac3_gain_levels[ff_ac3_default_coeffs[s->channel_mode][i][1]];
267 }
268 if (s->channel_mode > 1 && s->channel_mode & 1) {
269 downmix_coeffs[0][1] = downmix_coeffs[1][1] = cmix;
270 }
271 if (s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
272 int nf = s->channel_mode - 2;
273 downmix_coeffs[0][nf] = downmix_coeffs[1][nf] = smix * LEVEL_MINUS_3DB;
274 }
275 if (s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
276 int nf = s->channel_mode - 4;
277 downmix_coeffs[0][nf] = downmix_coeffs[1][nf+1] = smix;
278 }
279
280 /* renormalize */
281 norm0 = norm1 = 0.0;
282 for (i = 0; i < s->fbw_channels; i++) {
283 norm0 += downmix_coeffs[0][i];
284 norm1 += downmix_coeffs[1][i];
285 }
286 norm0 = 1.0f / norm0;
287 norm1 = 1.0f / norm1;
288 for (i = 0; i < s->fbw_channels; i++) {
289 downmix_coeffs[0][i] *= norm0;
290 downmix_coeffs[1][i] *= norm1;
291 }
292
293 if (s->output_mode == AC3_CHMODE_MONO) {
294 for (i = 0; i < s->fbw_channels; i++)
295 downmix_coeffs[0][i] = (downmix_coeffs[0][i] +
296 downmix_coeffs[1][i]) * LEVEL_MINUS_3DB;
297 }
298 for (i = 0; i < s->fbw_channels; i++) {
299 s->downmix_coeffs[0][i] = FIXR12(downmix_coeffs[0][i]);
300 s->downmix_coeffs[1][i] = FIXR12(downmix_coeffs[1][i]);
301 }
302
303 return 0;
304}
305
306/**
307 * Decode the grouped exponents according to exponent strategy.
308 * reference: Section 7.1.3 Exponent Decoding
309 */
310static int decode_exponents(AC3DecodeContext *s,
311 GetBitContext *gbc, int exp_strategy, int ngrps,
312 uint8_t absexp, int8_t *dexps)
313{
314 int i, j, grp, group_size;
315 int dexp[256];
316 int expacc, prevexp;
317
318 /* unpack groups */
319 group_size = exp_strategy + (exp_strategy == EXP_D45);
320 for (grp = 0, i = 0; grp < ngrps; grp++) {
321 expacc = get_bits(gbc, 7);
322 if (expacc >= 125) {
323 av_log(s->avctx, AV_LOG_ERROR, "expacc %d is out-of-range\n", expacc);
324 return AVERROR_INVALIDDATA;
325 }
326 dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][0];
327 dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][1];
328 dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][2];
329 }
330
331 /* convert to absolute exps and expand groups */
332 prevexp = absexp;
333 for (i = 0, j = 0; i < ngrps * 3; i++) {
334 prevexp += dexp[i] - 2;
335 if (prevexp > 24U) {
336 av_log(s->avctx, AV_LOG_ERROR, "exponent %d is out-of-range\n", prevexp);
337 return AVERROR_INVALIDDATA;
338 }
339 switch (group_size) {
340 case 4: dexps[j++] = prevexp;
341 dexps[j++] = prevexp;
343 case 2: dexps[j++] = prevexp;
345 case 1: dexps[j++] = prevexp;
346 }
347 }
348 return 0;
349}
350
351/**
352 * Generate transform coefficients for each coupled channel in the coupling
353 * range using the coupling coefficients and coupling coordinates.
354 * reference: Section 7.4.3 Coupling Coordinate Format
355 */
356static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
357{
358 int bin, band, ch;
359
360 bin = s->start_freq[CPL_CH];
361 for (band = 0; band < s->num_cpl_bands; band++) {
362 int band_start = bin;
363 int band_end = bin + s->cpl_band_sizes[band];
364 for (ch = 1; ch <= s->fbw_channels; ch++) {
365 if (s->channel_in_cpl[ch]) {
366 int cpl_coord = s->cpl_coords[ch][band] << 5;
367 for (bin = band_start; bin < band_end; bin++) {
368 s->fixed_coeffs[ch][bin] =
369 MULH(s->fixed_coeffs[CPL_CH][bin] * (1 << 4), cpl_coord);
370 }
371 if (ch == 2 && s->phase_flags[band]) {
372 for (bin = band_start; bin < band_end; bin++)
373 s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
374 }
375 }
376 }
377 bin = band_end;
378 }
379}
380
381/**
382 * Grouped mantissas for 3-level 5-level and 11-level quantization
383 */
384typedef struct mant_groups {
385 int b1_mant[2];
386 int b2_mant[2];
388 int b1;
389 int b2;
390 int b4;
392
393static av_always_inline int dequantize_coeff(int mantissa, int exponent,
394 int coeff_bits)
395{
396#if USE_FIXED
397 return (mantissa * (1 << coeff_bits)) >> exponent;
398#else
399 return mantissa >> exponent;
400#endif
401}
402
403#if USE_FIXED
405{
406 int scaled = mantissa * (1 << AC3_FIXED_COEFF_BITS);
407 int round = 1 << (AC3_FIXED_EXPONENT_MAX - 1);
408
409 return (scaled + round - (scaled < 0)) >> AC3_FIXED_EXPONENT_MAX;
410}
411#endif
412
413/**
414 * Decode the transform coefficients for a particular channel
415 * reference: Section 7.3 Quantization and Decoding of Mantissas
416 */
417static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
418{
419 int start_freq = s->start_freq[ch_index];
420 int end_freq = s->end_freq[ch_index];
421 uint8_t *baps = s->bap[ch_index];
422 int8_t *exps = s->dexps[ch_index];
423 int32_t *coeffs = s->fixed_coeffs[ch_index];
424 int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
425#if USE_FIXED
426 int coeff_bits = fixed_coeff_bits(s);
427#else
428 int coeff_bits = 0;
429#endif
430 GetBitContext *gbc = &s->gbc;
431 int freq;
432
433 for (freq = start_freq; freq < end_freq; freq++) {
434 int bap = baps[freq];
435 int mantissa;
436 switch (bap) {
437 case 0:
438 /* random noise with approximate range of -0.707 to 0.707 */
439 if (dither) {
440 mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
441#if USE_FIXED
442 /* At dexp 24 the dither is below half a Q0 step. Keep two
443 * fractional bits so it is not truncated to -1 or 0. */
444 if (coeff_bits && exps[freq] == AC3_FIXED_EXPONENT_MAX) {
445 coeffs[freq] = dequantize_dexp24_dither(mantissa);
446 continue;
447 }
448#endif
449 } else {
450 mantissa = 0;
451 }
452 break;
453 case 1:
454 if (m->b1) {
455 m->b1--;
456 mantissa = m->b1_mant[m->b1];
457 } else {
458 int bits = get_bits(gbc, 5);
459 mantissa = ff_ac3_bap1_mantissas[bits][0];
462 m->b1 = 2;
463 }
464 break;
465 case 2:
466 if (m->b2) {
467 m->b2--;
468 mantissa = m->b2_mant[m->b2];
469 } else {
470 int bits = get_bits(gbc, 7);
471 mantissa = ff_ac3_bap2_mantissas[bits][0];
474 m->b2 = 2;
475 }
476 break;
477 case 3:
478 mantissa = ff_ac3_bap3_mantissas[get_bits(gbc, 3)];
479 break;
480 case 4:
481 if (m->b4) {
482 m->b4 = 0;
483 mantissa = m->b4_mant;
484 } else {
485 int bits = get_bits(gbc, 7);
486 mantissa = ff_ac3_bap4_mantissas[bits][0];
488 m->b4 = 1;
489 }
490 break;
491 case 5:
492 mantissa = ff_ac3_bap5_mantissas[get_bits(gbc, 4)];
493 break;
494 default: /* 6 to 15 */
495 /* Shift mantissa and sign-extend it. */
496 if (bap > 15) {
497 av_log(s->avctx, AV_LOG_ERROR, "bap %d is invalid in plain AC-3\n", bap);
498 bap = 15;
499 }
500 mantissa = (unsigned)get_sbits(gbc, ff_ac3_quantization_tab[bap]) << (24 - ff_ac3_quantization_tab[bap]);
501 break;
502 }
503 coeffs[freq] = dequantize_coeff(mantissa, exps[freq], coeff_bits);
504 }
505}
506
507/**
508 * Remove random dithering from coupling range coefficients with zero-bit
509 * mantissas for coupled channels which do not use dithering.
510 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
511 */
512static void remove_dithering(AC3DecodeContext *s) {
513 int ch, i;
514
515 for (ch = 1; ch <= s->fbw_channels; ch++) {
516 if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
517 for (i = s->start_freq[CPL_CH]; i < s->end_freq[CPL_CH]; i++) {
518 if (!s->bap[CPL_CH][i])
519 s->fixed_coeffs[ch][i] = 0;
520 }
521 }
522 }
523}
524
525static inline void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk,
526 int ch, mant_groups *m)
527{
528 if (!s->channel_uses_aht[ch]) {
530 } else {
531 /* if AHT is used, mantissas for all blocks are encoded in the first
532 block of the frame. */
533 int bin;
534 if (CONFIG_EAC3_DECODER && !blk)
536 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
537 s->fixed_coeffs[ch][bin] = dequantize_coeff(
538 s->pre_mantissa[ch][bin][blk], s->dexps[ch][bin], 0);
539 }
540 }
541}
542
543/**
544 * Decode the transform coefficients.
545 */
546static inline void decode_transform_coeffs(AC3DecodeContext *s, int blk)
547{
548 int ch, end;
549 int got_cplchan = 0;
550 mant_groups m;
551
552 m.b1 = m.b2 = m.b4 = 0;
553
554 for (ch = 1; ch <= s->channels; ch++) {
555 /* transform coefficients for full-bandwidth channel */
557 /* transform coefficients for coupling channel come right after the
558 coefficients for the first coupled channel*/
559 if (s->channel_in_cpl[ch]) {
560 if (!got_cplchan) {
563 got_cplchan = 1;
564 }
565 end = s->end_freq[CPL_CH];
566 } else {
567 end = s->end_freq[ch];
568 }
569 do
570 s->fixed_coeffs[ch][end] = 0;
571 while (++end < 256);
572 }
573
574 /* zero the dithered coefficients for appropriate channels */
576}
577
578/**
579 * Stereo rematrixing.
580 * reference: Section 7.5.4 Rematrixing : Decoding Technique
581 */
582static void do_rematrixing(AC3DecodeContext *s)
583{
584 int bnd, i;
585 int end, bndend;
586
587 end = FFMIN(s->end_freq[1], s->end_freq[2]);
588
589 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
590 if (s->rematrixing_flags[bnd]) {
591 bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd + 1]);
592 for (i = ff_ac3_rematrix_band_tab[bnd]; i < bndend; i++) {
593 int tmp0 = s->fixed_coeffs[1][i];
594 s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
595 s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
596 }
597 }
598 }
599}
600
601/**
602 * Inverse MDCT Transform.
603 * Convert frequency domain coefficients to time-domain audio samples.
604 * reference: Section 7.9.4 Transformation Equations
605 */
606static inline void do_imdct(AC3DecodeContext *s, int channels, int offset)
607{
608 int ch;
609#if USE_FIXED
610 int window_bits = 8 + fixed_coeff_bits(s);
611#endif
612
613 for (ch = 1; ch <= channels; ch++) {
614 if (s->block_switch[ch]) {
615 int i;
616 INTFLOAT *x = s->tmp_output + 128;
617 for (i = 0; i < 128; i++)
618 x[i] = s->transform_coeffs[ch][2 * i];
619 s->tx_fn_128(s->tx_128, s->tmp_output, x, sizeof(INTFLOAT));
620#if USE_FIXED
621 s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
622 s->tmp_output, s->window, 128, window_bits);
623#else
624 s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
625 s->tmp_output, s->window, 128);
626#endif
627 for (i = 0; i < 128; i++)
628 x[i] = s->transform_coeffs[ch][2 * i + 1];
629 s->tx_fn_128(s->tx_128, s->delay[ch - 1 + offset], x, sizeof(INTFLOAT));
630 } else {
631 s->tx_fn_256(s->tx_256, s->tmp_output, s->transform_coeffs[ch], sizeof(INTFLOAT));
632#if USE_FIXED
633 s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
634 s->tmp_output, s->window, 128, window_bits);
635#else
636 s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
637 s->tmp_output, s->window, 128);
638#endif
639 memcpy(s->delay[ch - 1 + offset], s->tmp_output + 128, 128 * sizeof(INTFLOAT));
640 }
641 }
642}
643
644/**
645 * Upmix delay samples from stereo to original channel layout.
646 */
647static void ac3_upmix_delay(AC3DecodeContext *s)
648{
649 int channel_data_size = sizeof(s->delay[0]);
650 switch (s->channel_mode) {
653 /* upmix mono to stereo */
654 memcpy(s->delay[1], s->delay[0], channel_data_size);
655 break;
656 case AC3_CHMODE_2F2R:
657 memset(s->delay[3], 0, channel_data_size);
659 case AC3_CHMODE_2F1R:
660 memset(s->delay[2], 0, channel_data_size);
661 break;
662 case AC3_CHMODE_3F2R:
663 memset(s->delay[4], 0, channel_data_size);
665 case AC3_CHMODE_3F1R:
666 memset(s->delay[3], 0, channel_data_size);
668 case AC3_CHMODE_3F:
669 memcpy(s->delay[2], s->delay[1], channel_data_size);
670 memset(s->delay[1], 0, channel_data_size);
671 break;
672 }
673}
674
675/**
676 * Decode band structure for coupling, spectral extension, or enhanced coupling.
677 * The band structure defines how many subbands are in each band. For each
678 * subband in the range, 1 means it is combined with the previous band, and 0
679 * means that it starts a new band.
680 *
681 * @param[in] gbc bit reader context
682 * @param[in] blk block number
683 * @param[in] eac3 flag to indicate E-AC-3
684 * @param[in] ecpl flag to indicate enhanced coupling
685 * @param[in] start_subband subband number for start of range
686 * @param[in] end_subband subband number for end of range
687 * @param[in] default_band_struct default band structure table
688 * @param[out] num_bands number of bands (optionally NULL)
689 * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
690 * @param[in,out] band_struct current band structure
691 */
692static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
693 int ecpl, int start_subband, int end_subband,
694 const uint8_t *default_band_struct,
695 int *num_bands, uint8_t *band_sizes,
696 uint8_t *band_struct, int band_struct_size)
697{
698 int subbnd, bnd, n_subbands, n_bands=0;
699 uint8_t bnd_sz[22];
700
701 n_subbands = end_subband - start_subband;
702
703 if (!blk)
704 memcpy(band_struct, default_band_struct, band_struct_size);
705
706 av_assert0(band_struct_size >= start_subband + n_subbands);
707
708 band_struct += start_subband + 1;
709
710 /* decode band structure from bitstream or use default */
711 if (!eac3 || get_bits1(gbc)) {
712 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
713 band_struct[subbnd] = get_bits1(gbc);
714 }
715 }
716
717 /* calculate number of bands and band sizes based on band structure.
718 note that the first 4 subbands in enhanced coupling span only 6 bins
719 instead of 12. */
720 if (num_bands || band_sizes ) {
721 n_bands = n_subbands;
722 bnd_sz[0] = ecpl ? 6 : 12;
723 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
724 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
725 if (band_struct[subbnd - 1]) {
726 n_bands--;
727 bnd_sz[bnd] += subbnd_size;
728 } else {
729 bnd_sz[++bnd] = subbnd_size;
730 }
731 }
732 }
733
734 /* set optional output params */
735 if (num_bands)
736 *num_bands = n_bands;
737 if (band_sizes)
738 memcpy(band_sizes, bnd_sz, n_bands);
739}
740
741static inline int spx_strategy(AC3DecodeContext *s, int blk)
742{
743 GetBitContext *bc = &s->gbc;
744 int dst_start_freq, dst_end_freq, src_start_freq,
745 start_subband, end_subband;
746
747 /* determine which channels use spx */
748 if (s->channel_mode == AC3_CHMODE_MONO) {
749 s->channel_uses_spx[1] = 1;
750 } else {
751 unsigned channel_uses_spx = get_bits(bc, s->fbw_channels);
752 for (int ch = s->fbw_channels; ch >= 1; --ch) {
753 s->channel_uses_spx[ch] = channel_uses_spx & 1;
754 channel_uses_spx >>= 1;
755 }
756 }
757
758 /* get the frequency bins of the spx copy region and the spx start
759 and end subbands */
760 dst_start_freq = get_bits(bc, 2);
761 start_subband = get_bits(bc, 3) + 2;
762 if (start_subband > 7)
763 start_subband += start_subband - 7;
764 end_subband = get_bits(bc, 3) + 5;
765#if USE_FIXED
766 s->spx_dst_end_freq = end_freq_inv_tab[end_subband-5];
767#endif
768 if (end_subband > 7)
769 end_subband += end_subband - 7;
770 dst_start_freq = dst_start_freq * 12 + 25;
771 src_start_freq = start_subband * 12 + 25;
772 dst_end_freq = end_subband * 12 + 25;
773
774 /* check validity of spx ranges */
775 if (start_subband >= end_subband) {
776 av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
777 "range (%d >= %d)\n", start_subband, end_subband);
778 return AVERROR_INVALIDDATA;
779 }
780 if (dst_start_freq >= src_start_freq) {
781 av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
782 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
783 return AVERROR_INVALIDDATA;
784 }
785
786 s->spx_dst_start_freq = dst_start_freq;
787 s->spx_src_start_freq = src_start_freq;
788 if (!USE_FIXED)
789 s->spx_dst_end_freq = dst_end_freq;
790
791 decode_band_structure(bc, blk, s->eac3, 0,
792 start_subband, end_subband,
794 &s->num_spx_bands,
795 s->spx_band_sizes,
796 s->spx_band_struct, sizeof(s->spx_band_struct));
797 return 0;
798}
799
800static inline void spx_coordinates(AC3DecodeContext *s)
801{
802 GetBitContext *bc = &s->gbc;
803 int fbw_channels = s->fbw_channels;
804 int ch, bnd;
805
806 for (ch = 1; ch <= fbw_channels; ch++) {
807 if (s->channel_uses_spx[ch]) {
808 if (s->first_spx_coords[ch] || get_bits1(bc)) {
809 INTFLOAT spx_blend;
810 int bin, master_spx_coord;
811
812 s->first_spx_coords[ch] = 0;
813 spx_blend = AC3_SPX_BLEND(get_bits(bc, 5));
814 master_spx_coord = get_bits(bc, 2) * 3;
815
816 bin = s->spx_src_start_freq;
817 for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
818 int bandsize = s->spx_band_sizes[bnd];
819 int spx_coord_exp, spx_coord_mant;
820 INTFLOAT nratio, sblend, nblend;
821#if USE_FIXED
822 /* calculate blending factors */
823 int64_t accu = ((bin << 23) + (bandsize << 22))
824 * (int64_t)s->spx_dst_end_freq;
825 nratio = (int)(accu >> 32);
826 nratio -= spx_blend << 18;
827
828 if (nratio < 0) {
829 nblend = 0;
830 sblend = 0x800000;
831 } else if (nratio > 0x7fffff) {
832 nblend = 14529495; // sqrt(3) in FP.23
833 sblend = 0;
834 } else {
835 nblend = fixed_sqrt(nratio, 23);
836 accu = (int64_t)nblend * 1859775393;
837 nblend = (int)((accu + (1<<29)) >> 30);
838 sblend = fixed_sqrt(0x800000 - nratio, 23);
839 }
840#else
841 float spx_coord;
842
843 /* calculate blending factors */
844 nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
845 nratio = av_clipf(nratio, 0.0f, 1.0f);
846 nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3)
847 // to give unity variance
848 sblend = sqrtf(1.0f - nratio);
849#endif
850 bin += bandsize;
851
852 /* decode spx coordinates */
853 spx_coord_exp = get_bits(bc, 4);
854 spx_coord_mant = get_bits(bc, 2);
855 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
856 else spx_coord_mant += 4;
857 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
858
859 /* multiply noise and signal blending factors by spx coordinate */
860#if USE_FIXED
861 accu = (int64_t)nblend * spx_coord_mant;
862 s->spx_noise_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
863 accu = (int64_t)sblend * spx_coord_mant;
864 s->spx_signal_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
865#else
866 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
867 s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
868 s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
869#endif
870 }
871 }
872 } else {
873 s->first_spx_coords[ch] = 1;
874 }
875 }
876}
877
878static inline int coupling_strategy(AC3DecodeContext *s, int blk,
879 uint8_t *bit_alloc_stages)
880{
881 GetBitContext *bc = &s->gbc;
882 int fbw_channels = s->fbw_channels;
883 int channel_mode = s->channel_mode;
884 int ch;
885
886 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
887 if (!s->eac3)
888 s->cpl_in_use[blk] = get_bits1(bc);
889 if (s->cpl_in_use[blk]) {
890 /* coupling in use */
891 int cpl_start_subband, cpl_end_subband;
892
893 if (channel_mode < AC3_CHMODE_STEREO) {
894 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
895 return AVERROR_INVALIDDATA;
896 }
897
898 /* check for enhanced coupling */
899 if (s->eac3 && get_bits1(bc)) {
900 /* TODO: parse enhanced coupling strategy info */
901 avpriv_request_sample(s->avctx, "Enhanced coupling");
903 }
904
905 /* determine which channels are coupled */
906 if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
907 s->channel_in_cpl[1] = 1;
908 s->channel_in_cpl[2] = 1;
909 } else {
910 for (ch = 1; ch <= fbw_channels; ch++)
911 s->channel_in_cpl[ch] = get_bits1(bc);
912 }
913
914 /* phase flags in use */
915 if (channel_mode == AC3_CHMODE_STEREO)
916 s->phase_flags_in_use = get_bits1(bc);
917
918 /* coupling frequency range */
919 cpl_start_subband = get_bits(bc, 4);
920 cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
921 get_bits(bc, 4) + 3;
922 if (cpl_start_subband >= cpl_end_subband) {
923 av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
924 cpl_start_subband, cpl_end_subband);
925 return AVERROR_INVALIDDATA;
926 }
927 s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
928 s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
929
930 decode_band_structure(bc, blk, s->eac3, 0, cpl_start_subband,
931 cpl_end_subband,
933 &s->num_cpl_bands, s->cpl_band_sizes,
934 s->cpl_band_struct, sizeof(s->cpl_band_struct));
935 } else {
936 /* coupling not in use */
937 for (ch = 1; ch <= fbw_channels; ch++) {
938 s->channel_in_cpl[ch] = 0;
939 s->first_cpl_coords[ch] = 1;
940 }
941 s->first_cpl_leak = s->eac3;
942 s->phase_flags_in_use = 0;
943 }
944
945 return 0;
946}
947
948static inline int coupling_coordinates(AC3DecodeContext *s, int blk)
949{
950 GetBitContext *bc = &s->gbc;
951 int fbw_channels = s->fbw_channels;
952 int ch, bnd;
953 int cpl_coords_exist = 0;
954
955 for (ch = 1; ch <= fbw_channels; ch++) {
956 if (s->channel_in_cpl[ch]) {
957 if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(bc)) {
958 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
959 s->first_cpl_coords[ch] = 0;
960 cpl_coords_exist = 1;
961 master_cpl_coord = 3 * get_bits(bc, 2);
962 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
963 cpl_coord_exp = get_bits(bc, 4);
964 cpl_coord_mant = get_bits(bc, 4);
965 if (cpl_coord_exp == 15)
966 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
967 else
968 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
969 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
970 }
971 } else if (!blk) {
972 av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must "
973 "be present in block 0\n");
974 return AVERROR_INVALIDDATA;
975 }
976 } else {
977 /* channel not in coupling */
978 s->first_cpl_coords[ch] = 1;
979 }
980 }
981 /* phase flags */
982 if (s->channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
983 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
984 s->phase_flags[bnd] = s->phase_flags_in_use ? get_bits1(bc) : 0;
985 }
986 }
987
988 return 0;
989}
990
991/**
992 * Decode a single audio block from the AC-3 bitstream.
993 */
994static int decode_audio_block(AC3DecodeContext *s, int blk, int offset)
995{
996 int fbw_channels = s->fbw_channels;
997 int channel_mode = s->channel_mode;
998 int i, bnd, seg, ch, ret;
999 int different_transforms;
1000 int downmix_output;
1001 int cpl_in_use;
1002 GetBitContext *gbc = &s->gbc;
1003 uint8_t bit_alloc_stages[AC3_MAX_CHANNELS] = { 0 };
1004
1005 /* block switch flags */
1006 different_transforms = 0;
1007 if (s->block_switch_syntax) {
1008 for (ch = 1; ch <= fbw_channels; ch++) {
1009 s->block_switch[ch] = get_bits1(gbc);
1010 if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
1011 different_transforms = 1;
1012 }
1013 }
1014
1015 /* dithering flags */
1016 if (s->dither_flag_syntax) {
1017 for (ch = 1; ch <= fbw_channels; ch++) {
1018 s->dither_flag[ch] = get_bits1(gbc);
1019 }
1020 }
1021
1022 /* dynamic range */
1023 i = !s->channel_mode;
1024 do {
1025 if (get_bits1(gbc)) {
1026 /* Allow asymmetric application of DRC when drc_scale > 1.
1027 Amplification of quiet sounds is enhanced */
1028 int range_bits = get_bits(gbc, 8);
1029 INTFLOAT range = AC3_RANGE(range_bits);
1030 if (range_bits <= 127 || s->drc_scale <= 1.0)
1031 s->dynamic_range[i] = AC3_DYNAMIC_RANGE(range);
1032 else
1033 s->dynamic_range[i] = range;
1034 } else if (blk == 0) {
1035 s->dynamic_range[i] = AC3_DYNAMIC_RANGE1;
1036 }
1037 } while (i--);
1038
1039 /* spectral extension strategy */
1040 if (s->eac3 && (!blk || get_bits1(gbc))) {
1041 s->spx_in_use = get_bits1(gbc);
1042 if (s->spx_in_use) {
1043 if ((ret = spx_strategy(s, blk)) < 0)
1044 return ret;
1045 }
1046 }
1047 if (!s->eac3 || !s->spx_in_use) {
1048 s->spx_in_use = 0;
1049 for (ch = 1; ch <= fbw_channels; ch++) {
1050 s->channel_uses_spx[ch] = 0;
1051 s->first_spx_coords[ch] = 1;
1052 }
1053 }
1054
1055 /* spectral extension coordinates */
1056 if (s->spx_in_use)
1058
1059 /* coupling strategy */
1060 if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
1061 if ((ret = coupling_strategy(s, blk, bit_alloc_stages)) < 0)
1062 return ret;
1063 } else if (!s->eac3) {
1064 if (!blk) {
1065 av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must "
1066 "be present in block 0\n");
1067 return AVERROR_INVALIDDATA;
1068 } else {
1069 s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
1070 }
1071 }
1072 cpl_in_use = s->cpl_in_use[blk];
1073
1074 /* coupling coordinates */
1075 if (cpl_in_use) {
1076 if ((ret = coupling_coordinates(s, blk)) < 0)
1077 return ret;
1078 }
1079
1080 /* stereo rematrixing strategy and band structure */
1081 if (channel_mode == AC3_CHMODE_STEREO) {
1082 if ((s->eac3 && !blk) || get_bits1(gbc)) {
1083 s->num_rematrixing_bands = 4;
1084 if (cpl_in_use && s->start_freq[CPL_CH] <= 61) {
1085 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
1086 } else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1087 s->num_rematrixing_bands--;
1088 }
1089 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1090 s->rematrixing_flags[bnd] = get_bits1(gbc);
1091 } else if (!blk) {
1092 av_log(s->avctx, AV_LOG_WARNING, "Warning: "
1093 "new rematrixing strategy not present in block 0\n");
1094 s->num_rematrixing_bands = 0;
1095 }
1096 }
1097
1098 /* exponent strategies for each channel */
1099 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1100 if (!s->eac3)
1101 s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
1102 if (s->exp_strategy[blk][ch] != EXP_REUSE)
1103 bit_alloc_stages[ch] = 3;
1104 }
1105
1106 /* channel bandwidth */
1107 for (ch = 1; ch <= fbw_channels; ch++) {
1108 s->start_freq[ch] = 0;
1109 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1110 int group_size;
1111 int prev = s->end_freq[ch];
1112 if (s->channel_in_cpl[ch])
1113 s->end_freq[ch] = s->start_freq[CPL_CH];
1114 else if (s->channel_uses_spx[ch])
1115 s->end_freq[ch] = s->spx_src_start_freq;
1116 else {
1117 int bandwidth_code = get_bits(gbc, 6);
1118 if (bandwidth_code > 60) {
1119 av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
1120 return AVERROR_INVALIDDATA;
1121 }
1122 s->end_freq[ch] = bandwidth_code * 3 + 73;
1123 }
1124 group_size = 3 << (s->exp_strategy[blk][ch] - 1);
1125 s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1126 if (blk > 0 && s->end_freq[ch] != prev)
1127 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
1128 }
1129 }
1130 if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
1131 s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
1132 (3 << (s->exp_strategy[blk][CPL_CH] - 1));
1133 }
1134
1135 /* decode exponents for each channel */
1136 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1137 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1138 s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
1139 if (decode_exponents(s, gbc, s->exp_strategy[blk][ch],
1140 s->num_exp_groups[ch], s->dexps[ch][0],
1141 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1142 return AVERROR_INVALIDDATA;
1143 }
1144 if (ch != CPL_CH && ch != s->lfe_ch)
1145 skip_bits(gbc, 2); /* skip gainrng */
1146 }
1147 }
1148
1149 /* bit allocation information */
1150 if (s->bit_allocation_syntax) {
1151 if (get_bits1(gbc)) {
1152 s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1153 s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1154 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
1155 s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
1156 s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
1157 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1158 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1159 } else if (!blk) {
1160 av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must "
1161 "be present in block 0\n");
1162 return AVERROR_INVALIDDATA;
1163 }
1164 }
1165
1166 /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
1167 if (!s->eac3 || !blk) {
1168 if (s->snr_offset_strategy && get_bits1(gbc)) {
1169 int snr = 0;
1170 int csnr;
1171 csnr = (get_bits(gbc, 6) - 15) << 4;
1172 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1173 /* snr offset */
1174 if (ch == i || s->snr_offset_strategy == 2)
1175 snr = (csnr + get_bits(gbc, 4)) << 2;
1176 /* run at least last bit allocation stage if snr offset changes */
1177 if (blk && s->snr_offset[ch] != snr) {
1178 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
1179 }
1180 s->snr_offset[ch] = snr;
1181
1182 /* fast gain (normal AC-3 only) */
1183 if (!s->eac3) {
1184 int prev = s->fast_gain[ch];
1185 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1186 /* run last 2 bit allocation stages if fast gain changes */
1187 if (blk && prev != s->fast_gain[ch])
1188 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1189 }
1190 }
1191 } else if (!s->eac3 && !blk) {
1192 av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
1193 return AVERROR_INVALIDDATA;
1194 }
1195 }
1196
1197 /* fast gain (E-AC-3 only) */
1198 if (s->fast_gain_syntax && get_bits1(gbc)) {
1199 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1200 int prev = s->fast_gain[ch];
1201 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1202 /* run last 2 bit allocation stages if fast gain changes */
1203 if (blk && prev != s->fast_gain[ch])
1204 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1205 }
1206 } else if (s->eac3 && !blk) {
1207 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1208 s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
1209 }
1210
1211 /* E-AC-3 to AC-3 converter SNR offset */
1212 if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
1213 skip_bits(gbc, 10); // skip converter snr offset
1214 }
1215
1216 /* coupling leak information */
1217 if (cpl_in_use) {
1218 if (s->first_cpl_leak || get_bits1(gbc)) {
1219 int fl = get_bits(gbc, 3);
1220 int sl = get_bits(gbc, 3);
1221 /* run last 2 bit allocation stages for coupling channel if
1222 coupling leak changes */
1223 if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1224 sl != s->bit_alloc_params.cpl_slow_leak)) {
1225 bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
1226 }
1227 s->bit_alloc_params.cpl_fast_leak = fl;
1228 s->bit_alloc_params.cpl_slow_leak = sl;
1229 } else if (!s->eac3 && !blk) {
1230 av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must "
1231 "be present in block 0\n");
1232 return AVERROR_INVALIDDATA;
1233 }
1234 s->first_cpl_leak = 0;
1235 }
1236
1237 /* delta bit allocation information */
1238 if (s->dba_syntax && get_bits1(gbc)) {
1239 /* delta bit allocation exists (strategy) */
1240 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1241 s->dba_mode[ch] = get_bits(gbc, 2);
1242 if (s->dba_mode[ch] == DBA_RESERVED) {
1243 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1244 return AVERROR_INVALIDDATA;
1245 }
1246 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1247 }
1248 /* channel delta offset, len and bit allocation */
1249 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1250 if (s->dba_mode[ch] == DBA_NEW) {
1251 s->dba_nsegs[ch] = get_bits(gbc, 3) + 1;
1252 for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1253 s->dba_offsets[ch][seg] = get_bits(gbc, 5);
1254 s->dba_lengths[ch][seg] = get_bits(gbc, 4);
1255 s->dba_values[ch][seg] = get_bits(gbc, 3);
1256 }
1257 /* run last 2 bit allocation stages if new dba values */
1258 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1259 }
1260 }
1261 } else if (blk == 0) {
1262 for (ch = 0; ch <= s->channels; ch++) {
1263 s->dba_mode[ch] = DBA_NONE;
1264 }
1265 }
1266
1267 /* Bit allocation */
1268 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1269 if (bit_alloc_stages[ch] > 2) {
1270 /* Exponent mapping into PSD and PSD integration */
1271 ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
1272 s->start_freq[ch], s->end_freq[ch],
1273 s->psd[ch], s->band_psd[ch]);
1274 }
1275 if (bit_alloc_stages[ch] > 1) {
1276 /* Compute excitation function, Compute masking curve, and
1277 Apply delta bit allocation */
1278 if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1279 s->start_freq[ch], s->end_freq[ch],
1280 s->fast_gain[ch], (ch == s->lfe_ch),
1281 s->dba_mode[ch], s->dba_nsegs[ch],
1282 s->dba_offsets[ch], s->dba_lengths[ch],
1283 s->dba_values[ch], s->mask[ch])) {
1284 av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
1285 return AVERROR_INVALIDDATA;
1286 }
1287 }
1288 if (bit_alloc_stages[ch] > 0) {
1289 /* Compute bit allocation */
1290 const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1292 s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1293 s->start_freq[ch], s->end_freq[ch],
1294 s->snr_offset[ch],
1295 s->bit_alloc_params.floor,
1296 bap_tab, s->bap[ch]);
1297 }
1298 }
1299
1300 /* unused dummy data */
1301 if (s->skip_syntax && get_bits1(gbc)) {
1302 int skipl = get_bits(gbc, 9);
1303 skip_bits_long(gbc, 8 * skipl);
1304 }
1305
1306 /* unpack the transform coefficients
1307 this also uncouples channels if coupling is in use. */
1309
1310 /* TODO: generate enhanced coupling coordinates and uncouple */
1311
1312 /* recover coefficients if rematrixing is in use */
1313 if (s->channel_mode == AC3_CHMODE_STEREO)
1315
1316 /* apply scaling to coefficients (headroom, dynrng) */
1317 for (ch = 1; ch <= s->channels; ch++) {
1318 int audio_channel = 0;
1319 INTFLOAT gain;
1320 if (s->channel_mode == AC3_CHMODE_DUALMONO && ch <= 2)
1321 audio_channel = 2-ch;
1322 if (s->heavy_compression && s->compression_exists[audio_channel])
1323 gain = s->heavy_dynamic_range[audio_channel];
1324 else
1325 gain = s->dynamic_range[audio_channel];
1326
1327#if USE_FIXED
1328 if (fixed_coeff_bits(s))
1329 scale_coefs_q2(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain,
1330 256);
1331 else
1332 scale_coefs(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256);
1333#else
1334 if (s->target_level != 0)
1335 gain = gain * s->level_gain[audio_channel];
1336 gain *= 1.0 / 4194304.0f;
1337 s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1338 s->fixed_coeffs[ch], gain, 256);
1339#endif
1340 }
1341
1342 /* apply spectral extension to high frequency bins */
1343 if (CONFIG_EAC3_DECODER && s->spx_in_use) {
1345 }
1346
1347 /* downmix and MDCT. order depends on whether block switching is used for
1348 any channel in this block. this is because coefficients for the long
1349 and short transforms cannot be mixed. */
1350 downmix_output = s->channels != s->out_channels &&
1351 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1352 s->fbw_channels == s->out_channels);
1353 if (different_transforms) {
1354 /* the delay samples have already been downmixed, so we upmix the delay
1355 samples in order to reconstruct all channels before downmixing. */
1356 if (s->downmixed) {
1357 s->downmixed = 0;
1359 }
1360
1361 do_imdct(s, s->channels, offset);
1362
1363 if (downmix_output) {
1364#if USE_FIXED
1365 ac3_downmix_c_fixed16(s->outptr, s->downmix_coeffs,
1366 s->out_channels, s->fbw_channels, 256);
1367#else
1368 ff_ac3dsp_downmix(&s->ac3dsp, s->outptr, s->downmix_coeffs,
1369 s->out_channels, s->fbw_channels, 256);
1370#endif
1371 }
1372 } else {
1373 if (downmix_output) {
1374 AC3_RENAME(ff_ac3dsp_downmix)(&s->ac3dsp, s->xcfptr + 1, s->downmix_coeffs,
1375 s->out_channels, s->fbw_channels, 256);
1376 }
1377
1378 if (downmix_output && !s->downmixed) {
1379 s->downmixed = 1;
1380 AC3_RENAME(ff_ac3dsp_downmix)(&s->ac3dsp, s->dlyptr, s->downmix_coeffs,
1381 s->out_channels, s->fbw_channels, 128);
1382 }
1383
1384 do_imdct(s, s->out_channels, offset);
1385 }
1386
1387 return 0;
1388}
1389
1390/**
1391 * Decode a single AC-3 frame.
1392 */
1394 int *got_frame_ptr, AVPacket *avpkt)
1395{
1396 const uint8_t *buf = avpkt->data;
1397 int buf_size, full_buf_size = avpkt->size;
1398 AC3DecodeContext *s = avctx->priv_data;
1399 int blk, ch, err, offset, ret;
1400 int i;
1401#if USE_FIXED
1402 int previous_coeff_bits;
1403#endif
1404 int skip = 0, got_independent_frame = 0;
1405 const uint8_t *channel_map;
1406 uint8_t extended_channel_map[EAC3_MAX_CHANNELS];
1407 const SHORTFLOAT *output[AC3_MAX_CHANNELS];
1408 enum AVMatrixEncoding matrix_encoding;
1409 uint64_t mask;
1410
1411 s->superframe_size = 0;
1412
1413 buf_size = full_buf_size;
1414 i = ff_ac3_find_syncword(buf, buf_size);
1415 if (i < 0 || i > 10)
1416 return i;
1417 buf += i;
1418 buf_size -= i;
1419
1420 /* copy input buffer to decoder context to avoid reading past the end
1421 of the buffer, which can be caused by a damaged input stream. */
1422 if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
1423 // seems to be byte-swapped AC-3
1424 int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1425 s->bdsp.bswap16_buf((uint16_t *) s->input_buffer,
1426 (const uint16_t *) buf, cnt);
1427 } else
1428 memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1429
1430 /* if consistent noise generation is enabled, seed the linear feedback generator
1431 * with the contents of the AC-3 frame so that the noise is identical across
1432 * decodes given the same AC-3 frame data, for use with non-linear edititing software. */
1433 if (s->consistent_noise_generation)
1434 av_lfg_init_from_data(&s->dith_state, s->input_buffer, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1435
1436 buf = s->input_buffer;
1437dependent_frame:
1438#if USE_FIXED
1439 previous_coeff_bits = fixed_coeff_bits(s);
1440#endif
1441 /* initialize the GetBitContext with the start of valid AC-3 Frame */
1442 if ((ret = init_get_bits8(&s->gbc, buf, buf_size)) < 0)
1443 return ret;
1444
1445 /* parse the syncinfo */
1446 err = parse_frame_header(s);
1447
1448#if USE_FIXED
1449 /* Do not mix Q0 and Q2 overlap samples if a malformed or explicitly
1450 * forced stream switches between E-AC-3 and AC-3. */
1451 if (!err && previous_coeff_bits != fixed_coeff_bits(s))
1452 memset(s->delay, 0, sizeof(s->delay));
1453#endif
1454
1455 if (err) {
1456 switch (err) {
1458 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1459 return AVERROR_INVALIDDATA;
1461 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1462 break;
1464 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1465 break;
1467 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1468 break;
1470 /* skip frame if CRC is ok. otherwise use error concealment. */
1471 /* TODO: add support for substreams */
1472 if (s->substreamid) {
1473 av_log(avctx, AV_LOG_DEBUG,
1474 "unsupported substream %d: skipping frame\n",
1475 s->substreamid);
1476 *got_frame_ptr = 0;
1477 return buf_size;
1478 } else {
1479 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1480 }
1481 break;
1483 av_log(avctx, AV_LOG_ERROR, "invalid channel map\n");
1484 return AVERROR_INVALIDDATA;
1486 break;
1487 default: // Normal AVERROR do not try to recover.
1488 *got_frame_ptr = 0;
1489 return err;
1490 }
1491 } else {
1492 /* check that reported frame size fits in input buffer */
1493 if (s->frame_size > buf_size) {
1494 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1496 } else if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) {
1497 /* check for crc mismatch */
1498 if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2],
1499 s->frame_size - 2)) {
1500 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1501 if (avctx->err_recognition & AV_EF_EXPLODE)
1502 return AVERROR_INVALIDDATA;
1503 err = AC3_PARSE_ERROR_CRC;
1504 }
1505 }
1506 }
1507
1508 if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT && !got_independent_frame) {
1509 av_log(avctx, AV_LOG_WARNING, "Ignoring dependent frame without independent frame.\n");
1510 *got_frame_ptr = 0;
1511 return FFMIN(full_buf_size, s->frame_size);
1512 }
1513
1514 /* channel config */
1515 if (!err || (s->channels && s->out_channels != s->channels)) {
1516 s->out_channels = s->channels;
1517 s->output_mode = s->channel_mode;
1518 if (s->lfe_on)
1519 s->output_mode |= AC3_OUTPUT_LFEON;
1520 if (s->channels > 1 &&
1522 s->out_channels = 1;
1523 s->output_mode = AC3_CHMODE_MONO;
1524 } else if (s->channels > 2 &&
1526 s->out_channels = 2;
1527 s->output_mode = AC3_CHMODE_STEREO;
1528 }
1529
1530 s->loro_center_mix_level = ff_ac3_gain_levels[s-> center_mix_level];
1531 s->loro_surround_mix_level = ff_ac3_gain_levels[s->surround_mix_level];
1532 s->ltrt_center_mix_level = ff_ac3_gain_levels[s-> center_mix_level_ltrt];
1533 s->ltrt_surround_mix_level = ff_ac3_gain_levels[s->surround_mix_level_ltrt];
1534 switch (s->preferred_downmix) {
1535 case AC3_DMIXMOD_LTRT:
1536 s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_LTRT;
1537 break;
1538 case AC3_DMIXMOD_LORO:
1539 s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_LORO;
1540 break;
1541 case AC3_DMIXMOD_DPLII:
1542 s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_DPLII;
1543 break;
1544 default:
1545 s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_UNKNOWN;
1546 break;
1547 }
1548 /* set downmixing coefficients if needed */
1549 if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1550 s->fbw_channels == s->out_channels)) {
1551 if ((ret = set_downmix_coeffs(s)) < 0) {
1552 av_log(avctx, AV_LOG_ERROR, "error setting downmix coeffs\n");
1553 return ret;
1554 }
1555 }
1556 } else if (!s->channels) {
1557 av_log(avctx, AV_LOG_ERROR, "unable to determine channel mode\n");
1558 return AVERROR_INVALIDDATA;
1559 }
1560
1561 mask = ff_ac3_channel_layout_tab[s->output_mode & ~AC3_OUTPUT_LFEON];
1562 if (s->output_mode & AC3_OUTPUT_LFEON)
1564
1567
1568 /* set audio service type based on bitstream mode for AC-3 */
1569 avctx->audio_service_type = s->bitstream_mode;
1570 if (s->bitstream_mode == 0x7 && s->channels > 1)
1572
1573 /* decode the audio blocks */
1574 channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
1575 offset = s->frame_type == EAC3_FRAME_TYPE_DEPENDENT ? AC3_MAX_CHANNELS : 0;
1576 for (ch = 0; ch < AC3_MAX_CHANNELS; ch++) {
1577 output[ch] = s->output[ch + offset];
1578 s->outptr[ch] = s->output[ch + offset];
1579 }
1580 for (ch = 0; ch < s->channels; ch++) {
1581 if (ch < s->out_channels)
1582 s->outptr[channel_map[ch]] = s->output_buffer[ch + offset];
1583 }
1584 for (blk = 0; blk < s->num_blocks; blk++) {
1585 if (!err && decode_audio_block(s, blk, offset)) {
1586 av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
1587 err = 1;
1588 }
1589 if (err)
1590 for (ch = 0; ch < s->out_channels; ch++)
1591 memcpy(s->output_buffer[ch + offset] + AC3_BLOCK_SIZE*blk, output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1592 for (ch = 0; ch < s->out_channels; ch++)
1593 output[ch] = s->outptr[channel_map[ch]];
1594 for (ch = 0; ch < s->out_channels; ch++) {
1595 if (!ch || channel_map[ch])
1596 s->outptr[channel_map[ch]] += AC3_BLOCK_SIZE;
1597 }
1598 }
1599
1600 /* keep last block for error concealment in next frame */
1601 for (ch = 0; ch < s->out_channels; ch++)
1602 memcpy(s->output[ch + offset], output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1603
1604 /* check if there is dependent frame */
1605 if (buf_size > s->frame_size) {
1606 AC3HeaderInfo hdr;
1607 int err;
1608
1609 if (buf_size - s->frame_size <= 16) {
1610 skip = buf_size - s->frame_size;
1611 goto skip;
1612 }
1613
1614 if ((ret = init_get_bits8(&s->gbc, buf + s->frame_size, buf_size - s->frame_size)) < 0)
1615 return ret;
1616
1617 err = ff_ac3_parse_header(&s->gbc, &hdr);
1618 if (err)
1619 return err;
1620
1622 if (hdr.num_blocks != s->num_blocks || s->sample_rate != hdr.sample_rate) {
1623 av_log(avctx, AV_LOG_WARNING, "Ignoring non-compatible dependent frame.\n");
1624 } else {
1625 buf += s->frame_size;
1626 buf_size -= s->frame_size;
1627 s->prev_output_mode = s->output_mode;
1628 s->prev_bit_rate = s->bit_rate;
1629 got_independent_frame = 1;
1630 goto dependent_frame;
1631 }
1632 }
1633 }
1634skip:
1635
1636 frame->decode_error_flags = err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0;
1637
1638 /* if frame is ok, set audio parameters */
1639 if (!err) {
1640 avctx->sample_rate = s->sample_rate;
1641 avctx->bit_rate = s->bit_rate + s->prev_bit_rate;
1642 avctx->profile = s->eac3_extension_type_a == 1 ? AV_PROFILE_EAC3_DDP_ATMOS : AV_PROFILE_UNKNOWN;
1643 }
1644
1645 if (!avctx->sample_rate) {
1646 av_log(avctx, AV_LOG_ERROR, "Could not determine the sample rate\n");
1647 return AVERROR_INVALIDDATA;
1648 }
1649
1650 for (ch = 0; ch < EAC3_MAX_CHANNELS; ch++)
1651 extended_channel_map[ch] = ch;
1652
1653 if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
1654 uint64_t ich_layout = ff_ac3_channel_layout_tab[s->prev_output_mode & ~AC3_OUTPUT_LFEON];
1655 int channel_map_size = ff_ac3_channels_tab[s->output_mode & ~AC3_OUTPUT_LFEON] + s->lfe_on;
1656 uint64_t channel_layout;
1657 int extend = 0;
1658
1659 if (s->prev_output_mode & AC3_OUTPUT_LFEON)
1660 ich_layout |= AV_CH_LOW_FREQUENCY;
1661
1662 channel_layout = ich_layout;
1663 for (ch = 0; ch < 16; ch++) {
1664 if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1665 channel_layout |= ff_eac3_custom_channel_map_locations[ch][1];
1666 }
1667 }
1668 if (av_popcount64(channel_layout) > EAC3_MAX_CHANNELS) {
1669 av_log(avctx, AV_LOG_ERROR, "Too many channels (%d) coded\n",
1670 av_popcount64(channel_layout));
1671 return AVERROR_INVALIDDATA;
1672 }
1673
1675 av_channel_layout_from_mask(&avctx->ch_layout, channel_layout);
1676
1677 for (ch = 0; ch < EAC3_MAX_CHANNELS; ch++) {
1678 if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1682 if (index < 0)
1683 return AVERROR_INVALIDDATA;
1684 if (extend >= channel_map_size)
1685 break;
1686
1687 extended_channel_map[index] = offset + channel_map[extend++];
1688 } else {
1689 int i;
1690
1691 for (i = 0; i < 64; i++) {
1692 if ((1ULL << i) & ff_eac3_custom_channel_map_locations[ch][1]) {
1694 if (index < 0)
1695 return AVERROR_INVALIDDATA;
1696 if (extend >= channel_map_size)
1697 break;
1698
1699 extended_channel_map[index] = offset + channel_map[extend++];
1700 }
1701 }
1702 }
1703 }
1704 }
1705
1706 ac3_downmix(avctx);
1707 }
1708
1709 /* get output buffer */
1710 frame->nb_samples = s->num_blocks * AC3_BLOCK_SIZE;
1711 if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1712 return ret;
1713
1714 for (ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
1715 int map = extended_channel_map[ch];
1716 av_assert0(ch>=AV_NUM_DATA_POINTERS || frame->extended_data[ch] == frame->data[ch]);
1717 memcpy((SHORTFLOAT *)frame->extended_data[ch],
1718 s->output_buffer[map],
1719 s->num_blocks * AC3_BLOCK_SIZE * sizeof(SHORTFLOAT));
1720 }
1721
1722 /*
1723 * AVMatrixEncoding
1724 *
1725 * Check whether the input layout is compatible, and make sure we're not
1726 * downmixing (else the matrix encoding is no longer applicable).
1727 */
1728 matrix_encoding = AV_MATRIX_ENCODING_NONE;
1729 if (s->channel_mode == AC3_CHMODE_STEREO &&
1730 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1731 if (s->dolby_surround_mode == AC3_DSURMOD_ON)
1732 matrix_encoding = AV_MATRIX_ENCODING_DOLBY;
1733 else if (s->dolby_headphone_mode == AC3_DHEADPHONMOD_ON)
1734 matrix_encoding = AV_MATRIX_ENCODING_DOLBYHEADPHONE;
1735 } else if (s->channel_mode >= AC3_CHMODE_2F2R &&
1736 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1737 switch (s->dolby_surround_ex_mode) {
1738 case AC3_DSUREXMOD_ON: // EX or PLIIx
1739 matrix_encoding = AV_MATRIX_ENCODING_DOLBYEX;
1740 break;
1742 matrix_encoding = AV_MATRIX_ENCODING_DPLIIZ;
1743 break;
1744 default: // not indicated or off
1745 break;
1746 }
1747 }
1748 if (matrix_encoding != AV_MATRIX_ENCODING_NONE &&
1749 (ret = ff_side_data_update_matrix_encoding(frame, matrix_encoding)) < 0)
1750 return ret;
1751
1752 /* AVDownmixInfo */
1753 if ( (s->channel_mode > AC3_CHMODE_STEREO) &&
1754 ((s->output_mode & ~AC3_OUTPUT_LFEON) > AC3_CHMODE_STEREO)) {
1756 if (!downmix_info)
1757 return AVERROR(ENOMEM);
1758 switch (s->preferred_downmix) {
1759 case AC3_DMIXMOD_LTRT:
1761 break;
1762 case AC3_DMIXMOD_LORO:
1764 break;
1765 case AC3_DMIXMOD_DPLII:
1767 break;
1768 default:
1770 break;
1771 }
1772 downmix_info->center_mix_level = ff_ac3_gain_levels[s-> center_mix_level];
1773 downmix_info->center_mix_level_ltrt = ff_ac3_gain_levels[s-> center_mix_level_ltrt];
1774 downmix_info->surround_mix_level = ff_ac3_gain_levels[s-> surround_mix_level];
1775 downmix_info->surround_mix_level_ltrt = ff_ac3_gain_levels[s->surround_mix_level_ltrt];
1776 if (s->lfe_mix_level_exists)
1777 downmix_info->lfe_mix_level = ff_eac3_gain_levels_lfe[s->lfe_mix_level];
1778 else
1779 downmix_info->lfe_mix_level = 0.0; // -inf dB
1780 }
1781
1782 *got_frame_ptr = 1;
1783
1784 if (!s->superframe_size)
1785 return FFMIN(full_buf_size, s->frame_size + skip);
1786
1787 return FFMIN(full_buf_size, s->superframe_size + skip);
1788}
1789
1790/**
1791 * Uninitialize the AC-3 decoder.
1792 */
1794{
1795 AC3DecodeContext *s = avctx->priv_data;
1796 av_tx_uninit(&s->tx_256);
1797 av_tx_uninit(&s->tx_128);
1798 av_freep(&s->fdsp);
1799 av_freep(&s->downmix_coeffs[0]);
1800
1801 return 0;
1802}
1803
1804#define OFFSET(x) offsetof(AC3DecodeContext, x)
1805#define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
float SHORTFLOAT
int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd, int start, int end, int fast_gain, int is_lfe, int dba_mode, int dba_nsegs, uint8_t *dba_offsets, uint8_t *dba_lengths, uint8_t *dba_values, int16_t *mask)
Calculate the masking curve.
Definition ac3.c:201
void ff_ac3_bit_alloc_calc_psd(int8_t *exp, int start, int end, int16_t *psd, int16_t *band_psd)
Calculate the log power-spectral density of the input signal.
Definition ac3.c:175
#define AC3_RENAME(x)
Definition ac3.h:67
#define AC3_SPX_BLEND(x)
Definition ac3.h:73
#define AC3_RANGE(x)
Definition ac3.h:70
#define FIXR12(x)
Definition ac3.h:63
#define AC3_DYNAMIC_RANGE(x)
Definition ac3.h:72
#define AC3_DYNAMIC_RANGE1
Definition ac3.h:74
#define AC3_HEAVY_RANGE(x)
Definition ac3.h:71
const uint16_t ff_ac3_channel_layout_tab[8]
Map audio coding mode (acmod) to channel layout mask.
int ff_ac3_find_syncword(const uint8_t *buf, int buf_size)
@ AC3_PARSE_ERROR_CRC
@ AC3_PARSE_ERROR_FRAME_TYPE
@ AC3_PARSE_ERROR_SAMPLE_RATE
@ AC3_PARSE_ERROR_BSID
@ AC3_PARSE_ERROR_CHANNEL_MAP
@ AC3_PARSE_ERROR_SYNC
@ AC3_PARSE_ERROR_FRAME_SIZE
int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
Parse AC-3 frame header.
uint8_t ff_ac3_ungroup_3_in_7_bits_tab[128][3]
table for ungrouping 3 values in 7 bits.
Definition ac3dec_data.c:50
const uint8_t ff_ac3_quantization_tab[16]
Quantization table: levels for symmetric.
const uint8_t ff_eac3_default_spx_band_struct[17]
Table E2.15 Default Spectral Extension Banding Structure.
int ff_ac3_bap1_mantissas[32][3]
tables for ungrouping mantissas
Definition ac3dec_data.c:94
const uint8_t ff_ac3_default_coeffs[8][5][2]
Table for default stereo downmixing coefficients reference: Section 7.8.2 Downmixing Into Two Channel...
int ff_ac3_bap4_mantissas[128][2]
Definition ac3dec_data.c:96
const int ff_ac3_bap3_mantissas[7+1]
Ungrouped mantissa tables; the extra entry is padding to avoid range checks.
Definition ac3dec_data.c:64
av_cold void ff_ac3_init_static(void)
const float ff_eac3_gain_levels_lfe[32]
Adjustments in dB gain (LFE, +10 to -21 dB)
const uint8_t ff_eac3_hebap_tab[64]
const int ff_ac3_bap5_mantissas[15+1]
Table 7.23.
Definition ac3dec_data.c:76
int ff_ac3_bap2_mantissas[128][3]
Definition ac3dec_data.c:95
#define AC3_FIXED_EXPONENT_MAX
#define AC3_FIXED_COEFF_BITS
static void ac3_downmix_c_fixed16(int16_t **samples, int16_t **matrix, int out_ch, int in_ch, int len)
Downmix samples from original signal to stereo or mono (this is for 16-bit samples and fixed point de...
#define IMDCT_TYPE
static void scale_coefs_q2(int32_t *dst, const int32_t *src, int dynrng, int len)
static const int end_freq_inv_tab[8]
static av_always_inline int fixed_coeff_bits(const AC3DecodeContext *s)
static void scale_coefs(int32_t *dst, const int32_t *src, int dynrng, int len)
#define EXP_REUSE
Definition ac3defs.h:51
#define EXP_D45
Definition ac3defs.h:56
@ AC3_DHEADPHONMOD_NOTINDICATED
Definition ac3defs.h:96
@ AC3_DHEADPHONMOD_ON
Definition ac3defs.h:98
#define CPL_CH
coupling channel index
Definition ac3defs.h:27
#define EAC3_MAX_CHANNELS
maximum number of channels in EAC3
Definition ac3defs.h:25
#define AC3_MAX_CHANNELS
maximum number of channels, including coupling channel
Definition ac3defs.h:26
#define LEVEL_MINUS_3DB
Definition ac3defs.h:43
@ AC3_DSUREXMOD_ON
Definition ac3defs.h:90
@ AC3_DSUREXMOD_PLIIZ
Definition ac3defs.h:91
@ AC3_DSUREXMOD_NOTINDICATED
Definition ac3defs.h:88
#define AC3_BLOCK_SIZE
Definition ac3defs.h:30
@ AC3_CHMODE_MONO
Definition ac3defs.h:69
@ AC3_CHMODE_STEREO
Definition ac3defs.h:70
@ AC3_CHMODE_2F1R
Definition ac3defs.h:72
@ AC3_CHMODE_DUALMONO
Definition ac3defs.h:68
@ AC3_CHMODE_3F
Definition ac3defs.h:71
@ AC3_CHMODE_3F1R
Definition ac3defs.h:73
@ AC3_CHMODE_2F2R
Definition ac3defs.h:74
@ AC3_CHMODE_3F2R
Definition ac3defs.h:75
@ EAC3_FRAME_TYPE_DEPENDENT
Definition ac3defs.h:112
@ EAC3_FRAME_TYPE_INDEPENDENT
Definition ac3defs.h:111
@ DBA_RESERVED
Definition ac3defs.h:63
@ DBA_NEW
Definition ac3defs.h:61
@ DBA_NONE
Definition ac3defs.h:62
@ AC3_DMIXMOD_DPLII
Definition ac3defs.h:107
@ AC3_DMIXMOD_NOTINDICATED
Definition ac3defs.h:104
@ AC3_DMIXMOD_LTRT
Definition ac3defs.h:105
@ AC3_DMIXMOD_LORO
Definition ac3defs.h:106
@ AC3_DSURMOD_ON
Definition ac3defs.h:82
const uint8_t ff_ac3_rematrix_band_tab[5]
Table of bin locations for rematrixing bands reference: Section 7.5.2 Rematrixing : Frequency Band De...
Definition ac3tab.c:108
const uint8_t ff_ac3_channels_tab[8]
Map audio coding mode (acmod) to number of full-bandwidth channels.
Definition ac3tab.c:81
const uint8_t ff_ac3_dec_channel_map[8][2][6]
Table to remap channels from AC-3 order to SMPTE order.
Definition ac3tab.c:89
const uint8_t ff_ac3_fast_decay_tab[4]
Definition ac3tab.c:131
const uint16_t ff_ac3_fast_gain_tab[8]
Definition ac3tab.c:147
const uint16_t ff_ac3_slow_gain_tab[4]
Definition ac3tab.c:135
const uint8_t ff_eac3_default_cpl_band_struct[18]
Table E2.16 Default Coupling Banding Structure.
Definition ac3tab.c:113
const uint8_t ff_ac3_slow_decay_tab[4]
Definition ac3tab.c:127
const float ff_ac3_gain_levels[9]
Adjustments in dB gain.
Definition ac3tab.c:152
const uint64_t ff_eac3_custom_channel_map_locations[16][2]
Definition ac3tab.c:164
const int16_t ff_ac3_floor_tab[8]
Definition ac3tab.c:143
const uint16_t ff_ac3_db_per_bit_tab[4]
Definition ac3tab.c:139
const uint8_t ff_ac3_bap_tab[64]
Definition ac3tab.c:117
channels
Definition aptx.h:31
static const uint8_t channel_map[8][8]
int32_t
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
static void BS_FUNC skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define s(width, name)
Definition cbs_vp9.c:198
Public libavutil channel layout APIs header.
#define av_popcount64
Definition common.h:157
#define av_clipf
Definition common.h:145
long long int64_t
Definition coverity.c:34
Public header for CRC hash function implementation.
static __device__ float sqrtf(float a)
#define INTFLOAT
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition decode.c:1777
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
Definition utils.c:121
#define AV_EF_CRCCHECK
Verify checksums embedded in the bitstream (could be of either encoded or decoded data,...
Definition defs.h:48
#define AV_PROFILE_UNKNOWN
Definition defs.h:65
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition defs.h:51
#define AV_PROFILE_EAC3_DDP_ATMOS
Definition defs.h:96
#define AV_EF_CAREFUL
consider things that violate the spec, are fast to calculate and have not been seen in the wild as er...
Definition defs.h:54
@ AV_AUDIO_SERVICE_TYPE_KARAOKE
Definition defs.h:244
static AVFrame * frame
static const uint8_t bap_tab[64]
Definition dolby_e.c:599
audio downmix medatata
static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
Definition eac3dec.c:195
static int ff_eac3_parse_header(AC3DecodeContext *s, const AC3HeaderInfo *hdr)
Definition eac3dec.c:288
static void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
Definition eac3dec.c:56
static const uint8_t bits[8]
Definition fastaudio.c:100
static av_always_inline int fixed_sqrt(int x, int bits)
Calculate the square root.
Definition fixed_dsp.h:176
#define FF_DECODE_ERROR_INVALID_BITSTREAM
Definition frame.h:760
#define AV_NUM_DATA_POINTERS
Definition frame.h:473
static int get_sbits(GetBitContext *s, int n)
Definition get_bits.h:322
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition get_bits.h:280
static unsigned int get_bits1(GetBitContext *s)
Definition get_bits.h:391
static void skip_bits(GetBitContext *s, int n)
Definition get_bits.h:383
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition get_bits.h:544
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition get_bits.h:337
AVMatrixEncoding
@ AV_MATRIX_ENCODING_NONE
@ AV_MATRIX_ENCODING_DOLBY
@ AV_MATRIX_ENCODING_DPLIIZ
@ AV_MATRIX_ENCODING_DOLBYEX
@ AV_MATRIX_ENCODING_DOLBYHEADPHONE
#define AV_CH_LOW_FREQUENCY
AVDownmixInfo * av_downmix_info_update_side_data(AVFrame *frame)
Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing.
@ AV_DOWNMIX_TYPE_UNKNOWN
Not indicated.
@ AV_DOWNMIX_TYPE_LTRT
Lt/Rt 2-channel downmix, Dolby Surround compatible.
@ AV_DOWNMIX_TYPE_LORO
Lo/Ro 2-channel downmix (Stereo).
@ AV_DOWNMIX_TYPE_DPLII
Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible.
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition avcodec.h:322
int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, enum AVChannel channel)
Get the index of a given channel in a channel layout.
#define AV_CHANNEL_LAYOUT_STEREO
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
#define AV_CHANNEL_LAYOUT_MONO
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
Definition crc.c:389
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
Definition crc.c:421
@ AV_CRC_16_ANSI
Definition crc.h:50
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition error.h:64
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AVERROR(e)
Definition error.h:45
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
#define ff_ctzll
Definition intmath.h:125
@ AV_SAMPLE_FMT_FLTP
float, planar
Definition samplefmt.h:66
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
Definition samplefmt.h:64
int index
Definition gxfenc.c:90
const VDPAUPixFmtMap * map
static void scale(int *out, const int *in, const int w, const int h, const int shift)
Definition intra.c:278
#define AV_RB16(p)
frame_type
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
Definition kbdwin.c:54
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
Definition lfg.c:32
int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length)
Seed the state of the ALFG using binary data.
Definition lfg.c:64
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
Definition lfg.h:53
unsigned offset
Definition libaomenc.c:763
#define USE_FIXED
Definition aacdec.c:34
float ff_ac3_heavy_dynamic_range_tab[256]
Definition ac3dec.c:53
static int coupling_coordinates(AC3DecodeContext *s, int blk)
Definition ac3dec.c:948
static void remove_dithering(AC3DecodeContext *s)
Remove random dithering from coupling range coefficients with zero-bit mantissas for coupled channels...
Definition ac3dec.c:512
static int decode_audio_block(AC3DecodeContext *s, int blk, int offset)
Decode a single audio block from the AC-3 bitstream.
Definition ac3dec.c:994
static float dynamic_range_tab[256]
dynamic range table.
Definition ac3dec.c:52
static int coupling_strategy(AC3DecodeContext *s, int blk, uint8_t *bit_alloc_stages)
Definition ac3dec.c:878
static int set_downmix_coeffs(AC3DecodeContext *s)
Set stereo downmixing coefficients based on frame header info.
Definition ac3dec.c:248
static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch, mant_groups *m)
Definition ac3dec.c:525
static av_cold void ac3_decode_flush(AVCodecContext *avctx)
Definition ac3dec.c:150
static av_cold int ac3_decode_end(AVCodecContext *avctx)
Uninitialize the AC-3 decoder.
Definition ac3dec.c:1793
static void ac3_upmix_delay(AC3DecodeContext *s)
Upmix delay samples from stereo to original channel layout.
Definition ac3dec.c:647
static av_cold void ac3_float_tables_init(void)
Definition ac3dec.c:58
static void spx_coordinates(AC3DecodeContext *s)
Definition ac3dec.c:800
static av_always_inline int dequantize_coeff(int mantissa, int exponent, int coeff_bits)
Definition ac3dec.c:393
static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
Decode the transform coefficients.
Definition ac3dec.c:546
static int decode_exponents(AC3DecodeContext *s, GetBitContext *gbc, int exp_strategy, int ngrps, uint8_t absexp, int8_t *dexps)
Decode the grouped exponents according to exponent strategy.
Definition ac3dec.c:310
static av_always_inline int dequantize_dexp24_dither(int mantissa)
Definition ac3dec.c:404
static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
Generate transform coefficients for each coupled channel in the coupling range using the coupling coe...
Definition ac3dec.c:356
static void decode_band_structure(GetBitContext *gbc, int blk, int eac3, int ecpl, int start_subband, int end_subband, const uint8_t *default_band_struct, int *num_bands, uint8_t *band_sizes, uint8_t *band_struct, int band_struct_size)
Decode band structure for coupling, spectral extension, or enhanced coupling.
Definition ac3dec.c:692
static int parse_frame_header(AC3DecodeContext *s)
Common function to parse AC-3 or E-AC-3 frame header.
Definition ac3dec.c:163
static int ac3_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Decode a single AC-3 frame.
Definition ac3dec.c:1393
static void do_rematrixing(AC3DecodeContext *s)
Stereo rematrixing.
Definition ac3dec.c:582
static void ac3_downmix(AVCodecContext *avctx)
Definition ac3dec.c:77
static int spx_strategy(AC3DecodeContext *s, int blk)
Definition ac3dec.c:741
static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
Decode the transform coefficients for a particular channel reference: Section 7.3 Quantization and De...
Definition ac3dec.c:417
static void do_imdct(AC3DecodeContext *s, int channels, int offset)
Inverse MDCT Transform.
Definition ac3dec.c:606
static av_cold int ac3_decode_init(AVCodecContext *avctx)
AVCodec initialization.
Definition ac3dec.c:98
void ff_ac3dsp_downmix(AC3DSPContext *c, float **samples, float **matrix, int out_ch, int in_ch, int len)
Definition ac3dsp.c:344
av_cold void ff_ac3dsp_init(AC3DSPContext *c)
Definition ac3dsp.c:377
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
Definition bswapdsp.c:37
av_cold void ff_fmt_convert_init(FmtConvertContext *c)
Definition fmtconvert.c:35
Macro definitions for various function/variable attributes.
#define av_always_inline
Definition attributes.h:72
#define av_fallthrough
Definition attributes.h:67
#define av_cold
Definition attributes.h:117
AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact)
Allocate and initialize a fixed DSP context.
Definition fixed_dsp.c:151
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
Definition float_dsp.c:135
#define AVOnce
Definition thread.h:202
static int ff_thread_once(char *control, void(*routine)(void))
Definition thread.h:205
#define AV_ONCE_INIT
Definition thread.h:203
static av_always_inline av_const double round(double x)
Definition libm.h:446
#define powf(x, y)
Definition libm.h:52
static const uint16_t mask[17]
Definition lzw.c:38
#define FFMIN(a, b)
Definition macros.h:49
#define FFMAX(a, b)
Definition macros.h:47
enum AVColorRange range
Memory handling functions.
AVOptions.
#define MULH
Definition mathops.h:42
#define blk(i)
Definition sha.c:55
Coded AC-3 header values up to the lfeon element, plus derived values.
int8_t dialog_normalization[2]
int center_mix_level
Center mix level index.
uint8_t heavy_dynamic_range[2]
int substreamid
substream identification
uint8_t compression_exists[2]
int num_blocks
number of audio blocks
int surround_mix_level
Surround mix level index.
An AVChannelLayout holds information about the channel layout of audio data.
int nb_channels
Number of channels in this layout.
main external API structure.
Definition avcodec.h:443
AVChannelLayout ch_layout
Audio channel layout.
Definition avcodec.h:1055
enum AVSampleFormat sample_fmt
audio sample format
Definition avcodec.h:1047
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
Definition avcodec.h:1089
int64_t bit_rate
the average bitrate
Definition avcodec.h:493
int profile
profile
Definition avcodec.h:1636
int sample_rate
samples per second
Definition avcodec.h:1040
int flags
AV_CODEC_FLAG_*.
Definition avcodec.h:500
void * priv_data
Definition avcodec.h:470
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition avcodec.h:1416
This structure describes optional metadata relevant to a downmix procedure.
double lfe_mix_level
Absolute scale factor representing the level at which the LFE data is mixed into L/R channels during ...
double surround_mix_level_ltrt
Absolute scale factor representing the nominal level of the surround channels during an Lt/Rt compati...
double surround_mix_level
Absolute scale factor representing the nominal level of the surround channels during a regular downmi...
double center_mix_level
Absolute scale factor representing the nominal level of the center channel during a regular downmix.
enum AVDownmixType preferred_downmix_type
Type of downmix preferred by the mastering engineer.
double center_mix_level_ltrt
Absolute scale factor representing the nominal level of the center channel during an Lt/Rt compatible...
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
This structure stores compressed data.
Definition packet.h:580
int size
Definition packet.h:604
uint8_t * data
Definition packet.h:603
Grouped mantissas for 3-level 5-level and 11-level quantization.
Definition ac3dec.c:384
int b2_mant[2]
Definition ac3dec.c:386
int b4_mant
Definition ac3dec.c:387
int b1_mant[2]
Definition ac3dec.c:385
#define av_malloc_array(a, b)
#define avpriv_request_sample(...)
#define av_freep(p)
#define av_log(a,...)
av_cold void av_tx_uninit(AVTXContext **ctx)
Frees a context and sets *ctx to NULL, does nothing when *ctx == NULL.
Definition tx.c:295
av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, int inv, int len, const void *scale, uint64_t flags)
Initialize a transform context with the given configuration (i)MDCTs with an odd length are currently...
Definition tx.c:903
static const uint16_t dither[8][8]
Definition vf_gradfun.c:46