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