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.
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>
10 * This file is part of Libav.
12 * Libav 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.
17 * Libav 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.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with Libav; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
32 #include "libavutil/channel_layout.h"
33 #include "libavutil/crc.h"
34 #include "libavutil/downmix_info.h"
35 #include "libavutil/opt.h"
37 #include "aac_ac3_parser.h"
38 #include "ac3_parser.h"
40 #include "ac3dec_data.h"
44 * table for ungrouping 3 values in 7 bits.
45 * used for exponents and bap=2 mantissas
47 static uint8_t ungroup_3_in_7_bits_tab[128][3];
49 /** tables for ungrouping mantissas */
50 static int b1_mantissas[32][3];
51 static int b2_mantissas[128][3];
52 static int b3_mantissas[8];
53 static int b4_mantissas[128][2];
54 static int b5_mantissas[16];
57 * Quantization table: levels for symmetric. bits for asymmetric.
58 * reference: Table 7.18 Mapping of bap to Quantizer
60 static const uint8_t quantization_tab[16] = {
62 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
65 /** dynamic range table. converts codes to scale factors. */
66 static float dynamic_range_tab[256];
68 /** Adjustments in dB gain */
69 static const float gain_levels[9] = {
73 LEVEL_MINUS_1POINT5DB,
75 LEVEL_MINUS_4POINT5DB,
81 /** Adjustments in dB gain (LFE, +10 to -21 dB) */
82 static const float gain_levels_lfe[32] = {
83 3.162275, 2.818382, 2.511886, 2.238719, 1.995261, 1.778278, 1.584893,
84 1.412536, 1.258924, 1.122018, 1.000000, 0.891251, 0.794328, 0.707946,
85 0.630957, 0.562341, 0.501187, 0.446683, 0.398107, 0.354813, 0.316227,
86 0.281838, 0.251188, 0.223872, 0.199526, 0.177828, 0.158489, 0.141253,
87 0.125892, 0.112201, 0.100000, 0.089125
91 * Table for default stereo downmixing coefficients
92 * reference: Section 7.8.2 Downmixing Into Two Channels
94 static const uint8_t ac3_default_coeffs[8][5][2] = {
95 { { 2, 7 }, { 7, 2 }, },
97 { { 2, 7 }, { 7, 2 }, },
98 { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
99 { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
100 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
101 { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
102 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
106 * Symmetrical Dequantization
107 * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
108 * Tables 7.19 to 7.23
111 symmetric_dequant(int code, int levels)
113 return ((code - (levels >> 1)) << 24) / levels;
117 * Initialize tables at runtime.
119 static av_cold void ac3_tables_init(void)
123 /* generate table for ungrouping 3 values in 7 bits
124 reference: Section 7.1.3 Exponent Decoding */
125 for (i = 0; i < 128; i++) {
126 ungroup_3_in_7_bits_tab[i][0] = i / 25;
127 ungroup_3_in_7_bits_tab[i][1] = (i % 25) / 5;
128 ungroup_3_in_7_bits_tab[i][2] = (i % 25) % 5;
131 /* generate grouped mantissa tables
132 reference: Section 7.3.5 Ungrouping of Mantissas */
133 for (i = 0; i < 32; i++) {
134 /* bap=1 mantissas */
135 b1_mantissas[i][0] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][0], 3);
136 b1_mantissas[i][1] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][1], 3);
137 b1_mantissas[i][2] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][2], 3);
139 for (i = 0; i < 128; i++) {
140 /* bap=2 mantissas */
141 b2_mantissas[i][0] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][0], 5);
142 b2_mantissas[i][1] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][1], 5);
143 b2_mantissas[i][2] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][2], 5);
145 /* bap=4 mantissas */
146 b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
147 b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
149 /* generate ungrouped mantissa tables
150 reference: Tables 7.21 and 7.23 */
151 for (i = 0; i < 7; i++) {
152 /* bap=3 mantissas */
153 b3_mantissas[i] = symmetric_dequant(i, 7);
155 for (i = 0; i < 15; i++) {
156 /* bap=5 mantissas */
157 b5_mantissas[i] = symmetric_dequant(i, 15);
160 /* generate dynamic range table
161 reference: Section 7.7.1 Dynamic Range Control */
162 for (i = 0; i < 256; i++) {
163 int v = (i >> 5) - ((i >> 7) << 3) - 5;
164 dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
169 * AVCodec initialization
171 static av_cold int ac3_decode_init(AVCodecContext *avctx)
173 AC3DecodeContext *s = avctx->priv_data;
178 ff_ac3_common_init();
180 ff_mdct_init(&s->imdct_256, 8, 1, 1.0);
181 ff_mdct_init(&s->imdct_512, 9, 1, 1.0);
182 ff_kbd_window_init(s->window, 5.0, 256);
183 ff_dsputil_init(&s->dsp, avctx);
184 avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
185 ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT);
186 ff_fmt_convert_init(&s->fmt_conv, avctx);
187 av_lfg_init(&s->dith_state, 0);
189 avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
191 /* allow downmixing to stereo or mono */
192 #if FF_API_REQUEST_CHANNELS
193 FF_DISABLE_DEPRECATION_WARNINGS
194 if (avctx->request_channels == 1)
195 avctx->request_channel_layout = AV_CH_LAYOUT_MONO;
196 else if (avctx->request_channels == 2)
197 avctx->request_channel_layout = AV_CH_LAYOUT_STEREO;
198 FF_ENABLE_DEPRECATION_WARNINGS
200 if (avctx->channels > 1 &&
201 avctx->request_channel_layout == AV_CH_LAYOUT_MONO)
203 else if (avctx->channels > 2 &&
204 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO)
208 for (i = 0; i < AC3_MAX_CHANNELS; i++) {
209 s->xcfptr[i] = s->transform_coeffs[i];
210 s->dlyptr[i] = s->delay[i];
217 * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
218 * GetBitContext within AC3DecodeContext must point to
219 * the start of the synchronized AC-3 bitstream.
221 static int ac3_parse_header(AC3DecodeContext *s)
223 GetBitContext *gbc = &s->gbc;
226 /* read the rest of the bsi. read twice for dual mono mode. */
227 i = !s->channel_mode;
229 skip_bits(gbc, 5); // skip dialog normalization
231 skip_bits(gbc, 8); //skip compression
233 skip_bits(gbc, 8); //skip language code
235 skip_bits(gbc, 7); //skip audio production information
238 skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
240 /* skip the timecodes or parse the Alternate Bit Stream Syntax */
241 if (s->bitstream_id != 6) {
243 skip_bits(gbc, 14); //skip timecode1
245 skip_bits(gbc, 14); //skip timecode2
247 if (get_bits1(gbc)) {
248 s->preferred_downmix = get_bits(gbc, 2);
249 s->center_mix_level_ltrt = get_bits(gbc, 3);
250 s->surround_mix_level_ltrt = av_clip(get_bits(gbc, 3), 3, 7);
251 s->center_mix_level = get_bits(gbc, 3);
252 s->surround_mix_level = av_clip(get_bits(gbc, 3), 3, 7);
254 if (get_bits1(gbc)) {
255 s->dolby_surround_ex_mode = get_bits(gbc, 2);
256 s->dolby_headphone_mode = get_bits(gbc, 2);
257 skip_bits(gbc, 10); // skip adconvtyp (1), xbsi2 (8), encinfo (1)
261 /* skip additional bitstream info */
262 if (get_bits1(gbc)) {
263 i = get_bits(gbc, 6);
273 * Common function to parse AC-3 or E-AC-3 frame header
275 static int parse_frame_header(AC3DecodeContext *s)
280 err = avpriv_ac3_parse_header(&s->gbc, &hdr);
284 /* get decoding parameters from header info */
285 s->bit_alloc_params.sr_code = hdr.sr_code;
286 s->bitstream_id = hdr.bitstream_id;
287 s->bitstream_mode = hdr.bitstream_mode;
288 s->channel_mode = hdr.channel_mode;
289 s->lfe_on = hdr.lfe_on;
290 s->bit_alloc_params.sr_shift = hdr.sr_shift;
291 s->sample_rate = hdr.sample_rate;
292 s->bit_rate = hdr.bit_rate;
293 s->channels = hdr.channels;
294 s->fbw_channels = s->channels - s->lfe_on;
295 s->lfe_ch = s->fbw_channels + 1;
296 s->frame_size = hdr.frame_size;
297 s->preferred_downmix = AC3_DMIXMOD_NOTINDICATED;
298 s->center_mix_level = hdr.center_mix_level;
299 s->center_mix_level_ltrt = 4; // -3.0dB
300 s->surround_mix_level = hdr.surround_mix_level;
301 s->surround_mix_level_ltrt = 4; // -3.0dB
302 s->lfe_mix_level_exists = 0;
303 s->num_blocks = hdr.num_blocks;
304 s->frame_type = hdr.frame_type;
305 s->substreamid = hdr.substreamid;
306 s->dolby_surround_mode = hdr.dolby_surround_mode;
307 s->dolby_surround_ex_mode = AC3_DSUREXMOD_NOTINDICATED;
308 s->dolby_headphone_mode = AC3_DHEADPHONMOD_NOTINDICATED;
311 s->start_freq[s->lfe_ch] = 0;
312 s->end_freq[s->lfe_ch] = 7;
313 s->num_exp_groups[s->lfe_ch] = 2;
314 s->channel_in_cpl[s->lfe_ch] = 0;
317 if (s->bitstream_id <= 10) {
319 s->snr_offset_strategy = 2;
320 s->block_switch_syntax = 1;
321 s->dither_flag_syntax = 1;
322 s->bit_allocation_syntax = 1;
323 s->fast_gain_syntax = 0;
324 s->first_cpl_leak = 0;
327 memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
328 return ac3_parse_header(s);
329 } else if (CONFIG_EAC3_DECODER) {
331 return ff_eac3_parse_header(s);
333 av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
334 return AVERROR(ENOSYS);
339 * Set stereo downmixing coefficients based on frame header info.
340 * reference: Section 7.8.2 Downmixing Into Two Channels
342 static void set_downmix_coeffs(AC3DecodeContext *s)
345 float cmix = gain_levels[s-> center_mix_level];
346 float smix = gain_levels[s->surround_mix_level];
349 for (i = 0; i < s->fbw_channels; i++) {
350 s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
351 s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
353 if (s->channel_mode > 1 && s->channel_mode & 1) {
354 s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
356 if (s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
357 int nf = s->channel_mode - 2;
358 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
360 if (s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
361 int nf = s->channel_mode - 4;
362 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
367 for (i = 0; i < s->fbw_channels; i++) {
368 norm0 += s->downmix_coeffs[i][0];
369 norm1 += s->downmix_coeffs[i][1];
371 norm0 = 1.0f / norm0;
372 norm1 = 1.0f / norm1;
373 for (i = 0; i < s->fbw_channels; i++) {
374 s->downmix_coeffs[i][0] *= norm0;
375 s->downmix_coeffs[i][1] *= norm1;
378 if (s->output_mode == AC3_CHMODE_MONO) {
379 for (i = 0; i < s->fbw_channels; i++)
380 s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] +
381 s->downmix_coeffs[i][1]) * LEVEL_MINUS_3DB;
386 * Decode the grouped exponents according to exponent strategy.
387 * reference: Section 7.1.3 Exponent Decoding
389 static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
390 uint8_t absexp, int8_t *dexps)
392 int i, j, grp, group_size;
397 group_size = exp_strategy + (exp_strategy == EXP_D45);
398 for (grp = 0, i = 0; grp < ngrps; grp++) {
399 expacc = get_bits(gbc, 7);
400 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][0];
401 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][1];
402 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][2];
405 /* convert to absolute exps and expand groups */
407 for (i = 0, j = 0; i < ngrps * 3; i++) {
408 prevexp += dexp[i] - 2;
411 switch (group_size) {
412 case 4: dexps[j++] = prevexp;
413 dexps[j++] = prevexp;
414 case 2: dexps[j++] = prevexp;
415 case 1: dexps[j++] = prevexp;
422 * Generate transform coefficients for each coupled channel in the coupling
423 * range using the coupling coefficients and coupling coordinates.
424 * reference: Section 7.4.3 Coupling Coordinate Format
426 static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
430 bin = s->start_freq[CPL_CH];
431 for (band = 0; band < s->num_cpl_bands; band++) {
432 int band_start = bin;
433 int band_end = bin + s->cpl_band_sizes[band];
434 for (ch = 1; ch <= s->fbw_channels; ch++) {
435 if (s->channel_in_cpl[ch]) {
436 int cpl_coord = s->cpl_coords[ch][band] << 5;
437 for (bin = band_start; bin < band_end; bin++) {
438 s->fixed_coeffs[ch][bin] =
439 MULH(s->fixed_coeffs[CPL_CH][bin] << 4, cpl_coord);
441 if (ch == 2 && s->phase_flags[band]) {
442 for (bin = band_start; bin < band_end; bin++)
443 s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
452 * Grouped mantissas for 3-level 5-level and 11-level quantization
464 * Decode the transform coefficients for a particular channel
465 * reference: Section 7.3 Quantization and Decoding of Mantissas
467 static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
469 int start_freq = s->start_freq[ch_index];
470 int end_freq = s->end_freq[ch_index];
471 uint8_t *baps = s->bap[ch_index];
472 int8_t *exps = s->dexps[ch_index];
473 int32_t *coeffs = s->fixed_coeffs[ch_index];
474 int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
475 GetBitContext *gbc = &s->gbc;
478 for (freq = start_freq; freq < end_freq; freq++) {
479 int bap = baps[freq];
483 /* random noise with approximate range of -0.707 to 0.707 */
485 mantissa = (av_lfg_get(&s->dith_state) / 362) - 5932275;
492 mantissa = m->b1_mant[m->b1];
494 int bits = get_bits(gbc, 5);
495 mantissa = b1_mantissas[bits][0];
496 m->b1_mant[1] = b1_mantissas[bits][1];
497 m->b1_mant[0] = b1_mantissas[bits][2];
504 mantissa = m->b2_mant[m->b2];
506 int bits = get_bits(gbc, 7);
507 mantissa = b2_mantissas[bits][0];
508 m->b2_mant[1] = b2_mantissas[bits][1];
509 m->b2_mant[0] = b2_mantissas[bits][2];
514 mantissa = b3_mantissas[get_bits(gbc, 3)];
519 mantissa = m->b4_mant;
521 int bits = get_bits(gbc, 7);
522 mantissa = b4_mantissas[bits][0];
523 m->b4_mant = b4_mantissas[bits][1];
528 mantissa = b5_mantissas[get_bits(gbc, 4)];
530 default: /* 6 to 15 */
531 /* Shift mantissa and sign-extend it. */
532 mantissa = get_sbits(gbc, quantization_tab[bap]);
533 mantissa <<= 24 - quantization_tab[bap];
536 coeffs[freq] = mantissa >> exps[freq];
541 * Remove random dithering from coupling range coefficients with zero-bit
542 * mantissas for coupled channels which do not use dithering.
543 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
545 static void remove_dithering(AC3DecodeContext *s) {
548 for (ch = 1; ch <= s->fbw_channels; ch++) {
549 if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
550 for (i = s->start_freq[CPL_CH]; i < s->end_freq[CPL_CH]; i++) {
551 if (!s->bap[CPL_CH][i])
552 s->fixed_coeffs[ch][i] = 0;
558 static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch,
561 if (!s->channel_uses_aht[ch]) {
562 ac3_decode_transform_coeffs_ch(s, ch, m);
564 /* if AHT is used, mantissas for all blocks are encoded in the first
565 block of the frame. */
567 if (!blk && CONFIG_EAC3_DECODER)
568 ff_eac3_decode_transform_coeffs_aht_ch(s, ch);
569 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
570 s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
576 * Decode the transform coefficients.
578 static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
584 m.b1 = m.b2 = m.b4 = 0;
586 for (ch = 1; ch <= s->channels; ch++) {
587 /* transform coefficients for full-bandwidth channel */
588 decode_transform_coeffs_ch(s, blk, ch, &m);
589 /* transform coefficients for coupling channel come right after the
590 coefficients for the first coupled channel*/
591 if (s->channel_in_cpl[ch]) {
593 decode_transform_coeffs_ch(s, blk, CPL_CH, &m);
594 calc_transform_coeffs_cpl(s);
597 end = s->end_freq[CPL_CH];
599 end = s->end_freq[ch];
602 s->fixed_coeffs[ch][end] = 0;
606 /* zero the dithered coefficients for appropriate channels */
611 * Stereo rematrixing.
612 * reference: Section 7.5.4 Rematrixing : Decoding Technique
614 static void do_rematrixing(AC3DecodeContext *s)
619 end = FFMIN(s->end_freq[1], s->end_freq[2]);
621 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
622 if (s->rematrixing_flags[bnd]) {
623 bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd + 1]);
624 for (i = ff_ac3_rematrix_band_tab[bnd]; i < bndend; i++) {
625 int tmp0 = s->fixed_coeffs[1][i];
626 s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
627 s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
634 * Inverse MDCT Transform.
635 * Convert frequency domain coefficients to time-domain audio samples.
636 * reference: Section 7.9.4 Transformation Equations
638 static inline void do_imdct(AC3DecodeContext *s, int channels)
642 for (ch = 1; ch <= channels; ch++) {
643 if (s->block_switch[ch]) {
645 float *x = s->tmp_output + 128;
646 for (i = 0; i < 128; i++)
647 x[i] = s->transform_coeffs[ch][2 * i];
648 s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x);
649 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
650 s->tmp_output, s->window, 128);
651 for (i = 0; i < 128; i++)
652 x[i] = s->transform_coeffs[ch][2 * i + 1];
653 s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch - 1], x);
655 s->imdct_512.imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
656 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
657 s->tmp_output, s->window, 128);
658 memcpy(s->delay[ch - 1], s->tmp_output + 128, 128 * sizeof(float));
664 * Upmix delay samples from stereo to original channel layout.
666 static void ac3_upmix_delay(AC3DecodeContext *s)
668 int channel_data_size = sizeof(s->delay[0]);
669 switch (s->channel_mode) {
670 case AC3_CHMODE_DUALMONO:
671 case AC3_CHMODE_STEREO:
672 /* upmix mono to stereo */
673 memcpy(s->delay[1], s->delay[0], channel_data_size);
675 case AC3_CHMODE_2F2R:
676 memset(s->delay[3], 0, channel_data_size);
677 case AC3_CHMODE_2F1R:
678 memset(s->delay[2], 0, channel_data_size);
680 case AC3_CHMODE_3F2R:
681 memset(s->delay[4], 0, channel_data_size);
682 case AC3_CHMODE_3F1R:
683 memset(s->delay[3], 0, channel_data_size);
685 memcpy(s->delay[2], s->delay[1], channel_data_size);
686 memset(s->delay[1], 0, channel_data_size);
692 * Decode band structure for coupling, spectral extension, or enhanced coupling.
693 * The band structure defines how many subbands are in each band. For each
694 * subband in the range, 1 means it is combined with the previous band, and 0
695 * means that it starts a new band.
697 * @param[in] gbc bit reader context
698 * @param[in] blk block number
699 * @param[in] eac3 flag to indicate E-AC-3
700 * @param[in] ecpl flag to indicate enhanced coupling
701 * @param[in] start_subband subband number for start of range
702 * @param[in] end_subband subband number for end of range
703 * @param[in] default_band_struct default band structure table
704 * @param[out] num_bands number of bands (optionally NULL)
705 * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
707 static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
708 int ecpl, int start_subband, int end_subband,
709 const uint8_t *default_band_struct,
710 int *num_bands, uint8_t *band_sizes)
712 int subbnd, bnd, n_subbands, n_bands=0;
714 uint8_t coded_band_struct[22];
715 const uint8_t *band_struct;
717 n_subbands = end_subband - start_subband;
719 /* decode band structure from bitstream or use default */
720 if (!eac3 || get_bits1(gbc)) {
721 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
722 coded_band_struct[subbnd] = get_bits1(gbc);
724 band_struct = coded_band_struct;
726 band_struct = &default_band_struct[start_subband+1];
728 /* no change in band structure */
732 /* calculate number of bands and band sizes based on band structure.
733 note that the first 4 subbands in enhanced coupling span only 6 bins
735 if (num_bands || band_sizes ) {
736 n_bands = n_subbands;
737 bnd_sz[0] = ecpl ? 6 : 12;
738 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
739 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
740 if (band_struct[subbnd - 1]) {
742 bnd_sz[bnd] += subbnd_size;
744 bnd_sz[++bnd] = subbnd_size;
749 /* set optional output params */
751 *num_bands = n_bands;
753 memcpy(band_sizes, bnd_sz, n_bands);
757 * Decode a single audio block from the AC-3 bitstream.
759 static int decode_audio_block(AC3DecodeContext *s, int blk)
761 int fbw_channels = s->fbw_channels;
762 int channel_mode = s->channel_mode;
764 int different_transforms;
767 GetBitContext *gbc = &s->gbc;
768 uint8_t bit_alloc_stages[AC3_MAX_CHANNELS] = { 0 };
770 /* block switch flags */
771 different_transforms = 0;
772 if (s->block_switch_syntax) {
773 for (ch = 1; ch <= fbw_channels; ch++) {
774 s->block_switch[ch] = get_bits1(gbc);
775 if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
776 different_transforms = 1;
780 /* dithering flags */
781 if (s->dither_flag_syntax) {
782 for (ch = 1; ch <= fbw_channels; ch++) {
783 s->dither_flag[ch] = get_bits1(gbc);
788 i = !s->channel_mode;
790 if (get_bits1(gbc)) {
791 /* Allow asymmetric application of DRC when drc_scale > 1.
792 Amplification of quiet sounds is enhanced */
793 float range = dynamic_range_tab[get_bits(gbc, 8)];
794 if (range > 1.0 || s->drc_scale <= 1.0)
795 s->dynamic_range[i] = powf(range, s->drc_scale);
797 s->dynamic_range[i] = range;
798 } else if (blk == 0) {
799 s->dynamic_range[i] = 1.0f;
803 /* spectral extension strategy */
804 if (s->eac3 && (!blk || get_bits1(gbc))) {
805 s->spx_in_use = get_bits1(gbc);
807 int dst_start_freq, dst_end_freq, src_start_freq,
808 start_subband, end_subband;
810 /* determine which channels use spx */
811 if (s->channel_mode == AC3_CHMODE_MONO) {
812 s->channel_uses_spx[1] = 1;
814 for (ch = 1; ch <= fbw_channels; ch++)
815 s->channel_uses_spx[ch] = get_bits1(gbc);
818 /* get the frequency bins of the spx copy region and the spx start
820 dst_start_freq = get_bits(gbc, 2);
821 start_subband = get_bits(gbc, 3) + 2;
822 if (start_subband > 7)
823 start_subband += start_subband - 7;
824 end_subband = get_bits(gbc, 3) + 5;
826 end_subband += end_subband - 7;
827 dst_start_freq = dst_start_freq * 12 + 25;
828 src_start_freq = start_subband * 12 + 25;
829 dst_end_freq = end_subband * 12 + 25;
831 /* check validity of spx ranges */
832 if (start_subband >= end_subband) {
833 av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
834 "range (%d >= %d)\n", start_subband, end_subband);
835 return AVERROR_INVALIDDATA;
837 if (dst_start_freq >= src_start_freq) {
838 av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
839 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
840 return AVERROR_INVALIDDATA;
843 s->spx_dst_start_freq = dst_start_freq;
844 s->spx_src_start_freq = src_start_freq;
845 s->spx_dst_end_freq = dst_end_freq;
847 decode_band_structure(gbc, blk, s->eac3, 0,
848 start_subband, end_subband,
849 ff_eac3_default_spx_band_struct,
853 for (ch = 1; ch <= fbw_channels; ch++) {
854 s->channel_uses_spx[ch] = 0;
855 s->first_spx_coords[ch] = 1;
860 /* spectral extension coordinates */
862 for (ch = 1; ch <= fbw_channels; ch++) {
863 if (s->channel_uses_spx[ch]) {
864 if (s->first_spx_coords[ch] || get_bits1(gbc)) {
866 int bin, master_spx_coord;
868 s->first_spx_coords[ch] = 0;
869 spx_blend = get_bits(gbc, 5) * (1.0f/32);
870 master_spx_coord = get_bits(gbc, 2) * 3;
872 bin = s->spx_src_start_freq;
873 for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
875 int spx_coord_exp, spx_coord_mant;
876 float nratio, sblend, nblend, spx_coord;
878 /* calculate blending factors */
879 bandsize = s->spx_band_sizes[bnd];
880 nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
881 nratio = av_clipf(nratio, 0.0f, 1.0f);
882 nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3)
883 // to give unity variance
884 sblend = sqrtf(1.0f - nratio);
887 /* decode spx coordinates */
888 spx_coord_exp = get_bits(gbc, 4);
889 spx_coord_mant = get_bits(gbc, 2);
890 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
891 else spx_coord_mant += 4;
892 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
893 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
895 /* multiply noise and signal blending factors by spx coordinate */
896 s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
897 s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
901 s->first_spx_coords[ch] = 1;
906 /* coupling strategy */
907 if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
908 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
910 s->cpl_in_use[blk] = get_bits1(gbc);
911 if (s->cpl_in_use[blk]) {
912 /* coupling in use */
913 int cpl_start_subband, cpl_end_subband;
915 if (channel_mode < AC3_CHMODE_STEREO) {
916 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
917 return AVERROR_INVALIDDATA;
920 /* check for enhanced coupling */
921 if (s->eac3 && get_bits1(gbc)) {
922 /* TODO: parse enhanced coupling strategy info */
923 avpriv_request_sample(s->avctx, "Enhanced coupling");
924 return AVERROR_PATCHWELCOME;
927 /* determine which channels are coupled */
928 if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
929 s->channel_in_cpl[1] = 1;
930 s->channel_in_cpl[2] = 1;
932 for (ch = 1; ch <= fbw_channels; ch++)
933 s->channel_in_cpl[ch] = get_bits1(gbc);
936 /* phase flags in use */
937 if (channel_mode == AC3_CHMODE_STEREO)
938 s->phase_flags_in_use = get_bits1(gbc);
940 /* coupling frequency range */
941 cpl_start_subband = get_bits(gbc, 4);
942 cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
943 get_bits(gbc, 4) + 3;
944 if (cpl_start_subband >= cpl_end_subband) {
945 av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
946 cpl_start_subband, cpl_end_subband);
947 return AVERROR_INVALIDDATA;
949 s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
950 s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
952 decode_band_structure(gbc, blk, s->eac3, 0, cpl_start_subband,
954 ff_eac3_default_cpl_band_struct,
955 &s->num_cpl_bands, s->cpl_band_sizes);
957 /* coupling not in use */
958 for (ch = 1; ch <= fbw_channels; ch++) {
959 s->channel_in_cpl[ch] = 0;
960 s->first_cpl_coords[ch] = 1;
962 s->first_cpl_leak = s->eac3;
963 s->phase_flags_in_use = 0;
965 } else if (!s->eac3) {
967 av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must "
968 "be present in block 0\n");
969 return AVERROR_INVALIDDATA;
971 s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
974 cpl_in_use = s->cpl_in_use[blk];
976 /* coupling coordinates */
978 int cpl_coords_exist = 0;
980 for (ch = 1; ch <= fbw_channels; ch++) {
981 if (s->channel_in_cpl[ch]) {
982 if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(gbc)) {
983 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
984 s->first_cpl_coords[ch] = 0;
985 cpl_coords_exist = 1;
986 master_cpl_coord = 3 * get_bits(gbc, 2);
987 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
988 cpl_coord_exp = get_bits(gbc, 4);
989 cpl_coord_mant = get_bits(gbc, 4);
990 if (cpl_coord_exp == 15)
991 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
993 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
994 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
997 av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must "
998 "be present in block 0\n");
999 return AVERROR_INVALIDDATA;
1002 /* channel not in coupling */
1003 s->first_cpl_coords[ch] = 1;
1007 if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
1008 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1009 s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
1014 /* stereo rematrixing strategy and band structure */
1015 if (channel_mode == AC3_CHMODE_STEREO) {
1016 if ((s->eac3 && !blk) || get_bits1(gbc)) {
1017 s->num_rematrixing_bands = 4;
1018 if (cpl_in_use && s->start_freq[CPL_CH] <= 61) {
1019 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
1020 } else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1021 s->num_rematrixing_bands--;
1023 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1024 s->rematrixing_flags[bnd] = get_bits1(gbc);
1026 av_log(s->avctx, AV_LOG_WARNING, "Warning: "
1027 "new rematrixing strategy not present in block 0\n");
1028 s->num_rematrixing_bands = 0;
1032 /* exponent strategies for each channel */
1033 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1035 s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
1036 if (s->exp_strategy[blk][ch] != EXP_REUSE)
1037 bit_alloc_stages[ch] = 3;
1040 /* channel bandwidth */
1041 for (ch = 1; ch <= fbw_channels; ch++) {
1042 s->start_freq[ch] = 0;
1043 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1045 int prev = s->end_freq[ch];
1046 if (s->channel_in_cpl[ch])
1047 s->end_freq[ch] = s->start_freq[CPL_CH];
1048 else if (s->channel_uses_spx[ch])
1049 s->end_freq[ch] = s->spx_src_start_freq;
1051 int bandwidth_code = get_bits(gbc, 6);
1052 if (bandwidth_code > 60) {
1053 av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
1054 return AVERROR_INVALIDDATA;
1056 s->end_freq[ch] = bandwidth_code * 3 + 73;
1058 group_size = 3 << (s->exp_strategy[blk][ch] - 1);
1059 s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1060 if (blk > 0 && s->end_freq[ch] != prev)
1061 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
1064 if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
1065 s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
1066 (3 << (s->exp_strategy[blk][CPL_CH] - 1));
1069 /* decode exponents for each channel */
1070 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1071 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1072 s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
1073 if (decode_exponents(gbc, s->exp_strategy[blk][ch],
1074 s->num_exp_groups[ch], s->dexps[ch][0],
1075 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1076 av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n");
1077 return AVERROR_INVALIDDATA;
1079 if (ch != CPL_CH && ch != s->lfe_ch)
1080 skip_bits(gbc, 2); /* skip gainrng */
1084 /* bit allocation information */
1085 if (s->bit_allocation_syntax) {
1086 if (get_bits1(gbc)) {
1087 s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1088 s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1089 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
1090 s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
1091 s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
1092 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1093 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1095 av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must "
1096 "be present in block 0\n");
1097 return AVERROR_INVALIDDATA;
1101 /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
1102 if (!s->eac3 || !blk) {
1103 if (s->snr_offset_strategy && get_bits1(gbc)) {
1106 csnr = (get_bits(gbc, 6) - 15) << 4;
1107 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1109 if (ch == i || s->snr_offset_strategy == 2)
1110 snr = (csnr + get_bits(gbc, 4)) << 2;
1111 /* run at least last bit allocation stage if snr offset changes */
1112 if (blk && s->snr_offset[ch] != snr) {
1113 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
1115 s->snr_offset[ch] = snr;
1117 /* fast gain (normal AC-3 only) */
1119 int prev = s->fast_gain[ch];
1120 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1121 /* run last 2 bit allocation stages if fast gain changes */
1122 if (blk && prev != s->fast_gain[ch])
1123 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1126 } else if (!s->eac3 && !blk) {
1127 av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
1128 return AVERROR_INVALIDDATA;
1132 /* fast gain (E-AC-3 only) */
1133 if (s->fast_gain_syntax && get_bits1(gbc)) {
1134 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1135 int prev = s->fast_gain[ch];
1136 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1137 /* run last 2 bit allocation stages if fast gain changes */
1138 if (blk && prev != s->fast_gain[ch])
1139 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1141 } else if (s->eac3 && !blk) {
1142 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1143 s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
1146 /* E-AC-3 to AC-3 converter SNR offset */
1147 if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
1148 skip_bits(gbc, 10); // skip converter snr offset
1151 /* coupling leak information */
1153 if (s->first_cpl_leak || get_bits1(gbc)) {
1154 int fl = get_bits(gbc, 3);
1155 int sl = get_bits(gbc, 3);
1156 /* run last 2 bit allocation stages for coupling channel if
1157 coupling leak changes */
1158 if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1159 sl != s->bit_alloc_params.cpl_slow_leak)) {
1160 bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
1162 s->bit_alloc_params.cpl_fast_leak = fl;
1163 s->bit_alloc_params.cpl_slow_leak = sl;
1164 } else if (!s->eac3 && !blk) {
1165 av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must "
1166 "be present in block 0\n");
1167 return AVERROR_INVALIDDATA;
1169 s->first_cpl_leak = 0;
1172 /* delta bit allocation information */
1173 if (s->dba_syntax && get_bits1(gbc)) {
1174 /* delta bit allocation exists (strategy) */
1175 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1176 s->dba_mode[ch] = get_bits(gbc, 2);
1177 if (s->dba_mode[ch] == DBA_RESERVED) {
1178 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1179 return AVERROR_INVALIDDATA;
1181 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1183 /* channel delta offset, len and bit allocation */
1184 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1185 if (s->dba_mode[ch] == DBA_NEW) {
1186 s->dba_nsegs[ch] = get_bits(gbc, 3) + 1;
1187 for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1188 s->dba_offsets[ch][seg] = get_bits(gbc, 5);
1189 s->dba_lengths[ch][seg] = get_bits(gbc, 4);
1190 s->dba_values[ch][seg] = get_bits(gbc, 3);
1192 /* run last 2 bit allocation stages if new dba values */
1193 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1196 } else if (blk == 0) {
1197 for (ch = 0; ch <= s->channels; ch++) {
1198 s->dba_mode[ch] = DBA_NONE;
1202 /* Bit allocation */
1203 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1204 if (bit_alloc_stages[ch] > 2) {
1205 /* Exponent mapping into PSD and PSD integration */
1206 ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
1207 s->start_freq[ch], s->end_freq[ch],
1208 s->psd[ch], s->band_psd[ch]);
1210 if (bit_alloc_stages[ch] > 1) {
1211 /* Compute excitation function, Compute masking curve, and
1212 Apply delta bit allocation */
1213 if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1214 s->start_freq[ch], s->end_freq[ch],
1215 s->fast_gain[ch], (ch == s->lfe_ch),
1216 s->dba_mode[ch], s->dba_nsegs[ch],
1217 s->dba_offsets[ch], s->dba_lengths[ch],
1218 s->dba_values[ch], s->mask[ch])) {
1219 av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
1220 return AVERROR_INVALIDDATA;
1223 if (bit_alloc_stages[ch] > 0) {
1224 /* Compute bit allocation */
1225 const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1226 ff_eac3_hebap_tab : ff_ac3_bap_tab;
1227 s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1228 s->start_freq[ch], s->end_freq[ch],
1230 s->bit_alloc_params.floor,
1231 bap_tab, s->bap[ch]);
1235 /* unused dummy data */
1236 if (s->skip_syntax && get_bits1(gbc)) {
1237 int skipl = get_bits(gbc, 9);
1242 /* unpack the transform coefficients
1243 this also uncouples channels if coupling is in use. */
1244 decode_transform_coeffs(s, blk);
1246 /* TODO: generate enhanced coupling coordinates and uncouple */
1248 /* recover coefficients if rematrixing is in use */
1249 if (s->channel_mode == AC3_CHMODE_STEREO)
1252 /* apply scaling to coefficients (headroom, dynrng) */
1253 for (ch = 1; ch <= s->channels; ch++) {
1254 float gain = 1.0 / 4194304.0f;
1255 if (s->channel_mode == AC3_CHMODE_DUALMONO) {
1256 gain *= s->dynamic_range[2 - ch];
1258 gain *= s->dynamic_range[0];
1260 s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1261 s->fixed_coeffs[ch], gain, 256);
1264 /* apply spectral extension to high frequency bins */
1265 if (s->spx_in_use && CONFIG_EAC3_DECODER) {
1266 ff_eac3_apply_spectral_extension(s);
1269 /* downmix and MDCT. order depends on whether block switching is used for
1270 any channel in this block. this is because coefficients for the long
1271 and short transforms cannot be mixed. */
1272 downmix_output = s->channels != s->out_channels &&
1273 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1274 s->fbw_channels == s->out_channels);
1275 if (different_transforms) {
1276 /* the delay samples have already been downmixed, so we upmix the delay
1277 samples in order to reconstruct all channels before downmixing. */
1283 do_imdct(s, s->channels);
1285 if (downmix_output) {
1286 s->ac3dsp.downmix(s->outptr, s->downmix_coeffs,
1287 s->out_channels, s->fbw_channels, 256);
1290 if (downmix_output) {
1291 s->ac3dsp.downmix(s->xcfptr + 1, s->downmix_coeffs,
1292 s->out_channels, s->fbw_channels, 256);
1295 if (downmix_output && !s->downmixed) {
1297 s->ac3dsp.downmix(s->dlyptr, s->downmix_coeffs, s->out_channels,
1298 s->fbw_channels, 128);
1301 do_imdct(s, s->out_channels);
1308 * Decode a single AC-3 frame.
1310 static int ac3_decode_frame(AVCodecContext * avctx, void *data,
1311 int *got_frame_ptr, AVPacket *avpkt)
1313 AVFrame *frame = data;
1314 const uint8_t *buf = avpkt->data;
1315 int buf_size = avpkt->size;
1316 AC3DecodeContext *s = avctx->priv_data;
1317 int blk, ch, err, ret;
1318 const uint8_t *channel_map;
1319 const float *output[AC3_MAX_CHANNELS];
1320 enum AVMatrixEncoding matrix_encoding;
1321 AVDownmixInfo *downmix_info;
1323 /* copy input buffer to decoder context to avoid reading past the end
1324 of the buffer, which can be caused by a damaged input stream. */
1325 if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
1326 // seems to be byte-swapped AC-3
1327 int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1328 s->dsp.bswap16_buf((uint16_t *)s->input_buffer, (const uint16_t *)buf, cnt);
1330 memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1331 buf = s->input_buffer;
1332 /* initialize the GetBitContext with the start of valid AC-3 Frame */
1333 init_get_bits(&s->gbc, buf, buf_size * 8);
1335 /* parse the syncinfo */
1336 err = parse_frame_header(s);
1340 case AAC_AC3_PARSE_ERROR_SYNC:
1341 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1342 return AVERROR_INVALIDDATA;
1343 case AAC_AC3_PARSE_ERROR_BSID:
1344 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1346 case AAC_AC3_PARSE_ERROR_SAMPLE_RATE:
1347 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1349 case AAC_AC3_PARSE_ERROR_FRAME_SIZE:
1350 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1352 case AAC_AC3_PARSE_ERROR_FRAME_TYPE:
1353 /* skip frame if CRC is ok. otherwise use error concealment. */
1354 /* TODO: add support for substreams and dependent frames */
1355 if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) {
1356 av_log(avctx, AV_LOG_WARNING, "unsupported frame type : "
1357 "skipping frame\n");
1361 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1364 case AAC_AC3_PARSE_ERROR_CRC:
1365 case AAC_AC3_PARSE_ERROR_CHANNEL_CFG:
1367 default: // Normal AVERROR do not try to recover.
1372 /* check that reported frame size fits in input buffer */
1373 if (s->frame_size > buf_size) {
1374 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1375 err = AAC_AC3_PARSE_ERROR_FRAME_SIZE;
1376 } else if (avctx->err_recognition & AV_EF_CRCCHECK) {
1377 /* check for crc mismatch */
1378 if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2],
1379 s->frame_size - 2)) {
1380 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1381 if (avctx->err_recognition & AV_EF_EXPLODE)
1382 return AVERROR_INVALIDDATA;
1383 err = AAC_AC3_PARSE_ERROR_CRC;
1388 /* if frame is ok, set audio parameters */
1390 avctx->sample_rate = s->sample_rate;
1391 avctx->bit_rate = s->bit_rate;
1394 /* channel config */
1395 if (!err || (s->channels && s->out_channels != s->channels)) {
1396 s->out_channels = s->channels;
1397 s->output_mode = s->channel_mode;
1399 s->output_mode |= AC3_OUTPUT_LFEON;
1400 if (s->channels > 1 &&
1401 avctx->request_channel_layout == AV_CH_LAYOUT_MONO) {
1402 s->out_channels = 1;
1403 s->output_mode = AC3_CHMODE_MONO;
1404 } else if (s->channels > 2 &&
1405 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
1406 s->out_channels = 2;
1407 s->output_mode = AC3_CHMODE_STEREO;
1410 /* set downmixing coefficients if needed */
1411 if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1412 s->fbw_channels == s->out_channels)) {
1413 set_downmix_coeffs(s);
1415 } else if (!s->channels) {
1416 av_log(avctx, AV_LOG_ERROR, "unable to determine channel mode\n");
1417 return AVERROR_INVALIDDATA;
1419 avctx->channels = s->out_channels;
1420 avctx->channel_layout = avpriv_ac3_channel_layout_tab[s->output_mode & ~AC3_OUTPUT_LFEON];
1421 if (s->output_mode & AC3_OUTPUT_LFEON)
1422 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1424 /* set audio service type based on bitstream mode for AC-3 */
1425 avctx->audio_service_type = s->bitstream_mode;
1426 if (s->bitstream_mode == 0x7 && s->channels > 1)
1427 avctx->audio_service_type = AV_AUDIO_SERVICE_TYPE_KARAOKE;
1429 /* get output buffer */
1430 frame->nb_samples = s->num_blocks * AC3_BLOCK_SIZE;
1431 if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
1432 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1436 /* decode the audio blocks */
1437 channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
1438 for (ch = 0; ch < s->channels; ch++) {
1439 if (ch < s->out_channels)
1440 s->outptr[channel_map[ch]] = (float *)frame->data[ch];
1442 s->outptr[ch] = s->output[ch];
1443 output[ch] = s->output[ch];
1445 for (blk = 0; blk < s->num_blocks; blk++) {
1446 if (!err && decode_audio_block(s, blk)) {
1447 av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
1451 for (ch = 0; ch < s->out_channels; ch++)
1452 memcpy(s->outptr[channel_map[ch]], output[ch], sizeof(**output) * AC3_BLOCK_SIZE);
1453 for (ch = 0; ch < s->out_channels; ch++)
1454 output[ch] = s->outptr[channel_map[ch]];
1455 for (ch = 0; ch < s->out_channels; ch++)
1456 s->outptr[ch] += AC3_BLOCK_SIZE;
1459 /* keep last block for error concealment in next frame */
1460 for (ch = 0; ch < s->out_channels; ch++)
1461 memcpy(s->output[ch], output[ch], sizeof(**output) * AC3_BLOCK_SIZE);
1466 * Check whether the input layout is compatible, and make sure we're not
1467 * downmixing (else the matrix encoding is no longer applicable).
1469 matrix_encoding = AV_MATRIX_ENCODING_NONE;
1470 if (s->channel_mode == AC3_CHMODE_STEREO &&
1471 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1472 if (s->dolby_surround_mode == AC3_DSURMOD_ON)
1473 matrix_encoding = AV_MATRIX_ENCODING_DOLBY;
1474 else if (s->dolby_headphone_mode == AC3_DHEADPHONMOD_ON)
1475 matrix_encoding = AV_MATRIX_ENCODING_DOLBYHEADPHONE;
1476 } else if (s->channel_mode >= AC3_CHMODE_2F2R &&
1477 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1478 switch (s->dolby_surround_ex_mode) {
1479 case AC3_DSUREXMOD_ON: // EX or PLIIx
1480 matrix_encoding = AV_MATRIX_ENCODING_DOLBYEX;
1482 case AC3_DSUREXMOD_PLIIZ:
1483 matrix_encoding = AV_MATRIX_ENCODING_DPLIIZ;
1485 default: // not indicated or off
1489 if ((ret = ff_side_data_update_matrix_encoding(frame, matrix_encoding)) < 0)
1493 if ((downmix_info = av_downmix_info_update_side_data(frame))) {
1494 switch (s->preferred_downmix) {
1495 case AC3_DMIXMOD_LTRT:
1496 downmix_info->preferred_downmix_type = AV_DOWNMIX_TYPE_LTRT;
1498 case AC3_DMIXMOD_LORO:
1499 downmix_info->preferred_downmix_type = AV_DOWNMIX_TYPE_LORO;
1501 case AC3_DMIXMOD_DPLII:
1502 downmix_info->preferred_downmix_type = AV_DOWNMIX_TYPE_DPLII;
1505 downmix_info->preferred_downmix_type = AV_DOWNMIX_TYPE_UNKNOWN;
1508 downmix_info->center_mix_level = gain_levels[s-> center_mix_level];
1509 downmix_info->center_mix_level_ltrt = gain_levels[s-> center_mix_level_ltrt];
1510 downmix_info->surround_mix_level = gain_levels[s-> surround_mix_level];
1511 downmix_info->surround_mix_level_ltrt = gain_levels[s->surround_mix_level_ltrt];
1512 if (s->lfe_mix_level_exists)
1513 downmix_info->lfe_mix_level = gain_levels_lfe[s->lfe_mix_level];
1515 downmix_info->lfe_mix_level = 0.0; // -inf dB
1517 return AVERROR(ENOMEM);
1521 return FFMIN(buf_size, s->frame_size);
1525 * Uninitialize the AC-3 decoder.
1527 static av_cold int ac3_decode_end(AVCodecContext *avctx)
1529 AC3DecodeContext *s = avctx->priv_data;
1530 ff_mdct_end(&s->imdct_512);
1531 ff_mdct_end(&s->imdct_256);
1536 #define OFFSET(x) offsetof(AC3DecodeContext, x)
1537 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
1538 static const AVOption options[] = {
1539 { "drc_scale", "percentage of dynamic range compression to apply", OFFSET(drc_scale), AV_OPT_TYPE_FLOAT, {.dbl = 1.0}, 0.0, 6.0, PAR },
1543 static const AVClass ac3_decoder_class = {
1544 .class_name = "AC3 decoder",
1545 .item_name = av_default_item_name,
1547 .version = LIBAVUTIL_VERSION_INT,
1550 AVCodec ff_ac3_decoder = {
1552 .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
1553 .type = AVMEDIA_TYPE_AUDIO,
1554 .id = AV_CODEC_ID_AC3,
1555 .priv_data_size = sizeof (AC3DecodeContext),
1556 .init = ac3_decode_init,
1557 .close = ac3_decode_end,
1558 .decode = ac3_decode_frame,
1559 .capabilities = CODEC_CAP_DR1,
1560 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
1561 AV_SAMPLE_FMT_NONE },
1562 .priv_class = &ac3_decoder_class,
1565 #if CONFIG_EAC3_DECODER
1566 static const AVClass eac3_decoder_class = {
1567 .class_name = "E-AC3 decoder",
1568 .item_name = av_default_item_name,
1570 .version = LIBAVUTIL_VERSION_INT,
1573 AVCodec ff_eac3_decoder = {
1575 .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52B (AC-3, E-AC-3)"),
1576 .type = AVMEDIA_TYPE_AUDIO,
1577 .id = AV_CODEC_ID_EAC3,
1578 .priv_data_size = sizeof (AC3DecodeContext),
1579 .init = ac3_decode_init,
1580 .close = ac3_decode_end,
1581 .decode = ac3_decode_frame,
1582 .capabilities = CODEC_CAP_DR1,
1583 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
1584 AV_SAMPLE_FMT_NONE },
1585 .priv_class = &eac3_decoder_class,