FFmpeg
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 "config_components.h"
28 
29 #include <stdio.h>
30 #include <stddef.h>
31 #include <math.h>
32 #include <string.h>
33 
35 #include "libavutil/crc.h"
36 #include "libavutil/downmix_info.h"
37 #include "libavutil/intmath.h"
38 #include "libavutil/mem.h"
39 #include "libavutil/opt.h"
40 #include "libavutil/thread.h"
41 #include "bswapdsp.h"
42 #include "ac3_parser_internal.h"
43 #include "ac3dec.h"
44 #include "ac3dec_data.h"
45 #include "ac3defs.h"
46 #include "decode.h"
47 #include "kbdwin.h"
48 
49 /**
50  * table for ungrouping 3 values in 7 bits.
51  * used for exponents and bap=2 mantissas
52  */
53 static uint8_t ungroup_3_in_7_bits_tab[128][3];
54 
55 /** tables for ungrouping mantissas */
56 static int b1_mantissas[32][3];
57 static int b2_mantissas[128][3];
58 static int b3_mantissas[8];
59 static int b4_mantissas[128][2];
60 static int b5_mantissas[16];
61 
62 /**
63  * Quantization table: levels for symmetric. bits for asymmetric.
64  * reference: Table 7.18 Mapping of bap to Quantizer
65  */
66 static const uint8_t quantization_tab[16] = {
67  0, 3, 5, 7, 11, 15,
68  5, 6, 7, 8, 9, 10, 11, 12, 14, 16
69 };
70 
71 #if (!USE_FIXED)
72 /** dynamic range table. converts codes to scale factors. */
73 static float dynamic_range_tab[256];
75 #endif
76 
77 /** Adjustments in dB gain */
78 static const float gain_levels[9] = {
81  LEVEL_ONE,
86  LEVEL_ZERO,
88 };
89 
90 /** Adjustments in dB gain (LFE, +10 to -21 dB) */
91 static const float gain_levels_lfe[32] = {
92  3.162275, 2.818382, 2.511886, 2.238719, 1.995261, 1.778278, 1.584893,
93  1.412536, 1.258924, 1.122018, 1.000000, 0.891251, 0.794328, 0.707946,
94  0.630957, 0.562341, 0.501187, 0.446683, 0.398107, 0.354813, 0.316227,
95  0.281838, 0.251188, 0.223872, 0.199526, 0.177828, 0.158489, 0.141253,
96  0.125892, 0.112201, 0.100000, 0.089125
97 };
98 
99 /**
100  * Table for default stereo downmixing coefficients
101  * reference: Section 7.8.2 Downmixing Into Two Channels
102  */
103 static const uint8_t ac3_default_coeffs[8][5][2] = {
104  { { 2, 7 }, { 7, 2 }, },
105  { { 4, 4 }, },
106  { { 2, 7 }, { 7, 2 }, },
107  { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
108  { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
109  { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
110  { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
111  { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
112 };
113 
114 /**
115  * Symmetrical Dequantization
116  * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
117  * Tables 7.19 to 7.23
118  */
119 static inline int
120 symmetric_dequant(int code, int levels)
121 {
122  return ((code - (levels >> 1)) * (1 << 24)) / levels;
123 }
124 
125 /*
126  * Initialize tables at runtime.
127  */
128 static av_cold void ac3_tables_init(void)
129 {
130  int i;
131 
132  /* generate table for ungrouping 3 values in 7 bits
133  reference: Section 7.1.3 Exponent Decoding */
134  for (i = 0; i < 128; i++) {
135  ungroup_3_in_7_bits_tab[i][0] = i / 25;
136  ungroup_3_in_7_bits_tab[i][1] = (i % 25) / 5;
137  ungroup_3_in_7_bits_tab[i][2] = (i % 25) % 5;
138  }
139 
140  /* generate grouped mantissa tables
141  reference: Section 7.3.5 Ungrouping of Mantissas */
142  for (i = 0; i < 32; i++) {
143  /* bap=1 mantissas */
147  }
148  for (i = 0; i < 128; i++) {
149  /* bap=2 mantissas */
153 
154  /* bap=4 mantissas */
155  b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
156  b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
157  }
158  /* generate ungrouped mantissa tables
159  reference: Tables 7.21 and 7.23 */
160  for (i = 0; i < 7; i++) {
161  /* bap=3 mantissas */
163  }
164  for (i = 0; i < 15; i++) {
165  /* bap=5 mantissas */
167  }
168 
169 #if (!USE_FIXED)
170  /* generate dynamic range table
171  reference: Section 7.7.1 Dynamic Range Control */
172  for (i = 0; i < 256; i++) {
173  int v = (i >> 5) - ((i >> 7) << 3) - 5;
174  dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
175  }
176 
177  /* generate compr dynamic range table
178  reference: Section 7.7.2 Heavy Compression */
179  for (i = 0; i < 256; i++) {
180  int v = (i >> 4) - ((i >> 7) << 4) - 4;
181  ff_ac3_heavy_dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0xF) | 0x10);
182  }
183 #endif
184 }
185 
186 static void ac3_downmix(AVCodecContext *avctx)
187 {
188  AC3DecodeContext *s = avctx->priv_data;
191 
192  /* allow downmixing to stereo or mono */
193  if (avctx->ch_layout.nb_channels > 1 &&
194  !av_channel_layout_compare(&s->downmix_layout, &mono)) {
197  } else if (avctx->ch_layout.nb_channels > 2 &&
198  !av_channel_layout_compare(&s->downmix_layout, &stereo)) {
201  }
202 }
203 
204 /**
205  * AVCodec initialization
206  */
208 {
209  static AVOnce init_static_once = AV_ONCE_INIT;
210  AC3DecodeContext *s = avctx->priv_data;
211  const float scale = 1.0f;
212  int i, ret;
213 
214  s->avctx = avctx;
215 
216  if ((ret = av_tx_init(&s->tx_128, &s->tx_fn_128, IMDCT_TYPE, 1, 128, &scale, 0)))
217  return ret;
218 
219  if ((ret = av_tx_init(&s->tx_256, &s->tx_fn_256, IMDCT_TYPE, 1, 256, &scale, 0)))
220  return ret;
221 
222  AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
223  ff_bswapdsp_init(&s->bdsp);
224 
225 #if (USE_FIXED)
227 #else
228  ff_fmt_convert_init(&s->fmt_conv);
230 #endif
231  if (!s->fdsp)
232  return AVERROR(ENOMEM);
233 
234  ff_ac3dsp_init(&s->ac3dsp);
235  av_lfg_init(&s->dith_state, 0);
236 
237  if (USE_FIXED)
239  else
241 
242  ac3_downmix(avctx);
243  s->downmixed = 1;
244 
245  for (i = 0; i < AC3_MAX_CHANNELS; i++) {
246  s->xcfptr[i] = s->transform_coeffs[i];
247  s->dlyptr[i] = s->delay[i];
248  }
249 
250  ff_thread_once(&init_static_once, ac3_tables_init);
251 
252  return 0;
253 }
254 
255 /**
256  * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
257  * GetBitContext within AC3DecodeContext must point to
258  * the start of the synchronized AC-3 bitstream.
259  */
260 static int ac3_parse_header(AC3DecodeContext *s)
261 {
262  GetBitContext *gbc = &s->gbc;
263  int i;
264 
265  /* read the rest of the bsi. read twice for dual mono mode. */
266  i = !s->channel_mode;
267  do {
268  s->dialog_normalization[(!s->channel_mode)-i] = -get_bits(gbc, 5);
269  if (s->dialog_normalization[(!s->channel_mode)-i] == 0) {
270  s->dialog_normalization[(!s->channel_mode)-i] = -31;
271  }
272  if (s->target_level != 0) {
273  s->level_gain[(!s->channel_mode)-i] = powf(2.0f,
274  (float)(s->target_level -
275  s->dialog_normalization[(!s->channel_mode)-i])/6.0f);
276  }
277  if (s->compression_exists[(!s->channel_mode)-i] = get_bits1(gbc)) {
278  s->heavy_dynamic_range[(!s->channel_mode)-i] =
279  AC3_HEAVY_RANGE(get_bits(gbc, 8));
280  }
281  if (get_bits1(gbc))
282  skip_bits(gbc, 8); //skip language code
283  if (get_bits1(gbc))
284  skip_bits(gbc, 7); //skip audio production information
285  } while (i--);
286 
287  skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
288 
289  /* skip the timecodes or parse the Alternate Bit Stream Syntax */
290  if (s->bitstream_id != 6) {
291  if (get_bits1(gbc))
292  skip_bits(gbc, 14); //skip timecode1
293  if (get_bits1(gbc))
294  skip_bits(gbc, 14); //skip timecode2
295  } else {
296  if (get_bits1(gbc)) {
297  s->preferred_downmix = get_bits(gbc, 2);
298  s->center_mix_level_ltrt = get_bits(gbc, 3);
299  s->surround_mix_level_ltrt = av_clip(get_bits(gbc, 3), 3, 7);
300  s->center_mix_level = get_bits(gbc, 3);
301  s->surround_mix_level = av_clip(get_bits(gbc, 3), 3, 7);
302  }
303  if (get_bits1(gbc)) {
304  s->dolby_surround_ex_mode = get_bits(gbc, 2);
305  s->dolby_headphone_mode = get_bits(gbc, 2);
306  skip_bits(gbc, 10); // skip adconvtyp (1), xbsi2 (8), encinfo (1)
307  }
308  }
309 
310  /* skip additional bitstream info */
311  if (get_bits1(gbc)) {
312  i = get_bits(gbc, 6);
313  do {
314  skip_bits(gbc, 8);
315  } while (i--);
316  }
317 
318  return 0;
319 }
320 
321 /**
322  * Common function to parse AC-3 or E-AC-3 frame header
323  */
324 static int parse_frame_header(AC3DecodeContext *s)
325 {
326  AC3HeaderInfo hdr;
327  int err;
328 
329  err = ff_ac3_parse_header(&s->gbc, &hdr);
330  if (err)
331  return err;
332 
333  /* get decoding parameters from header info */
334  s->bit_alloc_params.sr_code = hdr.sr_code;
335  s->bitstream_id = hdr.bitstream_id;
336  s->bitstream_mode = hdr.bitstream_mode;
337  s->channel_mode = hdr.channel_mode;
338  s->lfe_on = hdr.lfe_on;
339  s->bit_alloc_params.sr_shift = hdr.sr_shift;
340  s->sample_rate = hdr.sample_rate;
341  s->bit_rate = hdr.bit_rate;
342  s->channels = hdr.channels;
343  s->fbw_channels = s->channels - s->lfe_on;
344  s->lfe_ch = s->fbw_channels + 1;
345  s->frame_size = hdr.frame_size;
346  s->superframe_size += hdr.frame_size;
347  s->preferred_downmix = AC3_DMIXMOD_NOTINDICATED;
348  if (hdr.bitstream_id <= 10) {
349  s->center_mix_level = hdr.center_mix_level;
350  s->surround_mix_level = hdr.surround_mix_level;
351  }
352  s->center_mix_level_ltrt = 4; // -3.0dB
353  s->surround_mix_level_ltrt = 4; // -3.0dB
354  s->lfe_mix_level_exists = 0;
355  s->num_blocks = hdr.num_blocks;
356  s->frame_type = hdr.frame_type;
357  s->substreamid = hdr.substreamid;
358  s->dolby_surround_mode = hdr.dolby_surround_mode;
359  s->dolby_surround_ex_mode = AC3_DSUREXMOD_NOTINDICATED;
360  s->dolby_headphone_mode = AC3_DHEADPHONMOD_NOTINDICATED;
361 
362  if (s->lfe_on) {
363  s->start_freq[s->lfe_ch] = 0;
364  s->end_freq[s->lfe_ch] = 7;
365  s->num_exp_groups[s->lfe_ch] = 2;
366  s->channel_in_cpl[s->lfe_ch] = 0;
367  }
368 
369  if (s->bitstream_id <= 10) {
370  s->eac3 = 0;
371  s->snr_offset_strategy = 2;
372  s->block_switch_syntax = 1;
373  s->dither_flag_syntax = 1;
374  s->bit_allocation_syntax = 1;
375  s->fast_gain_syntax = 0;
376  s->first_cpl_leak = 0;
377  s->dba_syntax = 1;
378  s->skip_syntax = 1;
379  memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
380  return ac3_parse_header(s);
381  } else if (CONFIG_EAC3_DECODER) {
382  s->eac3 = 1;
383  return ff_eac3_parse_header(s);
384  } else {
385  av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
386  return AVERROR(ENOSYS);
387  }
388 }
389 
390 /**
391  * Set stereo downmixing coefficients based on frame header info.
392  * reference: Section 7.8.2 Downmixing Into Two Channels
393  */
394 static int set_downmix_coeffs(AC3DecodeContext *s)
395 {
396  int i;
397  float cmix = gain_levels[s-> center_mix_level];
398  float smix = gain_levels[s->surround_mix_level];
399  float norm0, norm1;
400  float downmix_coeffs[2][AC3_MAX_CHANNELS];
401 
402  if (!s->downmix_coeffs[0]) {
403  s->downmix_coeffs[0] = av_malloc_array(2 * AC3_MAX_CHANNELS,
404  sizeof(**s->downmix_coeffs));
405  if (!s->downmix_coeffs[0])
406  return AVERROR(ENOMEM);
407  s->downmix_coeffs[1] = s->downmix_coeffs[0] + AC3_MAX_CHANNELS;
408  }
409 
410  for (i = 0; i < s->fbw_channels; i++) {
411  downmix_coeffs[0][i] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
412  downmix_coeffs[1][i] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
413  }
414  if (s->channel_mode > 1 && s->channel_mode & 1) {
415  downmix_coeffs[0][1] = downmix_coeffs[1][1] = cmix;
416  }
417  if (s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
418  int nf = s->channel_mode - 2;
419  downmix_coeffs[0][nf] = downmix_coeffs[1][nf] = smix * LEVEL_MINUS_3DB;
420  }
421  if (s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
422  int nf = s->channel_mode - 4;
423  downmix_coeffs[0][nf] = downmix_coeffs[1][nf+1] = smix;
424  }
425 
426  /* renormalize */
427  norm0 = norm1 = 0.0;
428  for (i = 0; i < s->fbw_channels; i++) {
429  norm0 += downmix_coeffs[0][i];
430  norm1 += downmix_coeffs[1][i];
431  }
432  norm0 = 1.0f / norm0;
433  norm1 = 1.0f / norm1;
434  for (i = 0; i < s->fbw_channels; i++) {
435  downmix_coeffs[0][i] *= norm0;
436  downmix_coeffs[1][i] *= norm1;
437  }
438 
439  if (s->output_mode == AC3_CHMODE_MONO) {
440  for (i = 0; i < s->fbw_channels; i++)
441  downmix_coeffs[0][i] = (downmix_coeffs[0][i] +
442  downmix_coeffs[1][i]) * LEVEL_MINUS_3DB;
443  }
444  for (i = 0; i < s->fbw_channels; i++) {
445  s->downmix_coeffs[0][i] = FIXR12(downmix_coeffs[0][i]);
446  s->downmix_coeffs[1][i] = FIXR12(downmix_coeffs[1][i]);
447  }
448 
449  return 0;
450 }
451 
452 /**
453  * Decode the grouped exponents according to exponent strategy.
454  * reference: Section 7.1.3 Exponent Decoding
455  */
456 static int decode_exponents(AC3DecodeContext *s,
457  GetBitContext *gbc, int exp_strategy, int ngrps,
458  uint8_t absexp, int8_t *dexps)
459 {
460  int i, j, grp, group_size;
461  int dexp[256];
462  int expacc, prevexp;
463 
464  /* unpack groups */
465  group_size = exp_strategy + (exp_strategy == EXP_D45);
466  for (grp = 0, i = 0; grp < ngrps; grp++) {
467  expacc = get_bits(gbc, 7);
468  if (expacc >= 125) {
469  av_log(s->avctx, AV_LOG_ERROR, "expacc %d is out-of-range\n", expacc);
470  return AVERROR_INVALIDDATA;
471  }
472  dexp[i++] = ungroup_3_in_7_bits_tab[expacc][0];
473  dexp[i++] = ungroup_3_in_7_bits_tab[expacc][1];
474  dexp[i++] = ungroup_3_in_7_bits_tab[expacc][2];
475  }
476 
477  /* convert to absolute exps and expand groups */
478  prevexp = absexp;
479  for (i = 0, j = 0; i < ngrps * 3; i++) {
480  prevexp += dexp[i] - 2;
481  if (prevexp > 24U) {
482  av_log(s->avctx, AV_LOG_ERROR, "exponent %d is out-of-range\n", prevexp);
483  return AVERROR_INVALIDDATA;
484  }
485  switch (group_size) {
486  case 4: dexps[j++] = prevexp;
487  dexps[j++] = prevexp;
488  case 2: dexps[j++] = prevexp;
489  case 1: dexps[j++] = prevexp;
490  }
491  }
492  return 0;
493 }
494 
495 /**
496  * Generate transform coefficients for each coupled channel in the coupling
497  * range using the coupling coefficients and coupling coordinates.
498  * reference: Section 7.4.3 Coupling Coordinate Format
499  */
500 static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
501 {
502  int bin, band, ch;
503 
504  bin = s->start_freq[CPL_CH];
505  for (band = 0; band < s->num_cpl_bands; band++) {
506  int band_start = bin;
507  int band_end = bin + s->cpl_band_sizes[band];
508  for (ch = 1; ch <= s->fbw_channels; ch++) {
509  if (s->channel_in_cpl[ch]) {
510  int cpl_coord = s->cpl_coords[ch][band] << 5;
511  for (bin = band_start; bin < band_end; bin++) {
512  s->fixed_coeffs[ch][bin] =
513  MULH(s->fixed_coeffs[CPL_CH][bin] * (1 << 4), cpl_coord);
514  }
515  if (ch == 2 && s->phase_flags[band]) {
516  for (bin = band_start; bin < band_end; bin++)
517  s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
518  }
519  }
520  }
521  bin = band_end;
522  }
523 }
524 
525 /**
526  * Grouped mantissas for 3-level 5-level and 11-level quantization
527  */
528 typedef struct mant_groups {
529  int b1_mant[2];
530  int b2_mant[2];
531  int b4_mant;
532  int b1;
533  int b2;
534  int b4;
535 } mant_groups;
536 
537 /**
538  * Decode the transform coefficients for a particular channel
539  * reference: Section 7.3 Quantization and Decoding of Mantissas
540  */
541 static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
542 {
543  int start_freq = s->start_freq[ch_index];
544  int end_freq = s->end_freq[ch_index];
545  uint8_t *baps = s->bap[ch_index];
546  int8_t *exps = s->dexps[ch_index];
547  int32_t *coeffs = s->fixed_coeffs[ch_index];
548  int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
549  GetBitContext *gbc = &s->gbc;
550  int freq;
551 
552  for (freq = start_freq; freq < end_freq; freq++) {
553  int bap = baps[freq];
554  int mantissa;
555  switch (bap) {
556  case 0:
557  /* random noise with approximate range of -0.707 to 0.707 */
558  if (dither)
559  mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
560  else
561  mantissa = 0;
562  break;
563  case 1:
564  if (m->b1) {
565  m->b1--;
566  mantissa = m->b1_mant[m->b1];
567  } else {
568  int bits = get_bits(gbc, 5);
569  mantissa = b1_mantissas[bits][0];
570  m->b1_mant[1] = b1_mantissas[bits][1];
571  m->b1_mant[0] = b1_mantissas[bits][2];
572  m->b1 = 2;
573  }
574  break;
575  case 2:
576  if (m->b2) {
577  m->b2--;
578  mantissa = m->b2_mant[m->b2];
579  } else {
580  int bits = get_bits(gbc, 7);
581  mantissa = b2_mantissas[bits][0];
582  m->b2_mant[1] = b2_mantissas[bits][1];
583  m->b2_mant[0] = b2_mantissas[bits][2];
584  m->b2 = 2;
585  }
586  break;
587  case 3:
588  mantissa = b3_mantissas[get_bits(gbc, 3)];
589  break;
590  case 4:
591  if (m->b4) {
592  m->b4 = 0;
593  mantissa = m->b4_mant;
594  } else {
595  int bits = get_bits(gbc, 7);
596  mantissa = b4_mantissas[bits][0];
597  m->b4_mant = b4_mantissas[bits][1];
598  m->b4 = 1;
599  }
600  break;
601  case 5:
602  mantissa = b5_mantissas[get_bits(gbc, 4)];
603  break;
604  default: /* 6 to 15 */
605  /* Shift mantissa and sign-extend it. */
606  if (bap > 15) {
607  av_log(s->avctx, AV_LOG_ERROR, "bap %d is invalid in plain AC-3\n", bap);
608  bap = 15;
609  }
610  mantissa = (unsigned)get_sbits(gbc, quantization_tab[bap]) << (24 - quantization_tab[bap]);
611  break;
612  }
613  coeffs[freq] = mantissa >> exps[freq];
614  }
615 }
616 
617 /**
618  * Remove random dithering from coupling range coefficients with zero-bit
619  * mantissas for coupled channels which do not use dithering.
620  * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
621  */
622 static void remove_dithering(AC3DecodeContext *s) {
623  int ch, i;
624 
625  for (ch = 1; ch <= s->fbw_channels; ch++) {
626  if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
627  for (i = s->start_freq[CPL_CH]; i < s->end_freq[CPL_CH]; i++) {
628  if (!s->bap[CPL_CH][i])
629  s->fixed_coeffs[ch][i] = 0;
630  }
631  }
632  }
633 }
634 
635 static inline void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk,
636  int ch, mant_groups *m)
637 {
638  if (!s->channel_uses_aht[ch]) {
640  } else {
641  /* if AHT is used, mantissas for all blocks are encoded in the first
642  block of the frame. */
643  int bin;
644  if (CONFIG_EAC3_DECODER && !blk)
646  for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
647  s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
648  }
649  }
650 }
651 
652 /**
653  * Decode the transform coefficients.
654  */
655 static inline void decode_transform_coeffs(AC3DecodeContext *s, int blk)
656 {
657  int ch, end;
658  int got_cplchan = 0;
659  mant_groups m;
660 
661  m.b1 = m.b2 = m.b4 = 0;
662 
663  for (ch = 1; ch <= s->channels; ch++) {
664  /* transform coefficients for full-bandwidth channel */
665  decode_transform_coeffs_ch(s, blk, ch, &m);
666  /* transform coefficients for coupling channel come right after the
667  coefficients for the first coupled channel*/
668  if (s->channel_in_cpl[ch]) {
669  if (!got_cplchan) {
672  got_cplchan = 1;
673  }
674  end = s->end_freq[CPL_CH];
675  } else {
676  end = s->end_freq[ch];
677  }
678  do
679  s->fixed_coeffs[ch][end] = 0;
680  while (++end < 256);
681  }
682 
683  /* zero the dithered coefficients for appropriate channels */
685 }
686 
687 /**
688  * Stereo rematrixing.
689  * reference: Section 7.5.4 Rematrixing : Decoding Technique
690  */
691 static void do_rematrixing(AC3DecodeContext *s)
692 {
693  int bnd, i;
694  int end, bndend;
695 
696  end = FFMIN(s->end_freq[1], s->end_freq[2]);
697 
698  for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
699  if (s->rematrixing_flags[bnd]) {
700  bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd + 1]);
701  for (i = ff_ac3_rematrix_band_tab[bnd]; i < bndend; i++) {
702  int tmp0 = s->fixed_coeffs[1][i];
703  s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
704  s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
705  }
706  }
707  }
708 }
709 
710 /**
711  * Inverse MDCT Transform.
712  * Convert frequency domain coefficients to time-domain audio samples.
713  * reference: Section 7.9.4 Transformation Equations
714  */
715 static inline void do_imdct(AC3DecodeContext *s, int channels, int offset)
716 {
717  int ch;
718 
719  for (ch = 1; ch <= channels; ch++) {
720  if (s->block_switch[ch]) {
721  int i;
722  INTFLOAT *x = s->tmp_output + 128;
723  for (i = 0; i < 128; i++)
724  x[i] = s->transform_coeffs[ch][2 * i];
725  s->tx_fn_128(s->tx_128, s->tmp_output, x, sizeof(INTFLOAT));
726 #if USE_FIXED
727  s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
728  s->tmp_output, s->window, 128, 8);
729 #else
730  s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
731  s->tmp_output, s->window, 128);
732 #endif
733  for (i = 0; i < 128; i++)
734  x[i] = s->transform_coeffs[ch][2 * i + 1];
735  s->tx_fn_128(s->tx_128, s->delay[ch - 1 + offset], x, sizeof(INTFLOAT));
736  } else {
737  s->tx_fn_256(s->tx_256, s->tmp_output, s->transform_coeffs[ch], sizeof(INTFLOAT));
738 #if USE_FIXED
739  s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
740  s->tmp_output, s->window, 128, 8);
741 #else
742  s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
743  s->tmp_output, s->window, 128);
744 #endif
745  memcpy(s->delay[ch - 1 + offset], s->tmp_output + 128, 128 * sizeof(INTFLOAT));
746  }
747  }
748 }
749 
750 /**
751  * Upmix delay samples from stereo to original channel layout.
752  */
753 static void ac3_upmix_delay(AC3DecodeContext *s)
754 {
755  int channel_data_size = sizeof(s->delay[0]);
756  switch (s->channel_mode) {
757  case AC3_CHMODE_DUALMONO:
758  case AC3_CHMODE_STEREO:
759  /* upmix mono to stereo */
760  memcpy(s->delay[1], s->delay[0], channel_data_size);
761  break;
762  case AC3_CHMODE_2F2R:
763  memset(s->delay[3], 0, channel_data_size);
764  case AC3_CHMODE_2F1R:
765  memset(s->delay[2], 0, channel_data_size);
766  break;
767  case AC3_CHMODE_3F2R:
768  memset(s->delay[4], 0, channel_data_size);
769  case AC3_CHMODE_3F1R:
770  memset(s->delay[3], 0, channel_data_size);
771  case AC3_CHMODE_3F:
772  memcpy(s->delay[2], s->delay[1], channel_data_size);
773  memset(s->delay[1], 0, channel_data_size);
774  break;
775  }
776 }
777 
778 /**
779  * Decode band structure for coupling, spectral extension, or enhanced coupling.
780  * The band structure defines how many subbands are in each band. For each
781  * subband in the range, 1 means it is combined with the previous band, and 0
782  * means that it starts a new band.
783  *
784  * @param[in] gbc bit reader context
785  * @param[in] blk block number
786  * @param[in] eac3 flag to indicate E-AC-3
787  * @param[in] ecpl flag to indicate enhanced coupling
788  * @param[in] start_subband subband number for start of range
789  * @param[in] end_subband subband number for end of range
790  * @param[in] default_band_struct default band structure table
791  * @param[out] num_bands number of bands (optionally NULL)
792  * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
793  * @param[in,out] band_struct current band structure
794  */
795 static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
796  int ecpl, int start_subband, int end_subband,
797  const uint8_t *default_band_struct,
798  int *num_bands, uint8_t *band_sizes,
799  uint8_t *band_struct, int band_struct_size)
800 {
801  int subbnd, bnd, n_subbands, n_bands=0;
802  uint8_t bnd_sz[22];
803 
804  n_subbands = end_subband - start_subband;
805 
806  if (!blk)
807  memcpy(band_struct, default_band_struct, band_struct_size);
808 
809  av_assert0(band_struct_size >= start_subband + n_subbands);
810 
811  band_struct += start_subband + 1;
812 
813  /* decode band structure from bitstream or use default */
814  if (!eac3 || get_bits1(gbc)) {
815  for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
816  band_struct[subbnd] = get_bits1(gbc);
817  }
818  }
819 
820  /* calculate number of bands and band sizes based on band structure.
821  note that the first 4 subbands in enhanced coupling span only 6 bins
822  instead of 12. */
823  if (num_bands || band_sizes ) {
824  n_bands = n_subbands;
825  bnd_sz[0] = ecpl ? 6 : 12;
826  for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
827  int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
828  if (band_struct[subbnd - 1]) {
829  n_bands--;
830  bnd_sz[bnd] += subbnd_size;
831  } else {
832  bnd_sz[++bnd] = subbnd_size;
833  }
834  }
835  }
836 
837  /* set optional output params */
838  if (num_bands)
839  *num_bands = n_bands;
840  if (band_sizes)
841  memcpy(band_sizes, bnd_sz, n_bands);
842 }
843 
844 static inline int spx_strategy(AC3DecodeContext *s, int blk)
845 {
846  GetBitContext *bc = &s->gbc;
847  int fbw_channels = s->fbw_channels;
848  int dst_start_freq, dst_end_freq, src_start_freq,
849  start_subband, end_subband, ch;
850 
851  /* determine which channels use spx */
852  if (s->channel_mode == AC3_CHMODE_MONO) {
853  s->channel_uses_spx[1] = 1;
854  } else {
855  for (ch = 1; ch <= fbw_channels; ch++)
856  s->channel_uses_spx[ch] = get_bits1(bc);
857  }
858 
859  /* get the frequency bins of the spx copy region and the spx start
860  and end subbands */
861  dst_start_freq = get_bits(bc, 2);
862  start_subband = get_bits(bc, 3) + 2;
863  if (start_subband > 7)
864  start_subband += start_subband - 7;
865  end_subband = get_bits(bc, 3) + 5;
866 #if USE_FIXED
867  s->spx_dst_end_freq = end_freq_inv_tab[end_subband-5];
868 #endif
869  if (end_subband > 7)
870  end_subband += end_subband - 7;
871  dst_start_freq = dst_start_freq * 12 + 25;
872  src_start_freq = start_subband * 12 + 25;
873  dst_end_freq = end_subband * 12 + 25;
874 
875  /* check validity of spx ranges */
876  if (start_subband >= end_subband) {
877  av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
878  "range (%d >= %d)\n", start_subband, end_subband);
879  return AVERROR_INVALIDDATA;
880  }
881  if (dst_start_freq >= src_start_freq) {
882  av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
883  "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
884  return AVERROR_INVALIDDATA;
885  }
886 
887  s->spx_dst_start_freq = dst_start_freq;
888  s->spx_src_start_freq = src_start_freq;
889  if (!USE_FIXED)
890  s->spx_dst_end_freq = dst_end_freq;
891 
892  decode_band_structure(bc, blk, s->eac3, 0,
893  start_subband, end_subband,
895  &s->num_spx_bands,
896  s->spx_band_sizes,
897  s->spx_band_struct, sizeof(s->spx_band_struct));
898  return 0;
899 }
900 
901 static inline void spx_coordinates(AC3DecodeContext *s)
902 {
903  GetBitContext *bc = &s->gbc;
904  int fbw_channels = s->fbw_channels;
905  int ch, bnd;
906 
907  for (ch = 1; ch <= fbw_channels; ch++) {
908  if (s->channel_uses_spx[ch]) {
909  if (s->first_spx_coords[ch] || get_bits1(bc)) {
910  INTFLOAT spx_blend;
911  int bin, master_spx_coord;
912 
913  s->first_spx_coords[ch] = 0;
914  spx_blend = AC3_SPX_BLEND(get_bits(bc, 5));
915  master_spx_coord = get_bits(bc, 2) * 3;
916 
917  bin = s->spx_src_start_freq;
918  for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
919  int bandsize = s->spx_band_sizes[bnd];
920  int spx_coord_exp, spx_coord_mant;
921  INTFLOAT nratio, sblend, nblend;
922 #if USE_FIXED
923  /* calculate blending factors */
924  int64_t accu = ((bin << 23) + (bandsize << 22))
925  * (int64_t)s->spx_dst_end_freq;
926  nratio = (int)(accu >> 32);
927  nratio -= spx_blend << 18;
928 
929  if (nratio < 0) {
930  nblend = 0;
931  sblend = 0x800000;
932  } else if (nratio > 0x7fffff) {
933  nblend = 14529495; // sqrt(3) in FP.23
934  sblend = 0;
935  } else {
936  nblend = fixed_sqrt(nratio, 23);
937  accu = (int64_t)nblend * 1859775393;
938  nblend = (int)((accu + (1<<29)) >> 30);
939  sblend = fixed_sqrt(0x800000 - nratio, 23);
940  }
941 #else
942  float spx_coord;
943 
944  /* calculate blending factors */
945  nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
946  nratio = av_clipf(nratio, 0.0f, 1.0f);
947  nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3)
948  // to give unity variance
949  sblend = sqrtf(1.0f - nratio);
950 #endif
951  bin += bandsize;
952 
953  /* decode spx coordinates */
954  spx_coord_exp = get_bits(bc, 4);
955  spx_coord_mant = get_bits(bc, 2);
956  if (spx_coord_exp == 15) spx_coord_mant <<= 1;
957  else spx_coord_mant += 4;
958  spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
959 
960  /* multiply noise and signal blending factors by spx coordinate */
961 #if USE_FIXED
962  accu = (int64_t)nblend * spx_coord_mant;
963  s->spx_noise_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
964  accu = (int64_t)sblend * spx_coord_mant;
965  s->spx_signal_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
966 #else
967  spx_coord = spx_coord_mant * (1.0f / (1 << 23));
968  s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
969  s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
970 #endif
971  }
972  }
973  } else {
974  s->first_spx_coords[ch] = 1;
975  }
976  }
977 }
978 
979 static inline int coupling_strategy(AC3DecodeContext *s, int blk,
980  uint8_t *bit_alloc_stages)
981 {
982  GetBitContext *bc = &s->gbc;
983  int fbw_channels = s->fbw_channels;
984  int channel_mode = s->channel_mode;
985  int ch;
986 
987  memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
988  if (!s->eac3)
989  s->cpl_in_use[blk] = get_bits1(bc);
990  if (s->cpl_in_use[blk]) {
991  /* coupling in use */
992  int cpl_start_subband, cpl_end_subband;
993 
994  if (channel_mode < AC3_CHMODE_STEREO) {
995  av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
996  return AVERROR_INVALIDDATA;
997  }
998 
999  /* check for enhanced coupling */
1000  if (s->eac3 && get_bits1(bc)) {
1001  /* TODO: parse enhanced coupling strategy info */
1002  avpriv_request_sample(s->avctx, "Enhanced coupling");
1003  return AVERROR_PATCHWELCOME;
1004  }
1005 
1006  /* determine which channels are coupled */
1007  if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
1008  s->channel_in_cpl[1] = 1;
1009  s->channel_in_cpl[2] = 1;
1010  } else {
1011  for (ch = 1; ch <= fbw_channels; ch++)
1012  s->channel_in_cpl[ch] = get_bits1(bc);
1013  }
1014 
1015  /* phase flags in use */
1016  if (channel_mode == AC3_CHMODE_STEREO)
1017  s->phase_flags_in_use = get_bits1(bc);
1018 
1019  /* coupling frequency range */
1020  cpl_start_subband = get_bits(bc, 4);
1021  cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
1022  get_bits(bc, 4) + 3;
1023  if (cpl_start_subband >= cpl_end_subband) {
1024  av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
1025  cpl_start_subband, cpl_end_subband);
1026  return AVERROR_INVALIDDATA;
1027  }
1028  s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
1029  s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
1030 
1031  decode_band_structure(bc, blk, s->eac3, 0, cpl_start_subband,
1032  cpl_end_subband,
1034  &s->num_cpl_bands, s->cpl_band_sizes,
1035  s->cpl_band_struct, sizeof(s->cpl_band_struct));
1036  } else {
1037  /* coupling not in use */
1038  for (ch = 1; ch <= fbw_channels; ch++) {
1039  s->channel_in_cpl[ch] = 0;
1040  s->first_cpl_coords[ch] = 1;
1041  }
1042  s->first_cpl_leak = s->eac3;
1043  s->phase_flags_in_use = 0;
1044  }
1045 
1046  return 0;
1047 }
1048 
1049 static inline int coupling_coordinates(AC3DecodeContext *s, int blk)
1050 {
1051  GetBitContext *bc = &s->gbc;
1052  int fbw_channels = s->fbw_channels;
1053  int ch, bnd;
1054  int cpl_coords_exist = 0;
1055 
1056  for (ch = 1; ch <= fbw_channels; ch++) {
1057  if (s->channel_in_cpl[ch]) {
1058  if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(bc)) {
1059  int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
1060  s->first_cpl_coords[ch] = 0;
1061  cpl_coords_exist = 1;
1062  master_cpl_coord = 3 * get_bits(bc, 2);
1063  for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1064  cpl_coord_exp = get_bits(bc, 4);
1065  cpl_coord_mant = get_bits(bc, 4);
1066  if (cpl_coord_exp == 15)
1067  s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
1068  else
1069  s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
1070  s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
1071  }
1072  } else if (!blk) {
1073  av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must "
1074  "be present in block 0\n");
1075  return AVERROR_INVALIDDATA;
1076  }
1077  } else {
1078  /* channel not in coupling */
1079  s->first_cpl_coords[ch] = 1;
1080  }
1081  }
1082  /* phase flags */
1083  if (s->channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
1084  for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1085  s->phase_flags[bnd] = s->phase_flags_in_use ? get_bits1(bc) : 0;
1086  }
1087  }
1088 
1089  return 0;
1090 }
1091 
1092 /**
1093  * Decode a single audio block from the AC-3 bitstream.
1094  */
1095 static int decode_audio_block(AC3DecodeContext *s, int blk, int offset)
1096 {
1097  int fbw_channels = s->fbw_channels;
1098  int channel_mode = s->channel_mode;
1099  int i, bnd, seg, ch, ret;
1100  int different_transforms;
1101  int downmix_output;
1102  int cpl_in_use;
1103  GetBitContext *gbc = &s->gbc;
1104  uint8_t bit_alloc_stages[AC3_MAX_CHANNELS] = { 0 };
1105 
1106  /* block switch flags */
1107  different_transforms = 0;
1108  if (s->block_switch_syntax) {
1109  for (ch = 1; ch <= fbw_channels; ch++) {
1110  s->block_switch[ch] = get_bits1(gbc);
1111  if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
1112  different_transforms = 1;
1113  }
1114  }
1115 
1116  /* dithering flags */
1117  if (s->dither_flag_syntax) {
1118  for (ch = 1; ch <= fbw_channels; ch++) {
1119  s->dither_flag[ch] = get_bits1(gbc);
1120  }
1121  }
1122 
1123  /* dynamic range */
1124  i = !s->channel_mode;
1125  do {
1126  if (get_bits1(gbc)) {
1127  /* Allow asymmetric application of DRC when drc_scale > 1.
1128  Amplification of quiet sounds is enhanced */
1129  int range_bits = get_bits(gbc, 8);
1130  INTFLOAT range = AC3_RANGE(range_bits);
1131  if (range_bits <= 127 || s->drc_scale <= 1.0)
1132  s->dynamic_range[i] = AC3_DYNAMIC_RANGE(range);
1133  else
1134  s->dynamic_range[i] = range;
1135  } else if (blk == 0) {
1136  s->dynamic_range[i] = AC3_DYNAMIC_RANGE1;
1137  }
1138  } while (i--);
1139 
1140  /* spectral extension strategy */
1141  if (s->eac3 && (!blk || get_bits1(gbc))) {
1142  s->spx_in_use = get_bits1(gbc);
1143  if (s->spx_in_use) {
1144  if ((ret = spx_strategy(s, blk)) < 0)
1145  return ret;
1146  }
1147  }
1148  if (!s->eac3 || !s->spx_in_use) {
1149  s->spx_in_use = 0;
1150  for (ch = 1; ch <= fbw_channels; ch++) {
1151  s->channel_uses_spx[ch] = 0;
1152  s->first_spx_coords[ch] = 1;
1153  }
1154  }
1155 
1156  /* spectral extension coordinates */
1157  if (s->spx_in_use)
1158  spx_coordinates(s);
1159 
1160  /* coupling strategy */
1161  if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
1162  if ((ret = coupling_strategy(s, blk, bit_alloc_stages)) < 0)
1163  return ret;
1164  } else if (!s->eac3) {
1165  if (!blk) {
1166  av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must "
1167  "be present in block 0\n");
1168  return AVERROR_INVALIDDATA;
1169  } else {
1170  s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
1171  }
1172  }
1173  cpl_in_use = s->cpl_in_use[blk];
1174 
1175  /* coupling coordinates */
1176  if (cpl_in_use) {
1177  if ((ret = coupling_coordinates(s, blk)) < 0)
1178  return ret;
1179  }
1180 
1181  /* stereo rematrixing strategy and band structure */
1182  if (channel_mode == AC3_CHMODE_STEREO) {
1183  if ((s->eac3 && !blk) || get_bits1(gbc)) {
1184  s->num_rematrixing_bands = 4;
1185  if (cpl_in_use && s->start_freq[CPL_CH] <= 61) {
1186  s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
1187  } else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1188  s->num_rematrixing_bands--;
1189  }
1190  for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1191  s->rematrixing_flags[bnd] = get_bits1(gbc);
1192  } else if (!blk) {
1193  av_log(s->avctx, AV_LOG_WARNING, "Warning: "
1194  "new rematrixing strategy not present in block 0\n");
1195  s->num_rematrixing_bands = 0;
1196  }
1197  }
1198 
1199  /* exponent strategies for each channel */
1200  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1201  if (!s->eac3)
1202  s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
1203  if (s->exp_strategy[blk][ch] != EXP_REUSE)
1204  bit_alloc_stages[ch] = 3;
1205  }
1206 
1207  /* channel bandwidth */
1208  for (ch = 1; ch <= fbw_channels; ch++) {
1209  s->start_freq[ch] = 0;
1210  if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1211  int group_size;
1212  int prev = s->end_freq[ch];
1213  if (s->channel_in_cpl[ch])
1214  s->end_freq[ch] = s->start_freq[CPL_CH];
1215  else if (s->channel_uses_spx[ch])
1216  s->end_freq[ch] = s->spx_src_start_freq;
1217  else {
1218  int bandwidth_code = get_bits(gbc, 6);
1219  if (bandwidth_code > 60) {
1220  av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
1221  return AVERROR_INVALIDDATA;
1222  }
1223  s->end_freq[ch] = bandwidth_code * 3 + 73;
1224  }
1225  group_size = 3 << (s->exp_strategy[blk][ch] - 1);
1226  s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1227  if (blk > 0 && s->end_freq[ch] != prev)
1228  memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
1229  }
1230  }
1231  if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
1232  s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
1233  (3 << (s->exp_strategy[blk][CPL_CH] - 1));
1234  }
1235 
1236  /* decode exponents for each channel */
1237  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1238  if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1239  s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
1240  if (decode_exponents(s, gbc, s->exp_strategy[blk][ch],
1241  s->num_exp_groups[ch], s->dexps[ch][0],
1242  &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1243  return AVERROR_INVALIDDATA;
1244  }
1245  if (ch != CPL_CH && ch != s->lfe_ch)
1246  skip_bits(gbc, 2); /* skip gainrng */
1247  }
1248  }
1249 
1250  /* bit allocation information */
1251  if (s->bit_allocation_syntax) {
1252  if (get_bits1(gbc)) {
1253  s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1254  s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1255  s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
1256  s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
1257  s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
1258  for (ch = !cpl_in_use; ch <= s->channels; ch++)
1259  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1260  } else if (!blk) {
1261  av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must "
1262  "be present in block 0\n");
1263  return AVERROR_INVALIDDATA;
1264  }
1265  }
1266 
1267  /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
1268  if (!s->eac3 || !blk) {
1269  if (s->snr_offset_strategy && get_bits1(gbc)) {
1270  int snr = 0;
1271  int csnr;
1272  csnr = (get_bits(gbc, 6) - 15) << 4;
1273  for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1274  /* snr offset */
1275  if (ch == i || s->snr_offset_strategy == 2)
1276  snr = (csnr + get_bits(gbc, 4)) << 2;
1277  /* run at least last bit allocation stage if snr offset changes */
1278  if (blk && s->snr_offset[ch] != snr) {
1279  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
1280  }
1281  s->snr_offset[ch] = snr;
1282 
1283  /* fast gain (normal AC-3 only) */
1284  if (!s->eac3) {
1285  int prev = s->fast_gain[ch];
1286  s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1287  /* run last 2 bit allocation stages if fast gain changes */
1288  if (blk && prev != s->fast_gain[ch])
1289  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1290  }
1291  }
1292  } else if (!s->eac3 && !blk) {
1293  av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
1294  return AVERROR_INVALIDDATA;
1295  }
1296  }
1297 
1298  /* fast gain (E-AC-3 only) */
1299  if (s->fast_gain_syntax && get_bits1(gbc)) {
1300  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1301  int prev = s->fast_gain[ch];
1302  s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1303  /* run last 2 bit allocation stages if fast gain changes */
1304  if (blk && prev != s->fast_gain[ch])
1305  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1306  }
1307  } else if (s->eac3 && !blk) {
1308  for (ch = !cpl_in_use; ch <= s->channels; ch++)
1309  s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
1310  }
1311 
1312  /* E-AC-3 to AC-3 converter SNR offset */
1313  if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
1314  skip_bits(gbc, 10); // skip converter snr offset
1315  }
1316 
1317  /* coupling leak information */
1318  if (cpl_in_use) {
1319  if (s->first_cpl_leak || get_bits1(gbc)) {
1320  int fl = get_bits(gbc, 3);
1321  int sl = get_bits(gbc, 3);
1322  /* run last 2 bit allocation stages for coupling channel if
1323  coupling leak changes */
1324  if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1325  sl != s->bit_alloc_params.cpl_slow_leak)) {
1326  bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
1327  }
1328  s->bit_alloc_params.cpl_fast_leak = fl;
1329  s->bit_alloc_params.cpl_slow_leak = sl;
1330  } else if (!s->eac3 && !blk) {
1331  av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must "
1332  "be present in block 0\n");
1333  return AVERROR_INVALIDDATA;
1334  }
1335  s->first_cpl_leak = 0;
1336  }
1337 
1338  /* delta bit allocation information */
1339  if (s->dba_syntax && get_bits1(gbc)) {
1340  /* delta bit allocation exists (strategy) */
1341  for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1342  s->dba_mode[ch] = get_bits(gbc, 2);
1343  if (s->dba_mode[ch] == DBA_RESERVED) {
1344  av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1345  return AVERROR_INVALIDDATA;
1346  }
1347  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1348  }
1349  /* channel delta offset, len and bit allocation */
1350  for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1351  if (s->dba_mode[ch] == DBA_NEW) {
1352  s->dba_nsegs[ch] = get_bits(gbc, 3) + 1;
1353  for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1354  s->dba_offsets[ch][seg] = get_bits(gbc, 5);
1355  s->dba_lengths[ch][seg] = get_bits(gbc, 4);
1356  s->dba_values[ch][seg] = get_bits(gbc, 3);
1357  }
1358  /* run last 2 bit allocation stages if new dba values */
1359  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1360  }
1361  }
1362  } else if (blk == 0) {
1363  for (ch = 0; ch <= s->channels; ch++) {
1364  s->dba_mode[ch] = DBA_NONE;
1365  }
1366  }
1367 
1368  /* Bit allocation */
1369  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1370  if (bit_alloc_stages[ch] > 2) {
1371  /* Exponent mapping into PSD and PSD integration */
1372  ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
1373  s->start_freq[ch], s->end_freq[ch],
1374  s->psd[ch], s->band_psd[ch]);
1375  }
1376  if (bit_alloc_stages[ch] > 1) {
1377  /* Compute excitation function, Compute masking curve, and
1378  Apply delta bit allocation */
1379  if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1380  s->start_freq[ch], s->end_freq[ch],
1381  s->fast_gain[ch], (ch == s->lfe_ch),
1382  s->dba_mode[ch], s->dba_nsegs[ch],
1383  s->dba_offsets[ch], s->dba_lengths[ch],
1384  s->dba_values[ch], s->mask[ch])) {
1385  av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
1386  return AVERROR_INVALIDDATA;
1387  }
1388  }
1389  if (bit_alloc_stages[ch] > 0) {
1390  /* Compute bit allocation */
1391  const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1393  s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1394  s->start_freq[ch], s->end_freq[ch],
1395  s->snr_offset[ch],
1396  s->bit_alloc_params.floor,
1397  bap_tab, s->bap[ch]);
1398  }
1399  }
1400 
1401  /* unused dummy data */
1402  if (s->skip_syntax && get_bits1(gbc)) {
1403  int skipl = get_bits(gbc, 9);
1404  skip_bits_long(gbc, 8 * skipl);
1405  }
1406 
1407  /* unpack the transform coefficients
1408  this also uncouples channels if coupling is in use. */
1410 
1411  /* TODO: generate enhanced coupling coordinates and uncouple */
1412 
1413  /* recover coefficients if rematrixing is in use */
1414  if (s->channel_mode == AC3_CHMODE_STEREO)
1415  do_rematrixing(s);
1416 
1417  /* apply scaling to coefficients (headroom, dynrng) */
1418  for (ch = 1; ch <= s->channels; ch++) {
1419  int audio_channel = 0;
1420  INTFLOAT gain;
1421  if (s->channel_mode == AC3_CHMODE_DUALMONO && ch <= 2)
1422  audio_channel = 2-ch;
1423  if (s->heavy_compression && s->compression_exists[audio_channel])
1424  gain = s->heavy_dynamic_range[audio_channel];
1425  else
1426  gain = s->dynamic_range[audio_channel];
1427 
1428 #if USE_FIXED
1429  scale_coefs(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256);
1430 #else
1431  if (s->target_level != 0)
1432  gain = gain * s->level_gain[audio_channel];
1433  gain *= 1.0 / 4194304.0f;
1434  s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1435  s->fixed_coeffs[ch], gain, 256);
1436 #endif
1437  }
1438 
1439  /* apply spectral extension to high frequency bins */
1440  if (CONFIG_EAC3_DECODER && s->spx_in_use) {
1442  }
1443 
1444  /* downmix and MDCT. order depends on whether block switching is used for
1445  any channel in this block. this is because coefficients for the long
1446  and short transforms cannot be mixed. */
1447  downmix_output = s->channels != s->out_channels &&
1448  !((s->output_mode & AC3_OUTPUT_LFEON) &&
1449  s->fbw_channels == s->out_channels);
1450  if (different_transforms) {
1451  /* the delay samples have already been downmixed, so we upmix the delay
1452  samples in order to reconstruct all channels before downmixing. */
1453  if (s->downmixed) {
1454  s->downmixed = 0;
1455  ac3_upmix_delay(s);
1456  }
1457 
1458  do_imdct(s, s->channels, offset);
1459 
1460  if (downmix_output) {
1461 #if USE_FIXED
1462  ac3_downmix_c_fixed16(s->outptr, s->downmix_coeffs,
1463  s->out_channels, s->fbw_channels, 256);
1464 #else
1465  ff_ac3dsp_downmix(&s->ac3dsp, s->outptr, s->downmix_coeffs,
1466  s->out_channels, s->fbw_channels, 256);
1467 #endif
1468  }
1469  } else {
1470  if (downmix_output) {
1471  AC3_RENAME(ff_ac3dsp_downmix)(&s->ac3dsp, s->xcfptr + 1, s->downmix_coeffs,
1472  s->out_channels, s->fbw_channels, 256);
1473  }
1474 
1475  if (downmix_output && !s->downmixed) {
1476  s->downmixed = 1;
1477  AC3_RENAME(ff_ac3dsp_downmix)(&s->ac3dsp, s->dlyptr, s->downmix_coeffs,
1478  s->out_channels, s->fbw_channels, 128);
1479  }
1480 
1481  do_imdct(s, s->out_channels, offset);
1482  }
1483 
1484  return 0;
1485 }
1486 
1487 /**
1488  * Decode a single AC-3 frame.
1489  */
1491  int *got_frame_ptr, AVPacket *avpkt)
1492 {
1493  const uint8_t *buf = avpkt->data;
1494  int buf_size, full_buf_size = avpkt->size;
1495  AC3DecodeContext *s = avctx->priv_data;
1496  int blk, ch, err, offset, ret;
1497  int i;
1498  int skip = 0, got_independent_frame = 0;
1499  const uint8_t *channel_map;
1500  uint8_t extended_channel_map[EAC3_MAX_CHANNELS];
1502  enum AVMatrixEncoding matrix_encoding;
1503  uint64_t mask;
1504 
1505  s->superframe_size = 0;
1506 
1507  buf_size = full_buf_size;
1508  i = ff_ac3_find_syncword(buf, buf_size);
1509  if (i < 0 || i > 10)
1510  return i;
1511  buf += i;
1512  buf_size -= i;
1513 
1514  /* copy input buffer to decoder context to avoid reading past the end
1515  of the buffer, which can be caused by a damaged input stream. */
1516  if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
1517  // seems to be byte-swapped AC-3
1518  int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1519  s->bdsp.bswap16_buf((uint16_t *) s->input_buffer,
1520  (const uint16_t *) buf, cnt);
1521  } else
1522  memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1523 
1524  /* if consistent noise generation is enabled, seed the linear feedback generator
1525  * with the contents of the AC-3 frame so that the noise is identical across
1526  * decodes given the same AC-3 frame data, for use with non-linear edititing software. */
1527  if (s->consistent_noise_generation)
1528  av_lfg_init_from_data(&s->dith_state, s->input_buffer, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1529 
1530  buf = s->input_buffer;
1531 dependent_frame:
1532  /* initialize the GetBitContext with the start of valid AC-3 Frame */
1533  if ((ret = init_get_bits8(&s->gbc, buf, buf_size)) < 0)
1534  return ret;
1535 
1536  /* parse the syncinfo */
1537  err = parse_frame_header(s);
1538 
1539  if (err) {
1540  switch (err) {
1541  case AC3_PARSE_ERROR_SYNC:
1542  av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1543  return AVERROR_INVALIDDATA;
1544  case AC3_PARSE_ERROR_BSID:
1545  av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1546  break;
1548  av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1549  break;
1551  av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1552  break;
1554  /* skip frame if CRC is ok. otherwise use error concealment. */
1555  /* TODO: add support for substreams */
1556  if (s->substreamid) {
1557  av_log(avctx, AV_LOG_DEBUG,
1558  "unsupported substream %d: skipping frame\n",
1559  s->substreamid);
1560  *got_frame_ptr = 0;
1561  return buf_size;
1562  } else {
1563  av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1564  }
1565  break;
1566  case AC3_PARSE_ERROR_CRC:
1567  break;
1568  default: // Normal AVERROR do not try to recover.
1569  *got_frame_ptr = 0;
1570  return err;
1571  }
1572  } else {
1573  /* check that reported frame size fits in input buffer */
1574  if (s->frame_size > buf_size) {
1575  av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1577  } else if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) {
1578  /* check for crc mismatch */
1579  if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2],
1580  s->frame_size - 2)) {
1581  av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1582  if (avctx->err_recognition & AV_EF_EXPLODE)
1583  return AVERROR_INVALIDDATA;
1584  err = AC3_PARSE_ERROR_CRC;
1585  }
1586  }
1587  }
1588 
1589  if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT && !got_independent_frame) {
1590  av_log(avctx, AV_LOG_WARNING, "Ignoring dependent frame without independent frame.\n");
1591  *got_frame_ptr = 0;
1592  return FFMIN(full_buf_size, s->frame_size);
1593  }
1594 
1595  /* channel config */
1596  if (!err || (s->channels && s->out_channels != s->channels)) {
1597  s->out_channels = s->channels;
1598  s->output_mode = s->channel_mode;
1599  if (s->lfe_on)
1600  s->output_mode |= AC3_OUTPUT_LFEON;
1601  if (s->channels > 1 &&
1603  s->out_channels = 1;
1604  s->output_mode = AC3_CHMODE_MONO;
1605  } else if (s->channels > 2 &&
1607  s->out_channels = 2;
1608  s->output_mode = AC3_CHMODE_STEREO;
1609  }
1610 
1611  s->loro_center_mix_level = gain_levels[s-> center_mix_level];
1612  s->loro_surround_mix_level = gain_levels[s->surround_mix_level];
1613  s->ltrt_center_mix_level = gain_levels[s-> center_mix_level_ltrt];
1614  s->ltrt_surround_mix_level = gain_levels[s->surround_mix_level_ltrt];
1615  switch (s->preferred_downmix) {
1616  case AC3_DMIXMOD_LTRT:
1617  s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_LTRT;
1618  break;
1619  case AC3_DMIXMOD_LORO:
1620  s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_LORO;
1621  break;
1622  case AC3_DMIXMOD_DPLII:
1623  s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_DPLII;
1624  break;
1625  default:
1626  s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_UNKNOWN;
1627  break;
1628  }
1629  /* set downmixing coefficients if needed */
1630  if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1631  s->fbw_channels == s->out_channels)) {
1632  if ((ret = set_downmix_coeffs(s)) < 0) {
1633  av_log(avctx, AV_LOG_ERROR, "error setting downmix coeffs\n");
1634  return ret;
1635  }
1636  }
1637  } else if (!s->channels) {
1638  av_log(avctx, AV_LOG_ERROR, "unable to determine channel mode\n");
1639  return AVERROR_INVALIDDATA;
1640  }
1641 
1642  mask = ff_ac3_channel_layout_tab[s->output_mode & ~AC3_OUTPUT_LFEON];
1643  if (s->output_mode & AC3_OUTPUT_LFEON)
1645 
1648 
1649  /* set audio service type based on bitstream mode for AC-3 */
1650  avctx->audio_service_type = s->bitstream_mode;
1651  if (s->bitstream_mode == 0x7 && s->channels > 1)
1653 
1654  /* decode the audio blocks */
1655  channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
1656  offset = s->frame_type == EAC3_FRAME_TYPE_DEPENDENT ? AC3_MAX_CHANNELS : 0;
1657  for (ch = 0; ch < AC3_MAX_CHANNELS; ch++) {
1658  output[ch] = s->output[ch + offset];
1659  s->outptr[ch] = s->output[ch + offset];
1660  }
1661  for (ch = 0; ch < s->channels; ch++) {
1662  if (ch < s->out_channels)
1663  s->outptr[channel_map[ch]] = s->output_buffer[ch + offset];
1664  }
1665  for (blk = 0; blk < s->num_blocks; blk++) {
1666  if (!err && decode_audio_block(s, blk, offset)) {
1667  av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
1668  err = 1;
1669  }
1670  if (err)
1671  for (ch = 0; ch < s->out_channels; ch++)
1672  memcpy(s->output_buffer[ch + offset] + AC3_BLOCK_SIZE*blk, output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1673  for (ch = 0; ch < s->out_channels; ch++)
1674  output[ch] = s->outptr[channel_map[ch]];
1675  for (ch = 0; ch < s->out_channels; ch++) {
1676  if (!ch || channel_map[ch])
1677  s->outptr[channel_map[ch]] += AC3_BLOCK_SIZE;
1678  }
1679  }
1680 
1681  /* keep last block for error concealment in next frame */
1682  for (ch = 0; ch < s->out_channels; ch++)
1683  memcpy(s->output[ch + offset], output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1684 
1685  /* check if there is dependent frame */
1686  if (buf_size > s->frame_size) {
1687  AC3HeaderInfo hdr;
1688  int err;
1689 
1690  if (buf_size - s->frame_size <= 16) {
1691  skip = buf_size - s->frame_size;
1692  goto skip;
1693  }
1694 
1695  if ((ret = init_get_bits8(&s->gbc, buf + s->frame_size, buf_size - s->frame_size)) < 0)
1696  return ret;
1697 
1698  err = ff_ac3_parse_header(&s->gbc, &hdr);
1699  if (err)
1700  return err;
1701 
1703  if (hdr.num_blocks != s->num_blocks || s->sample_rate != hdr.sample_rate) {
1704  av_log(avctx, AV_LOG_WARNING, "Ignoring non-compatible dependent frame.\n");
1705  } else {
1706  buf += s->frame_size;
1707  buf_size -= s->frame_size;
1708  s->prev_output_mode = s->output_mode;
1709  s->prev_bit_rate = s->bit_rate;
1710  got_independent_frame = 1;
1711  goto dependent_frame;
1712  }
1713  }
1714  }
1715 skip:
1716 
1717  frame->decode_error_flags = err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0;
1718 
1719  /* if frame is ok, set audio parameters */
1720  if (!err) {
1721  avctx->sample_rate = s->sample_rate;
1722  avctx->bit_rate = s->bit_rate + s->prev_bit_rate;
1723  avctx->profile = s->eac3_extension_type_a == 1 ? AV_PROFILE_EAC3_DDP_ATMOS : AV_PROFILE_UNKNOWN;
1724  }
1725 
1726  if (!avctx->sample_rate) {
1727  av_log(avctx, AV_LOG_ERROR, "Could not determine the sample rate\n");
1728  return AVERROR_INVALIDDATA;
1729  }
1730 
1731  for (ch = 0; ch < EAC3_MAX_CHANNELS; ch++)
1732  extended_channel_map[ch] = ch;
1733 
1734  if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
1735  uint64_t ich_layout = ff_ac3_channel_layout_tab[s->prev_output_mode & ~AC3_OUTPUT_LFEON];
1736  int channel_map_size = ff_ac3_channels_tab[s->output_mode & ~AC3_OUTPUT_LFEON] + s->lfe_on;
1737  uint64_t channel_layout;
1738  int extend = 0;
1739 
1740  if (s->prev_output_mode & AC3_OUTPUT_LFEON)
1741  ich_layout |= AV_CH_LOW_FREQUENCY;
1742 
1743  channel_layout = ich_layout;
1744  for (ch = 0; ch < 16; ch++) {
1745  if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1746  channel_layout |= ff_eac3_custom_channel_map_locations[ch][1];
1747  }
1748  }
1749  if (av_popcount64(channel_layout) > EAC3_MAX_CHANNELS) {
1750  av_log(avctx, AV_LOG_ERROR, "Too many channels (%d) coded\n",
1751  av_popcount64(channel_layout));
1752  return AVERROR_INVALIDDATA;
1753  }
1754 
1756  av_channel_layout_from_mask(&avctx->ch_layout, channel_layout);
1757 
1758  for (ch = 0; ch < EAC3_MAX_CHANNELS; ch++) {
1759  if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1763  if (index < 0)
1764  return AVERROR_INVALIDDATA;
1765  if (extend >= channel_map_size)
1766  break;
1767 
1768  extended_channel_map[index] = offset + channel_map[extend++];
1769  } else {
1770  int i;
1771 
1772  for (i = 0; i < 64; i++) {
1773  if ((1ULL << i) & ff_eac3_custom_channel_map_locations[ch][1]) {
1775  if (index < 0)
1776  return AVERROR_INVALIDDATA;
1777  if (extend >= channel_map_size)
1778  break;
1779 
1780  extended_channel_map[index] = offset + channel_map[extend++];
1781  }
1782  }
1783  }
1784  }
1785  }
1786 
1787  ac3_downmix(avctx);
1788  }
1789 
1790  /* get output buffer */
1791  frame->nb_samples = s->num_blocks * AC3_BLOCK_SIZE;
1792  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1793  return ret;
1794 
1795  for (ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
1796  int map = extended_channel_map[ch];
1797  av_assert0(ch>=AV_NUM_DATA_POINTERS || frame->extended_data[ch] == frame->data[ch]);
1798  memcpy((SHORTFLOAT *)frame->extended_data[ch],
1799  s->output_buffer[map],
1800  s->num_blocks * AC3_BLOCK_SIZE * sizeof(SHORTFLOAT));
1801  }
1802 
1803  /*
1804  * AVMatrixEncoding
1805  *
1806  * Check whether the input layout is compatible, and make sure we're not
1807  * downmixing (else the matrix encoding is no longer applicable).
1808  */
1809  matrix_encoding = AV_MATRIX_ENCODING_NONE;
1810  if (s->channel_mode == AC3_CHMODE_STEREO &&
1811  s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1812  if (s->dolby_surround_mode == AC3_DSURMOD_ON)
1813  matrix_encoding = AV_MATRIX_ENCODING_DOLBY;
1814  else if (s->dolby_headphone_mode == AC3_DHEADPHONMOD_ON)
1815  matrix_encoding = AV_MATRIX_ENCODING_DOLBYHEADPHONE;
1816  } else if (s->channel_mode >= AC3_CHMODE_2F2R &&
1817  s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1818  switch (s->dolby_surround_ex_mode) {
1819  case AC3_DSUREXMOD_ON: // EX or PLIIx
1820  matrix_encoding = AV_MATRIX_ENCODING_DOLBYEX;
1821  break;
1822  case AC3_DSUREXMOD_PLIIZ:
1823  matrix_encoding = AV_MATRIX_ENCODING_DPLIIZ;
1824  break;
1825  default: // not indicated or off
1826  break;
1827  }
1828  }
1829  if (matrix_encoding != AV_MATRIX_ENCODING_NONE &&
1830  (ret = ff_side_data_update_matrix_encoding(frame, matrix_encoding)) < 0)
1831  return ret;
1832 
1833  /* AVDownmixInfo */
1834  if ( (s->channel_mode > AC3_CHMODE_STEREO) &&
1835  ((s->output_mode & ~AC3_OUTPUT_LFEON) > AC3_CHMODE_STEREO)) {
1837  if (!downmix_info)
1838  return AVERROR(ENOMEM);
1839  switch (s->preferred_downmix) {
1840  case AC3_DMIXMOD_LTRT:
1842  break;
1843  case AC3_DMIXMOD_LORO:
1845  break;
1846  case AC3_DMIXMOD_DPLII:
1848  break;
1849  default:
1851  break;
1852  }
1853  downmix_info->center_mix_level = gain_levels[s-> center_mix_level];
1854  downmix_info->center_mix_level_ltrt = gain_levels[s-> center_mix_level_ltrt];
1855  downmix_info->surround_mix_level = gain_levels[s-> surround_mix_level];
1856  downmix_info->surround_mix_level_ltrt = gain_levels[s->surround_mix_level_ltrt];
1857  if (s->lfe_mix_level_exists)
1858  downmix_info->lfe_mix_level = gain_levels_lfe[s->lfe_mix_level];
1859  else
1860  downmix_info->lfe_mix_level = 0.0; // -inf dB
1861  }
1862 
1863  *got_frame_ptr = 1;
1864 
1865  if (!s->superframe_size)
1866  return FFMIN(full_buf_size, s->frame_size + skip);
1867 
1868  return FFMIN(full_buf_size, s->superframe_size + skip);
1869 }
1870 
1871 /**
1872  * Uninitialize the AC-3 decoder.
1873  */
1875 {
1876  AC3DecodeContext *s = avctx->priv_data;
1877  av_tx_uninit(&s->tx_256);
1878  av_tx_uninit(&s->tx_128);
1879  av_freep(&s->fdsp);
1880  av_freep(&s->downmix_coeffs[0]);
1881 
1882  return 0;
1883 }
1884 
1885 #define OFFSET(x) offsetof(AC3DecodeContext, x)
1886 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
b3_mantissas
static int b3_mantissas[8]
Definition: ac3dec.c:58
b2_mantissas
static int b2_mantissas[128][3]
Definition: ac3dec.c:57
AC3_CHMODE_3F
@ AC3_CHMODE_3F
Definition: ac3defs.h:58
bswapdsp.h
AV_SAMPLE_FMT_FLTP
@ AV_SAMPLE_FMT_FLTP
float, planar
Definition: samplefmt.h:66
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:278
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:215
set_downmix_coeffs
static int set_downmix_coeffs(AC3DecodeContext *s)
Set stereo downmixing coefficients based on frame header info.
Definition: ac3dec.c:394
AC3HeaderInfo::center_mix_level
int center_mix_level
Center mix level index.
Definition: ac3_parser_internal.h:47
ff_ac3_fast_decay_tab
const uint8_t ff_ac3_fast_decay_tab[4]
Definition: ac3tab.c:130
EXP_D45
#define EXP_D45
Definition: ac3defs.h:43
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
av_clip
#define av_clip
Definition: common.h:100
AC3HeaderInfo::frame_type
uint8_t frame_type
Definition: ac3_parser_internal.h:45
ff_eac3_parse_header
static int ff_eac3_parse_header(AC3DecodeContext *s)
Definition: eac3dec.c:290
AC3HeaderInfo::dolby_surround_mode
int dolby_surround_mode
Definition: ac3_parser_internal.h:51
decode_band_structure
static void decode_band_structure(GetBitContext *gbc, int blk, int eac3, int ecpl, int start_subband, int end_subband, const uint8_t *default_band_struct, int *num_bands, uint8_t *band_sizes, uint8_t *band_struct, int band_struct_size)
Decode band structure for coupling, spectral extension, or enhanced coupling.
Definition: ac3dec.c:795
AV_EF_CAREFUL
#define AV_EF_CAREFUL
consider things that violate the spec, are fast to calculate and have not been seen in the wild as er...
Definition: defs.h:54
ff_ac3_channel_layout_tab
const uint16_t ff_ac3_channel_layout_tab[8]
Map audio coding mode (acmod) to channel layout mask.
Definition: ac3_channel_layout_tab.h:31
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
b4_mantissas
static int b4_mantissas[128][2]
Definition: ac3dec.c:59
AVCodecContext::audio_service_type
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
Definition: avcodec.h:1111
AV_CHANNEL_LAYOUT_STEREO
#define AV_CHANNEL_LAYOUT_STEREO
Definition: channel_layout.h:395
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1064
av_lfg_init
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
Definition: lfg.c:32
LEVEL_MINUS_6DB
#define LEVEL_MINUS_6DB
Definition: ac3.h:90
av_popcount64
#define av_popcount64
Definition: common.h:157
thread.h
AC3_SPX_BLEND
#define AC3_SPX_BLEND(x)
Definition: ac3.h:73
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1438
int64_t
long long int64_t
Definition: coverity.c:34
output
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce output
Definition: filter_design.txt:225
AC3_DYNAMIC_RANGE
#define AC3_DYNAMIC_RANGE(x)
Definition: ac3.h:72
mask
int mask
Definition: mediacodecdec_common.c:154
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:403
AVPacket::data
uint8_t * data
Definition: packet.h:539
gain_levels
static const float gain_levels[9]
Adjustments in dB gain.
Definition: ac3dec.c:78
LEVEL_MINUS_4POINT5DB
#define LEVEL_MINUS_4POINT5DB
Definition: ac3.h:89
ff_ac3_channels_tab
const uint8_t ff_ac3_channels_tab[8]
Map audio coding mode (acmod) to number of full-bandwidth channels.
Definition: ac3tab.c:80
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
AC3_DSUREXMOD_NOTINDICATED
@ AC3_DSUREXMOD_NOTINDICATED
Definition: ac3defs.h:75
decode_exponents
static int decode_exponents(AC3DecodeContext *s, GetBitContext *gbc, int exp_strategy, int ngrps, uint8_t absexp, int8_t *dexps)
Decode the grouped exponents according to exponent strategy.
Definition: ac3dec.c:456
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:329
mant_groups::b2
int b2
Definition: ac3dec.c:533
mant_groups::b4_mant
int b4_mant
Definition: ac3dec.c:531
ff_eac3_decode_transform_coeffs_aht_ch
static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
Definition: eac3dec.c:197
av_tx_init
av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, int inv, int len, const void *scale, uint64_t flags)
Initialize a transform context with the given configuration (i)MDCTs with an odd length are currently...
Definition: tx.c:903
AVDownmixInfo::surround_mix_level_ltrt
double surround_mix_level_ltrt
Absolute scale factor representing the nominal level of the surround channels during an Lt/Rt compati...
Definition: downmix_info.h:86
ff_ac3dsp_init
av_cold void ff_ac3dsp_init(AC3DSPContext *c)
Definition: ac3dsp.c:377
ac3_parse_header
static int ac3_parse_header(AC3DecodeContext *s)
Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
Definition: ac3dec.c:260
AC3_DMIXMOD_DPLII
@ AC3_DMIXMOD_DPLII
Definition: ac3defs.h:94
crc.h
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:381
AC3_PARSE_ERROR_FRAME_TYPE
@ AC3_PARSE_ERROR_FRAME_TYPE
Definition: ac3_parser_internal.h:72
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:335
AV_DOWNMIX_TYPE_UNKNOWN
@ AV_DOWNMIX_TYPE_UNKNOWN
Not indicated.
Definition: downmix_info.h:45
ac3dec.h
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:1079
FIXR12
#define FIXR12(x)
Definition: ac3.h:63
GetBitContext
Definition: get_bits.h:108
quantization_tab
static const uint8_t quantization_tab[16]
Quantization table: levels for symmetric.
Definition: ac3dec.c:66
MULH
#define MULH
Definition: mathops.h:42
AC3HeaderInfo
Definition: ac3_parser_internal.h:34
AC3_CHMODE_3F1R
@ AC3_CHMODE_3F1R
Definition: ac3defs.h:60
AC3HeaderInfo::frame_size
uint16_t frame_size
Definition: ac3_parser_internal.h:61
mant_groups
Grouped mantissas for 3-level 5-level and 11-level quantization.
Definition: ac3dec.c:528
ac3_decode_frame
static int ac3_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Decode a single AC-3 frame.
Definition: ac3dec.c:1490
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:508
EAC3_FRAME_TYPE_DEPENDENT
@ EAC3_FRAME_TYPE_DEPENDENT
Definition: ac3defs.h:99
AC3HeaderInfo::channel_mode
uint8_t channel_mode
Definition: ac3_parser_internal.h:43
AVDownmixInfo
This structure describes optional metadata relevant to a downmix procedure.
Definition: downmix_info.h:58
scale_coefs
static void scale_coefs(int32_t *dst, const int32_t *src, int dynrng, int len)
Definition: ac3dec_fixed.c:63
ff_ac3_bap_tab
const uint8_t ff_ac3_bap_tab[64]
Definition: ac3tab.c:116
LEVEL_PLUS_3DB
#define LEVEL_PLUS_3DB
Definition: ac3.h:85
ff_ac3_dec_channel_map
const uint8_t ff_ac3_dec_channel_map[8][2][6]
Table to remap channels from AC-3 order to SMPTE order.
Definition: ac3tab.c:88
avpriv_alloc_fixed_dsp
AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact)
Allocate and initialize a fixed DSP context.
Definition: fixed_dsp.c:151
EXP_REUSE
#define EXP_REUSE
Definition: ac3defs.h:38
coupling_coordinates
static int coupling_coordinates(AC3DecodeContext *s, int blk)
Definition: ac3dec.c:1049
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:205
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:209
av_cold
#define av_cold
Definition: attributes.h:90
ff_side_data_update_matrix_encoding
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
Definition: utils.c:124
AV_MATRIX_ENCODING_DOLBY
@ AV_MATRIX_ENCODING_DOLBY
Definition: channel_layout.h:262
AV_PROFILE_UNKNOWN
#define AV_PROFILE_UNKNOWN
Definition: defs.h:65
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:545
AV_CH_LOW_FREQUENCY
#define AV_CH_LOW_FREQUENCY
Definition: channel_layout.h:178
parse_frame_header
static int parse_frame_header(AC3DecodeContext *s)
Common function to parse AC-3 or E-AC-3 frame header.
Definition: ac3dec.c:324
AC3_DSUREXMOD_ON
@ AC3_DSUREXMOD_ON
Definition: ac3defs.h:77
float
float
Definition: af_crystalizer.c:122
s
#define s(width, name)
Definition: cbs_vp9.c:198
calc_transform_coeffs_cpl
static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
Generate transform coefficients for each coupled channel in the coupling range using the coupling coe...
Definition: ac3dec.c:500
LEVEL_MINUS_3DB
#define LEVEL_MINUS_3DB
Definition: ac3.h:88
av_lfg_get
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
Definition: lfg.h:53
av_channel_layout_from_mask
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
Definition: channel_layout.c:252
AC3_PARSE_ERROR_SYNC
@ AC3_PARSE_ERROR_SYNC
Definition: ac3_parser_internal.h:68
ff_ac3_floor_tab
const int16_t ff_ac3_floor_tab[8]
Definition: ac3tab.c:142
bits
uint8_t bits
Definition: vp3data.h:128
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:40
EAC3_FRAME_TYPE_INDEPENDENT
@ EAC3_FRAME_TYPE_INDEPENDENT
Definition: ac3defs.h:98
get_sbits
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:320
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:230
channels
channels
Definition: aptx.h:31
ac3_decode_init
static av_cold int ac3_decode_init(AVCodecContext *avctx)
AVCodec initialization.
Definition: ac3dec.c:207
decode.h
ac3_tables_init
static av_cold void ac3_tables_init(void)
Definition: ac3dec.c:128
channel_map
static const uint8_t channel_map[8][8]
Definition: atrac3plusdec.c:52
kbdwin.h
AC3HeaderInfo::sample_rate
uint16_t sample_rate
Definition: ac3_parser_internal.h:58
blk
#define blk(i)
Definition: sha.c:186
remove_dithering
static void remove_dithering(AC3DecodeContext *s)
Remove random dithering from coupling range coefficients with zero-bit mantissas for coupled channels...
Definition: ac3dec.c:622
ff_ac3_heavy_dynamic_range_tab
float ff_ac3_heavy_dynamic_range_tab[256]
Definition: ac3dec.c:74
AVMatrixEncoding
AVMatrixEncoding
Definition: channel_layout.h:260
AV_CRC_16_ANSI
@ AV_CRC_16_ANSI
Definition: crc.h:50
ac3defs.h
SHORTFLOAT
float SHORTFLOAT
Definition: aac_defines.h:104
bap_tab
static const uint8_t bap_tab[64]
Definition: dolby_e.c:599
AV_MATRIX_ENCODING_DOLBYHEADPHONE
@ AV_MATRIX_ENCODING_DOLBYHEADPHONE
Definition: channel_layout.h:267
AC3_RANGE
#define AC3_RANGE(x)
Definition: ac3.h:70
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:203
ff_bswapdsp_init
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
Definition: bswapdsp.c:49
FF_DECODE_ERROR_INVALID_BITSTREAM
#define FF_DECODE_ERROR_INVALID_BITSTREAM
Definition: frame.h:739
AVDownmixInfo::surround_mix_level
double surround_mix_level
Absolute scale factor representing the nominal level of the surround channels during a regular downmi...
Definition: downmix_info.h:80
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
gain_levels_lfe
static const float gain_levels_lfe[32]
Adjustments in dB gain (LFE, +10 to -21 dB)
Definition: ac3dec.c:91
AC3_DYNAMIC_RANGE1
#define AC3_DYNAMIC_RANGE1
Definition: ac3.h:74
mant_groups::b2_mant
int b2_mant[2]
Definition: ac3dec.c:530
symmetric_dequant
static int symmetric_dequant(int code, int levels)
Symmetrical Dequantization reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantizati...
Definition: ac3dec.c:120
ff_ctzll
#define ff_ctzll
Definition: intmath.h:127
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:501
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:388
ac3_upmix_delay
static void ac3_upmix_delay(AC3DecodeContext *s)
Upmix delay samples from stereo to original channel layout.
Definition: ac3dec.c:753
DBA_NONE
@ DBA_NONE
Definition: ac3defs.h:49
AC3HeaderInfo::substreamid
int substreamid
substream identification
Definition: ac3_parser_internal.h:46
sqrtf
static __device__ float sqrtf(float a)
Definition: cuda_runtime.h:184
spx_strategy
static int spx_strategy(AC3DecodeContext *s, int blk)
Definition: ac3dec.c:844
USE_FIXED
#define USE_FIXED
Definition: aacdec.c:34
av_clipf
av_clipf
Definition: af_crystalizer.c:122
AC3_MAX_CHANNELS
#define AC3_MAX_CHANNELS
maximum number of channels, including coupling channel
Definition: ac3defs.h:26
AV_EF_CRCCHECK
#define AV_EF_CRCCHECK
Verify checksums embedded in the bitstream (could be of either encoded or decoded data,...
Definition: defs.h:48
AVOnce
#define AVOnce
Definition: thread.h:202
index
int index
Definition: gxfenc.c:90
AC3HeaderInfo::num_blocks
int num_blocks
number of audio blocks
Definition: ac3_parser_internal.h:50
ff_eac3_custom_channel_map_locations
const uint64_t ff_eac3_custom_channel_map_locations[16][2]
Definition: ac3tab.c:150
AC3_DHEADPHONMOD_ON
@ AC3_DHEADPHONMOD_ON
Definition: ac3defs.h:85
AC3HeaderInfo::channels
uint8_t channels
Definition: ac3_parser_internal.h:60
f
f
Definition: af_crystalizer.c:122
ac3_downmix
static void ac3_downmix(AVCodecContext *avctx)
Definition: ac3dec.c:186
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1697
ac3_parser_internal.h
AC3_CHMODE_STEREO
@ AC3_CHMODE_STEREO
Definition: ac3defs.h:57
AVPacket::size
int size
Definition: packet.h:540
powf
#define powf(x, y)
Definition: libm.h:50
AC3_DMIXMOD_LTRT
@ AC3_DMIXMOD_LTRT
Definition: ac3defs.h:92
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:319
coupling_strategy
static int coupling_strategy(AC3DecodeContext *s, int blk, uint8_t *bit_alloc_stages)
Definition: ac3dec.c:979
AC3_BLOCK_SIZE
#define AC3_BLOCK_SIZE
Definition: ac3defs.h:30
ac3_default_coeffs
static const uint8_t ac3_default_coeffs[8][5][2]
Table for default stereo downmixing coefficients reference: Section 7.8.2 Downmixing Into Two Channel...
Definition: ac3dec.c:103
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:424
AV_MATRIX_ENCODING_NONE
@ AV_MATRIX_ENCODING_NONE
Definition: channel_layout.h:261
ff_ac3_db_per_bit_tab
const uint16_t ff_ac3_db_per_bit_tab[4]
Definition: ac3tab.c:138
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:1071
AC3HeaderInfo::lfe_on
uint8_t lfe_on
Definition: ac3_parser_internal.h:44
LEVEL_MINUS_1POINT5DB
#define LEVEL_MINUS_1POINT5DB
Definition: ac3.h:87
AV_NUM_DATA_POINTERS
#define AV_NUM_DATA_POINTERS
Definition: frame.h:404
ac3dec_data.h
AVDownmixInfo::center_mix_level_ltrt
double center_mix_level_ltrt
Absolute scale factor representing the nominal level of the center channel during an Lt/Rt compatible...
Definition: downmix_info.h:74
range
enum AVColorRange range
Definition: mediacodec_wrapper.c:2594
ff_ac3_ungroup_3_in_5_bits_tab
const uint8_t ff_ac3_ungroup_3_in_5_bits_tab[32][3]
Table used to ungroup 3 values stored in 5 bits.
Definition: ac3dec_data.c:34
av_crc_get_table
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
Definition: crc.c:374
LEVEL_ONE
#define LEVEL_ONE
Definition: ac3.h:93
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
AC3_PARSE_ERROR_CRC
@ AC3_PARSE_ERROR_CRC
Definition: ac3_parser_internal.h:73
AC3HeaderInfo::bitstream_mode
uint8_t bitstream_mode
Definition: ac3_parser_internal.h:42
end_freq_inv_tab
static const int end_freq_inv_tab[8]
Definition: ac3dec_fixed.c:58
spx_coordinates
static void spx_coordinates(AC3DecodeContext *s)
Definition: ac3dec.c:901
AC3_DMIXMOD_LORO
@ AC3_DMIXMOD_LORO
Definition: ac3defs.h:93
AV_SAMPLE_FMT_S16P
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
Definition: samplefmt.h:64
av_tx_uninit
av_cold void av_tx_uninit(AVTXContext **ctx)
Frees a context and sets *ctx to NULL, does nothing when *ctx == NULL.
Definition: tx.c:295
AVDownmixInfo::lfe_mix_level
double lfe_mix_level
Absolute scale factor representing the level at which the LFE data is mixed into L/R channels during ...
Definition: downmix_info.h:92
av_channel_layout_compare
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
Definition: channel_layout.c:809
av_lfg_init_from_data
int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length)
Seed the state of the ALFG using binary data.
Definition: lfg.c:64
LEVEL_PLUS_1POINT5DB
#define LEVEL_PLUS_1POINT5DB
Definition: ac3.h:86
ff_ac3_rematrix_band_tab
const uint8_t ff_ac3_rematrix_band_tab[5]
Table of bin locations for rematrixing bands reference: Section 7.5.2 Rematrixing : Frequency Band De...
Definition: ac3tab.c:107
ac3_decode_transform_coeffs_ch
static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
Decode the transform coefficients for a particular channel reference: Section 7.3 Quantization and De...
Definition: ac3dec.c:541
CPL_CH
#define CPL_CH
coupling channel index
Definition: ac3defs.h:27
mant_groups::b1
int b1
Definition: ac3dec.c:532
decode_transform_coeffs_ch
static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch, mant_groups *m)
Definition: ac3dec.c:635
AVDownmixInfo::center_mix_level
double center_mix_level
Absolute scale factor representing the nominal level of the center channel during a regular downmix.
Definition: downmix_info.h:68
AC3_PARSE_ERROR_BSID
@ AC3_PARSE_ERROR_BSID
Definition: ac3_parser_internal.h:69
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
code
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
Definition: filter_design.txt:178
AC3_RENAME
#define AC3_RENAME(x)
Definition: ac3.h:67
downmix_info.h
ff_ac3dsp_downmix
void ff_ac3dsp_downmix(AC3DSPContext *c, float **samples, float **matrix, int out_ch, int in_ch, int len)
Definition: ac3dsp.c:344
AC3_DSUREXMOD_PLIIZ
@ AC3_DSUREXMOD_PLIIZ
Definition: ac3defs.h:78
av_malloc_array
#define av_malloc_array(a, b)
Definition: tableprint_vlc.h:31
AC3_CHMODE_DUALMONO
@ AC3_CHMODE_DUALMONO
Definition: ac3defs.h:55
ff_ac3_slow_decay_tab
const uint8_t ff_ac3_slow_decay_tab[4]
Definition: ac3tab.c:126
DBA_NEW
@ DBA_NEW
Definition: ac3defs.h:48
ac3_decode_end
static av_cold int ac3_decode_end(AVCodecContext *avctx)
Uninitialize the AC-3 decoder.
Definition: ac3dec.c:1874
IMDCT_TYPE
#define IMDCT_TYPE
Definition: ac3dec_fixed.c:54
ff_eac3_apply_spectral_extension
static void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
Definition: eac3dec.c:58
ff_ac3_find_syncword
int ff_ac3_find_syncword(const uint8_t *buf, int buf_size)
AVDownmixInfo::preferred_downmix_type
enum AVDownmixType preferred_downmix_type
Type of downmix preferred by the mastering engineer.
Definition: downmix_info.h:62
AC3_HEAVY_RANGE
#define AC3_HEAVY_RANGE(x)
Definition: ac3.h:71
ungroup_3_in_7_bits_tab
static uint8_t ungroup_3_in_7_bits_tab[128][3]
table for ungrouping 3 values in 7 bits.
Definition: ac3dec.c:53
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
ac3_downmix_c_fixed16
static void ac3_downmix_c_fixed16(int16_t **samples, int16_t **matrix, int out_ch, int in_ch, int len)
Downmix samples from original signal to stereo or mono (this is for 16-bit samples and fixed point de...
Definition: ac3dec_fixed.c:131
AV_DOWNMIX_TYPE_LORO
@ AV_DOWNMIX_TYPE_LORO
Lo/Ro 2-channel downmix (Stereo).
Definition: downmix_info.h:46
AC3_CHMODE_MONO
@ AC3_CHMODE_MONO
Definition: ac3defs.h:56
AC3_CHMODE_3F2R
@ AC3_CHMODE_3F2R
Definition: ac3defs.h:62
AC3_CHMODE_2F1R
@ AC3_CHMODE_2F1R
Definition: ac3defs.h:59
ret
ret
Definition: filter_design.txt:187
LEVEL_ZERO
#define LEVEL_ZERO
Definition: ac3.h:92
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
AC3_CHMODE_2F2R
@ AC3_CHMODE_2F2R
Definition: ac3defs.h:61
AC3_DHEADPHONMOD_NOTINDICATED
@ AC3_DHEADPHONMOD_NOTINDICATED
Definition: ac3defs.h:83
ff_ac3_parse_header
int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
Parse AC-3 frame header.
AV_AUDIO_SERVICE_TYPE_KARAOKE
@ AV_AUDIO_SERVICE_TYPE_KARAOKE
Definition: defs.h:233
U
#define U(x)
Definition: vpx_arith.h:37
DBA_RESERVED
@ DBA_RESERVED
Definition: ac3defs.h:50
AC3_DSURMOD_ON
@ AC3_DSURMOD_ON
Definition: ac3defs.h:69
AVCodecContext
main external API structure.
Definition: avcodec.h:451
channel_layout.h
AC3_DMIXMOD_NOTINDICATED
@ AC3_DMIXMOD_NOTINDICATED
Definition: ac3defs.h:91
EAC3_MAX_CHANNELS
#define EAC3_MAX_CHANNELS
maximum number of channels in EAC3
Definition: ac3defs.h:25
AV_MATRIX_ENCODING_DOLBYEX
@ AV_MATRIX_ENCODING_DOLBYEX
Definition: channel_layout.h:266
av_channel_layout_index_from_channel
int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, enum AVChannel channel)
Get the index of a given channel in a channel layout.
Definition: channel_layout.c:713
av_crc
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
Definition: crc.c:392
mant_groups::b1_mant
int b1_mant[2]
Definition: ac3dec.c:529
AV_DOWNMIX_TYPE_DPLII
@ AV_DOWNMIX_TYPE_DPLII
Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible.
Definition: downmix_info.h:48
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1658
av_channel_layout_uninit
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
Definition: channel_layout.c:442
ff_kbd_window_init
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
Definition: kbdwin.c:54
AC3_PARSE_ERROR_SAMPLE_RATE
@ AC3_PARSE_ERROR_SAMPLE_RATE
Definition: ac3_parser_internal.h:70
b1_mantissas
static int b1_mantissas[32][3]
tables for ungrouping mantissas
Definition: ac3dec.c:56
decode_transform_coeffs
static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
Decode the transform coefficients.
Definition: ac3dec.c:655
av_downmix_info_update_side_data
AVDownmixInfo * av_downmix_info_update_side_data(AVFrame *frame)
Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing.
Definition: downmix_info.c:24
AC3HeaderInfo::bitstream_id
uint8_t bitstream_id
Definition: ac3_parser_internal.h:41
ff_eac3_hebap_tab
const uint8_t ff_eac3_hebap_tab[64]
Definition: ac3dec_data.c:45
mem.h
AV_CODEC_FLAG_BITEXACT
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition: avcodec.h:342
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:36
map
const VDPAUPixFmtMap * map
Definition: hwcontext_vdpau.c:71
AV_CHANNEL_LAYOUT_MONO
#define AV_CHANNEL_LAYOUT_MONO
Definition: channel_layout.h:394
ff_ac3_bit_alloc_calc_mask
int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd, int start, int end, int fast_gain, int is_lfe, int dba_mode, int dba_nsegs, uint8_t *dba_offsets, uint8_t *dba_lengths, uint8_t *dba_values, int16_t *mask)
Calculate the masking curve.
Definition: ac3.c:201
ff_ac3_slow_gain_tab
const uint16_t ff_ac3_slow_gain_tab[4]
Definition: ac3tab.c:134
scale
static void scale(int *out, const int *in, const int w, const int h, const int shift)
Definition: intra.c:291
AVPacket
This structure stores compressed data.
Definition: packet.h:516
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:478
decode_audio_block
static int decode_audio_block(AC3DecodeContext *s, int blk, int offset)
Decode a single audio block from the AC-3 bitstream.
Definition: ac3dec.c:1095
do_imdct
static void do_imdct(AC3DecodeContext *s, int channels, int offset)
Inverse MDCT Transform.
Definition: ac3dec.c:715
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
avpriv_float_dsp_alloc
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
Definition: float_dsp.c:146
ff_ac3_fast_gain_tab
const uint16_t ff_ac3_fast_gain_tab[8]
Definition: ac3tab.c:146
AV_MATRIX_ENCODING_DPLIIZ
@ AV_MATRIX_ENCODING_DPLIIZ
Definition: channel_layout.h:265
AC3_PARSE_ERROR_FRAME_SIZE
@ AC3_PARSE_ERROR_FRAME_SIZE
Definition: ac3_parser_internal.h:71
dynamic_range_tab
static float dynamic_range_tab[256]
dynamic range table.
Definition: ac3dec.c:73
int32_t
int32_t
Definition: audioconvert.c:56
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
LEVEL_MINUS_9DB
#define LEVEL_MINUS_9DB
Definition: ac3.h:91
do_rematrixing
static void do_rematrixing(AC3DecodeContext *s)
Stereo rematrixing.
Definition: ac3dec.c:691
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
fixed_sqrt
static av_always_inline int fixed_sqrt(int x, int bits)
Calculate the square root.
Definition: fixed_dsp.h:176
AC3HeaderInfo::sr_shift
uint8_t sr_shift
Definition: ac3_parser_internal.h:57
ff_fmt_convert_init
av_cold void ff_fmt_convert_init(FmtConvertContext *c)
Definition: fmtconvert.c:44
b5_mantissas
static int b5_mantissas[16]
Definition: ac3dec.c:60
AC3HeaderInfo::sr_code
uint8_t sr_code
Definition: ac3_parser_internal.h:40
AV_DOWNMIX_TYPE_LTRT
@ AV_DOWNMIX_TYPE_LTRT
Lt/Rt 2-channel downmix, Dolby Surround compatible.
Definition: downmix_info.h:47
mant_groups::b4
int b4
Definition: ac3dec.c:534
AV_PROFILE_EAC3_DDP_ATMOS
#define AV_PROFILE_EAC3_DDP_ATMOS
Definition: defs.h:96
AC3HeaderInfo::surround_mix_level
int surround_mix_level
Surround mix level index.
Definition: ac3_parser_internal.h:48
AC3HeaderInfo::bit_rate
uint32_t bit_rate
Definition: ac3_parser_internal.h:59
INTFLOAT
float INTFLOAT
Definition: aac_defines.h:101
skip
static void BS_FUNC() skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
Definition: bitstream_template.h:375
AV_RB16
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
Definition: bytestream.h:98
ff_ac3_bit_alloc_calc_psd
void ff_ac3_bit_alloc_calc_psd(int8_t *exp, int start, int end, int16_t *psd, int16_t *band_psd)
Calculate the log power-spectral density of the input signal.
Definition: ac3.c:175
ff_eac3_default_cpl_band_struct
const uint8_t ff_eac3_default_cpl_band_struct[18]
Table E2.16 Default Coupling Banding Structure.
Definition: ac3tab.c:112
ff_eac3_default_spx_band_struct
const uint8_t ff_eac3_default_spx_band_struct[17]
Table E2.15 Default Spectral Extension Banding Structure.
Definition: ac3dec_data.c:58
intmath.h
dither
static const uint8_t dither[8][8]
Definition: vf_fspp.c:62