3 * This code is developed as part of Google Summer of Code 2006 Program.
5 * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com).
6 * Copyright (c) 2007 Justin Ruggles
8 * Portions of this code are derived from liba52
9 * http://liba52.sourceforge.net
10 * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
11 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
13 * This file is part of FFmpeg.
15 * FFmpeg is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public
17 * License as published by the Free Software Foundation; either
18 * version 2 of the License, or (at your option) any later version.
20 * FFmpeg is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 * General Public License for more details.
25 * You should have received a copy of the GNU General Public
26 * License along with FFmpeg; if not, write to the Free Software
27 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
35 #include "libavutil/crc.h"
36 #include "libavutil/random.h"
38 #include "ac3_parser.h"
39 #include "bitstream.h"
42 #include "ac3dec_data.h"
44 /** Maximum possible frame size when the specification limit is ignored */
45 #define AC3_MAX_FRAME_SIZE 21695
48 * table for ungrouping 3 values in 7 bits.
49 * used for exponents and bap=2 mantissas
51 static uint8_t ungroup_3_in_7_bits_tab[128][3];
54 /** tables for ungrouping mantissas */
55 static int b1_mantissas[32][3];
56 static int b2_mantissas[128][3];
57 static int b3_mantissas[8];
58 static int b4_mantissas[128][2];
59 static int b5_mantissas[16];
62 * Quantization table: levels for symmetric. bits for asymmetric.
63 * reference: Table 7.18 Mapping of bap to Quantizer
65 static const uint8_t quantization_tab[16] = {
67 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
70 /** dynamic range table. converts codes to scale factors. */
71 static float dynamic_range_tab[256];
73 /** Adjustments in dB gain */
74 #define LEVEL_PLUS_3DB 1.4142135623730950
75 #define LEVEL_PLUS_1POINT5DB 1.1892071150027209
76 #define LEVEL_MINUS_1POINT5DB 0.8408964152537145
77 #define LEVEL_MINUS_3DB 0.7071067811865476
78 #define LEVEL_MINUS_4POINT5DB 0.5946035575013605
79 #define LEVEL_MINUS_6DB 0.5000000000000000
80 #define LEVEL_MINUS_9DB 0.3535533905932738
81 #define LEVEL_ZERO 0.0000000000000000
82 #define LEVEL_ONE 1.0000000000000000
84 static const float gain_levels[9] = {
88 LEVEL_MINUS_1POINT5DB,
90 LEVEL_MINUS_4POINT5DB,
97 * Table for center mix levels
98 * reference: Section 5.4.2.4 cmixlev
100 static const uint8_t center_levels[4] = { 4, 5, 6, 5 };
103 * Table for surround mix levels
104 * reference: Section 5.4.2.5 surmixlev
106 static const uint8_t surround_levels[4] = { 4, 6, 7, 6 };
109 * Table for default stereo downmixing coefficients
110 * reference: Section 7.8.2 Downmixing Into Two Channels
112 static const uint8_t ac3_default_coeffs[8][5][2] = {
113 { { 2, 7 }, { 7, 2 }, },
115 { { 2, 7 }, { 7, 2 }, },
116 { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
117 { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
118 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
119 { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
120 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
124 * Symmetrical Dequantization
125 * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
126 * Tables 7.19 to 7.23
129 symmetric_dequant(int code, int levels)
131 return ((code - (levels >> 1)) << 24) / levels;
135 * Initialize tables at runtime.
137 static av_cold void ac3_tables_init(void)
141 /* generate table for ungrouping 3 values in 7 bits
142 reference: Section 7.1.3 Exponent Decoding */
143 for(i=0; i<128; i++) {
144 ungroup_3_in_7_bits_tab[i][0] = i / 25;
145 ungroup_3_in_7_bits_tab[i][1] = (i % 25) / 5;
146 ungroup_3_in_7_bits_tab[i][2] = (i % 25) % 5;
149 /* generate grouped mantissa tables
150 reference: Section 7.3.5 Ungrouping of Mantissas */
151 for(i=0; i<32; i++) {
152 /* bap=1 mantissas */
153 b1_mantissas[i][0] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][0], 3);
154 b1_mantissas[i][1] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][1], 3);
155 b1_mantissas[i][2] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][2], 3);
157 for(i=0; i<128; i++) {
158 /* bap=2 mantissas */
159 b2_mantissas[i][0] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][0], 5);
160 b2_mantissas[i][1] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][1], 5);
161 b2_mantissas[i][2] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][2], 5);
163 /* bap=4 mantissas */
164 b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
165 b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
167 /* generate ungrouped mantissa tables
168 reference: Tables 7.21 and 7.23 */
170 /* bap=3 mantissas */
171 b3_mantissas[i] = symmetric_dequant(i, 7);
173 for(i=0; i<15; i++) {
174 /* bap=5 mantissas */
175 b5_mantissas[i] = symmetric_dequant(i, 15);
178 /* generate dynamic range table
179 reference: Section 7.7.1 Dynamic Range Control */
180 for(i=0; i<256; i++) {
181 int v = (i >> 5) - ((i >> 7) << 3) - 5;
182 dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
188 * AVCodec initialization
190 static av_cold int ac3_decode_init(AVCodecContext *avctx)
192 AC3DecodeContext *s = avctx->priv_data;
197 ff_mdct_init(&s->imdct_256, 8, 1);
198 ff_mdct_init(&s->imdct_512, 9, 1);
199 ff_kbd_window_init(s->window, 5.0, 256);
200 dsputil_init(&s->dsp, avctx);
201 av_init_random(0, &s->dith_state);
203 /* set bias values for float to int16 conversion */
204 if(s->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
205 s->add_bias = 385.0f;
209 s->mul_bias = 32767.0f;
212 /* allow downmixing to stereo or mono */
213 if (avctx->channels > 0 && avctx->request_channels > 0 &&
214 avctx->request_channels < avctx->channels &&
215 avctx->request_channels <= 2) {
216 avctx->channels = avctx->request_channels;
220 /* allocate context input buffer */
221 if (avctx->error_resilience >= FF_ER_CAREFUL) {
222 s->input_buffer = av_mallocz(AC3_MAX_FRAME_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
223 if (!s->input_buffer)
224 return AVERROR_NOMEM;
227 avctx->sample_fmt = SAMPLE_FMT_S16;
232 * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
233 * GetBitContext within AC3DecodeContext must point to
234 * the start of the synchronized AC-3 bitstream.
236 static int ac3_parse_header(AC3DecodeContext *s)
238 GetBitContext *gbc = &s->gbc;
241 /* read the rest of the bsi. read twice for dual mono mode. */
242 i = !(s->channel_mode);
244 skip_bits(gbc, 5); // skip dialog normalization
246 skip_bits(gbc, 8); //skip compression
248 skip_bits(gbc, 8); //skip language code
250 skip_bits(gbc, 7); //skip audio production information
253 skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
255 /* skip the timecodes (or extra bitstream information for Alternate Syntax)
256 TODO: read & use the xbsi1 downmix levels */
258 skip_bits(gbc, 14); //skip timecode1 / xbsi1
260 skip_bits(gbc, 14); //skip timecode2 / xbsi2
262 /* skip additional bitstream info */
263 if (get_bits1(gbc)) {
264 i = get_bits(gbc, 6);
274 * Common function to parse AC-3 or E-AC-3 frame header
276 static int parse_frame_header(AC3DecodeContext *s)
281 err = ff_ac3_parse_header(&s->gbc, &hdr);
285 /* get decoding parameters from header info */
286 s->bit_alloc_params.sr_code = hdr.sr_code;
287 s->channel_mode = hdr.channel_mode;
288 s->lfe_on = hdr.lfe_on;
289 s->bit_alloc_params.sr_shift = hdr.sr_shift;
290 s->sample_rate = hdr.sample_rate;
291 s->bit_rate = hdr.bit_rate;
292 s->channels = hdr.channels;
293 s->fbw_channels = s->channels - s->lfe_on;
294 s->lfe_ch = s->fbw_channels + 1;
295 s->frame_size = hdr.frame_size;
296 s->center_mix_level = hdr.center_mix_level;
297 s->surround_mix_level = hdr.surround_mix_level;
298 s->num_blocks = hdr.num_blocks;
299 s->frame_type = hdr.frame_type;
300 s->substreamid = hdr.substreamid;
303 s->start_freq[s->lfe_ch] = 0;
304 s->end_freq[s->lfe_ch] = 7;
305 s->num_exp_groups[s->lfe_ch] = 2;
306 s->channel_in_cpl[s->lfe_ch] = 0;
309 if(hdr.bitstream_id > 10)
310 return AC3_PARSE_ERROR_BSID;
312 return ac3_parse_header(s);
316 * Set stereo downmixing coefficients based on frame header info.
317 * reference: Section 7.8.2 Downmixing Into Two Channels
319 static void set_downmix_coeffs(AC3DecodeContext *s)
322 float cmix = gain_levels[center_levels[s->center_mix_level]];
323 float smix = gain_levels[surround_levels[s->surround_mix_level]];
326 for(i=0; i<s->fbw_channels; i++) {
327 s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
328 s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
330 if(s->channel_mode > 1 && s->channel_mode & 1) {
331 s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
333 if(s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
334 int nf = s->channel_mode - 2;
335 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
337 if(s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
338 int nf = s->channel_mode - 4;
339 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
344 for(i=0; i<s->fbw_channels; i++) {
345 norm0 += s->downmix_coeffs[i][0];
346 norm1 += s->downmix_coeffs[i][1];
348 norm0 = 1.0f / norm0;
349 norm1 = 1.0f / norm1;
350 for(i=0; i<s->fbw_channels; i++) {
351 s->downmix_coeffs[i][0] *= norm0;
352 s->downmix_coeffs[i][1] *= norm1;
355 if(s->output_mode == AC3_CHMODE_MONO) {
356 for(i=0; i<s->fbw_channels; i++)
357 s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] + s->downmix_coeffs[i][1]) * LEVEL_MINUS_3DB;
362 * Decode the grouped exponents according to exponent strategy.
363 * reference: Section 7.1.3 Exponent Decoding
365 static void decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
366 uint8_t absexp, int8_t *dexps)
368 int i, j, grp, group_size;
373 group_size = exp_strategy + (exp_strategy == EXP_D45);
374 for(grp=0,i=0; grp<ngrps; grp++) {
375 expacc = get_bits(gbc, 7);
376 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][0];
377 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][1];
378 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][2];
381 /* convert to absolute exps and expand groups */
383 for(i=0; i<ngrps*3; i++) {
384 prevexp = av_clip(prevexp + dexp[i]-2, 0, 24);
385 for(j=0; j<group_size; j++) {
386 dexps[(i*group_size)+j] = prevexp;
392 * Generate transform coefficients for each coupled channel in the coupling
393 * range using the coupling coefficients and coupling coordinates.
394 * reference: Section 7.4.3 Coupling Coordinate Format
396 static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
398 int i, j, ch, bnd, subbnd;
401 i = s->start_freq[CPL_CH];
402 for(bnd=0; bnd<s->num_cpl_bands; bnd++) {
405 for(j=0; j<12; j++) {
406 for(ch=1; ch<=s->fbw_channels; ch++) {
407 if(s->channel_in_cpl[ch]) {
408 s->fixed_coeffs[ch][i] = ((int64_t)s->fixed_coeffs[CPL_CH][i] * (int64_t)s->cpl_coords[ch][bnd]) >> 23;
409 if (ch == 2 && s->phase_flags[bnd])
410 s->fixed_coeffs[ch][i] = -s->fixed_coeffs[ch][i];
415 } while(s->cpl_band_struct[subbnd]);
420 * Grouped mantissas for 3-level 5-level and 11-level quantization
432 * Get the transform coefficients for a particular channel
433 * reference: Section 7.3 Quantization and Decoding of Mantissas
435 static void get_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
437 GetBitContext *gbc = &s->gbc;
438 int i, gcode, tbap, start, end;
443 exps = s->dexps[ch_index];
444 bap = s->bap[ch_index];
445 coeffs = s->fixed_coeffs[ch_index];
446 start = s->start_freq[ch_index];
447 end = s->end_freq[ch_index];
449 for (i = start; i < end; i++) {
453 coeffs[i] = (av_random(&s->dith_state) & 0x7FFFFF) - 0x400000;
458 gcode = get_bits(gbc, 5);
459 m->b1_mant[0] = b1_mantissas[gcode][0];
460 m->b1_mant[1] = b1_mantissas[gcode][1];
461 m->b1_mant[2] = b1_mantissas[gcode][2];
464 coeffs[i] = m->b1_mant[m->b1ptr++];
469 gcode = get_bits(gbc, 7);
470 m->b2_mant[0] = b2_mantissas[gcode][0];
471 m->b2_mant[1] = b2_mantissas[gcode][1];
472 m->b2_mant[2] = b2_mantissas[gcode][2];
475 coeffs[i] = m->b2_mant[m->b2ptr++];
479 coeffs[i] = b3_mantissas[get_bits(gbc, 3)];
484 gcode = get_bits(gbc, 7);
485 m->b4_mant[0] = b4_mantissas[gcode][0];
486 m->b4_mant[1] = b4_mantissas[gcode][1];
489 coeffs[i] = m->b4_mant[m->b4ptr++];
493 coeffs[i] = b5_mantissas[get_bits(gbc, 4)];
497 /* asymmetric dequantization */
498 int qlevel = quantization_tab[tbap];
499 coeffs[i] = get_sbits(gbc, qlevel) << (24 - qlevel);
503 coeffs[i] >>= exps[i];
508 * Remove random dithering from coefficients with zero-bit mantissas
509 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
511 static void remove_dithering(AC3DecodeContext *s) {
517 for(ch=1; ch<=s->fbw_channels; ch++) {
518 if(!s->dither_flag[ch]) {
519 coeffs = s->fixed_coeffs[ch];
521 if(s->channel_in_cpl[ch])
522 end = s->start_freq[CPL_CH];
524 end = s->end_freq[ch];
525 for(i=0; i<end; i++) {
529 if(s->channel_in_cpl[ch]) {
530 bap = s->bap[CPL_CH];
531 for(; i<s->end_freq[CPL_CH]; i++) {
541 * Get the transform coefficients.
543 static void get_transform_coeffs(AC3DecodeContext *s)
549 m.b1ptr = m.b2ptr = m.b4ptr = 3;
551 for (ch = 1; ch <= s->channels; ch++) {
552 /* transform coefficients for full-bandwidth channel */
553 get_transform_coeffs_ch(s, ch, &m);
554 /* tranform coefficients for coupling channel come right after the
555 coefficients for the first coupled channel*/
556 if (s->channel_in_cpl[ch]) {
558 get_transform_coeffs_ch(s, CPL_CH, &m);
559 calc_transform_coeffs_cpl(s);
562 end = s->end_freq[CPL_CH];
564 end = s->end_freq[ch];
567 s->fixed_coeffs[ch][end] = 0;
571 /* if any channel doesn't use dithering, zero appropriate coefficients */
577 * Stereo rematrixing.
578 * reference: Section 7.5.4 Rematrixing : Decoding Technique
580 static void do_rematrixing(AC3DecodeContext *s)
586 end = FFMIN(s->end_freq[1], s->end_freq[2]);
588 for(bnd=0; bnd<s->num_rematrixing_bands; bnd++) {
589 if(s->rematrixing_flags[bnd]) {
590 bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd+1]);
591 for(i=ff_ac3_rematrix_band_tab[bnd]; i<bndend; i++) {
592 tmp0 = s->fixed_coeffs[1][i];
593 tmp1 = s->fixed_coeffs[2][i];
594 s->fixed_coeffs[1][i] = tmp0 + tmp1;
595 s->fixed_coeffs[2][i] = tmp0 - tmp1;
602 * Inverse MDCT Transform.
603 * Convert frequency domain coefficients to time-domain audio samples.
604 * reference: Section 7.9.4 Transformation Equations
606 static inline void do_imdct(AC3DecodeContext *s, int channels)
609 float add_bias = s->add_bias;
610 if(s->out_channels==1 && channels>1)
611 add_bias *= LEVEL_MINUS_3DB; // compensate for the gain in downmix
613 for (ch=1; ch<=channels; ch++) {
614 if (s->block_switch[ch]) {
616 float *x = s->tmp_output+128;
618 x[i] = s->transform_coeffs[ch][2*i];
619 ff_imdct_half(&s->imdct_256, s->tmp_output, x);
620 s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, add_bias, 128);
622 x[i] = s->transform_coeffs[ch][2*i+1];
623 ff_imdct_half(&s->imdct_256, s->delay[ch-1], x);
625 ff_imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
626 s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, add_bias, 128);
627 memcpy(s->delay[ch-1], s->tmp_output+128, 128*sizeof(float));
633 * Downmix the output to mono or stereo.
635 static av_noinline void ac3_downmix(AC3DecodeContext *s,
636 float samples[AC3_MAX_CHANNELS][256])
641 if(s->output_mode == AC3_CHMODE_STEREO) {
642 for(i=0; i<256; i++) {
644 for(j=0; j<s->fbw_channels; j++) {
645 v0 += samples[j][i] * s->downmix_coeffs[j][0];
646 v1 += samples[j][i] * s->downmix_coeffs[j][1];
651 } else if(s->output_mode == AC3_CHMODE_MONO) {
652 for(i=0; i<256; i++) {
654 for(j=0; j<s->fbw_channels; j++)
655 v0 += samples[j][i] * s->downmix_coeffs[j][0];
662 * Upmix delay samples from stereo to original channel layout.
664 static void ac3_upmix_delay(AC3DecodeContext *s)
666 int channel_data_size = 128*sizeof(float);
667 switch(s->channel_mode) {
668 case AC3_CHMODE_DUALMONO:
669 case AC3_CHMODE_STEREO:
670 /* upmix mono to stereo */
671 memcpy(s->delay[1], s->delay[0], channel_data_size);
673 case AC3_CHMODE_2F2R:
674 memset(s->delay[3], 0, channel_data_size);
675 case AC3_CHMODE_2F1R:
676 memset(s->delay[2], 0, channel_data_size);
678 case AC3_CHMODE_3F2R:
679 memset(s->delay[4], 0, channel_data_size);
680 case AC3_CHMODE_3F1R:
681 memset(s->delay[3], 0, channel_data_size);
683 memcpy(s->delay[2], s->delay[1], channel_data_size);
684 memset(s->delay[1], 0, channel_data_size);
690 * Decode a single audio block from the AC-3 bitstream.
692 static int decode_audio_block(AC3DecodeContext *s, int blk)
694 int fbw_channels = s->fbw_channels;
695 int channel_mode = s->channel_mode;
697 int different_transforms;
700 GetBitContext *gbc = &s->gbc;
701 uint8_t bit_alloc_stages[AC3_MAX_CHANNELS];
703 memset(bit_alloc_stages, 0, AC3_MAX_CHANNELS);
705 /* block switch flags */
706 different_transforms = 0;
707 for (ch = 1; ch <= fbw_channels; ch++) {
708 s->block_switch[ch] = get_bits1(gbc);
709 if(ch > 1 && s->block_switch[ch] != s->block_switch[1])
710 different_transforms = 1;
713 /* dithering flags */
715 for (ch = 1; ch <= fbw_channels; ch++) {
716 s->dither_flag[ch] = get_bits1(gbc);
717 if(!s->dither_flag[ch])
722 i = !(s->channel_mode);
725 s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)]-1.0) *
726 s->avctx->drc_scale)+1.0;
727 } else if(blk == 0) {
728 s->dynamic_range[i] = 1.0f;
732 /* coupling strategy */
733 if (get_bits1(gbc)) {
734 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
735 s->cpl_in_use[blk] = get_bits1(gbc);
736 if (s->cpl_in_use[blk]) {
737 /* coupling in use */
738 int cpl_begin_freq, cpl_end_freq;
740 if (channel_mode < AC3_CHMODE_STEREO) {
741 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
745 /* determine which channels are coupled */
746 for (ch = 1; ch <= fbw_channels; ch++)
747 s->channel_in_cpl[ch] = get_bits1(gbc);
749 /* phase flags in use */
750 if (channel_mode == AC3_CHMODE_STEREO)
751 s->phase_flags_in_use = get_bits1(gbc);
753 /* coupling frequency range and band structure */
754 cpl_begin_freq = get_bits(gbc, 4);
755 cpl_end_freq = get_bits(gbc, 4);
756 if (3 + cpl_end_freq - cpl_begin_freq < 0) {
757 av_log(s->avctx, AV_LOG_ERROR, "3+cplendf = %d < cplbegf = %d\n", 3+cpl_end_freq, cpl_begin_freq);
760 s->num_cpl_bands = s->num_cpl_subbands = 3 + cpl_end_freq - cpl_begin_freq;
761 s->start_freq[CPL_CH] = cpl_begin_freq * 12 + 37;
762 s->end_freq[CPL_CH] = cpl_end_freq * 12 + 73;
763 for (bnd = 0; bnd < s->num_cpl_subbands - 1; bnd++) {
764 if (get_bits1(gbc)) {
765 s->cpl_band_struct[bnd] = 1;
769 s->cpl_band_struct[s->num_cpl_subbands-1] = 0;
771 /* coupling not in use */
772 for (ch = 1; ch <= fbw_channels; ch++)
773 s->channel_in_cpl[ch] = 0;
776 av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must be present in block 0\n");
779 s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
781 cpl_in_use = s->cpl_in_use[blk];
783 /* coupling coordinates */
785 int cpl_coords_exist = 0;
787 for (ch = 1; ch <= fbw_channels; ch++) {
788 if (s->channel_in_cpl[ch]) {
789 if (get_bits1(gbc)) {
790 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
791 cpl_coords_exist = 1;
792 master_cpl_coord = 3 * get_bits(gbc, 2);
793 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
794 cpl_coord_exp = get_bits(gbc, 4);
795 cpl_coord_mant = get_bits(gbc, 4);
796 if (cpl_coord_exp == 15)
797 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
799 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
800 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
803 av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must be present in block 0\n");
809 if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
810 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
811 s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
816 /* stereo rematrixing strategy and band structure */
817 if (channel_mode == AC3_CHMODE_STEREO) {
818 if (get_bits1(gbc)) {
819 s->num_rematrixing_bands = 4;
820 if(cpl_in_use && s->start_freq[CPL_CH] <= 61)
821 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
822 for(bnd=0; bnd<s->num_rematrixing_bands; bnd++)
823 s->rematrixing_flags[bnd] = get_bits1(gbc);
825 av_log(s->avctx, AV_LOG_ERROR, "new rematrixing strategy must be present in block 0\n");
830 /* exponent strategies for each channel */
831 s->exp_strategy[blk][CPL_CH] = EXP_REUSE;
832 s->exp_strategy[blk][s->lfe_ch] = EXP_REUSE;
833 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
834 s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
835 if(s->exp_strategy[blk][ch] != EXP_REUSE)
836 bit_alloc_stages[ch] = 3;
839 /* channel bandwidth */
840 for (ch = 1; ch <= fbw_channels; ch++) {
841 s->start_freq[ch] = 0;
842 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
844 int prev = s->end_freq[ch];
845 if (s->channel_in_cpl[ch])
846 s->end_freq[ch] = s->start_freq[CPL_CH];
848 int bandwidth_code = get_bits(gbc, 6);
849 if (bandwidth_code > 60) {
850 av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60", bandwidth_code);
853 s->end_freq[ch] = bandwidth_code * 3 + 73;
855 group_size = 3 << (s->exp_strategy[blk][ch] - 1);
856 s->num_exp_groups[ch] = (s->end_freq[ch]+group_size-4) / group_size;
857 if(blk > 0 && s->end_freq[ch] != prev)
858 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
861 if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
862 s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
863 (3 << (s->exp_strategy[blk][CPL_CH] - 1));
866 /* decode exponents for each channel */
867 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
868 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
869 s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
870 decode_exponents(gbc, s->exp_strategy[blk][ch],
871 s->num_exp_groups[ch], s->dexps[ch][0],
872 &s->dexps[ch][s->start_freq[ch]+!!ch]);
873 if(ch != CPL_CH && ch != s->lfe_ch)
874 skip_bits(gbc, 2); /* skip gainrng */
878 /* bit allocation information */
879 if (get_bits1(gbc)) {
880 s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
881 s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
882 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
883 s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
884 s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
885 for(ch=!cpl_in_use; ch<=s->channels; ch++)
886 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
888 av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must be present in block 0\n");
892 /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
893 if (get_bits1(gbc)) {
895 csnr = (get_bits(gbc, 6) - 15) << 4;
896 for (ch = !cpl_in_use; ch <= s->channels; ch++) { /* snr offset and fast gain */
897 s->snr_offset[ch] = (csnr + get_bits(gbc, 4)) << 2;
898 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
900 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
902 av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
906 /* coupling leak information */
908 if (get_bits1(gbc)) {
909 s->bit_alloc_params.cpl_fast_leak = get_bits(gbc, 3);
910 s->bit_alloc_params.cpl_slow_leak = get_bits(gbc, 3);
911 bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
913 av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must be present in block 0\n");
918 /* delta bit allocation information */
919 if (get_bits1(gbc)) {
920 /* delta bit allocation exists (strategy) */
921 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
922 s->dba_mode[ch] = get_bits(gbc, 2);
923 if (s->dba_mode[ch] == DBA_RESERVED) {
924 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
927 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
929 /* channel delta offset, len and bit allocation */
930 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
931 if (s->dba_mode[ch] == DBA_NEW) {
932 s->dba_nsegs[ch] = get_bits(gbc, 3);
933 for (seg = 0; seg <= s->dba_nsegs[ch]; seg++) {
934 s->dba_offsets[ch][seg] = get_bits(gbc, 5);
935 s->dba_lengths[ch][seg] = get_bits(gbc, 4);
936 s->dba_values[ch][seg] = get_bits(gbc, 3);
938 /* run last 2 bit allocation stages if new dba values */
939 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
942 } else if(blk == 0) {
943 for(ch=0; ch<=s->channels; ch++) {
944 s->dba_mode[ch] = DBA_NONE;
949 for(ch=!cpl_in_use; ch<=s->channels; ch++) {
950 if(bit_alloc_stages[ch] > 2) {
951 /* Exponent mapping into PSD and PSD integration */
952 ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
953 s->start_freq[ch], s->end_freq[ch],
954 s->psd[ch], s->band_psd[ch]);
956 if(bit_alloc_stages[ch] > 1) {
957 /* Compute excitation function, Compute masking curve, and
958 Apply delta bit allocation */
959 ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
960 s->start_freq[ch], s->end_freq[ch],
961 s->fast_gain[ch], (ch == s->lfe_ch),
962 s->dba_mode[ch], s->dba_nsegs[ch],
963 s->dba_offsets[ch], s->dba_lengths[ch],
964 s->dba_values[ch], s->mask[ch]);
966 if(bit_alloc_stages[ch] > 0) {
967 /* Compute bit allocation */
968 ff_ac3_bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
969 s->start_freq[ch], s->end_freq[ch],
971 s->bit_alloc_params.floor,
972 ff_ac3_bap_tab, s->bap[ch]);
976 /* unused dummy data */
977 if (get_bits1(gbc)) {
978 int skipl = get_bits(gbc, 9);
983 /* unpack the transform coefficients
984 this also uncouples channels if coupling is in use. */
985 get_transform_coeffs(s);
987 /* recover coefficients if rematrixing is in use */
988 if(s->channel_mode == AC3_CHMODE_STEREO)
991 /* apply scaling to coefficients (headroom, dynrng) */
992 for(ch=1; ch<=s->channels; ch++) {
993 float gain = s->mul_bias / 4194304.0f;
994 if(s->channel_mode == AC3_CHMODE_DUALMONO) {
995 gain *= s->dynamic_range[ch-1];
997 gain *= s->dynamic_range[0];
999 for(i=0; i<256; i++) {
1000 s->transform_coeffs[ch][i] = s->fixed_coeffs[ch][i] * gain;
1004 /* downmix and MDCT. order depends on whether block switching is used for
1005 any channel in this block. this is because coefficients for the long
1006 and short transforms cannot be mixed. */
1007 downmix_output = s->channels != s->out_channels &&
1008 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1009 s->fbw_channels == s->out_channels);
1010 if(different_transforms) {
1011 /* the delay samples have already been downmixed, so we upmix the delay
1012 samples in order to reconstruct all channels before downmixing. */
1018 do_imdct(s, s->channels);
1020 if(downmix_output) {
1021 ac3_downmix(s, s->output);
1024 if(downmix_output) {
1025 ac3_downmix(s, s->transform_coeffs+1);
1030 // FIXME delay[] is half the size of the other downmixes
1031 ac3_downmix(s, s->delay);
1034 do_imdct(s, s->out_channels);
1041 * Decode a single AC-3 frame.
1043 static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
1044 const uint8_t *buf, int buf_size)
1046 AC3DecodeContext *s = avctx->priv_data;
1047 int16_t *out_samples = (int16_t *)data;
1050 /* initialize the GetBitContext with the start of valid AC-3 Frame */
1051 if (s->input_buffer) {
1052 /* copy input buffer to decoder context to avoid reading past the end
1053 of the buffer, which can be caused by a damaged input stream. */
1054 memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_MAX_FRAME_SIZE));
1055 init_get_bits(&s->gbc, s->input_buffer, buf_size * 8);
1057 init_get_bits(&s->gbc, buf, buf_size * 8);
1060 /* parse the syncinfo */
1062 err = parse_frame_header(s);
1064 /* check that reported frame size fits in input buffer */
1065 if(s->frame_size > buf_size) {
1066 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1067 err = AC3_PARSE_ERROR_FRAME_SIZE;
1070 /* check for crc mismatch */
1071 if(err != AC3_PARSE_ERROR_FRAME_SIZE && avctx->error_resilience >= FF_ER_CAREFUL) {
1072 if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) {
1073 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1074 err = AC3_PARSE_ERROR_CRC;
1078 if(err && err != AC3_PARSE_ERROR_CRC) {
1080 case AC3_PARSE_ERROR_SYNC:
1081 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1083 case AC3_PARSE_ERROR_BSID:
1084 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1086 case AC3_PARSE_ERROR_SAMPLE_RATE:
1087 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1089 case AC3_PARSE_ERROR_FRAME_SIZE:
1090 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1092 case AC3_PARSE_ERROR_FRAME_TYPE:
1093 /* skip frame if CRC is ok. otherwise use error concealment. */
1094 /* TODO: add support for substreams and dependent frames */
1095 if(s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) {
1096 av_log(avctx, AV_LOG_ERROR, "unsupported frame type : skipping frame\n");
1097 return s->frame_size;
1099 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1103 av_log(avctx, AV_LOG_ERROR, "invalid header\n");
1108 /* if frame is ok, set audio parameters */
1110 avctx->sample_rate = s->sample_rate;
1111 avctx->bit_rate = s->bit_rate;
1113 /* channel config */
1114 s->out_channels = s->channels;
1115 s->output_mode = s->channel_mode;
1117 s->output_mode |= AC3_OUTPUT_LFEON;
1118 if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
1119 avctx->request_channels < s->channels) {
1120 s->out_channels = avctx->request_channels;
1121 s->output_mode = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
1123 avctx->channels = s->out_channels;
1125 /* set downmixing coefficients if needed */
1126 if(s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1127 s->fbw_channels == s->out_channels)) {
1128 set_downmix_coeffs(s);
1130 } else if (!s->out_channels) {
1131 s->out_channels = avctx->channels;
1132 if(s->out_channels < s->channels)
1133 s->output_mode = s->out_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
1136 /* decode the audio blocks */
1137 for (blk = 0; blk < s->num_blocks; blk++) {
1138 const float *output[s->out_channels];
1139 if (!err && decode_audio_block(s, blk)) {
1140 av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
1142 for (ch = 0; ch < s->out_channels; ch++)
1143 output[ch] = s->output[ch];
1144 s->dsp.float_to_int16_interleave(out_samples, output, 256, s->out_channels);
1145 out_samples += 256 * s->out_channels;
1147 *data_size = s->num_blocks * 256 * avctx->channels * sizeof (int16_t);
1148 return s->frame_size;
1152 * Uninitialize the AC-3 decoder.
1154 static av_cold int ac3_decode_end(AVCodecContext *avctx)
1156 AC3DecodeContext *s = avctx->priv_data;
1157 ff_mdct_end(&s->imdct_512);
1158 ff_mdct_end(&s->imdct_256);
1160 av_freep(&s->input_buffer);
1165 AVCodec ac3_decoder = {
1167 .type = CODEC_TYPE_AUDIO,
1169 .priv_data_size = sizeof (AC3DecodeContext),
1170 .init = ac3_decode_init,
1171 .close = ac3_decode_end,
1172 .decode = ac3_decode_frame,
1173 .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52 / AC-3"),