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 /** Maximum possible frame size when the specification limit is ignored */
43 #define AC3_MAX_FRAME_SIZE 21695
46 * Table of bin locations for rematrixing bands
47 * reference: Section 7.5.2 Rematrixing : Frequency Band Definitions
49 static const uint8_t rematrix_band_tab[5] = { 13, 25, 37, 61, 253 };
51 /** table for grouping exponents */
52 static uint8_t exp_ungroup_tab[128][3];
55 /** tables for ungrouping mantissas */
56 static int b1_mantissas[32][3];
57 static int b2_mantissas[128][3];
58 static int b3_mantissas[8];
59 static int b4_mantissas[128][2];
60 static int b5_mantissas[16];
63 * Quantization table: levels for symmetric. bits for asymmetric.
64 * reference: Table 7.18 Mapping of bap to Quantizer
66 static const uint8_t quantization_tab[16] = {
68 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
71 /** dynamic range table. converts codes to scale factors. */
72 static float dynamic_range_tab[256];
74 /** Adjustments in dB gain */
75 #define LEVEL_MINUS_3DB 0.7071067811865476
76 #define LEVEL_MINUS_4POINT5DB 0.5946035575013605
77 #define LEVEL_MINUS_6DB 0.5000000000000000
78 #define LEVEL_MINUS_9DB 0.3535533905932738
79 #define LEVEL_ZERO 0.0000000000000000
80 #define LEVEL_ONE 1.0000000000000000
82 static const float gain_levels[6] = {
86 LEVEL_MINUS_4POINT5DB,
92 * Table for default stereo downmixing coefficients
93 * reference: Section 7.8.2 Downmixing Into Two Channels
95 static const uint8_t ac3_default_coeffs[8][5][2] = {
96 { { 1, 0 }, { 0, 1 }, },
98 { { 1, 0 }, { 0, 1 }, },
99 { { 1, 0 }, { 3, 3 }, { 0, 1 }, },
100 { { 1, 0 }, { 0, 1 }, { 4, 4 }, },
101 { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 5, 5 }, },
102 { { 1, 0 }, { 0, 1 }, { 4, 0 }, { 0, 4 }, },
103 { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 4, 0 }, { 0, 4 }, },
106 /* override ac3.h to include coupling channel */
107 #undef AC3_MAX_CHANNELS
108 #define AC3_MAX_CHANNELS 7
111 #define AC3_OUTPUT_LFEON 8
114 int num_blocks; ///< number of audio blocks
115 int channel_mode; ///< channel mode (acmod)
116 int block_switch[AC3_MAX_CHANNELS]; ///< block switch flags
117 int dither_flag[AC3_MAX_CHANNELS]; ///< dither flags
118 int dither_all; ///< true if all channels are dithered
119 int cpl_in_use; ///< coupling in use
120 int channel_in_cpl[AC3_MAX_CHANNELS]; ///< channel in coupling
121 int phase_flags_in_use; ///< phase flags in use
122 int phase_flags[18]; ///< phase flags
123 int cpl_band_struct[18]; ///< coupling band structure
124 int num_rematrixing_bands; ///< number of rematrixing bands
125 int rematrixing_flags[4]; ///< rematrixing flags
126 int exp_strategy[AC3_MAX_CHANNELS]; ///< exponent strategies
127 int snr_offset[AC3_MAX_CHANNELS]; ///< signal-to-noise ratio offsets
128 int fast_gain[AC3_MAX_CHANNELS]; ///< fast gain values (signal-to-mask ratio)
129 int dba_mode[AC3_MAX_CHANNELS]; ///< delta bit allocation mode
130 int dba_nsegs[AC3_MAX_CHANNELS]; ///< number of delta segments
131 uint8_t dba_offsets[AC3_MAX_CHANNELS][8]; ///< delta segment offsets
132 uint8_t dba_lengths[AC3_MAX_CHANNELS][8]; ///< delta segment lengths
133 uint8_t dba_values[AC3_MAX_CHANNELS][8]; ///< delta values for each segment
135 int sample_rate; ///< sample frequency, in Hz
136 int bit_rate; ///< stream bit rate, in bits-per-second
137 int frame_size; ///< current frame size, in bytes
139 int channels; ///< number of total channels
140 int fbw_channels; ///< number of full-bandwidth channels
141 int lfe_on; ///< lfe channel in use
142 int lfe_ch; ///< index of LFE channel
143 int output_mode; ///< output channel configuration
144 int out_channels; ///< number of output channels
146 int center_mix_level; ///< Center mix level index
147 int surround_mix_level; ///< Surround mix level index
148 float downmix_coeffs[AC3_MAX_CHANNELS][2]; ///< stereo downmix coefficients
149 float downmix_coeff_adjust[2]; ///< adjustment needed for each output channel when downmixing
150 float dynamic_range[2]; ///< dynamic range
151 int cpl_coords[AC3_MAX_CHANNELS][18]; ///< coupling coordinates
152 int num_cpl_bands; ///< number of coupling bands
153 int num_cpl_subbands; ///< number of coupling sub bands
154 int start_freq[AC3_MAX_CHANNELS]; ///< start frequency bin
155 int end_freq[AC3_MAX_CHANNELS]; ///< end frequency bin
156 AC3BitAllocParameters bit_alloc_params; ///< bit allocation parameters
158 int num_exp_groups[AC3_MAX_CHANNELS]; ///< Number of exponent groups
159 int8_t dexps[AC3_MAX_CHANNELS][256]; ///< decoded exponents
160 uint8_t bap[AC3_MAX_CHANNELS][256]; ///< bit allocation pointers
161 int16_t psd[AC3_MAX_CHANNELS][256]; ///< scaled exponents
162 int16_t band_psd[AC3_MAX_CHANNELS][50]; ///< interpolated exponents
163 int16_t mask[AC3_MAX_CHANNELS][50]; ///< masking curve values
165 int fixed_coeffs[AC3_MAX_CHANNELS][256]; ///> fixed-point transform coefficients
166 DECLARE_ALIGNED_16(float, transform_coeffs[AC3_MAX_CHANNELS][256]); ///< transform coefficients
167 int downmixed; ///< indicates if coeffs are currently downmixed
170 MDCTContext imdct_512; ///< for 512 sample IMDCT
171 MDCTContext imdct_256; ///< for 256 sample IMDCT
172 DSPContext dsp; ///< for optimization
173 float add_bias; ///< offset for float_to_int16 conversion
174 float mul_bias; ///< scaling for float_to_int16 conversion
176 DECLARE_ALIGNED_16(float, output[AC3_MAX_CHANNELS][256]); ///< output after imdct transform and windowing
177 DECLARE_ALIGNED_16(short, int_output[AC3_MAX_CHANNELS-1][256]); ///< final 16-bit integer output
178 DECLARE_ALIGNED_16(float, delay[AC3_MAX_CHANNELS][256]); ///< delay - added to the next block
179 DECLARE_ALIGNED_16(float, tmp_imdct[256]); ///< temporary storage for imdct transform
180 DECLARE_ALIGNED_16(float, tmp_output[512]); ///< temporary storage for output before windowing
181 DECLARE_ALIGNED_16(float, window[256]); ///< window coefficients
184 GetBitContext gbc; ///< bitstream reader
185 AVRandomState dith_state; ///< for dither generation
186 AVCodecContext *avctx; ///< parent context
187 uint8_t *input_buffer; ///< temp buffer to prevent overread
191 * Symmetrical Dequantization
192 * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
193 * Tables 7.19 to 7.23
196 symmetric_dequant(int code, int levels)
198 return ((code - (levels >> 1)) << 24) / levels;
202 * Initialize tables at runtime.
204 static av_cold void ac3_tables_init(void)
208 /* generate grouped mantissa tables
209 reference: Section 7.3.5 Ungrouping of Mantissas */
210 for(i=0; i<32; i++) {
211 /* bap=1 mantissas */
212 b1_mantissas[i][0] = symmetric_dequant( i / 9 , 3);
213 b1_mantissas[i][1] = symmetric_dequant((i % 9) / 3, 3);
214 b1_mantissas[i][2] = symmetric_dequant((i % 9) % 3, 3);
216 for(i=0; i<128; i++) {
217 /* bap=2 mantissas */
218 b2_mantissas[i][0] = symmetric_dequant( i / 25 , 5);
219 b2_mantissas[i][1] = symmetric_dequant((i % 25) / 5, 5);
220 b2_mantissas[i][2] = symmetric_dequant((i % 25) % 5, 5);
222 /* bap=4 mantissas */
223 b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
224 b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
226 /* generate ungrouped mantissa tables
227 reference: Tables 7.21 and 7.23 */
229 /* bap=3 mantissas */
230 b3_mantissas[i] = symmetric_dequant(i, 7);
232 for(i=0; i<15; i++) {
233 /* bap=5 mantissas */
234 b5_mantissas[i] = symmetric_dequant(i, 15);
237 /* generate dynamic range table
238 reference: Section 7.7.1 Dynamic Range Control */
239 for(i=0; i<256; i++) {
240 int v = (i >> 5) - ((i >> 7) << 3) - 5;
241 dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
244 /* generate exponent tables
245 reference: Section 7.1.3 Exponent Decoding */
246 for(i=0; i<128; i++) {
247 exp_ungroup_tab[i][0] = i / 25;
248 exp_ungroup_tab[i][1] = (i % 25) / 5;
249 exp_ungroup_tab[i][2] = (i % 25) % 5;
255 * AVCodec initialization
257 static av_cold int ac3_decode_init(AVCodecContext *avctx)
259 AC3DecodeContext *s = avctx->priv_data;
264 ff_mdct_init(&s->imdct_256, 8, 1);
265 ff_mdct_init(&s->imdct_512, 9, 1);
266 ff_kbd_window_init(s->window, 5.0, 256);
267 dsputil_init(&s->dsp, avctx);
268 av_init_random(0, &s->dith_state);
270 /* set bias values for float to int16 conversion */
271 if(s->dsp.float_to_int16 == ff_float_to_int16_c) {
272 s->add_bias = 385.0f;
276 s->mul_bias = 32767.0f;
279 /* allow downmixing to stereo or mono */
280 if (avctx->channels > 0 && avctx->request_channels > 0 &&
281 avctx->request_channels < avctx->channels &&
282 avctx->request_channels <= 2) {
283 avctx->channels = avctx->request_channels;
287 /* allocate context input buffer */
288 if (avctx->error_resilience >= FF_ER_CAREFUL) {
289 s->input_buffer = av_mallocz(AC3_MAX_FRAME_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
290 if (!s->input_buffer)
291 return AVERROR_NOMEM;
298 * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
299 * GetBitContext within AC3DecodeContext must point to
300 * start of the synchronized ac3 bitstream.
302 static int ac3_parse_header(AC3DecodeContext *s)
305 GetBitContext *gbc = &s->gbc;
308 err = ff_ac3_parse_header(gbc, &hdr);
312 if(hdr.bitstream_id > 10)
313 return AC3_PARSE_ERROR_BSID;
315 /* get decoding parameters from header info */
316 s->bit_alloc_params.sr_code = hdr.sr_code;
317 s->channel_mode = hdr.channel_mode;
318 s->lfe_on = hdr.lfe_on;
319 s->bit_alloc_params.sr_shift = hdr.sr_shift;
320 s->sample_rate = hdr.sample_rate;
321 s->bit_rate = hdr.bit_rate;
322 s->channels = hdr.channels;
323 s->fbw_channels = s->channels - s->lfe_on;
324 s->lfe_ch = s->fbw_channels + 1;
325 s->frame_size = hdr.frame_size;
326 s->center_mix_level = hdr.center_mix_level;
327 s->surround_mix_level = hdr.surround_mix_level;
328 s->num_blocks = hdr.num_blocks;
331 s->start_freq[s->lfe_ch] = 0;
332 s->end_freq[s->lfe_ch] = 7;
333 s->num_exp_groups[s->lfe_ch] = 2;
334 s->channel_in_cpl[s->lfe_ch] = 0;
337 /* read the rest of the bsi. read twice for dual mono mode. */
338 i = !(s->channel_mode);
340 skip_bits(gbc, 5); // skip dialog normalization
342 skip_bits(gbc, 8); //skip compression
344 skip_bits(gbc, 8); //skip language code
346 skip_bits(gbc, 7); //skip audio production information
349 skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
351 /* skip the timecodes (or extra bitstream information for Alternate Syntax)
352 TODO: read & use the xbsi1 downmix levels */
354 skip_bits(gbc, 14); //skip timecode1 / xbsi1
356 skip_bits(gbc, 14); //skip timecode2 / xbsi2
358 /* skip additional bitstream info */
359 if (get_bits1(gbc)) {
360 i = get_bits(gbc, 6);
370 * Set stereo downmixing coefficients based on frame header info.
371 * reference: Section 7.8.2 Downmixing Into Two Channels
373 static void set_downmix_coeffs(AC3DecodeContext *s)
376 float cmix = gain_levels[s->center_mix_level];
377 float smix = gain_levels[s->surround_mix_level];
379 for(i=0; i<s->fbw_channels; i++) {
380 s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
381 s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
383 if(s->channel_mode > 1 && s->channel_mode & 1) {
384 s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
386 if(s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
387 int nf = s->channel_mode - 2;
388 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
390 if(s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
391 int nf = s->channel_mode - 4;
392 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
395 /* calculate adjustment needed for each channel to avoid clipping */
396 s->downmix_coeff_adjust[0] = s->downmix_coeff_adjust[1] = 0.0f;
397 for(i=0; i<s->fbw_channels; i++) {
398 s->downmix_coeff_adjust[0] += s->downmix_coeffs[i][0];
399 s->downmix_coeff_adjust[1] += s->downmix_coeffs[i][1];
401 s->downmix_coeff_adjust[0] = 1.0f / s->downmix_coeff_adjust[0];
402 s->downmix_coeff_adjust[1] = 1.0f / s->downmix_coeff_adjust[1];
406 * Decode the grouped exponents according to exponent strategy.
407 * reference: Section 7.1.3 Exponent Decoding
409 static void decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
410 uint8_t absexp, int8_t *dexps)
412 int i, j, grp, group_size;
417 group_size = exp_strategy + (exp_strategy == EXP_D45);
418 for(grp=0,i=0; grp<ngrps; grp++) {
419 expacc = get_bits(gbc, 7);
420 dexp[i++] = exp_ungroup_tab[expacc][0];
421 dexp[i++] = exp_ungroup_tab[expacc][1];
422 dexp[i++] = exp_ungroup_tab[expacc][2];
425 /* convert to absolute exps and expand groups */
427 for(i=0; i<ngrps*3; i++) {
428 prevexp = av_clip(prevexp + dexp[i]-2, 0, 24);
429 for(j=0; j<group_size; j++) {
430 dexps[(i*group_size)+j] = prevexp;
436 * Generate transform coefficients for each coupled channel in the coupling
437 * range using the coupling coefficients and coupling coordinates.
438 * reference: Section 7.4.3 Coupling Coordinate Format
440 static void uncouple_channels(AC3DecodeContext *s)
442 int i, j, ch, bnd, subbnd;
445 i = s->start_freq[CPL_CH];
446 for(bnd=0; bnd<s->num_cpl_bands; bnd++) {
449 for(j=0; j<12; j++) {
450 for(ch=1; ch<=s->fbw_channels; ch++) {
451 if(s->channel_in_cpl[ch]) {
452 s->fixed_coeffs[ch][i] = ((int64_t)s->fixed_coeffs[CPL_CH][i] * (int64_t)s->cpl_coords[ch][bnd]) >> 23;
453 if (ch == 2 && s->phase_flags[bnd])
454 s->fixed_coeffs[ch][i] = -s->fixed_coeffs[ch][i];
459 } while(s->cpl_band_struct[subbnd]);
464 * Grouped mantissas for 3-level 5-level and 11-level quantization
476 * Get the transform coefficients for a particular channel
477 * reference: Section 7.3 Quantization and Decoding of Mantissas
479 static void get_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
481 GetBitContext *gbc = &s->gbc;
482 int i, gcode, tbap, start, end;
487 exps = s->dexps[ch_index];
488 bap = s->bap[ch_index];
489 coeffs = s->fixed_coeffs[ch_index];
490 start = s->start_freq[ch_index];
491 end = s->end_freq[ch_index];
493 for (i = start; i < end; i++) {
497 coeffs[i] = (av_random(&s->dith_state) & 0x7FFFFF) - 4194304;
502 gcode = get_bits(gbc, 5);
503 m->b1_mant[0] = b1_mantissas[gcode][0];
504 m->b1_mant[1] = b1_mantissas[gcode][1];
505 m->b1_mant[2] = b1_mantissas[gcode][2];
508 coeffs[i] = m->b1_mant[m->b1ptr++];
513 gcode = get_bits(gbc, 7);
514 m->b2_mant[0] = b2_mantissas[gcode][0];
515 m->b2_mant[1] = b2_mantissas[gcode][1];
516 m->b2_mant[2] = b2_mantissas[gcode][2];
519 coeffs[i] = m->b2_mant[m->b2ptr++];
523 coeffs[i] = b3_mantissas[get_bits(gbc, 3)];
528 gcode = get_bits(gbc, 7);
529 m->b4_mant[0] = b4_mantissas[gcode][0];
530 m->b4_mant[1] = b4_mantissas[gcode][1];
533 coeffs[i] = m->b4_mant[m->b4ptr++];
537 coeffs[i] = b5_mantissas[get_bits(gbc, 4)];
541 /* asymmetric dequantization */
542 int qlevel = quantization_tab[tbap];
543 coeffs[i] = get_sbits(gbc, qlevel) << (24 - qlevel);
547 coeffs[i] >>= exps[i];
552 * Remove random dithering from coefficients with zero-bit mantissas
553 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
555 static void remove_dithering(AC3DecodeContext *s) {
561 for(ch=1; ch<=s->fbw_channels; ch++) {
562 if(!s->dither_flag[ch]) {
563 coeffs = s->fixed_coeffs[ch];
565 if(s->channel_in_cpl[ch])
566 end = s->start_freq[CPL_CH];
568 end = s->end_freq[ch];
569 for(i=0; i<end; i++) {
573 if(s->channel_in_cpl[ch]) {
574 bap = s->bap[CPL_CH];
575 for(; i<s->end_freq[CPL_CH]; i++) {
585 * Get the transform coefficients.
587 static void get_transform_coeffs(AC3DecodeContext *s)
593 m.b1ptr = m.b2ptr = m.b4ptr = 3;
595 for (ch = 1; ch <= s->channels; ch++) {
596 /* transform coefficients for full-bandwidth channel */
597 get_transform_coeffs_ch(s, ch, &m);
598 /* tranform coefficients for coupling channel come right after the
599 coefficients for the first coupled channel*/
600 if (s->channel_in_cpl[ch]) {
602 get_transform_coeffs_ch(s, CPL_CH, &m);
603 uncouple_channels(s);
606 end = s->end_freq[CPL_CH];
608 end = s->end_freq[ch];
611 s->fixed_coeffs[ch][end] = 0;
615 /* if any channel doesn't use dithering, zero appropriate coefficients */
621 * Stereo rematrixing.
622 * reference: Section 7.5.4 Rematrixing : Decoding Technique
624 static void do_rematrixing(AC3DecodeContext *s)
630 end = FFMIN(s->end_freq[1], s->end_freq[2]);
632 for(bnd=0; bnd<s->num_rematrixing_bands; bnd++) {
633 if(s->rematrixing_flags[bnd]) {
634 bndend = FFMIN(end, rematrix_band_tab[bnd+1]);
635 for(i=rematrix_band_tab[bnd]; i<bndend; i++) {
636 tmp0 = s->fixed_coeffs[1][i];
637 tmp1 = s->fixed_coeffs[2][i];
638 s->fixed_coeffs[1][i] = tmp0 + tmp1;
639 s->fixed_coeffs[2][i] = tmp0 - tmp1;
646 * Perform the 256-point IMDCT
648 static void do_imdct_256(AC3DecodeContext *s, int chindex)
651 DECLARE_ALIGNED_16(float, x[128]);
653 float *o_ptr = s->tmp_output;
656 /* de-interleave coefficients */
657 for(k=0; k<128; k++) {
658 x[k] = s->transform_coeffs[chindex][2*k+i];
661 /* run standard IMDCT */
662 s->imdct_256.fft.imdct_calc(&s->imdct_256, o_ptr, x, s->tmp_imdct);
664 /* reverse the post-rotation & reordering from standard IMDCT */
665 for(k=0; k<32; k++) {
666 z[i][32+k].re = -o_ptr[128+2*k];
667 z[i][32+k].im = -o_ptr[2*k];
668 z[i][31-k].re = o_ptr[2*k+1];
669 z[i][31-k].im = o_ptr[128+2*k+1];
673 /* apply AC-3 post-rotation & reordering */
674 for(k=0; k<64; k++) {
675 o_ptr[ 2*k ] = -z[0][ k].im;
676 o_ptr[ 2*k+1] = z[0][63-k].re;
677 o_ptr[128+2*k ] = -z[0][ k].re;
678 o_ptr[128+2*k+1] = z[0][63-k].im;
679 o_ptr[256+2*k ] = -z[1][ k].re;
680 o_ptr[256+2*k+1] = z[1][63-k].im;
681 o_ptr[384+2*k ] = z[1][ k].im;
682 o_ptr[384+2*k+1] = -z[1][63-k].re;
687 * Inverse MDCT Transform.
688 * Convert frequency domain coefficients to time-domain audio samples.
689 * reference: Section 7.9.4 Transformation Equations
691 static inline void do_imdct(AC3DecodeContext *s, int channels)
695 for (ch=1; ch<=channels; ch++) {
696 if (s->block_switch[ch]) {
699 s->imdct_512.fft.imdct_calc(&s->imdct_512, s->tmp_output,
700 s->transform_coeffs[ch], s->tmp_imdct);
702 /* For the first half of the block, apply the window, add the delay
703 from the previous block, and send to output */
704 s->dsp.vector_fmul_add_add(s->output[ch-1], s->tmp_output,
705 s->window, s->delay[ch-1], 0, 256, 1);
706 /* For the second half of the block, apply the window and store the
707 samples to delay, to be combined with the next block */
708 s->dsp.vector_fmul_reverse(s->delay[ch-1], s->tmp_output+256,
714 * Downmix the output to mono or stereo.
716 static void ac3_downmix(AC3DecodeContext *s,
717 float samples[AC3_MAX_CHANNELS][256], int ch_offset)
722 for(i=0; i<256; i++) {
724 for(j=0; j<s->fbw_channels; j++) {
725 v0 += samples[j+ch_offset][i] * s->downmix_coeffs[j][0];
726 v1 += samples[j+ch_offset][i] * s->downmix_coeffs[j][1];
728 v0 *= s->downmix_coeff_adjust[0];
729 v1 *= s->downmix_coeff_adjust[1];
730 if(s->output_mode == AC3_CHMODE_MONO) {
731 samples[ch_offset][i] = (v0 + v1) * LEVEL_MINUS_3DB;
732 } else if(s->output_mode == AC3_CHMODE_STEREO) {
733 samples[ ch_offset][i] = v0;
734 samples[1+ch_offset][i] = v1;
740 * Upmix delay samples from stereo to original channel layout.
742 static void ac3_upmix_delay(AC3DecodeContext *s)
744 int channel_data_size = sizeof(s->delay[0]);
745 switch(s->channel_mode) {
746 case AC3_CHMODE_DUALMONO:
747 case AC3_CHMODE_STEREO:
748 /* upmix mono to stereo */
749 memcpy(s->delay[1], s->delay[0], channel_data_size);
751 case AC3_CHMODE_2F2R:
752 memset(s->delay[3], 0, channel_data_size);
753 case AC3_CHMODE_2F1R:
754 memset(s->delay[2], 0, channel_data_size);
756 case AC3_CHMODE_3F2R:
757 memset(s->delay[4], 0, channel_data_size);
758 case AC3_CHMODE_3F1R:
759 memset(s->delay[3], 0, channel_data_size);
761 memcpy(s->delay[2], s->delay[1], channel_data_size);
762 memset(s->delay[1], 0, channel_data_size);
768 * Parse an audio block from AC-3 bitstream.
770 static int ac3_parse_audio_block(AC3DecodeContext *s, int blk)
772 int fbw_channels = s->fbw_channels;
773 int channel_mode = s->channel_mode;
775 int different_transforms;
777 GetBitContext *gbc = &s->gbc;
778 uint8_t bit_alloc_stages[AC3_MAX_CHANNELS];
780 memset(bit_alloc_stages, 0, AC3_MAX_CHANNELS);
782 /* block switch flags */
783 different_transforms = 0;
784 for (ch = 1; ch <= fbw_channels; ch++) {
785 s->block_switch[ch] = get_bits1(gbc);
786 if(ch > 1 && s->block_switch[ch] != s->block_switch[1])
787 different_transforms = 1;
790 /* dithering flags */
792 for (ch = 1; ch <= fbw_channels; ch++) {
793 s->dither_flag[ch] = get_bits1(gbc);
794 if(!s->dither_flag[ch])
799 i = !(s->channel_mode);
802 s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)]-1.0) *
803 s->avctx->drc_scale)+1.0;
804 } else if(blk == 0) {
805 s->dynamic_range[i] = 1.0f;
809 /* coupling strategy */
810 if (get_bits1(gbc)) {
811 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
812 s->cpl_in_use = get_bits1(gbc);
814 /* coupling in use */
815 int cpl_begin_freq, cpl_end_freq;
817 if (channel_mode < AC3_CHMODE_STEREO) {
818 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
822 /* determine which channels are coupled */
823 for (ch = 1; ch <= fbw_channels; ch++)
824 s->channel_in_cpl[ch] = get_bits1(gbc);
826 /* phase flags in use */
827 if (channel_mode == AC3_CHMODE_STEREO)
828 s->phase_flags_in_use = get_bits1(gbc);
830 /* coupling frequency range and band structure */
831 cpl_begin_freq = get_bits(gbc, 4);
832 cpl_end_freq = get_bits(gbc, 4);
833 if (3 + cpl_end_freq - cpl_begin_freq < 0) {
834 av_log(s->avctx, AV_LOG_ERROR, "3+cplendf = %d < cplbegf = %d\n", 3+cpl_end_freq, cpl_begin_freq);
837 s->num_cpl_bands = s->num_cpl_subbands = 3 + cpl_end_freq - cpl_begin_freq;
838 s->start_freq[CPL_CH] = cpl_begin_freq * 12 + 37;
839 s->end_freq[CPL_CH] = cpl_end_freq * 12 + 73;
840 for (bnd = 0; bnd < s->num_cpl_subbands - 1; bnd++) {
841 if (get_bits1(gbc)) {
842 s->cpl_band_struct[bnd] = 1;
846 s->cpl_band_struct[s->num_cpl_subbands-1] = 0;
848 /* coupling not in use */
849 for (ch = 1; ch <= fbw_channels; ch++)
850 s->channel_in_cpl[ch] = 0;
853 av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must be present in block 0\n");
857 /* coupling coordinates */
859 int cpl_coords_exist = 0;
861 for (ch = 1; ch <= fbw_channels; ch++) {
862 if (s->channel_in_cpl[ch]) {
863 if (get_bits1(gbc)) {
864 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
865 cpl_coords_exist = 1;
866 master_cpl_coord = 3 * get_bits(gbc, 2);
867 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
868 cpl_coord_exp = get_bits(gbc, 4);
869 cpl_coord_mant = get_bits(gbc, 4);
870 if (cpl_coord_exp == 15)
871 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
873 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
874 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
877 av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must be present in block 0\n");
883 if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
884 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
885 s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
890 /* stereo rematrixing strategy and band structure */
891 if (channel_mode == AC3_CHMODE_STEREO) {
892 if (get_bits1(gbc)) {
893 s->num_rematrixing_bands = 4;
894 if(s->cpl_in_use && s->start_freq[CPL_CH] <= 61)
895 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
896 for(bnd=0; bnd<s->num_rematrixing_bands; bnd++)
897 s->rematrixing_flags[bnd] = get_bits1(gbc);
899 av_log(s->avctx, AV_LOG_ERROR, "new rematrixing strategy must be present in block 0\n");
904 /* exponent strategies for each channel */
905 s->exp_strategy[CPL_CH] = EXP_REUSE;
906 s->exp_strategy[s->lfe_ch] = EXP_REUSE;
907 for (ch = !s->cpl_in_use; ch <= s->channels; ch++) {
908 s->exp_strategy[ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
909 if(s->exp_strategy[ch] != EXP_REUSE)
910 bit_alloc_stages[ch] = 3;
913 /* channel bandwidth */
914 for (ch = 1; ch <= fbw_channels; ch++) {
915 s->start_freq[ch] = 0;
916 if (s->exp_strategy[ch] != EXP_REUSE) {
918 int prev = s->end_freq[ch];
919 if (s->channel_in_cpl[ch])
920 s->end_freq[ch] = s->start_freq[CPL_CH];
922 int bandwidth_code = get_bits(gbc, 6);
923 if (bandwidth_code > 60) {
924 av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60", bandwidth_code);
927 s->end_freq[ch] = bandwidth_code * 3 + 73;
929 group_size = 3 << (s->exp_strategy[ch] - 1);
930 s->num_exp_groups[ch] = (s->end_freq[ch]+group_size-4) / group_size;
931 if(blk > 0 && s->end_freq[ch] != prev)
932 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
935 if (s->cpl_in_use && s->exp_strategy[CPL_CH] != EXP_REUSE) {
936 s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
937 (3 << (s->exp_strategy[CPL_CH] - 1));
940 /* decode exponents for each channel */
941 for (ch = !s->cpl_in_use; ch <= s->channels; ch++) {
942 if (s->exp_strategy[ch] != EXP_REUSE) {
943 s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
944 decode_exponents(gbc, s->exp_strategy[ch],
945 s->num_exp_groups[ch], s->dexps[ch][0],
946 &s->dexps[ch][s->start_freq[ch]+!!ch]);
947 if(ch != CPL_CH && ch != s->lfe_ch)
948 skip_bits(gbc, 2); /* skip gainrng */
952 /* bit allocation information */
953 if (get_bits1(gbc)) {
954 s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
955 s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
956 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
957 s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
958 s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
959 for(ch=!s->cpl_in_use; ch<=s->channels; ch++)
960 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
962 av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must be present in block 0\n");
966 /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
967 if (get_bits1(gbc)) {
969 csnr = (get_bits(gbc, 6) - 15) << 4;
970 for (ch = !s->cpl_in_use; ch <= s->channels; ch++) { /* snr offset and fast gain */
971 s->snr_offset[ch] = (csnr + get_bits(gbc, 4)) << 2;
972 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
974 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
976 av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
980 /* coupling leak information */
982 if (get_bits1(gbc)) {
983 s->bit_alloc_params.cpl_fast_leak = get_bits(gbc, 3);
984 s->bit_alloc_params.cpl_slow_leak = get_bits(gbc, 3);
985 bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
987 av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must be present in block 0\n");
992 /* delta bit allocation information */
993 if (get_bits1(gbc)) {
994 /* delta bit allocation exists (strategy) */
995 for (ch = !s->cpl_in_use; ch <= fbw_channels; ch++) {
996 s->dba_mode[ch] = get_bits(gbc, 2);
997 if (s->dba_mode[ch] == DBA_RESERVED) {
998 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1001 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1003 /* channel delta offset, len and bit allocation */
1004 for (ch = !s->cpl_in_use; ch <= fbw_channels; ch++) {
1005 if (s->dba_mode[ch] == DBA_NEW) {
1006 s->dba_nsegs[ch] = get_bits(gbc, 3);
1007 for (seg = 0; seg <= s->dba_nsegs[ch]; seg++) {
1008 s->dba_offsets[ch][seg] = get_bits(gbc, 5);
1009 s->dba_lengths[ch][seg] = get_bits(gbc, 4);
1010 s->dba_values[ch][seg] = get_bits(gbc, 3);
1012 /* run last 2 bit allocation stages if new dba values */
1013 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1016 } else if(blk == 0) {
1017 for(ch=0; ch<=s->channels; ch++) {
1018 s->dba_mode[ch] = DBA_NONE;
1022 /* Bit allocation */
1023 for(ch=!s->cpl_in_use; ch<=s->channels; ch++) {
1024 if(bit_alloc_stages[ch] > 2) {
1025 /* Exponent mapping into PSD and PSD integration */
1026 ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
1027 s->start_freq[ch], s->end_freq[ch],
1028 s->psd[ch], s->band_psd[ch]);
1030 if(bit_alloc_stages[ch] > 1) {
1031 /* Compute excitation function, Compute masking curve, and
1032 Apply delta bit allocation */
1033 ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1034 s->start_freq[ch], s->end_freq[ch],
1035 s->fast_gain[ch], (ch == s->lfe_ch),
1036 s->dba_mode[ch], s->dba_nsegs[ch],
1037 s->dba_offsets[ch], s->dba_lengths[ch],
1038 s->dba_values[ch], s->mask[ch]);
1040 if(bit_alloc_stages[ch] > 0) {
1041 /* Compute bit allocation */
1042 ff_ac3_bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1043 s->start_freq[ch], s->end_freq[ch],
1045 s->bit_alloc_params.floor,
1050 /* unused dummy data */
1051 if (get_bits1(gbc)) {
1052 int skipl = get_bits(gbc, 9);
1057 /* unpack the transform coefficients
1058 this also uncouples channels if coupling is in use. */
1059 get_transform_coeffs(s);
1061 /* recover coefficients if rematrixing is in use */
1062 if(s->channel_mode == AC3_CHMODE_STEREO)
1065 /* apply scaling to coefficients (headroom, dynrng) */
1066 for(ch=1; ch<=s->channels; ch++) {
1067 float gain = s->mul_bias / 4194304.0f;
1068 if(s->channel_mode == AC3_CHMODE_DUALMONO) {
1069 gain *= s->dynamic_range[ch-1];
1071 gain *= s->dynamic_range[0];
1073 for(i=0; i<256; i++) {
1074 s->transform_coeffs[ch][i] = s->fixed_coeffs[ch][i] * gain;
1078 /* downmix and MDCT. order depends on whether block switching is used for
1079 any channel in this block. this is because coefficients for the long
1080 and short transforms cannot be mixed. */
1081 downmix_output = s->channels != s->out_channels &&
1082 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1083 s->fbw_channels == s->out_channels);
1084 if(different_transforms) {
1085 /* the delay samples have already been downmixed, so we upmix the delay
1086 samples in order to reconstruct all channels before downmixing. */
1092 do_imdct(s, s->channels);
1094 if(downmix_output) {
1095 ac3_downmix(s, s->output, 0);
1098 if(downmix_output) {
1099 ac3_downmix(s, s->transform_coeffs, 1);
1104 ac3_downmix(s, s->delay, 0);
1107 do_imdct(s, s->out_channels);
1110 /* convert float to 16-bit integer */
1111 for(ch=0; ch<s->out_channels; ch++) {
1112 for(i=0; i<256; i++) {
1113 s->output[ch][i] += s->add_bias;
1115 s->dsp.float_to_int16(s->int_output[ch], s->output[ch], 256);
1122 * Decode a single AC-3 frame.
1124 static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
1125 const uint8_t *buf, int buf_size)
1127 AC3DecodeContext *s = avctx->priv_data;
1128 int16_t *out_samples = (int16_t *)data;
1129 int i, blk, ch, err;
1131 /* initialize the GetBitContext with the start of valid AC-3 Frame */
1132 if (s->input_buffer) {
1133 /* copy input buffer to decoder context to avoid reading past the end
1134 of the buffer, which can be caused by a damaged input stream. */
1135 memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_MAX_FRAME_SIZE));
1136 init_get_bits(&s->gbc, s->input_buffer, buf_size * 8);
1138 init_get_bits(&s->gbc, buf, buf_size * 8);
1141 /* parse the syncinfo */
1143 err = ac3_parse_header(s);
1145 /* check that reported frame size fits in input buffer */
1146 if(s->frame_size > buf_size) {
1147 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1148 err = AC3_PARSE_ERROR_FRAME_SIZE;
1151 /* check for crc mismatch */
1152 if(err != AC3_PARSE_ERROR_FRAME_SIZE && avctx->error_resilience >= FF_ER_CAREFUL) {
1153 if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) {
1154 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1155 err = AC3_PARSE_ERROR_CRC;
1159 if(err && err != AC3_PARSE_ERROR_CRC) {
1161 case AC3_PARSE_ERROR_SYNC:
1162 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1164 case AC3_PARSE_ERROR_BSID:
1165 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1167 case AC3_PARSE_ERROR_SAMPLE_RATE:
1168 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1170 case AC3_PARSE_ERROR_FRAME_SIZE:
1171 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1173 case AC3_PARSE_ERROR_FRAME_TYPE:
1174 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1177 av_log(avctx, AV_LOG_ERROR, "invalid header\n");
1182 /* if frame is ok, set audio parameters */
1184 avctx->sample_rate = s->sample_rate;
1185 avctx->bit_rate = s->bit_rate;
1187 /* channel config */
1188 s->out_channels = s->channels;
1189 s->output_mode = s->channel_mode;
1191 s->output_mode |= AC3_OUTPUT_LFEON;
1192 if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
1193 avctx->request_channels < s->channels) {
1194 s->out_channels = avctx->request_channels;
1195 s->output_mode = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
1197 avctx->channels = s->out_channels;
1199 /* set downmixing coefficients if needed */
1200 if(s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1201 s->fbw_channels == s->out_channels)) {
1202 set_downmix_coeffs(s);
1204 } else if (!s->out_channels) {
1205 s->out_channels = avctx->channels;
1206 if(s->out_channels < s->channels)
1207 s->output_mode = s->out_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
1210 /* parse the audio blocks */
1211 for (blk = 0; blk < s->num_blocks; blk++) {
1212 if (!err && ac3_parse_audio_block(s, blk)) {
1213 av_log(avctx, AV_LOG_ERROR, "error parsing the audio block\n");
1216 /* interleave output samples */
1217 for (i = 0; i < 256; i++)
1218 for (ch = 0; ch < s->out_channels; ch++)
1219 *(out_samples++) = s->int_output[ch][i];
1221 *data_size = s->num_blocks * 256 * avctx->channels * sizeof (int16_t);
1222 return s->frame_size;
1226 * Uninitialize the AC-3 decoder.
1228 static av_cold int ac3_decode_end(AVCodecContext *avctx)
1230 AC3DecodeContext *s = avctx->priv_data;
1231 ff_mdct_end(&s->imdct_512);
1232 ff_mdct_end(&s->imdct_256);
1234 av_freep(&s->input_buffer);
1239 AVCodec ac3_decoder = {
1241 .type = CODEC_TYPE_AUDIO,
1243 .priv_data_size = sizeof (AC3DecodeContext),
1244 .init = ac3_decode_init,
1245 .close = ac3_decode_end,
1246 .decode = ac3_decode_frame,
1247 .long_name = "ATSC A/52 / AC-3",