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  AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
183  ff_dsputil_init(&s->dsp, avctx);
184 
185 #if (USE_FIXED)
187 #else
189 #endif
190 
192  ff_fmt_convert_init(&s->fmt_conv, avctx);
193  av_lfg_init(&s->dith_state, 0);
194 
195  if (USE_FIXED)
197  else
199 
200  /* allow downmixing to stereo or mono */
201 #if FF_API_REQUEST_CHANNELS
203  if (avctx->request_channels == 1)
205  else if (avctx->request_channels == 2)
208 #endif
209  if (avctx->channels > 1 &&
211  avctx->channels = 1;
212  else if (avctx->channels > 2 &&
214  avctx->channels = 2;
215  s->downmixed = 1;
216 
217  for (i = 0; i < AC3_MAX_CHANNELS; i++) {
218  s->xcfptr[i] = s->transform_coeffs[i];
219  s->dlyptr[i] = s->delay[i];
220  }
221 
222  return 0;
223 }
224 
225 /**
226  * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
227  * GetBitContext within AC3DecodeContext must point to
228  * the start of the synchronized AC-3 bitstream.
229  */
231 {
232  GetBitContext *gbc = &s->gbc;
233  int i;
234 
235  /* read the rest of the bsi. read twice for dual mono mode. */
236  i = !s->channel_mode;
237  do {
238  skip_bits(gbc, 5); // skip dialog normalization
239  if (get_bits1(gbc))
240  skip_bits(gbc, 8); //skip compression
241  if (get_bits1(gbc))
242  skip_bits(gbc, 8); //skip language code
243  if (get_bits1(gbc))
244  skip_bits(gbc, 7); //skip audio production information
245  } while (i--);
246 
247  skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
248 
249  /* skip the timecodes or parse the Alternate Bit Stream Syntax */
250  if (s->bitstream_id != 6) {
251  if (get_bits1(gbc))
252  skip_bits(gbc, 14); //skip timecode1
253  if (get_bits1(gbc))
254  skip_bits(gbc, 14); //skip timecode2
255  } else {
256  if (get_bits1(gbc)) {
257  s->preferred_downmix = get_bits(gbc, 2);
258  s->center_mix_level_ltrt = get_bits(gbc, 3);
259  s->surround_mix_level_ltrt = av_clip(get_bits(gbc, 3), 3, 7);
260  s->center_mix_level = get_bits(gbc, 3);
261  s->surround_mix_level = av_clip(get_bits(gbc, 3), 3, 7);
262  }
263  if (get_bits1(gbc)) {
264  s->dolby_surround_ex_mode = get_bits(gbc, 2);
265  s->dolby_headphone_mode = get_bits(gbc, 2);
266  skip_bits(gbc, 10); // skip adconvtyp (1), xbsi2 (8), encinfo (1)
267  }
268  }
269 
270  /* skip additional bitstream info */
271  if (get_bits1(gbc)) {
272  i = get_bits(gbc, 6);
273  do {
274  skip_bits(gbc, 8);
275  } while (i--);
276  }
277 
278  return 0;
279 }
280 
281 /**
282  * Common function to parse AC-3 or E-AC-3 frame header
283  */
285 {
286  AC3HeaderInfo hdr, *phdr=&hdr;
287  int err;
288 
289  err = avpriv_ac3_parse_header2(&s->gbc, &phdr);
290  if (err)
291  return err;
292 
293  /* get decoding parameters from header info */
295  s->bitstream_id = hdr.bitstream_id;
297  s->channel_mode = hdr.channel_mode;
298  s->lfe_on = hdr.lfe_on;
300  s->sample_rate = hdr.sample_rate;
301  s->bit_rate = hdr.bit_rate;
302  s->channels = hdr.channels;
303  s->fbw_channels = s->channels - s->lfe_on;
304  s->lfe_ch = s->fbw_channels + 1;
305  s->frame_size = hdr.frame_size;
308  s->center_mix_level_ltrt = 4; // -3.0dB
310  s->surround_mix_level_ltrt = 4; // -3.0dB
311  s->lfe_mix_level_exists = 0;
312  s->num_blocks = hdr.num_blocks;
313  s->frame_type = hdr.frame_type;
314  s->substreamid = hdr.substreamid;
318 
319  if (s->lfe_on) {
320  s->start_freq[s->lfe_ch] = 0;
321  s->end_freq[s->lfe_ch] = 7;
322  s->num_exp_groups[s->lfe_ch] = 2;
323  s->channel_in_cpl[s->lfe_ch] = 0;
324  }
325 
326  if (s->bitstream_id <= 10) {
327  s->eac3 = 0;
328  s->snr_offset_strategy = 2;
329  s->block_switch_syntax = 1;
330  s->dither_flag_syntax = 1;
331  s->bit_allocation_syntax = 1;
332  s->fast_gain_syntax = 0;
333  s->first_cpl_leak = 0;
334  s->dba_syntax = 1;
335  s->skip_syntax = 1;
336  memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
337  return ac3_parse_header(s);
338  } else if (CONFIG_EAC3_DECODER) {
339  s->eac3 = 1;
340  return ff_eac3_parse_header(s);
341  } else {
342  av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
343  return AVERROR(ENOSYS);
344  }
345 }
346 
347 /**
348  * Set stereo downmixing coefficients based on frame header info.
349  * reference: Section 7.8.2 Downmixing Into Two Channels
350  */
352 {
353  int i;
354  float cmix = gain_levels[s-> center_mix_level];
355  float smix = gain_levels[s->surround_mix_level];
356  float norm0, norm1;
357  float downmix_coeffs[AC3_MAX_CHANNELS][2];
358 
359  for (i = 0; i < s->fbw_channels; i++) {
360  downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
361  downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
362  }
363  if (s->channel_mode > 1 && s->channel_mode & 1) {
364  downmix_coeffs[1][0] = downmix_coeffs[1][1] = cmix;
365  }
367  int nf = s->channel_mode - 2;
368  downmix_coeffs[nf][0] = downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
369  }
371  int nf = s->channel_mode - 4;
372  downmix_coeffs[nf][0] = downmix_coeffs[nf+1][1] = smix;
373  }
374 
375  /* renormalize */
376  norm0 = norm1 = 0.0;
377  for (i = 0; i < s->fbw_channels; i++) {
378  norm0 += downmix_coeffs[i][0];
379  norm1 += downmix_coeffs[i][1];
380  }
381  norm0 = 1.0f / norm0;
382  norm1 = 1.0f / norm1;
383  for (i = 0; i < s->fbw_channels; i++) {
384  downmix_coeffs[i][0] *= norm0;
385  downmix_coeffs[i][1] *= norm1;
386  }
387 
388  if (s->output_mode == AC3_CHMODE_MONO) {
389  for (i = 0; i < s->fbw_channels; i++)
390  downmix_coeffs[i][0] = (downmix_coeffs[i][0] +
391  downmix_coeffs[i][1]) * LEVEL_MINUS_3DB;
392  }
393  for (i = 0; i < s->fbw_channels; i++) {
394  s->downmix_coeffs[i][0] = FIXR12(downmix_coeffs[i][0]);
395  s->downmix_coeffs[i][1] = FIXR12(downmix_coeffs[i][1]);
396  }
397 }
398 
399 /**
400  * Decode the grouped exponents according to exponent strategy.
401  * reference: Section 7.1.3 Exponent Decoding
402  */
403 static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
404  uint8_t absexp, int8_t *dexps)
405 {
406  int i, j, grp, group_size;
407  int dexp[256];
408  int expacc, prevexp;
409 
410  /* unpack groups */
411  group_size = exp_strategy + (exp_strategy == EXP_D45);
412  for (grp = 0, i = 0; grp < ngrps; grp++) {
413  expacc = get_bits(gbc, 7);
414  dexp[i++] = ungroup_3_in_7_bits_tab[expacc][0];
415  dexp[i++] = ungroup_3_in_7_bits_tab[expacc][1];
416  dexp[i++] = ungroup_3_in_7_bits_tab[expacc][2];
417  }
418 
419  /* convert to absolute exps and expand groups */
420  prevexp = absexp;
421  for (i = 0, j = 0; i < ngrps * 3; i++) {
422  prevexp += dexp[i] - 2;
423  if (prevexp > 24U)
424  return -1;
425  switch (group_size) {
426  case 4: dexps[j++] = prevexp;
427  dexps[j++] = prevexp;
428  case 2: dexps[j++] = prevexp;
429  case 1: dexps[j++] = prevexp;
430  }
431  }
432  return 0;
433 }
434 
435 /**
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
439  */
441 {
442  int bin, band, ch;
443 
444  bin = s->start_freq[CPL_CH];
445  for (band = 0; band < s->num_cpl_bands; band++) {
446  int band_start = bin;
447  int band_end = bin + s->cpl_band_sizes[band];
448  for (ch = 1; ch <= s->fbw_channels; ch++) {
449  if (s->channel_in_cpl[ch]) {
450  int cpl_coord = s->cpl_coords[ch][band] << 5;
451  for (bin = band_start; bin < band_end; bin++) {
452  s->fixed_coeffs[ch][bin] =
453  MULH(s->fixed_coeffs[CPL_CH][bin] << 4, cpl_coord);
454  }
455  if (ch == 2 && s->phase_flags[band]) {
456  for (bin = band_start; bin < band_end; bin++)
457  s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
458  }
459  }
460  }
461  bin = band_end;
462  }
463 }
464 
465 /**
466  * Grouped mantissas for 3-level 5-level and 11-level quantization
467  */
468 typedef struct {
469  int b1_mant[2];
470  int b2_mant[2];
471  int b4_mant;
472  int b1;
473  int b2;
474  int b4;
475 } mant_groups;
476 
477 /**
478  * Decode the transform coefficients for a particular channel
479  * reference: Section 7.3 Quantization and Decoding of Mantissas
480  */
482 {
483  int start_freq = s->start_freq[ch_index];
484  int end_freq = s->end_freq[ch_index];
485  uint8_t *baps = s->bap[ch_index];
486  int8_t *exps = s->dexps[ch_index];
487  int32_t *coeffs = s->fixed_coeffs[ch_index];
488  int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
489  GetBitContext *gbc = &s->gbc;
490  int freq;
491 
492  for (freq = start_freq; freq < end_freq; freq++) {
493  int bap = baps[freq];
494  int mantissa;
495  switch (bap) {
496  case 0:
497  /* random noise with approximate range of -0.707 to 0.707 */
498  if (dither)
499  mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
500  else
501  mantissa = 0;
502  break;
503  case 1:
504  if (m->b1) {
505  m->b1--;
506  mantissa = m->b1_mant[m->b1];
507  } else {
508  int bits = get_bits(gbc, 5);
509  mantissa = b1_mantissas[bits][0];
510  m->b1_mant[1] = b1_mantissas[bits][1];
511  m->b1_mant[0] = b1_mantissas[bits][2];
512  m->b1 = 2;
513  }
514  break;
515  case 2:
516  if (m->b2) {
517  m->b2--;
518  mantissa = m->b2_mant[m->b2];
519  } else {
520  int bits = get_bits(gbc, 7);
521  mantissa = b2_mantissas[bits][0];
522  m->b2_mant[1] = b2_mantissas[bits][1];
523  m->b2_mant[0] = b2_mantissas[bits][2];
524  m->b2 = 2;
525  }
526  break;
527  case 3:
528  mantissa = b3_mantissas[get_bits(gbc, 3)];
529  break;
530  case 4:
531  if (m->b4) {
532  m->b4 = 0;
533  mantissa = m->b4_mant;
534  } else {
535  int bits = get_bits(gbc, 7);
536  mantissa = b4_mantissas[bits][0];
537  m->b4_mant = b4_mantissas[bits][1];
538  m->b4 = 1;
539  }
540  break;
541  case 5:
542  mantissa = b5_mantissas[get_bits(gbc, 4)];
543  break;
544  default: /* 6 to 15 */
545  /* Shift mantissa and sign-extend it. */
546  if (bap > 15) {
547  av_log(s->avctx, AV_LOG_ERROR, "bap %d is invalid in plain AC-3\n", bap);
548  bap = 15;
549  }
550  mantissa = get_sbits(gbc, quantization_tab[bap]);
551  mantissa <<= 24 - quantization_tab[bap];
552  break;
553  }
554  coeffs[freq] = mantissa >> exps[freq];
555  }
556 }
557 
558 /**
559  * Remove random dithering from coupling range coefficients with zero-bit
560  * mantissas for coupled channels which do not use dithering.
561  * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
562  */
564  int ch, i;
565 
566  for (ch = 1; ch <= s->fbw_channels; ch++) {
567  if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
568  for (i = s->start_freq[CPL_CH]; i < s->end_freq[CPL_CH]; i++) {
569  if (!s->bap[CPL_CH][i])
570  s->fixed_coeffs[ch][i] = 0;
571  }
572  }
573  }
574 }
575 
577  mant_groups *m)
578 {
579  if (!s->channel_uses_aht[ch]) {
581  } else {
582  /* if AHT is used, mantissas for all blocks are encoded in the first
583  block of the frame. */
584  int bin;
585  if (!blk && CONFIG_EAC3_DECODER)
587  for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
588  s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
589  }
590  }
591 }
592 
593 /**
594  * Decode the transform coefficients.
595  */
597 {
598  int ch, end;
599  int got_cplchan = 0;
600  mant_groups m;
601 
602  m.b1 = m.b2 = m.b4 = 0;
603 
604  for (ch = 1; ch <= s->channels; ch++) {
605  /* transform coefficients for full-bandwidth channel */
606  decode_transform_coeffs_ch(s, blk, ch, &m);
607  /* transform coefficients for coupling channel come right after the
608  coefficients for the first coupled channel*/
609  if (s->channel_in_cpl[ch]) {
610  if (!got_cplchan) {
611  decode_transform_coeffs_ch(s, blk, CPL_CH, &m);
613  got_cplchan = 1;
614  }
615  end = s->end_freq[CPL_CH];
616  } else {
617  end = s->end_freq[ch];
618  }
619  do
620  s->fixed_coeffs[ch][end] = 0;
621  while (++end < 256);
622  }
623 
624  /* zero the dithered coefficients for appropriate channels */
625  remove_dithering(s);
626 }
627 
628 /**
629  * Stereo rematrixing.
630  * reference: Section 7.5.4 Rematrixing : Decoding Technique
631  */
633 {
634  int bnd, i;
635  int end, bndend;
636 
637  end = FFMIN(s->end_freq[1], s->end_freq[2]);
638 
639  for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
640  if (s->rematrixing_flags[bnd]) {
641  bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd + 1]);
642  for (i = ff_ac3_rematrix_band_tab[bnd]; i < bndend; i++) {
643  int tmp0 = s->fixed_coeffs[1][i];
644  s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
645  s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
646  }
647  }
648  }
649 }
650 
651 /**
652  * Inverse MDCT Transform.
653  * Convert frequency domain coefficients to time-domain audio samples.
654  * reference: Section 7.9.4 Transformation Equations
655  */
656 static inline void do_imdct(AC3DecodeContext *s, int channels)
657 {
658  int ch;
659 
660  for (ch = 1; ch <= channels; ch++) {
661  if (s->block_switch[ch]) {
662  int i;
663  FFTSample *x = s->tmp_output + 128;
664  for (i = 0; i < 128; i++)
665  x[i] = s->transform_coeffs[ch][2 * i];
666  s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x);
667 #if USE_FIXED
668  s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1],
669  s->tmp_output, s->window, 128, 8);
670 #else
671  s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
672  s->tmp_output, s->window, 128);
673 #endif
674  for (i = 0; i < 128; i++)
675  x[i] = s->transform_coeffs[ch][2 * i + 1];
676  s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch - 1], x);
677  } else {
679 #if USE_FIXED
680  s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1],
681  s->tmp_output, s->window, 128, 8);
682 #else
683  s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
684  s->tmp_output, s->window, 128);
685 #endif
686  memcpy(s->delay[ch - 1], s->tmp_output + 128, 128 * sizeof(FFTSample));
687  }
688  }
689 }
690 
691 /**
692  * Upmix delay samples from stereo to original channel layout.
693  */
695 {
696  int channel_data_size = sizeof(s->delay[0]);
697  switch (s->channel_mode) {
698  case AC3_CHMODE_DUALMONO:
699  case AC3_CHMODE_STEREO:
700  /* upmix mono to stereo */
701  memcpy(s->delay[1], s->delay[0], channel_data_size);
702  break;
703  case AC3_CHMODE_2F2R:
704  memset(s->delay[3], 0, channel_data_size);
705  case AC3_CHMODE_2F1R:
706  memset(s->delay[2], 0, channel_data_size);
707  break;
708  case AC3_CHMODE_3F2R:
709  memset(s->delay[4], 0, channel_data_size);
710  case AC3_CHMODE_3F1R:
711  memset(s->delay[3], 0, channel_data_size);
712  case AC3_CHMODE_3F:
713  memcpy(s->delay[2], s->delay[1], channel_data_size);
714  memset(s->delay[1], 0, channel_data_size);
715  break;
716  }
717 }
718 
719 /**
720  * Decode band structure for coupling, spectral extension, or enhanced coupling.
721  * The band structure defines how many subbands are in each band. For each
722  * subband in the range, 1 means it is combined with the previous band, and 0
723  * means that it starts a new band.
724  *
725  * @param[in] gbc bit reader context
726  * @param[in] blk block number
727  * @param[in] eac3 flag to indicate E-AC-3
728  * @param[in] ecpl flag to indicate enhanced coupling
729  * @param[in] start_subband subband number for start of range
730  * @param[in] end_subband subband number for end of range
731  * @param[in] default_band_struct default band structure table
732  * @param[out] num_bands number of bands (optionally NULL)
733  * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
734  */
735 static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
736  int ecpl, int start_subband, int end_subband,
737  const uint8_t *default_band_struct,
738  int *num_bands, uint8_t *band_sizes)
739 {
740  int subbnd, bnd, n_subbands, n_bands=0;
741  uint8_t bnd_sz[22];
742  uint8_t coded_band_struct[22];
743  const uint8_t *band_struct;
744 
745  n_subbands = end_subband - start_subband;
746 
747  /* decode band structure from bitstream or use default */
748  if (!eac3 || get_bits1(gbc)) {
749  for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
750  coded_band_struct[subbnd] = get_bits1(gbc);
751  }
752  band_struct = coded_band_struct;
753  } else if (!blk) {
754  band_struct = &default_band_struct[start_subband+1];
755  } else {
756  /* no change in band structure */
757  return;
758  }
759 
760  /* calculate number of bands and band sizes based on band structure.
761  note that the first 4 subbands in enhanced coupling span only 6 bins
762  instead of 12. */
763  if (num_bands || band_sizes ) {
764  n_bands = n_subbands;
765  bnd_sz[0] = ecpl ? 6 : 12;
766  for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
767  int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
768  if (band_struct[subbnd - 1]) {
769  n_bands--;
770  bnd_sz[bnd] += subbnd_size;
771  } else {
772  bnd_sz[++bnd] = subbnd_size;
773  }
774  }
775  }
776 
777  /* set optional output params */
778  if (num_bands)
779  *num_bands = n_bands;
780  if (band_sizes)
781  memcpy(band_sizes, bnd_sz, n_bands);
782 }
783 
784 /**
785  * Decode a single audio block from the AC-3 bitstream.
786  */
788 {
789  int fbw_channels = s->fbw_channels;
790  int channel_mode = s->channel_mode;
791  int i, bnd, seg, ch;
792  int different_transforms;
793  int downmix_output;
794  int cpl_in_use;
795  GetBitContext *gbc = &s->gbc;
796  uint8_t bit_alloc_stages[AC3_MAX_CHANNELS] = { 0 };
797 
798  /* block switch flags */
799  different_transforms = 0;
800  if (s->block_switch_syntax) {
801  for (ch = 1; ch <= fbw_channels; ch++) {
802  s->block_switch[ch] = get_bits1(gbc);
803  if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
804  different_transforms = 1;
805  }
806  }
807 
808  /* dithering flags */
809  if (s->dither_flag_syntax) {
810  for (ch = 1; ch <= fbw_channels; ch++) {
811  s->dither_flag[ch] = get_bits1(gbc);
812  }
813  }
814 
815  /* dynamic range */
816  i = !s->channel_mode;
817  do {
818  if (get_bits1(gbc)) {
819  /* Allow asymmetric application of DRC when drc_scale > 1.
820  Amplification of quiet sounds is enhanced */
821  INTFLOAT range = AC3_RANGE(get_bits(gbc, 8));
822  if (range > 1.0 || s->drc_scale <= 1.0)
823  s->dynamic_range[i] = AC3_DYNAMIC_RANGE(range);
824  else
825  s->dynamic_range[i] = range;
826  } else if (blk == 0) {
828  }
829  } while (i--);
830 
831  /* spectral extension strategy */
832  if (s->eac3 && (!blk || get_bits1(gbc))) {
833  s->spx_in_use = get_bits1(gbc);
834  if (s->spx_in_use) {
835  int dst_start_freq, dst_end_freq, src_start_freq,
836  start_subband, end_subband;
837 
838  /* determine which channels use spx */
839  if (s->channel_mode == AC3_CHMODE_MONO) {
840  s->channel_uses_spx[1] = 1;
841  } else {
842  for (ch = 1; ch <= fbw_channels; ch++)
843  s->channel_uses_spx[ch] = get_bits1(gbc);
844  }
845 
846  /* get the frequency bins of the spx copy region and the spx start
847  and end subbands */
848  dst_start_freq = get_bits(gbc, 2);
849  start_subband = get_bits(gbc, 3) + 2;
850  if (start_subband > 7)
851  start_subband += start_subband - 7;
852  end_subband = get_bits(gbc, 3) + 5;
853 #if USE_FIXED
854  s->spx_dst_end_freq = end_freq_inv_tab[end_subband];
855 #endif
856  if (end_subband > 7)
857  end_subband += end_subband - 7;
858  dst_start_freq = dst_start_freq * 12 + 25;
859  src_start_freq = start_subband * 12 + 25;
860  dst_end_freq = end_subband * 12 + 25;
861 
862  /* check validity of spx ranges */
863  if (start_subband >= end_subband) {
864  av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
865  "range (%d >= %d)\n", start_subband, end_subband);
866  return AVERROR_INVALIDDATA;
867  }
868  if (dst_start_freq >= src_start_freq) {
869  av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
870  "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
871  return AVERROR_INVALIDDATA;
872  }
873 
874  s->spx_dst_start_freq = dst_start_freq;
875  s->spx_src_start_freq = src_start_freq;
876  if (!USE_FIXED)
877  s->spx_dst_end_freq = dst_end_freq;
878 
879  decode_band_structure(gbc, blk, s->eac3, 0,
880  start_subband, end_subband,
882  &s->num_spx_bands,
883  s->spx_band_sizes);
884  } else {
885  for (ch = 1; ch <= fbw_channels; ch++) {
886  s->channel_uses_spx[ch] = 0;
887  s->first_spx_coords[ch] = 1;
888  }
889  }
890  }
891 
892  /* spectral extension coordinates */
893  if (s->spx_in_use) {
894  for (ch = 1; ch <= fbw_channels; ch++) {
895  if (s->channel_uses_spx[ch]) {
896  if (s->first_spx_coords[ch] || get_bits1(gbc)) {
897  INTFLOAT spx_blend;
898  int bin, master_spx_coord;
899 
900  s->first_spx_coords[ch] = 0;
901  spx_blend = AC3_SPX_BLEND(get_bits(gbc, 5));
902  master_spx_coord = get_bits(gbc, 2) * 3;
903 
904  bin = s->spx_src_start_freq;
905  for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
906  int bandsize;
907  int spx_coord_exp, spx_coord_mant;
908  INTFLOAT nratio, sblend, nblend;
909 #if USE_FIXED
910  int64_t accu;
911  /* calculate blending factors */
912  bandsize = s->spx_band_sizes[bnd];
913  accu = (int64_t)((bin << 23) + (bandsize << 22)) * s->spx_dst_end_freq;
914  nratio = (int)(accu >> 32);
915  nratio -= spx_blend << 18;
916 
917  if (nratio < 0) {
918  nblend = 0;
919  sblend = 0x800000;
920  } else if (nratio > 0x7fffff) {
921  nblend = 0x800000;
922  sblend = 0;
923  } else {
924  nblend = fixed_sqrt(nratio, 23);
925  accu = (int64_t)nblend * 1859775393;
926  nblend = (int)((accu + (1<<29)) >> 30);
927  sblend = fixed_sqrt(0x800000 - nratio, 23);
928  }
929 #else
930  float spx_coord;
931 
932  /* calculate blending factors */
933  bandsize = s->spx_band_sizes[bnd];
934  nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
935  nratio = av_clipf(nratio, 0.0f, 1.0f);
936  nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3)
937  // to give unity variance
938  sblend = sqrtf(1.0f - nratio);
939 #endif
940  bin += bandsize;
941 
942  /* decode spx coordinates */
943  spx_coord_exp = get_bits(gbc, 4);
944  spx_coord_mant = get_bits(gbc, 2);
945  if (spx_coord_exp == 15) spx_coord_mant <<= 1;
946  else spx_coord_mant += 4;
947  spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
948 
949  /* multiply noise and signal blending factors by spx coordinate */
950 #if USE_FIXED
951  accu = (int64_t)nblend * spx_coord_mant;
952  s->spx_noise_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
953  accu = (int64_t)sblend * spx_coord_mant;
954  s->spx_signal_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
955 #else
956  spx_coord = spx_coord_mant * (1.0f / (1 << 23));
957  s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
958  s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
959 #endif
960  }
961  }
962  } else {
963  s->first_spx_coords[ch] = 1;
964  }
965  }
966  }
967 
968  /* coupling strategy */
969  if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
970  memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
971  if (!s->eac3)
972  s->cpl_in_use[blk] = get_bits1(gbc);
973  if (s->cpl_in_use[blk]) {
974  /* coupling in use */
975  int cpl_start_subband, cpl_end_subband;
976 
977  if (channel_mode < AC3_CHMODE_STEREO) {
978  av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
979  return AVERROR_INVALIDDATA;
980  }
981 
982  /* check for enhanced coupling */
983  if (s->eac3 && get_bits1(gbc)) {
984  /* TODO: parse enhanced coupling strategy info */
985  avpriv_request_sample(s->avctx, "Enhanced coupling");
986  return AVERROR_PATCHWELCOME;
987  }
988 
989  /* determine which channels are coupled */
990  if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
991  s->channel_in_cpl[1] = 1;
992  s->channel_in_cpl[2] = 1;
993  } else {
994  for (ch = 1; ch <= fbw_channels; ch++)
995  s->channel_in_cpl[ch] = get_bits1(gbc);
996  }
997 
998  /* phase flags in use */
999  if (channel_mode == AC3_CHMODE_STEREO)
1000  s->phase_flags_in_use = get_bits1(gbc);
1001 
1002  /* coupling frequency range */
1003  cpl_start_subband = get_bits(gbc, 4);
1004  cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
1005  get_bits(gbc, 4) + 3;
1006  if (cpl_start_subband >= cpl_end_subband) {
1007  av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
1008  cpl_start_subband, cpl_end_subband);
1009  return AVERROR_INVALIDDATA;
1010  }
1011  s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
1012  s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
1013 
1014  decode_band_structure(gbc, blk, s->eac3, 0, cpl_start_subband,
1015  cpl_end_subband,
1017  &s->num_cpl_bands, s->cpl_band_sizes);
1018  } else {
1019  /* coupling not in use */
1020  for (ch = 1; ch <= fbw_channels; ch++) {
1021  s->channel_in_cpl[ch] = 0;
1022  s->first_cpl_coords[ch] = 1;
1023  }
1024  s->first_cpl_leak = s->eac3;
1025  s->phase_flags_in_use = 0;
1026  }
1027  } else if (!s->eac3) {
1028  if (!blk) {
1029  av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must "
1030  "be present in block 0\n");
1031  return AVERROR_INVALIDDATA;
1032  } else {
1033  s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
1034  }
1035  }
1036  cpl_in_use = s->cpl_in_use[blk];
1037 
1038  /* coupling coordinates */
1039  if (cpl_in_use) {
1040  int cpl_coords_exist = 0;
1041 
1042  for (ch = 1; ch <= fbw_channels; ch++) {
1043  if (s->channel_in_cpl[ch]) {
1044  if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(gbc)) {
1045  int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
1046  s->first_cpl_coords[ch] = 0;
1047  cpl_coords_exist = 1;
1048  master_cpl_coord = 3 * get_bits(gbc, 2);
1049  for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1050  cpl_coord_exp = get_bits(gbc, 4);
1051  cpl_coord_mant = get_bits(gbc, 4);
1052  if (cpl_coord_exp == 15)
1053  s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
1054  else
1055  s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
1056  s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
1057  }
1058  } else if (!blk) {
1059  av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must "
1060  "be present in block 0\n");
1061  return AVERROR_INVALIDDATA;
1062  }
1063  } else {
1064  /* channel not in coupling */
1065  s->first_cpl_coords[ch] = 1;
1066  }
1067  }
1068  /* phase flags */
1069  if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
1070  for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1071  s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
1072  }
1073  }
1074  }
1075 
1076  /* stereo rematrixing strategy and band structure */
1077  if (channel_mode == AC3_CHMODE_STEREO) {
1078  if ((s->eac3 && !blk) || get_bits1(gbc)) {
1079  s->num_rematrixing_bands = 4;
1080  if (cpl_in_use && s->start_freq[CPL_CH] <= 61) {
1081  s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
1082  } else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1083  s->num_rematrixing_bands--;
1084  }
1085  for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1086  s->rematrixing_flags[bnd] = get_bits1(gbc);
1087  } else if (!blk) {
1088  av_log(s->avctx, AV_LOG_WARNING, "Warning: "
1089  "new rematrixing strategy not present in block 0\n");
1090  s->num_rematrixing_bands = 0;
1091  }
1092  }
1093 
1094  /* exponent strategies for each channel */
1095  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1096  if (!s->eac3)
1097  s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
1098  if (s->exp_strategy[blk][ch] != EXP_REUSE)
1099  bit_alloc_stages[ch] = 3;
1100  }
1101 
1102  /* channel bandwidth */
1103  for (ch = 1; ch <= fbw_channels; ch++) {
1104  s->start_freq[ch] = 0;
1105  if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1106  int group_size;
1107  int prev = s->end_freq[ch];
1108  if (s->channel_in_cpl[ch])
1109  s->end_freq[ch] = s->start_freq[CPL_CH];
1110  else if (s->channel_uses_spx[ch])
1111  s->end_freq[ch] = s->spx_src_start_freq;
1112  else {
1113  int bandwidth_code = get_bits(gbc, 6);
1114  if (bandwidth_code > 60) {
1115  av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
1116  return AVERROR_INVALIDDATA;
1117  }
1118  s->end_freq[ch] = bandwidth_code * 3 + 73;
1119  }
1120  group_size = 3 << (s->exp_strategy[blk][ch] - 1);
1121  s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1122  if (blk > 0 && s->end_freq[ch] != prev)
1123  memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
1124  }
1125  }
1126  if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
1128  (3 << (s->exp_strategy[blk][CPL_CH] - 1));
1129  }
1130 
1131  /* decode exponents for each channel */
1132  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1133  if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1134  s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
1135  if (decode_exponents(gbc, s->exp_strategy[blk][ch],
1136  s->num_exp_groups[ch], s->dexps[ch][0],
1137  &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1138  av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n");
1139  return AVERROR_INVALIDDATA;
1140  }
1141  if (ch != CPL_CH && ch != s->lfe_ch)
1142  skip_bits(gbc, 2); /* skip gainrng */
1143  }
1144  }
1145 
1146  /* bit allocation information */
1147  if (s->bit_allocation_syntax) {
1148  if (get_bits1(gbc)) {
1154  for (ch = !cpl_in_use; ch <= s->channels; ch++)
1155  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1156  } else if (!blk) {
1157  av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must "
1158  "be present in block 0\n");
1159  return AVERROR_INVALIDDATA;
1160  }
1161  }
1162 
1163  /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
1164  if (!s->eac3 || !blk) {
1165  if (s->snr_offset_strategy && get_bits1(gbc)) {
1166  int snr = 0;
1167  int csnr;
1168  csnr = (get_bits(gbc, 6) - 15) << 4;
1169  for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1170  /* snr offset */
1171  if (ch == i || s->snr_offset_strategy == 2)
1172  snr = (csnr + get_bits(gbc, 4)) << 2;
1173  /* run at least last bit allocation stage if snr offset changes */
1174  if (blk && s->snr_offset[ch] != snr) {
1175  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
1176  }
1177  s->snr_offset[ch] = snr;
1178 
1179  /* fast gain (normal AC-3 only) */
1180  if (!s->eac3) {
1181  int prev = s->fast_gain[ch];
1182  s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1183  /* run last 2 bit allocation stages if fast gain changes */
1184  if (blk && prev != s->fast_gain[ch])
1185  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1186  }
1187  }
1188  } else if (!s->eac3 && !blk) {
1189  av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
1190  return AVERROR_INVALIDDATA;
1191  }
1192  }
1193 
1194  /* fast gain (E-AC-3 only) */
1195  if (s->fast_gain_syntax && get_bits1(gbc)) {
1196  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1197  int prev = s->fast_gain[ch];
1198  s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1199  /* run last 2 bit allocation stages if fast gain changes */
1200  if (blk && prev != s->fast_gain[ch])
1201  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1202  }
1203  } else if (s->eac3 && !blk) {
1204  for (ch = !cpl_in_use; ch <= s->channels; ch++)
1205  s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
1206  }
1207 
1208  /* E-AC-3 to AC-3 converter SNR offset */
1209  if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
1210  skip_bits(gbc, 10); // skip converter snr offset
1211  }
1212 
1213  /* coupling leak information */
1214  if (cpl_in_use) {
1215  if (s->first_cpl_leak || get_bits1(gbc)) {
1216  int fl = get_bits(gbc, 3);
1217  int sl = get_bits(gbc, 3);
1218  /* run last 2 bit allocation stages for coupling channel if
1219  coupling leak changes */
1220  if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1221  sl != s->bit_alloc_params.cpl_slow_leak)) {
1222  bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
1223  }
1226  } else if (!s->eac3 && !blk) {
1227  av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must "
1228  "be present in block 0\n");
1229  return AVERROR_INVALIDDATA;
1230  }
1231  s->first_cpl_leak = 0;
1232  }
1233 
1234  /* delta bit allocation information */
1235  if (s->dba_syntax && get_bits1(gbc)) {
1236  /* delta bit allocation exists (strategy) */
1237  for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1238  s->dba_mode[ch] = get_bits(gbc, 2);
1239  if (s->dba_mode[ch] == DBA_RESERVED) {
1240  av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1241  return AVERROR_INVALIDDATA;
1242  }
1243  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1244  }
1245  /* channel delta offset, len and bit allocation */
1246  for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1247  if (s->dba_mode[ch] == DBA_NEW) {
1248  s->dba_nsegs[ch] = get_bits(gbc, 3) + 1;
1249  for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1250  s->dba_offsets[ch][seg] = get_bits(gbc, 5);
1251  s->dba_lengths[ch][seg] = get_bits(gbc, 4);
1252  s->dba_values[ch][seg] = get_bits(gbc, 3);
1253  }
1254  /* run last 2 bit allocation stages if new dba values */
1255  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1256  }
1257  }
1258  } else if (blk == 0) {
1259  for (ch = 0; ch <= s->channels; ch++) {
1260  s->dba_mode[ch] = DBA_NONE;
1261  }
1262  }
1263 
1264  /* Bit allocation */
1265  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1266  if (bit_alloc_stages[ch] > 2) {
1267  /* Exponent mapping into PSD and PSD integration */
1269  s->start_freq[ch], s->end_freq[ch],
1270  s->psd[ch], s->band_psd[ch]);
1271  }
1272  if (bit_alloc_stages[ch] > 1) {
1273  /* Compute excitation function, Compute masking curve, and
1274  Apply delta bit allocation */
1276  s->start_freq[ch], s->end_freq[ch],
1277  s->fast_gain[ch], (ch == s->lfe_ch),
1278  s->dba_mode[ch], s->dba_nsegs[ch],
1279  s->dba_offsets[ch], s->dba_lengths[ch],
1280  s->dba_values[ch], s->mask[ch])) {
1281  av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
1282  return AVERROR_INVALIDDATA;
1283  }
1284  }
1285  if (bit_alloc_stages[ch] > 0) {
1286  /* Compute bit allocation */
1287  const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1289  s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1290  s->start_freq[ch], s->end_freq[ch],
1291  s->snr_offset[ch],
1293  bap_tab, s->bap[ch]);
1294  }
1295  }
1296 
1297  /* unused dummy data */
1298  if (s->skip_syntax && get_bits1(gbc)) {
1299  int skipl = get_bits(gbc, 9);
1300  while (skipl--)
1301  skip_bits(gbc, 8);
1302  }
1303 
1304  /* unpack the transform coefficients
1305  this also uncouples channels if coupling is in use. */
1306  decode_transform_coeffs(s, blk);
1307 
1308  /* TODO: generate enhanced coupling coordinates and uncouple */
1309 
1310  /* recover coefficients if rematrixing is in use */
1311  if (s->channel_mode == AC3_CHMODE_STEREO)
1312  do_rematrixing(s);
1313 
1314  /* apply scaling to coefficients (headroom, dynrng) */
1315  for (ch = 1; ch <= s->channels; ch++) {
1316  INTFLOAT gain;
1317  if(s->channel_mode == AC3_CHMODE_DUALMONO) {
1318  gain = s->dynamic_range[2-ch];
1319  } else {
1320  gain = s->dynamic_range[0];
1321  }
1322 #if USE_FIXED
1323  scale_coefs(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256);
1324 #else
1325  gain *= 1.0 / 4194304.0f;
1327  s->fixed_coeffs[ch], gain, 256);
1328 #endif
1329  }
1330 
1331  /* apply spectral extension to high frequency bins */
1332  if (s->spx_in_use && CONFIG_EAC3_DECODER) {
1334  }
1335 
1336  /* downmix and MDCT. order depends on whether block switching is used for
1337  any channel in this block. this is because coefficients for the long
1338  and short transforms cannot be mixed. */
1339  downmix_output = s->channels != s->out_channels &&
1340  !((s->output_mode & AC3_OUTPUT_LFEON) &&
1341  s->fbw_channels == s->out_channels);
1342  if (different_transforms) {
1343  /* the delay samples have already been downmixed, so we upmix the delay
1344  samples in order to reconstruct all channels before downmixing. */
1345  if (s->downmixed) {
1346  s->downmixed = 0;
1347  ac3_upmix_delay(s);
1348  }
1349 
1350  do_imdct(s, s->channels);
1351 
1352  if (downmix_output) {
1353 #if USE_FIXED
1355  s->out_channels, s->fbw_channels, 256);
1356 #else
1357  s->ac3dsp.downmix(s->outptr, s->downmix_coeffs,
1358  s->out_channels, s->fbw_channels, 256);
1359 #endif
1360  }
1361  } else {
1362  if (downmix_output) {
1363  s->ac3dsp.AC3_RENAME(downmix)(s->xcfptr + 1, s->downmix_coeffs,
1364  s->out_channels, s->fbw_channels, 256);
1365  }
1366 
1367  if (downmix_output && !s->downmixed) {
1368  s->downmixed = 1;
1369  s->ac3dsp.AC3_RENAME(downmix)(s->dlyptr, s->downmix_coeffs,
1370  s->out_channels, s->fbw_channels, 128);
1371  }
1372 
1373  do_imdct(s, s->out_channels);
1374  }
1375 
1376  return 0;
1377 }
1378 
1379 /**
1380  * Decode a single AC-3 frame.
1381  */
1382 static int ac3_decode_frame(AVCodecContext * avctx, void *data,
1383  int *got_frame_ptr, AVPacket *avpkt)
1384 {
1385  AVFrame *frame = data;
1386  const uint8_t *buf = avpkt->data;
1387  int buf_size = avpkt->size;
1388  AC3DecodeContext *s = avctx->priv_data;
1389  int blk, ch, err, ret;
1390  const uint8_t *channel_map;
1391  const SHORTFLOAT *output[AC3_MAX_CHANNELS];
1392  enum AVMatrixEncoding matrix_encoding;
1393  AVDownmixInfo *downmix_info;
1394 
1395  /* copy input buffer to decoder context to avoid reading past the end
1396  of the buffer, which can be caused by a damaged input stream. */
1397  if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
1398  // seems to be byte-swapped AC-3
1399  int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1400  s->dsp.bswap16_buf((uint16_t *)s->input_buffer, (const uint16_t *)buf, cnt);
1401  } else
1402  memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1403  buf = s->input_buffer;
1404  /* initialize the GetBitContext with the start of valid AC-3 Frame */
1405  init_get_bits(&s->gbc, buf, buf_size * 8);
1406 
1407  /* parse the syncinfo */
1408  err = parse_frame_header(s);
1409 
1410  if (err) {
1411  switch (err) {
1413  av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1414  return AVERROR_INVALIDDATA;
1416  av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1417  break;
1419  av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1420  break;
1422  av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1423  break;
1425  /* skip frame if CRC is ok. otherwise use error concealment. */
1426  /* TODO: add support for substreams and dependent frames */
1428  av_log(avctx, AV_LOG_WARNING, "unsupported frame type : "
1429  "skipping frame\n");
1430  *got_frame_ptr = 0;
1431  return buf_size;
1432  } else {
1433  av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1434  }
1435  break;
1438  break;
1439  default: // Normal AVERROR do not try to recover.
1440  *got_frame_ptr = 0;
1441  return err;
1442  }
1443  } else {
1444  /* check that reported frame size fits in input buffer */
1445  if (s->frame_size > buf_size) {
1446  av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1448  } else if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) {
1449  /* check for crc mismatch */
1450  if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2],
1451  s->frame_size - 2)) {
1452  av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1453  if (avctx->err_recognition & AV_EF_EXPLODE)
1454  return AVERROR_INVALIDDATA;
1456  }
1457  }
1458  }
1459 
1460  /* if frame is ok, set audio parameters */
1461  if (!err) {
1462  avctx->sample_rate = s->sample_rate;
1463  avctx->bit_rate = s->bit_rate;
1464  }
1465 
1466  /* channel config */
1467  if (!err || (s->channels && s->out_channels != s->channels)) {
1468  s->out_channels = s->channels;
1469  s->output_mode = s->channel_mode;
1470  if (s->lfe_on)
1472  if (s->channels > 1 &&
1474  s->out_channels = 1;
1476  } else if (s->channels > 2 &&
1478  s->out_channels = 2;
1480  }
1481 
1482  s->loro_center_mix_level = gain_levels[s-> center_mix_level];
1486  /* set downmixing coefficients if needed */
1487  if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1488  s->fbw_channels == s->out_channels)) {
1489  set_downmix_coeffs(s);
1490  }
1491  } else if (!s->channels) {
1492  av_log(avctx, AV_LOG_ERROR, "unable to determine channel mode\n");
1493  return AVERROR_INVALIDDATA;
1494  }
1495  avctx->channels = s->out_channels;
1497  if (s->output_mode & AC3_OUTPUT_LFEON)
1499 
1500  /* set audio service type based on bitstream mode for AC-3 */
1501  avctx->audio_service_type = s->bitstream_mode;
1502  if (s->bitstream_mode == 0x7 && s->channels > 1)
1504 
1505  /* get output buffer */
1506  frame->nb_samples = s->num_blocks * AC3_BLOCK_SIZE;
1507  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1508  return ret;
1509 
1510  /* decode the audio blocks */
1511  channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
1512  for (ch = 0; ch < AC3_MAX_CHANNELS; ch++) {
1513  output[ch] = s->output[ch];
1514  s->outptr[ch] = s->output[ch];
1515  }
1516  for (ch = 0; ch < s->channels; ch++) {
1517  if (ch < s->out_channels)
1518  s->outptr[channel_map[ch]] = (SHORTFLOAT *)frame->data[ch];
1519  }
1520  for (blk = 0; blk < s->num_blocks; blk++) {
1521  if (!err && decode_audio_block(s, blk)) {
1522  av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
1523  err = 1;
1524  }
1525  if (err)
1526  for (ch = 0; ch < s->out_channels; ch++)
1527  memcpy(((SHORTFLOAT*)frame->data[ch]) + AC3_BLOCK_SIZE*blk, output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1528  for (ch = 0; ch < s->out_channels; ch++)
1529  output[ch] = s->outptr[channel_map[ch]];
1530  for (ch = 0; ch < s->out_channels; ch++) {
1531  if (!ch || channel_map[ch])
1532  s->outptr[channel_map[ch]] += AC3_BLOCK_SIZE;
1533  }
1534  }
1535 
1537 
1538  /* keep last block for error concealment in next frame */
1539  for (ch = 0; ch < s->out_channels; ch++)
1540  memcpy(s->output[ch], output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1541 
1542  /*
1543  * AVMatrixEncoding
1544  *
1545  * Check whether the input layout is compatible, and make sure we're not
1546  * downmixing (else the matrix encoding is no longer applicable).
1547  */
1548  matrix_encoding = AV_MATRIX_ENCODING_NONE;
1549  if (s->channel_mode == AC3_CHMODE_STEREO &&
1550  s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1552  matrix_encoding = AV_MATRIX_ENCODING_DOLBY;
1554  matrix_encoding = AV_MATRIX_ENCODING_DOLBYHEADPHONE;
1555  } else if (s->channel_mode >= AC3_CHMODE_2F2R &&
1556  s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1557  switch (s->dolby_surround_ex_mode) {
1558  case AC3_DSUREXMOD_ON: // EX or PLIIx
1559  matrix_encoding = AV_MATRIX_ENCODING_DOLBYEX;
1560  break;
1561  case AC3_DSUREXMOD_PLIIZ:
1562  matrix_encoding = AV_MATRIX_ENCODING_DPLIIZ;
1563  break;
1564  default: // not indicated or off
1565  break;
1566  }
1567  }
1568  if ((ret = ff_side_data_update_matrix_encoding(frame, matrix_encoding)) < 0)
1569  return ret;
1570 
1571  /* AVDownmixInfo */
1572  if ((downmix_info = av_downmix_info_update_side_data(frame))) {
1573  switch (s->preferred_downmix) {
1574  case AC3_DMIXMOD_LTRT:
1576  break;
1577  case AC3_DMIXMOD_LORO:
1579  break;
1580  case AC3_DMIXMOD_DPLII:
1582  break;
1583  default:
1585  break;
1586  }
1587  downmix_info->center_mix_level = gain_levels[s-> center_mix_level];
1588  downmix_info->center_mix_level_ltrt = gain_levels[s-> center_mix_level_ltrt];
1589  downmix_info->surround_mix_level = gain_levels[s-> surround_mix_level];
1591  if (s->lfe_mix_level_exists)
1592  downmix_info->lfe_mix_level = gain_levels_lfe[s->lfe_mix_level];
1593  else
1594  downmix_info->lfe_mix_level = 0.0; // -inf dB
1595  } else
1596  return AVERROR(ENOMEM);
1597 
1598  *got_frame_ptr = 1;
1599 
1600  return FFMIN(buf_size, s->frame_size);
1601 }
1602 
1603 /**
1604  * Uninitialize the AC-3 decoder.
1605  */
1607 {
1608  AC3DecodeContext *s = avctx->priv_data;
1609  ff_mdct_end(&s->imdct_512);
1610  ff_mdct_end(&s->imdct_256);
1611 #if (USE_FIXED)
1612  av_freep(&s->fdsp);
1613 #endif
1614 
1615  return 0;
1616 }
1617 
1618 #define OFFSET(x) offsetof(AC3DecodeContext, x)
1619 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)