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 
34 #include "libavutil/attributes.h"
36 #include "libavutil/crc.h"
37 #include "libavutil/downmix_info.h"
38 #include "libavutil/intmath.h"
39 #include "libavutil/mem.h"
40 #include "libavutil/opt.h"
41 #include "libavutil/thread.h"
42 #include "bswapdsp.h"
43 #include "ac3_parser_internal.h"
44 #include "ac3dec.h"
45 #include "ac3dec_data.h"
46 #include "ac3defs.h"
47 #include "decode.h"
48 #include "kbdwin.h"
49 
50 #if (!USE_FIXED)
51 /** dynamic range table. converts codes to scale factors. */
52 static float dynamic_range_tab[256];
54 
55 /*
56  * Initialize tables at runtime.
57  */
58 static av_cold void ac3_float_tables_init(void)
59 {
60  /* generate dynamic range table
61  reference: Section 7.7.1 Dynamic Range Control */
62  for (int i = 0; i < 256; i++) {
63  int v = (i >> 5) - ((i >> 7) << 3) - 5;
64  dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
65  }
66 
67  /* generate compr dynamic range table
68  reference: Section 7.7.2 Heavy Compression */
69  for (int i = 0; i < 256; i++) {
70  int v = (i >> 4) - ((i >> 7) << 4) - 4;
71  ff_ac3_heavy_dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0xF) | 0x10);
72  }
74 }
75 #endif
76 
77 static void ac3_downmix(AVCodecContext *avctx)
78 {
79  AC3DecodeContext *s = avctx->priv_data;
82 
83  /* allow downmixing to stereo or mono */
84  if (avctx->ch_layout.nb_channels > 1 &&
85  !av_channel_layout_compare(&s->downmix_layout, &mono)) {
88  } else if (avctx->ch_layout.nb_channels > 2 &&
89  !av_channel_layout_compare(&s->downmix_layout, &stereo)) {
92  }
93 }
94 
95 /**
96  * AVCodec initialization
97  */
99 {
100  AC3DecodeContext *s = avctx->priv_data;
101  const float scale = 1.0f;
102  int i, ret;
103 
104  s->avctx = avctx;
105 
106  if ((ret = av_tx_init(&s->tx_128, &s->tx_fn_128, IMDCT_TYPE, 1, 128, &scale, 0)))
107  return ret;
108 
109  if ((ret = av_tx_init(&s->tx_256, &s->tx_fn_256, IMDCT_TYPE, 1, 256, &scale, 0)))
110  return ret;
111 
112  AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
113  ff_bswapdsp_init(&s->bdsp);
114 
115 #if (USE_FIXED)
117 #else
118  ff_fmt_convert_init(&s->fmt_conv);
120 #endif
121  if (!s->fdsp)
122  return AVERROR(ENOMEM);
123 
124  ff_ac3dsp_init(&s->ac3dsp);
125  av_lfg_init(&s->dith_state, 0);
126 
127  if (USE_FIXED)
129  else
131 
132  ac3_downmix(avctx);
133  s->downmixed = 1;
134 
135  for (i = 0; i < AC3_MAX_CHANNELS; i++) {
136  s->xcfptr[i] = s->transform_coeffs[i];
137  s->dlyptr[i] = s->delay[i];
138  }
139 
140 #if USE_FIXED
142 #else
143  static AVOnce init_static_once = AV_ONCE_INIT;
144  ff_thread_once(&init_static_once, ac3_float_tables_init);
145 #endif
146 
147  return 0;
148 }
149 
151 {
152  AC3DecodeContext *s = avctx->priv_data;
153 
154  memset(&s->frame_type, 0, sizeof(*s) - offsetof(AC3DecodeContext, frame_type));
155 
156  AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
157  av_lfg_init(&s->dith_state, 0);
158 }
159 
160 /**
161  * Common function to parse AC-3 or E-AC-3 frame header
162  */
163 static int parse_frame_header(AC3DecodeContext *s)
164 {
165  AC3HeaderInfo hdr;
166  int err;
167 
168  err = ff_ac3_parse_header(&s->gbc, &hdr);
169  if (err)
170  return err;
171 
172  /* get decoding parameters from header info */
173  s->bit_alloc_params.sr_code = hdr.sr_code;
174  s->bitstream_id = hdr.bitstream_id;
175  s->bitstream_mode = hdr.bitstream_mode;
176  s->channel_mode = hdr.channel_mode;
177  s->lfe_on = hdr.lfe_on;
178  s->bit_alloc_params.sr_shift = hdr.sr_shift;
179  s->sample_rate = hdr.sample_rate;
180  s->bit_rate = hdr.bit_rate;
181  s->channels = hdr.channels;
182  s->fbw_channels = s->channels - s->lfe_on;
183  s->lfe_ch = s->fbw_channels + 1;
184  s->frame_size = hdr.frame_size;
185  s->superframe_size += hdr.frame_size;
186  s->preferred_downmix = AC3_DMIXMOD_NOTINDICATED;
187  if (hdr.bitstream_id <= 10) {
188  s->center_mix_level = hdr.center_mix_level;
189  s->surround_mix_level = hdr.surround_mix_level;
190  }
191  s->center_mix_level_ltrt = 4; // -3.0dB
192  s->surround_mix_level_ltrt = 4; // -3.0dB
193  s->lfe_mix_level_exists = 0;
194  s->num_blocks = hdr.num_blocks;
195  s->frame_type = hdr.frame_type;
196  s->substreamid = hdr.substreamid;
197  s->dolby_surround_mode = hdr.dolby_surround_mode;
198  s->dolby_surround_ex_mode = AC3_DSUREXMOD_NOTINDICATED;
199  s->dolby_headphone_mode = AC3_DHEADPHONMOD_NOTINDICATED;
200 
201  if (s->lfe_on) {
202  s->start_freq[s->lfe_ch] = 0;
203  s->end_freq[s->lfe_ch] = 7;
204  s->num_exp_groups[s->lfe_ch] = 2;
205  s->channel_in_cpl[s->lfe_ch] = 0;
206  }
207 
208  if (s->bitstream_id <= 10) {
209  s->eac3 = 0;
210  s->snr_offset_strategy = 2;
211  s->block_switch_syntax = 1;
212  s->dither_flag_syntax = 1;
213  s->bit_allocation_syntax = 1;
214  s->fast_gain_syntax = 0;
215  s->first_cpl_leak = 0;
216  s->dba_syntax = 1;
217  s->skip_syntax = 1;
218  memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
219  /* volume control params */
220  for (int i = 0; i < (s->channel_mode ? 1 : 2); i++) {
221  s->dialog_normalization[i] = hdr.dialog_normalization[i];
222  if (s->dialog_normalization[i] == 0) {
223  s->dialog_normalization[i] = -31;
224  }
225  if (s->target_level != 0) {
226  s->level_gain[i] = powf(2.0f,
227  (float)(s->target_level - s->dialog_normalization[i])/6.0f);
228  }
229  s->compression_exists[i] = hdr.compression_exists[i];
230  if (s->compression_exists[i]) {
231  s->heavy_dynamic_range[i] = AC3_HEAVY_RANGE(hdr.heavy_dynamic_range[i]);
232  }
233  }
234  return 0;
235  } else if (CONFIG_EAC3_DECODER) {
236  s->eac3 = 1;
237  return ff_eac3_parse_header(s, &hdr);
238  } else {
239  av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
240  return AVERROR(ENOSYS);
241  }
242 }
243 
244 /**
245  * Set stereo downmixing coefficients based on frame header info.
246  * reference: Section 7.8.2 Downmixing Into Two Channels
247  */
248 static int set_downmix_coeffs(AC3DecodeContext *s)
249 {
250  int i;
251  float cmix = ff_ac3_gain_levels[s-> center_mix_level];
252  float smix = ff_ac3_gain_levels[s->surround_mix_level];
253  float norm0, norm1;
254  float downmix_coeffs[2][AC3_MAX_CHANNELS];
255 
256  if (!s->downmix_coeffs[0]) {
257  s->downmix_coeffs[0] = av_malloc_array(2 * AC3_MAX_CHANNELS,
258  sizeof(**s->downmix_coeffs));
259  if (!s->downmix_coeffs[0])
260  return AVERROR(ENOMEM);
261  s->downmix_coeffs[1] = s->downmix_coeffs[0] + AC3_MAX_CHANNELS;
262  }
263 
264  for (i = 0; i < s->fbw_channels; i++) {
265  downmix_coeffs[0][i] = ff_ac3_gain_levels[ff_ac3_default_coeffs[s->channel_mode][i][0]];
266  downmix_coeffs[1][i] = ff_ac3_gain_levels[ff_ac3_default_coeffs[s->channel_mode][i][1]];
267  }
268  if (s->channel_mode > 1 && s->channel_mode & 1) {
269  downmix_coeffs[0][1] = downmix_coeffs[1][1] = cmix;
270  }
271  if (s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
272  int nf = s->channel_mode - 2;
273  downmix_coeffs[0][nf] = downmix_coeffs[1][nf] = smix * LEVEL_MINUS_3DB;
274  }
275  if (s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
276  int nf = s->channel_mode - 4;
277  downmix_coeffs[0][nf] = downmix_coeffs[1][nf+1] = smix;
278  }
279 
280  /* renormalize */
281  norm0 = norm1 = 0.0;
282  for (i = 0; i < s->fbw_channels; i++) {
283  norm0 += downmix_coeffs[0][i];
284  norm1 += downmix_coeffs[1][i];
285  }
286  norm0 = 1.0f / norm0;
287  norm1 = 1.0f / norm1;
288  for (i = 0; i < s->fbw_channels; i++) {
289  downmix_coeffs[0][i] *= norm0;
290  downmix_coeffs[1][i] *= norm1;
291  }
292 
293  if (s->output_mode == AC3_CHMODE_MONO) {
294  for (i = 0; i < s->fbw_channels; i++)
295  downmix_coeffs[0][i] = (downmix_coeffs[0][i] +
296  downmix_coeffs[1][i]) * LEVEL_MINUS_3DB;
297  }
298  for (i = 0; i < s->fbw_channels; i++) {
299  s->downmix_coeffs[0][i] = FIXR12(downmix_coeffs[0][i]);
300  s->downmix_coeffs[1][i] = FIXR12(downmix_coeffs[1][i]);
301  }
302 
303  return 0;
304 }
305 
306 /**
307  * Decode the grouped exponents according to exponent strategy.
308  * reference: Section 7.1.3 Exponent Decoding
309  */
310 static int decode_exponents(AC3DecodeContext *s,
311  GetBitContext *gbc, int exp_strategy, int ngrps,
312  uint8_t absexp, int8_t *dexps)
313 {
314  int i, j, grp, group_size;
315  int dexp[256];
316  int expacc, prevexp;
317 
318  /* unpack groups */
319  group_size = exp_strategy + (exp_strategy == EXP_D45);
320  for (grp = 0, i = 0; grp < ngrps; grp++) {
321  expacc = get_bits(gbc, 7);
322  if (expacc >= 125) {
323  av_log(s->avctx, AV_LOG_ERROR, "expacc %d is out-of-range\n", expacc);
324  return AVERROR_INVALIDDATA;
325  }
326  dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][0];
327  dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][1];
328  dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][2];
329  }
330 
331  /* convert to absolute exps and expand groups */
332  prevexp = absexp;
333  for (i = 0, j = 0; i < ngrps * 3; i++) {
334  prevexp += dexp[i] - 2;
335  if (prevexp > 24U) {
336  av_log(s->avctx, AV_LOG_ERROR, "exponent %d is out-of-range\n", prevexp);
337  return AVERROR_INVALIDDATA;
338  }
339  switch (group_size) {
340  case 4: dexps[j++] = prevexp;
341  dexps[j++] = prevexp;
343  case 2: dexps[j++] = prevexp;
345  case 1: dexps[j++] = prevexp;
346  }
347  }
348  return 0;
349 }
350 
351 /**
352  * Generate transform coefficients for each coupled channel in the coupling
353  * range using the coupling coefficients and coupling coordinates.
354  * reference: Section 7.4.3 Coupling Coordinate Format
355  */
356 static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
357 {
358  int bin, band, ch;
359 
360  bin = s->start_freq[CPL_CH];
361  for (band = 0; band < s->num_cpl_bands; band++) {
362  int band_start = bin;
363  int band_end = bin + s->cpl_band_sizes[band];
364  for (ch = 1; ch <= s->fbw_channels; ch++) {
365  if (s->channel_in_cpl[ch]) {
366  int cpl_coord = s->cpl_coords[ch][band] << 5;
367  for (bin = band_start; bin < band_end; bin++) {
368  s->fixed_coeffs[ch][bin] =
369  MULH(s->fixed_coeffs[CPL_CH][bin] * (1 << 4), cpl_coord);
370  }
371  if (ch == 2 && s->phase_flags[band]) {
372  for (bin = band_start; bin < band_end; bin++)
373  s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
374  }
375  }
376  }
377  bin = band_end;
378  }
379 }
380 
381 /**
382  * Grouped mantissas for 3-level 5-level and 11-level quantization
383  */
384 typedef struct mant_groups {
385  int b1_mant[2];
386  int b2_mant[2];
387  int b4_mant;
388  int b1;
389  int b2;
390  int b4;
391 } mant_groups;
392 
393 /**
394  * Decode the transform coefficients for a particular channel
395  * reference: Section 7.3 Quantization and Decoding of Mantissas
396  */
397 static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
398 {
399  int start_freq = s->start_freq[ch_index];
400  int end_freq = s->end_freq[ch_index];
401  uint8_t *baps = s->bap[ch_index];
402  int8_t *exps = s->dexps[ch_index];
403  int32_t *coeffs = s->fixed_coeffs[ch_index];
404  int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
405  GetBitContext *gbc = &s->gbc;
406  int freq;
407 
408  for (freq = start_freq; freq < end_freq; freq++) {
409  int bap = baps[freq];
410  int mantissa;
411  switch (bap) {
412  case 0:
413  /* random noise with approximate range of -0.707 to 0.707 */
414  if (dither)
415  mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
416  else
417  mantissa = 0;
418  break;
419  case 1:
420  if (m->b1) {
421  m->b1--;
422  mantissa = m->b1_mant[m->b1];
423  } else {
424  int bits = get_bits(gbc, 5);
425  mantissa = ff_ac3_bap1_mantissas[bits][0];
426  m->b1_mant[1] = ff_ac3_bap1_mantissas[bits][1];
427  m->b1_mant[0] = ff_ac3_bap1_mantissas[bits][2];
428  m->b1 = 2;
429  }
430  break;
431  case 2:
432  if (m->b2) {
433  m->b2--;
434  mantissa = m->b2_mant[m->b2];
435  } else {
436  int bits = get_bits(gbc, 7);
437  mantissa = ff_ac3_bap2_mantissas[bits][0];
438  m->b2_mant[1] = ff_ac3_bap2_mantissas[bits][1];
439  m->b2_mant[0] = ff_ac3_bap2_mantissas[bits][2];
440  m->b2 = 2;
441  }
442  break;
443  case 3:
444  mantissa = ff_ac3_bap3_mantissas[get_bits(gbc, 3)];
445  break;
446  case 4:
447  if (m->b4) {
448  m->b4 = 0;
449  mantissa = m->b4_mant;
450  } else {
451  int bits = get_bits(gbc, 7);
452  mantissa = ff_ac3_bap4_mantissas[bits][0];
454  m->b4 = 1;
455  }
456  break;
457  case 5:
458  mantissa = ff_ac3_bap5_mantissas[get_bits(gbc, 4)];
459  break;
460  default: /* 6 to 15 */
461  /* Shift mantissa and sign-extend it. */
462  if (bap > 15) {
463  av_log(s->avctx, AV_LOG_ERROR, "bap %d is invalid in plain AC-3\n", bap);
464  bap = 15;
465  }
466  mantissa = (unsigned)get_sbits(gbc, ff_ac3_quantization_tab[bap]) << (24 - ff_ac3_quantization_tab[bap]);
467  break;
468  }
469  coeffs[freq] = mantissa >> exps[freq];
470  }
471 }
472 
473 /**
474  * Remove random dithering from coupling range coefficients with zero-bit
475  * mantissas for coupled channels which do not use dithering.
476  * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
477  */
478 static void remove_dithering(AC3DecodeContext *s) {
479  int ch, i;
480 
481  for (ch = 1; ch <= s->fbw_channels; ch++) {
482  if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
483  for (i = s->start_freq[CPL_CH]; i < s->end_freq[CPL_CH]; i++) {
484  if (!s->bap[CPL_CH][i])
485  s->fixed_coeffs[ch][i] = 0;
486  }
487  }
488  }
489 }
490 
491 static inline void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk,
492  int ch, mant_groups *m)
493 {
494  if (!s->channel_uses_aht[ch]) {
496  } else {
497  /* if AHT is used, mantissas for all blocks are encoded in the first
498  block of the frame. */
499  int bin;
500  if (CONFIG_EAC3_DECODER && !blk)
502  for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
503  s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
504  }
505  }
506 }
507 
508 /**
509  * Decode the transform coefficients.
510  */
511 static inline void decode_transform_coeffs(AC3DecodeContext *s, int blk)
512 {
513  int ch, end;
514  int got_cplchan = 0;
515  mant_groups m;
516 
517  m.b1 = m.b2 = m.b4 = 0;
518 
519  for (ch = 1; ch <= s->channels; ch++) {
520  /* transform coefficients for full-bandwidth channel */
521  decode_transform_coeffs_ch(s, blk, ch, &m);
522  /* transform coefficients for coupling channel come right after the
523  coefficients for the first coupled channel*/
524  if (s->channel_in_cpl[ch]) {
525  if (!got_cplchan) {
528  got_cplchan = 1;
529  }
530  end = s->end_freq[CPL_CH];
531  } else {
532  end = s->end_freq[ch];
533  }
534  do
535  s->fixed_coeffs[ch][end] = 0;
536  while (++end < 256);
537  }
538 
539  /* zero the dithered coefficients for appropriate channels */
541 }
542 
543 /**
544  * Stereo rematrixing.
545  * reference: Section 7.5.4 Rematrixing : Decoding Technique
546  */
547 static void do_rematrixing(AC3DecodeContext *s)
548 {
549  int bnd, i;
550  int end, bndend;
551 
552  end = FFMIN(s->end_freq[1], s->end_freq[2]);
553 
554  for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
555  if (s->rematrixing_flags[bnd]) {
556  bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd + 1]);
557  for (i = ff_ac3_rematrix_band_tab[bnd]; i < bndend; i++) {
558  int tmp0 = s->fixed_coeffs[1][i];
559  s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
560  s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
561  }
562  }
563  }
564 }
565 
566 /**
567  * Inverse MDCT Transform.
568  * Convert frequency domain coefficients to time-domain audio samples.
569  * reference: Section 7.9.4 Transformation Equations
570  */
571 static inline void do_imdct(AC3DecodeContext *s, int channels, int offset)
572 {
573  int ch;
574 
575  for (ch = 1; ch <= channels; ch++) {
576  if (s->block_switch[ch]) {
577  int i;
578  INTFLOAT *x = s->tmp_output + 128;
579  for (i = 0; i < 128; i++)
580  x[i] = s->transform_coeffs[ch][2 * i];
581  s->tx_fn_128(s->tx_128, s->tmp_output, x, sizeof(INTFLOAT));
582 #if USE_FIXED
583  s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
584  s->tmp_output, s->window, 128, 8);
585 #else
586  s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
587  s->tmp_output, s->window, 128);
588 #endif
589  for (i = 0; i < 128; i++)
590  x[i] = s->transform_coeffs[ch][2 * i + 1];
591  s->tx_fn_128(s->tx_128, s->delay[ch - 1 + offset], x, sizeof(INTFLOAT));
592  } else {
593  s->tx_fn_256(s->tx_256, s->tmp_output, s->transform_coeffs[ch], sizeof(INTFLOAT));
594 #if USE_FIXED
595  s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
596  s->tmp_output, s->window, 128, 8);
597 #else
598  s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
599  s->tmp_output, s->window, 128);
600 #endif
601  memcpy(s->delay[ch - 1 + offset], s->tmp_output + 128, 128 * sizeof(INTFLOAT));
602  }
603  }
604 }
605 
606 /**
607  * Upmix delay samples from stereo to original channel layout.
608  */
609 static void ac3_upmix_delay(AC3DecodeContext *s)
610 {
611  int channel_data_size = sizeof(s->delay[0]);
612  switch (s->channel_mode) {
613  case AC3_CHMODE_DUALMONO:
614  case AC3_CHMODE_STEREO:
615  /* upmix mono to stereo */
616  memcpy(s->delay[1], s->delay[0], channel_data_size);
617  break;
618  case AC3_CHMODE_2F2R:
619  memset(s->delay[3], 0, channel_data_size);
621  case AC3_CHMODE_2F1R:
622  memset(s->delay[2], 0, channel_data_size);
623  break;
624  case AC3_CHMODE_3F2R:
625  memset(s->delay[4], 0, channel_data_size);
627  case AC3_CHMODE_3F1R:
628  memset(s->delay[3], 0, channel_data_size);
630  case AC3_CHMODE_3F:
631  memcpy(s->delay[2], s->delay[1], channel_data_size);
632  memset(s->delay[1], 0, channel_data_size);
633  break;
634  }
635 }
636 
637 /**
638  * Decode band structure for coupling, spectral extension, or enhanced coupling.
639  * The band structure defines how many subbands are in each band. For each
640  * subband in the range, 1 means it is combined with the previous band, and 0
641  * means that it starts a new band.
642  *
643  * @param[in] gbc bit reader context
644  * @param[in] blk block number
645  * @param[in] eac3 flag to indicate E-AC-3
646  * @param[in] ecpl flag to indicate enhanced coupling
647  * @param[in] start_subband subband number for start of range
648  * @param[in] end_subband subband number for end of range
649  * @param[in] default_band_struct default band structure table
650  * @param[out] num_bands number of bands (optionally NULL)
651  * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
652  * @param[in,out] band_struct current band structure
653  */
654 static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
655  int ecpl, int start_subband, int end_subband,
656  const uint8_t *default_band_struct,
657  int *num_bands, uint8_t *band_sizes,
658  uint8_t *band_struct, int band_struct_size)
659 {
660  int subbnd, bnd, n_subbands, n_bands=0;
661  uint8_t bnd_sz[22];
662 
663  n_subbands = end_subband - start_subband;
664 
665  if (!blk)
666  memcpy(band_struct, default_band_struct, band_struct_size);
667 
668  av_assert0(band_struct_size >= start_subband + n_subbands);
669 
670  band_struct += start_subband + 1;
671 
672  /* decode band structure from bitstream or use default */
673  if (!eac3 || get_bits1(gbc)) {
674  for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
675  band_struct[subbnd] = get_bits1(gbc);
676  }
677  }
678 
679  /* calculate number of bands and band sizes based on band structure.
680  note that the first 4 subbands in enhanced coupling span only 6 bins
681  instead of 12. */
682  if (num_bands || band_sizes ) {
683  n_bands = n_subbands;
684  bnd_sz[0] = ecpl ? 6 : 12;
685  for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
686  int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
687  if (band_struct[subbnd - 1]) {
688  n_bands--;
689  bnd_sz[bnd] += subbnd_size;
690  } else {
691  bnd_sz[++bnd] = subbnd_size;
692  }
693  }
694  }
695 
696  /* set optional output params */
697  if (num_bands)
698  *num_bands = n_bands;
699  if (band_sizes)
700  memcpy(band_sizes, bnd_sz, n_bands);
701 }
702 
703 static inline int spx_strategy(AC3DecodeContext *s, int blk)
704 {
705  GetBitContext *bc = &s->gbc;
706  int dst_start_freq, dst_end_freq, src_start_freq,
707  start_subband, end_subband;
708 
709  /* determine which channels use spx */
710  if (s->channel_mode == AC3_CHMODE_MONO) {
711  s->channel_uses_spx[1] = 1;
712  } else {
713  unsigned channel_uses_spx = get_bits(bc, s->fbw_channels);
714  for (int ch = s->fbw_channels; ch >= 1; --ch) {
715  s->channel_uses_spx[ch] = channel_uses_spx & 1;
716  channel_uses_spx >>= 1;
717  }
718  }
719 
720  /* get the frequency bins of the spx copy region and the spx start
721  and end subbands */
722  dst_start_freq = get_bits(bc, 2);
723  start_subband = get_bits(bc, 3) + 2;
724  if (start_subband > 7)
725  start_subband += start_subband - 7;
726  end_subband = get_bits(bc, 3) + 5;
727 #if USE_FIXED
728  s->spx_dst_end_freq = end_freq_inv_tab[end_subband-5];
729 #endif
730  if (end_subband > 7)
731  end_subband += end_subband - 7;
732  dst_start_freq = dst_start_freq * 12 + 25;
733  src_start_freq = start_subband * 12 + 25;
734  dst_end_freq = end_subband * 12 + 25;
735 
736  /* check validity of spx ranges */
737  if (start_subband >= end_subband) {
738  av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
739  "range (%d >= %d)\n", start_subband, end_subband);
740  return AVERROR_INVALIDDATA;
741  }
742  if (dst_start_freq >= src_start_freq) {
743  av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
744  "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
745  return AVERROR_INVALIDDATA;
746  }
747 
748  s->spx_dst_start_freq = dst_start_freq;
749  s->spx_src_start_freq = src_start_freq;
750  if (!USE_FIXED)
751  s->spx_dst_end_freq = dst_end_freq;
752 
753  decode_band_structure(bc, blk, s->eac3, 0,
754  start_subband, end_subband,
756  &s->num_spx_bands,
757  s->spx_band_sizes,
758  s->spx_band_struct, sizeof(s->spx_band_struct));
759  return 0;
760 }
761 
762 static inline void spx_coordinates(AC3DecodeContext *s)
763 {
764  GetBitContext *bc = &s->gbc;
765  int fbw_channels = s->fbw_channels;
766  int ch, bnd;
767 
768  for (ch = 1; ch <= fbw_channels; ch++) {
769  if (s->channel_uses_spx[ch]) {
770  if (s->first_spx_coords[ch] || get_bits1(bc)) {
771  INTFLOAT spx_blend;
772  int bin, master_spx_coord;
773 
774  s->first_spx_coords[ch] = 0;
775  spx_blend = AC3_SPX_BLEND(get_bits(bc, 5));
776  master_spx_coord = get_bits(bc, 2) * 3;
777 
778  bin = s->spx_src_start_freq;
779  for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
780  int bandsize = s->spx_band_sizes[bnd];
781  int spx_coord_exp, spx_coord_mant;
782  INTFLOAT nratio, sblend, nblend;
783 #if USE_FIXED
784  /* calculate blending factors */
785  int64_t accu = ((bin << 23) + (bandsize << 22))
786  * (int64_t)s->spx_dst_end_freq;
787  nratio = (int)(accu >> 32);
788  nratio -= spx_blend << 18;
789 
790  if (nratio < 0) {
791  nblend = 0;
792  sblend = 0x800000;
793  } else if (nratio > 0x7fffff) {
794  nblend = 14529495; // sqrt(3) in FP.23
795  sblend = 0;
796  } else {
797  nblend = fixed_sqrt(nratio, 23);
798  accu = (int64_t)nblend * 1859775393;
799  nblend = (int)((accu + (1<<29)) >> 30);
800  sblend = fixed_sqrt(0x800000 - nratio, 23);
801  }
802 #else
803  float spx_coord;
804 
805  /* calculate blending factors */
806  nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
807  nratio = av_clipf(nratio, 0.0f, 1.0f);
808  nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3)
809  // to give unity variance
810  sblend = sqrtf(1.0f - nratio);
811 #endif
812  bin += bandsize;
813 
814  /* decode spx coordinates */
815  spx_coord_exp = get_bits(bc, 4);
816  spx_coord_mant = get_bits(bc, 2);
817  if (spx_coord_exp == 15) spx_coord_mant <<= 1;
818  else spx_coord_mant += 4;
819  spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
820 
821  /* multiply noise and signal blending factors by spx coordinate */
822 #if USE_FIXED
823  accu = (int64_t)nblend * spx_coord_mant;
824  s->spx_noise_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
825  accu = (int64_t)sblend * spx_coord_mant;
826  s->spx_signal_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
827 #else
828  spx_coord = spx_coord_mant * (1.0f / (1 << 23));
829  s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
830  s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
831 #endif
832  }
833  }
834  } else {
835  s->first_spx_coords[ch] = 1;
836  }
837  }
838 }
839 
840 static inline int coupling_strategy(AC3DecodeContext *s, int blk,
841  uint8_t *bit_alloc_stages)
842 {
843  GetBitContext *bc = &s->gbc;
844  int fbw_channels = s->fbw_channels;
845  int channel_mode = s->channel_mode;
846  int ch;
847 
848  memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
849  if (!s->eac3)
850  s->cpl_in_use[blk] = get_bits1(bc);
851  if (s->cpl_in_use[blk]) {
852  /* coupling in use */
853  int cpl_start_subband, cpl_end_subband;
854 
855  if (channel_mode < AC3_CHMODE_STEREO) {
856  av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
857  return AVERROR_INVALIDDATA;
858  }
859 
860  /* check for enhanced coupling */
861  if (s->eac3 && get_bits1(bc)) {
862  /* TODO: parse enhanced coupling strategy info */
863  avpriv_request_sample(s->avctx, "Enhanced coupling");
864  return AVERROR_PATCHWELCOME;
865  }
866 
867  /* determine which channels are coupled */
868  if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
869  s->channel_in_cpl[1] = 1;
870  s->channel_in_cpl[2] = 1;
871  } else {
872  for (ch = 1; ch <= fbw_channels; ch++)
873  s->channel_in_cpl[ch] = get_bits1(bc);
874  }
875 
876  /* phase flags in use */
877  if (channel_mode == AC3_CHMODE_STEREO)
878  s->phase_flags_in_use = get_bits1(bc);
879 
880  /* coupling frequency range */
881  cpl_start_subband = get_bits(bc, 4);
882  cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
883  get_bits(bc, 4) + 3;
884  if (cpl_start_subband >= cpl_end_subband) {
885  av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
886  cpl_start_subband, cpl_end_subband);
887  return AVERROR_INVALIDDATA;
888  }
889  s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
890  s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
891 
892  decode_band_structure(bc, blk, s->eac3, 0, cpl_start_subband,
893  cpl_end_subband,
895  &s->num_cpl_bands, s->cpl_band_sizes,
896  s->cpl_band_struct, sizeof(s->cpl_band_struct));
897  } else {
898  /* coupling not in use */
899  for (ch = 1; ch <= fbw_channels; ch++) {
900  s->channel_in_cpl[ch] = 0;
901  s->first_cpl_coords[ch] = 1;
902  }
903  s->first_cpl_leak = s->eac3;
904  s->phase_flags_in_use = 0;
905  }
906 
907  return 0;
908 }
909 
910 static inline int coupling_coordinates(AC3DecodeContext *s, int blk)
911 {
912  GetBitContext *bc = &s->gbc;
913  int fbw_channels = s->fbw_channels;
914  int ch, bnd;
915  int cpl_coords_exist = 0;
916 
917  for (ch = 1; ch <= fbw_channels; ch++) {
918  if (s->channel_in_cpl[ch]) {
919  if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(bc)) {
920  int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
921  s->first_cpl_coords[ch] = 0;
922  cpl_coords_exist = 1;
923  master_cpl_coord = 3 * get_bits(bc, 2);
924  for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
925  cpl_coord_exp = get_bits(bc, 4);
926  cpl_coord_mant = get_bits(bc, 4);
927  if (cpl_coord_exp == 15)
928  s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
929  else
930  s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
931  s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
932  }
933  } else if (!blk) {
934  av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must "
935  "be present in block 0\n");
936  return AVERROR_INVALIDDATA;
937  }
938  } else {
939  /* channel not in coupling */
940  s->first_cpl_coords[ch] = 1;
941  }
942  }
943  /* phase flags */
944  if (s->channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
945  for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
946  s->phase_flags[bnd] = s->phase_flags_in_use ? get_bits1(bc) : 0;
947  }
948  }
949 
950  return 0;
951 }
952 
953 /**
954  * Decode a single audio block from the AC-3 bitstream.
955  */
956 static int decode_audio_block(AC3DecodeContext *s, int blk, int offset)
957 {
958  int fbw_channels = s->fbw_channels;
959  int channel_mode = s->channel_mode;
960  int i, bnd, seg, ch, ret;
961  int different_transforms;
962  int downmix_output;
963  int cpl_in_use;
964  GetBitContext *gbc = &s->gbc;
965  uint8_t bit_alloc_stages[AC3_MAX_CHANNELS] = { 0 };
966 
967  /* block switch flags */
968  different_transforms = 0;
969  if (s->block_switch_syntax) {
970  for (ch = 1; ch <= fbw_channels; ch++) {
971  s->block_switch[ch] = get_bits1(gbc);
972  if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
973  different_transforms = 1;
974  }
975  }
976 
977  /* dithering flags */
978  if (s->dither_flag_syntax) {
979  for (ch = 1; ch <= fbw_channels; ch++) {
980  s->dither_flag[ch] = get_bits1(gbc);
981  }
982  }
983 
984  /* dynamic range */
985  i = !s->channel_mode;
986  do {
987  if (get_bits1(gbc)) {
988  /* Allow asymmetric application of DRC when drc_scale > 1.
989  Amplification of quiet sounds is enhanced */
990  int range_bits = get_bits(gbc, 8);
991  INTFLOAT range = AC3_RANGE(range_bits);
992  if (range_bits <= 127 || s->drc_scale <= 1.0)
993  s->dynamic_range[i] = AC3_DYNAMIC_RANGE(range);
994  else
995  s->dynamic_range[i] = range;
996  } else if (blk == 0) {
997  s->dynamic_range[i] = AC3_DYNAMIC_RANGE1;
998  }
999  } while (i--);
1000 
1001  /* spectral extension strategy */
1002  if (s->eac3 && (!blk || get_bits1(gbc))) {
1003  s->spx_in_use = get_bits1(gbc);
1004  if (s->spx_in_use) {
1005  if ((ret = spx_strategy(s, blk)) < 0)
1006  return ret;
1007  }
1008  }
1009  if (!s->eac3 || !s->spx_in_use) {
1010  s->spx_in_use = 0;
1011  for (ch = 1; ch <= fbw_channels; ch++) {
1012  s->channel_uses_spx[ch] = 0;
1013  s->first_spx_coords[ch] = 1;
1014  }
1015  }
1016 
1017  /* spectral extension coordinates */
1018  if (s->spx_in_use)
1019  spx_coordinates(s);
1020 
1021  /* coupling strategy */
1022  if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
1023  if ((ret = coupling_strategy(s, blk, bit_alloc_stages)) < 0)
1024  return ret;
1025  } else if (!s->eac3) {
1026  if (!blk) {
1027  av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must "
1028  "be present in block 0\n");
1029  return AVERROR_INVALIDDATA;
1030  } else {
1031  s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
1032  }
1033  }
1034  cpl_in_use = s->cpl_in_use[blk];
1035 
1036  /* coupling coordinates */
1037  if (cpl_in_use) {
1038  if ((ret = coupling_coordinates(s, blk)) < 0)
1039  return ret;
1040  }
1041 
1042  /* stereo rematrixing strategy and band structure */
1043  if (channel_mode == AC3_CHMODE_STEREO) {
1044  if ((s->eac3 && !blk) || get_bits1(gbc)) {
1045  s->num_rematrixing_bands = 4;
1046  if (cpl_in_use && s->start_freq[CPL_CH] <= 61) {
1047  s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
1048  } else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1049  s->num_rematrixing_bands--;
1050  }
1051  for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1052  s->rematrixing_flags[bnd] = get_bits1(gbc);
1053  } else if (!blk) {
1054  av_log(s->avctx, AV_LOG_WARNING, "Warning: "
1055  "new rematrixing strategy not present in block 0\n");
1056  s->num_rematrixing_bands = 0;
1057  }
1058  }
1059 
1060  /* exponent strategies for each channel */
1061  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1062  if (!s->eac3)
1063  s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
1064  if (s->exp_strategy[blk][ch] != EXP_REUSE)
1065  bit_alloc_stages[ch] = 3;
1066  }
1067 
1068  /* channel bandwidth */
1069  for (ch = 1; ch <= fbw_channels; ch++) {
1070  s->start_freq[ch] = 0;
1071  if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1072  int group_size;
1073  int prev = s->end_freq[ch];
1074  if (s->channel_in_cpl[ch])
1075  s->end_freq[ch] = s->start_freq[CPL_CH];
1076  else if (s->channel_uses_spx[ch])
1077  s->end_freq[ch] = s->spx_src_start_freq;
1078  else {
1079  int bandwidth_code = get_bits(gbc, 6);
1080  if (bandwidth_code > 60) {
1081  av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
1082  return AVERROR_INVALIDDATA;
1083  }
1084  s->end_freq[ch] = bandwidth_code * 3 + 73;
1085  }
1086  group_size = 3 << (s->exp_strategy[blk][ch] - 1);
1087  s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1088  if (blk > 0 && s->end_freq[ch] != prev)
1089  memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
1090  }
1091  }
1092  if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
1093  s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
1094  (3 << (s->exp_strategy[blk][CPL_CH] - 1));
1095  }
1096 
1097  /* decode exponents for each channel */
1098  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1099  if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1100  s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
1101  if (decode_exponents(s, gbc, s->exp_strategy[blk][ch],
1102  s->num_exp_groups[ch], s->dexps[ch][0],
1103  &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1104  return AVERROR_INVALIDDATA;
1105  }
1106  if (ch != CPL_CH && ch != s->lfe_ch)
1107  skip_bits(gbc, 2); /* skip gainrng */
1108  }
1109  }
1110 
1111  /* bit allocation information */
1112  if (s->bit_allocation_syntax) {
1113  if (get_bits1(gbc)) {
1114  s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1115  s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1116  s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
1117  s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
1118  s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
1119  for (ch = !cpl_in_use; ch <= s->channels; ch++)
1120  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1121  } else if (!blk) {
1122  av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must "
1123  "be present in block 0\n");
1124  return AVERROR_INVALIDDATA;
1125  }
1126  }
1127 
1128  /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
1129  if (!s->eac3 || !blk) {
1130  if (s->snr_offset_strategy && get_bits1(gbc)) {
1131  int snr = 0;
1132  int csnr;
1133  csnr = (get_bits(gbc, 6) - 15) << 4;
1134  for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1135  /* snr offset */
1136  if (ch == i || s->snr_offset_strategy == 2)
1137  snr = (csnr + get_bits(gbc, 4)) << 2;
1138  /* run at least last bit allocation stage if snr offset changes */
1139  if (blk && s->snr_offset[ch] != snr) {
1140  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
1141  }
1142  s->snr_offset[ch] = snr;
1143 
1144  /* fast gain (normal AC-3 only) */
1145  if (!s->eac3) {
1146  int prev = s->fast_gain[ch];
1147  s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1148  /* run last 2 bit allocation stages if fast gain changes */
1149  if (blk && prev != s->fast_gain[ch])
1150  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1151  }
1152  }
1153  } else if (!s->eac3 && !blk) {
1154  av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
1155  return AVERROR_INVALIDDATA;
1156  }
1157  }
1158 
1159  /* fast gain (E-AC-3 only) */
1160  if (s->fast_gain_syntax && get_bits1(gbc)) {
1161  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1162  int prev = s->fast_gain[ch];
1163  s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1164  /* run last 2 bit allocation stages if fast gain changes */
1165  if (blk && prev != s->fast_gain[ch])
1166  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1167  }
1168  } else if (s->eac3 && !blk) {
1169  for (ch = !cpl_in_use; ch <= s->channels; ch++)
1170  s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
1171  }
1172 
1173  /* E-AC-3 to AC-3 converter SNR offset */
1174  if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
1175  skip_bits(gbc, 10); // skip converter snr offset
1176  }
1177 
1178  /* coupling leak information */
1179  if (cpl_in_use) {
1180  if (s->first_cpl_leak || get_bits1(gbc)) {
1181  int fl = get_bits(gbc, 3);
1182  int sl = get_bits(gbc, 3);
1183  /* run last 2 bit allocation stages for coupling channel if
1184  coupling leak changes */
1185  if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1186  sl != s->bit_alloc_params.cpl_slow_leak)) {
1187  bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
1188  }
1189  s->bit_alloc_params.cpl_fast_leak = fl;
1190  s->bit_alloc_params.cpl_slow_leak = sl;
1191  } else if (!s->eac3 && !blk) {
1192  av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must "
1193  "be present in block 0\n");
1194  return AVERROR_INVALIDDATA;
1195  }
1196  s->first_cpl_leak = 0;
1197  }
1198 
1199  /* delta bit allocation information */
1200  if (s->dba_syntax && get_bits1(gbc)) {
1201  /* delta bit allocation exists (strategy) */
1202  for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1203  s->dba_mode[ch] = get_bits(gbc, 2);
1204  if (s->dba_mode[ch] == DBA_RESERVED) {
1205  av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1206  return AVERROR_INVALIDDATA;
1207  }
1208  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1209  }
1210  /* channel delta offset, len and bit allocation */
1211  for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1212  if (s->dba_mode[ch] == DBA_NEW) {
1213  s->dba_nsegs[ch] = get_bits(gbc, 3) + 1;
1214  for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1215  s->dba_offsets[ch][seg] = get_bits(gbc, 5);
1216  s->dba_lengths[ch][seg] = get_bits(gbc, 4);
1217  s->dba_values[ch][seg] = get_bits(gbc, 3);
1218  }
1219  /* run last 2 bit allocation stages if new dba values */
1220  bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1221  }
1222  }
1223  } else if (blk == 0) {
1224  for (ch = 0; ch <= s->channels; ch++) {
1225  s->dba_mode[ch] = DBA_NONE;
1226  }
1227  }
1228 
1229  /* Bit allocation */
1230  for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1231  if (bit_alloc_stages[ch] > 2) {
1232  /* Exponent mapping into PSD and PSD integration */
1233  ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
1234  s->start_freq[ch], s->end_freq[ch],
1235  s->psd[ch], s->band_psd[ch]);
1236  }
1237  if (bit_alloc_stages[ch] > 1) {
1238  /* Compute excitation function, Compute masking curve, and
1239  Apply delta bit allocation */
1240  if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1241  s->start_freq[ch], s->end_freq[ch],
1242  s->fast_gain[ch], (ch == s->lfe_ch),
1243  s->dba_mode[ch], s->dba_nsegs[ch],
1244  s->dba_offsets[ch], s->dba_lengths[ch],
1245  s->dba_values[ch], s->mask[ch])) {
1246  av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
1247  return AVERROR_INVALIDDATA;
1248  }
1249  }
1250  if (bit_alloc_stages[ch] > 0) {
1251  /* Compute bit allocation */
1252  const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1254  s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1255  s->start_freq[ch], s->end_freq[ch],
1256  s->snr_offset[ch],
1257  s->bit_alloc_params.floor,
1258  bap_tab, s->bap[ch]);
1259  }
1260  }
1261 
1262  /* unused dummy data */
1263  if (s->skip_syntax && get_bits1(gbc)) {
1264  int skipl = get_bits(gbc, 9);
1265  skip_bits_long(gbc, 8 * skipl);
1266  }
1267 
1268  /* unpack the transform coefficients
1269  this also uncouples channels if coupling is in use. */
1271 
1272  /* TODO: generate enhanced coupling coordinates and uncouple */
1273 
1274  /* recover coefficients if rematrixing is in use */
1275  if (s->channel_mode == AC3_CHMODE_STEREO)
1276  do_rematrixing(s);
1277 
1278  /* apply scaling to coefficients (headroom, dynrng) */
1279  for (ch = 1; ch <= s->channels; ch++) {
1280  int audio_channel = 0;
1281  INTFLOAT gain;
1282  if (s->channel_mode == AC3_CHMODE_DUALMONO && ch <= 2)
1283  audio_channel = 2-ch;
1284  if (s->heavy_compression && s->compression_exists[audio_channel])
1285  gain = s->heavy_dynamic_range[audio_channel];
1286  else
1287  gain = s->dynamic_range[audio_channel];
1288 
1289 #if USE_FIXED
1290  scale_coefs(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256);
1291 #else
1292  if (s->target_level != 0)
1293  gain = gain * s->level_gain[audio_channel];
1294  gain *= 1.0 / 4194304.0f;
1295  s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1296  s->fixed_coeffs[ch], gain, 256);
1297 #endif
1298  }
1299 
1300  /* apply spectral extension to high frequency bins */
1301  if (CONFIG_EAC3_DECODER && s->spx_in_use) {
1303  }
1304 
1305  /* downmix and MDCT. order depends on whether block switching is used for
1306  any channel in this block. this is because coefficients for the long
1307  and short transforms cannot be mixed. */
1308  downmix_output = s->channels != s->out_channels &&
1309  !((s->output_mode & AC3_OUTPUT_LFEON) &&
1310  s->fbw_channels == s->out_channels);
1311  if (different_transforms) {
1312  /* the delay samples have already been downmixed, so we upmix the delay
1313  samples in order to reconstruct all channels before downmixing. */
1314  if (s->downmixed) {
1315  s->downmixed = 0;
1316  ac3_upmix_delay(s);
1317  }
1318 
1319  do_imdct(s, s->channels, offset);
1320 
1321  if (downmix_output) {
1322 #if USE_FIXED
1323  ac3_downmix_c_fixed16(s->outptr, s->downmix_coeffs,
1324  s->out_channels, s->fbw_channels, 256);
1325 #else
1326  ff_ac3dsp_downmix(&s->ac3dsp, s->outptr, s->downmix_coeffs,
1327  s->out_channels, s->fbw_channels, 256);
1328 #endif
1329  }
1330  } else {
1331  if (downmix_output) {
1332  AC3_RENAME(ff_ac3dsp_downmix)(&s->ac3dsp, s->xcfptr + 1, s->downmix_coeffs,
1333  s->out_channels, s->fbw_channels, 256);
1334  }
1335 
1336  if (downmix_output && !s->downmixed) {
1337  s->downmixed = 1;
1338  AC3_RENAME(ff_ac3dsp_downmix)(&s->ac3dsp, s->dlyptr, s->downmix_coeffs,
1339  s->out_channels, s->fbw_channels, 128);
1340  }
1341 
1342  do_imdct(s, s->out_channels, offset);
1343  }
1344 
1345  return 0;
1346 }
1347 
1348 /**
1349  * Decode a single AC-3 frame.
1350  */
1352  int *got_frame_ptr, AVPacket *avpkt)
1353 {
1354  const uint8_t *buf = avpkt->data;
1355  int buf_size, full_buf_size = avpkt->size;
1356  AC3DecodeContext *s = avctx->priv_data;
1357  int blk, ch, err, offset, ret;
1358  int i;
1359  int skip = 0, got_independent_frame = 0;
1360  const uint8_t *channel_map;
1361  uint8_t extended_channel_map[EAC3_MAX_CHANNELS];
1363  enum AVMatrixEncoding matrix_encoding;
1364  uint64_t mask;
1365 
1366  s->superframe_size = 0;
1367 
1368  buf_size = full_buf_size;
1369  i = ff_ac3_find_syncword(buf, buf_size);
1370  if (i < 0 || i > 10)
1371  return i;
1372  buf += i;
1373  buf_size -= i;
1374 
1375  /* copy input buffer to decoder context to avoid reading past the end
1376  of the buffer, which can be caused by a damaged input stream. */
1377  if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
1378  // seems to be byte-swapped AC-3
1379  int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1380  s->bdsp.bswap16_buf((uint16_t *) s->input_buffer,
1381  (const uint16_t *) buf, cnt);
1382  } else
1383  memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1384 
1385  /* if consistent noise generation is enabled, seed the linear feedback generator
1386  * with the contents of the AC-3 frame so that the noise is identical across
1387  * decodes given the same AC-3 frame data, for use with non-linear edititing software. */
1388  if (s->consistent_noise_generation)
1389  av_lfg_init_from_data(&s->dith_state, s->input_buffer, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1390 
1391  buf = s->input_buffer;
1392 dependent_frame:
1393  /* initialize the GetBitContext with the start of valid AC-3 Frame */
1394  if ((ret = init_get_bits8(&s->gbc, buf, buf_size)) < 0)
1395  return ret;
1396 
1397  /* parse the syncinfo */
1398  err = parse_frame_header(s);
1399 
1400  if (err) {
1401  switch (err) {
1402  case AC3_PARSE_ERROR_SYNC:
1403  av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1404  return AVERROR_INVALIDDATA;
1405  case AC3_PARSE_ERROR_BSID:
1406  av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1407  break;
1409  av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1410  break;
1412  av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1413  break;
1415  /* skip frame if CRC is ok. otherwise use error concealment. */
1416  /* TODO: add support for substreams */
1417  if (s->substreamid) {
1418  av_log(avctx, AV_LOG_DEBUG,
1419  "unsupported substream %d: skipping frame\n",
1420  s->substreamid);
1421  *got_frame_ptr = 0;
1422  return buf_size;
1423  } else {
1424  av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1425  }
1426  break;
1428  av_log(avctx, AV_LOG_ERROR, "invalid channel map\n");
1429  return AVERROR_INVALIDDATA;
1430  case AC3_PARSE_ERROR_CRC:
1431  break;
1432  default: // Normal AVERROR do not try to recover.
1433  *got_frame_ptr = 0;
1434  return err;
1435  }
1436  } else {
1437  /* check that reported frame size fits in input buffer */
1438  if (s->frame_size > buf_size) {
1439  av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1441  } else if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) {
1442  /* check for crc mismatch */
1443  if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2],
1444  s->frame_size - 2)) {
1445  av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1446  if (avctx->err_recognition & AV_EF_EXPLODE)
1447  return AVERROR_INVALIDDATA;
1448  err = AC3_PARSE_ERROR_CRC;
1449  }
1450  }
1451  }
1452 
1453  if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT && !got_independent_frame) {
1454  av_log(avctx, AV_LOG_WARNING, "Ignoring dependent frame without independent frame.\n");
1455  *got_frame_ptr = 0;
1456  return FFMIN(full_buf_size, s->frame_size);
1457  }
1458 
1459  /* channel config */
1460  if (!err || (s->channels && s->out_channels != s->channels)) {
1461  s->out_channels = s->channels;
1462  s->output_mode = s->channel_mode;
1463  if (s->lfe_on)
1464  s->output_mode |= AC3_OUTPUT_LFEON;
1465  if (s->channels > 1 &&
1467  s->out_channels = 1;
1468  s->output_mode = AC3_CHMODE_MONO;
1469  } else if (s->channels > 2 &&
1471  s->out_channels = 2;
1472  s->output_mode = AC3_CHMODE_STEREO;
1473  }
1474 
1475  s->loro_center_mix_level = ff_ac3_gain_levels[s-> center_mix_level];
1476  s->loro_surround_mix_level = ff_ac3_gain_levels[s->surround_mix_level];
1477  s->ltrt_center_mix_level = ff_ac3_gain_levels[s-> center_mix_level_ltrt];
1478  s->ltrt_surround_mix_level = ff_ac3_gain_levels[s->surround_mix_level_ltrt];
1479  switch (s->preferred_downmix) {
1480  case AC3_DMIXMOD_LTRT:
1481  s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_LTRT;
1482  break;
1483  case AC3_DMIXMOD_LORO:
1484  s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_LORO;
1485  break;
1486  case AC3_DMIXMOD_DPLII:
1487  s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_DPLII;
1488  break;
1489  default:
1490  s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_UNKNOWN;
1491  break;
1492  }
1493  /* set downmixing coefficients if needed */
1494  if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1495  s->fbw_channels == s->out_channels)) {
1496  if ((ret = set_downmix_coeffs(s)) < 0) {
1497  av_log(avctx, AV_LOG_ERROR, "error setting downmix coeffs\n");
1498  return ret;
1499  }
1500  }
1501  } else if (!s->channels) {
1502  av_log(avctx, AV_LOG_ERROR, "unable to determine channel mode\n");
1503  return AVERROR_INVALIDDATA;
1504  }
1505 
1506  mask = ff_ac3_channel_layout_tab[s->output_mode & ~AC3_OUTPUT_LFEON];
1507  if (s->output_mode & AC3_OUTPUT_LFEON)
1509 
1512 
1513  /* set audio service type based on bitstream mode for AC-3 */
1514  avctx->audio_service_type = s->bitstream_mode;
1515  if (s->bitstream_mode == 0x7 && s->channels > 1)
1517 
1518  /* decode the audio blocks */
1519  channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
1520  offset = s->frame_type == EAC3_FRAME_TYPE_DEPENDENT ? AC3_MAX_CHANNELS : 0;
1521  for (ch = 0; ch < AC3_MAX_CHANNELS; ch++) {
1522  output[ch] = s->output[ch + offset];
1523  s->outptr[ch] = s->output[ch + offset];
1524  }
1525  for (ch = 0; ch < s->channels; ch++) {
1526  if (ch < s->out_channels)
1527  s->outptr[channel_map[ch]] = s->output_buffer[ch + offset];
1528  }
1529  for (blk = 0; blk < s->num_blocks; blk++) {
1530  if (!err && decode_audio_block(s, blk, offset)) {
1531  av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
1532  err = 1;
1533  }
1534  if (err)
1535  for (ch = 0; ch < s->out_channels; ch++)
1536  memcpy(s->output_buffer[ch + offset] + AC3_BLOCK_SIZE*blk, output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1537  for (ch = 0; ch < s->out_channels; ch++)
1538  output[ch] = s->outptr[channel_map[ch]];
1539  for (ch = 0; ch < s->out_channels; ch++) {
1540  if (!ch || channel_map[ch])
1541  s->outptr[channel_map[ch]] += AC3_BLOCK_SIZE;
1542  }
1543  }
1544 
1545  /* keep last block for error concealment in next frame */
1546  for (ch = 0; ch < s->out_channels; ch++)
1547  memcpy(s->output[ch + offset], output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1548 
1549  /* check if there is dependent frame */
1550  if (buf_size > s->frame_size) {
1551  AC3HeaderInfo hdr;
1552  int err;
1553 
1554  if (buf_size - s->frame_size <= 16) {
1555  skip = buf_size - s->frame_size;
1556  goto skip;
1557  }
1558 
1559  if ((ret = init_get_bits8(&s->gbc, buf + s->frame_size, buf_size - s->frame_size)) < 0)
1560  return ret;
1561 
1562  err = ff_ac3_parse_header(&s->gbc, &hdr);
1563  if (err)
1564  return err;
1565 
1567  if (hdr.num_blocks != s->num_blocks || s->sample_rate != hdr.sample_rate) {
1568  av_log(avctx, AV_LOG_WARNING, "Ignoring non-compatible dependent frame.\n");
1569  } else {
1570  buf += s->frame_size;
1571  buf_size -= s->frame_size;
1572  s->prev_output_mode = s->output_mode;
1573  s->prev_bit_rate = s->bit_rate;
1574  got_independent_frame = 1;
1575  goto dependent_frame;
1576  }
1577  }
1578  }
1579 skip:
1580 
1581  frame->decode_error_flags = err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0;
1582 
1583  /* if frame is ok, set audio parameters */
1584  if (!err) {
1585  avctx->sample_rate = s->sample_rate;
1586  avctx->bit_rate = s->bit_rate + s->prev_bit_rate;
1587  avctx->profile = s->eac3_extension_type_a == 1 ? AV_PROFILE_EAC3_DDP_ATMOS : AV_PROFILE_UNKNOWN;
1588  }
1589 
1590  if (!avctx->sample_rate) {
1591  av_log(avctx, AV_LOG_ERROR, "Could not determine the sample rate\n");
1592  return AVERROR_INVALIDDATA;
1593  }
1594 
1595  for (ch = 0; ch < EAC3_MAX_CHANNELS; ch++)
1596  extended_channel_map[ch] = ch;
1597 
1598  if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
1599  uint64_t ich_layout = ff_ac3_channel_layout_tab[s->prev_output_mode & ~AC3_OUTPUT_LFEON];
1600  int channel_map_size = ff_ac3_channels_tab[s->output_mode & ~AC3_OUTPUT_LFEON] + s->lfe_on;
1601  uint64_t channel_layout;
1602  int extend = 0;
1603 
1604  if (s->prev_output_mode & AC3_OUTPUT_LFEON)
1605  ich_layout |= AV_CH_LOW_FREQUENCY;
1606 
1607  channel_layout = ich_layout;
1608  for (ch = 0; ch < 16; ch++) {
1609  if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1610  channel_layout |= ff_eac3_custom_channel_map_locations[ch][1];
1611  }
1612  }
1613  if (av_popcount64(channel_layout) > EAC3_MAX_CHANNELS) {
1614  av_log(avctx, AV_LOG_ERROR, "Too many channels (%d) coded\n",
1615  av_popcount64(channel_layout));
1616  return AVERROR_INVALIDDATA;
1617  }
1618 
1620  av_channel_layout_from_mask(&avctx->ch_layout, channel_layout);
1621 
1622  for (ch = 0; ch < EAC3_MAX_CHANNELS; ch++) {
1623  if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1627  if (index < 0)
1628  return AVERROR_INVALIDDATA;
1629  if (extend >= channel_map_size)
1630  break;
1631 
1632  extended_channel_map[index] = offset + channel_map[extend++];
1633  } else {
1634  int i;
1635 
1636  for (i = 0; i < 64; i++) {
1637  if ((1ULL << i) & ff_eac3_custom_channel_map_locations[ch][1]) {
1639  if (index < 0)
1640  return AVERROR_INVALIDDATA;
1641  if (extend >= channel_map_size)
1642  break;
1643 
1644  extended_channel_map[index] = offset + channel_map[extend++];
1645  }
1646  }
1647  }
1648  }
1649  }
1650 
1651  ac3_downmix(avctx);
1652  }
1653 
1654  /* get output buffer */
1655  frame->nb_samples = s->num_blocks * AC3_BLOCK_SIZE;
1656  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1657  return ret;
1658 
1659  for (ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
1660  int map = extended_channel_map[ch];
1661  av_assert0(ch>=AV_NUM_DATA_POINTERS || frame->extended_data[ch] == frame->data[ch]);
1662  memcpy((SHORTFLOAT *)frame->extended_data[ch],
1663  s->output_buffer[map],
1664  s->num_blocks * AC3_BLOCK_SIZE * sizeof(SHORTFLOAT));
1665  }
1666 
1667  /*
1668  * AVMatrixEncoding
1669  *
1670  * Check whether the input layout is compatible, and make sure we're not
1671  * downmixing (else the matrix encoding is no longer applicable).
1672  */
1673  matrix_encoding = AV_MATRIX_ENCODING_NONE;
1674  if (s->channel_mode == AC3_CHMODE_STEREO &&
1675  s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1676  if (s->dolby_surround_mode == AC3_DSURMOD_ON)
1677  matrix_encoding = AV_MATRIX_ENCODING_DOLBY;
1678  else if (s->dolby_headphone_mode == AC3_DHEADPHONMOD_ON)
1679  matrix_encoding = AV_MATRIX_ENCODING_DOLBYHEADPHONE;
1680  } else if (s->channel_mode >= AC3_CHMODE_2F2R &&
1681  s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1682  switch (s->dolby_surround_ex_mode) {
1683  case AC3_DSUREXMOD_ON: // EX or PLIIx
1684  matrix_encoding = AV_MATRIX_ENCODING_DOLBYEX;
1685  break;
1686  case AC3_DSUREXMOD_PLIIZ:
1687  matrix_encoding = AV_MATRIX_ENCODING_DPLIIZ;
1688  break;
1689  default: // not indicated or off
1690  break;
1691  }
1692  }
1693  if (matrix_encoding != AV_MATRIX_ENCODING_NONE &&
1694  (ret = ff_side_data_update_matrix_encoding(frame, matrix_encoding)) < 0)
1695  return ret;
1696 
1697  /* AVDownmixInfo */
1698  if ( (s->channel_mode > AC3_CHMODE_STEREO) &&
1699  ((s->output_mode & ~AC3_OUTPUT_LFEON) > AC3_CHMODE_STEREO)) {
1701  if (!downmix_info)
1702  return AVERROR(ENOMEM);
1703  switch (s->preferred_downmix) {
1704  case AC3_DMIXMOD_LTRT:
1706  break;
1707  case AC3_DMIXMOD_LORO:
1709  break;
1710  case AC3_DMIXMOD_DPLII:
1712  break;
1713  default:
1715  break;
1716  }
1717  downmix_info->center_mix_level = ff_ac3_gain_levels[s-> center_mix_level];
1718  downmix_info->center_mix_level_ltrt = ff_ac3_gain_levels[s-> center_mix_level_ltrt];
1719  downmix_info->surround_mix_level = ff_ac3_gain_levels[s-> surround_mix_level];
1720  downmix_info->surround_mix_level_ltrt = ff_ac3_gain_levels[s->surround_mix_level_ltrt];
1721  if (s->lfe_mix_level_exists)
1722  downmix_info->lfe_mix_level = ff_eac3_gain_levels_lfe[s->lfe_mix_level];
1723  else
1724  downmix_info->lfe_mix_level = 0.0; // -inf dB
1725  }
1726 
1727  *got_frame_ptr = 1;
1728 
1729  if (!s->superframe_size)
1730  return FFMIN(full_buf_size, s->frame_size + skip);
1731 
1732  return FFMIN(full_buf_size, s->superframe_size + skip);
1733 }
1734 
1735 /**
1736  * Uninitialize the AC-3 decoder.
1737  */
1739 {
1740  AC3DecodeContext *s = avctx->priv_data;
1741  av_tx_uninit(&s->tx_256);
1742  av_tx_uninit(&s->tx_128);
1743  av_freep(&s->fdsp);
1744  av_freep(&s->downmix_coeffs[0]);
1745 
1746  return 0;
1747 }
1748 
1749 #define OFFSET(x) offsetof(AC3DecodeContext, x)
1750 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
AC3_CHMODE_3F
@ AC3_CHMODE_3F
Definition: ac3defs.h:71
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:280
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
set_downmix_coeffs
static int set_downmix_coeffs(AC3DecodeContext *s)
Set stereo downmixing coefficients based on frame header info.
Definition: ac3dec.c:248
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:131
EXP_D45
#define EXP_D45
Definition: ac3defs.h:56
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
AC3HeaderInfo::frame_type
uint8_t frame_type
Definition: ac3_parser_internal.h:45
AC3HeaderInfo::dolby_surround_mode
int dolby_surround_mode
Definition: ac3_parser_internal.h:52
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:654
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
AVCodecContext::audio_service_type
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
Definition: avcodec.h:1083
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:1036
av_lfg_init
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
Definition: lfg.c:32
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:1410
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:226
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:434
ff_ac3_bap4_mantissas
int ff_ac3_bap4_mantissas[128][2]
Definition: ac3dec_data.c:96
AVPacket::data
uint8_t * data
Definition: packet.h:595
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:81
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
AC3_DSUREXMOD_NOTINDICATED
@ AC3_DSUREXMOD_NOTINDICATED
Definition: ac3defs.h:88
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:310
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:389
mant_groups::b4_mant
int b4_mant
Definition: ac3dec.c:387
ff_eac3_decode_transform_coeffs_aht_ch
static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
Definition: eac3dec.c:195
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
AC3HeaderInfo::heavy_dynamic_range
uint8_t heavy_dynamic_range[2]
Definition: ac3_parser_internal.h:72
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_DMIXMOD_DPLII
@ AC3_DMIXMOD_DPLII
Definition: ac3defs.h:107
crc.h
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:383
AC3_PARSE_ERROR_FRAME_TYPE
@ AC3_PARSE_ERROR_FRAME_TYPE
Definition: ac3_parser_internal.h:90
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:337
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:1051
FIXR12
#define FIXR12(x)
Definition: ac3.h:63
GetBitContext
Definition: get_bits.h:109
MULH
#define MULH
Definition: mathops.h:42
AC3HeaderInfo
Definition: ac3_parser_internal.h:34
AC3_CHMODE_3F1R
@ AC3_CHMODE_3F1R
Definition: ac3defs.h:73
AC3HeaderInfo::frame_size
uint16_t frame_size
Definition: ac3_parser_internal.h:62
mant_groups
Grouped mantissas for 3-level 5-level and 11-level quantization.
Definition: ac3dec.c:384
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:1351
ac3_float_tables_init
static av_cold void ac3_float_tables_init(void)
Definition: ac3dec.c:58
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:496
EAC3_FRAME_TYPE_DEPENDENT
@ EAC3_FRAME_TYPE_DEPENDENT
Definition: ac3defs.h:112
ac3_decode_flush
static av_cold void ac3_decode_flush(AVCodecContext *avctx)
Definition: ac3dec.c:150
LEVEL_MINUS_3DB
#define LEVEL_MINUS_3DB
Definition: ac3defs.h:43
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:117
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:89
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:51
coupling_coordinates
static int coupling_coordinates(AC3DecodeContext *s, int blk)
Definition: ac3dec.c:910
ff_ac3_bap2_mantissas
int ff_ac3_bap2_mantissas[128][3]
Definition: ac3dec_data.c:95
ff_eac3_gain_levels_lfe
const float ff_eac3_gain_levels_lfe[32]
Adjustments in dB gain (LFE, +10 to -21 dB)
Definition: ac3dec_data.c:181
AC3HeaderInfo::compression_exists
uint8_t compression_exists[2]
Definition: ac3_parser_internal.h:71
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:210
av_cold
#define av_cold
Definition: attributes.h:119
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:121
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:544
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:163
AC3_DSUREXMOD_ON
@ AC3_DSUREXMOD_ON
Definition: ac3defs.h:90
float
float
Definition: af_crystalizer.c:122
ff_ac3_gain_levels
const float ff_ac3_gain_levels[9]
Adjustments in dB gain.
Definition: ac3tab.c:152
dither
static const uint16_t dither[8][8]
Definition: vf_gradfun.c:46
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:356
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:253
AC3_PARSE_ERROR_SYNC
@ AC3_PARSE_ERROR_SYNC
Definition: ac3_parser_internal.h:86
ff_ac3_floor_tab
const int16_t ff_ac3_floor_tab[8]
Definition: ac3tab.c:143
bits
uint8_t bits
Definition: vp3data.h:128
ff_ac3_init_static
av_cold void ff_ac3_init_static(void)
Definition: ac3dec_data.c:134
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
EAC3_FRAME_TYPE_INDEPENDENT
@ EAC3_FRAME_TYPE_INDEPENDENT
Definition: ac3defs.h:111
get_sbits
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:322
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
channels
channels
Definition: aptx.h:31
ac3_decode_init
static av_cold int ac3_decode_init(AVCodecContext *avctx)
AVCodec initialization.
Definition: ac3dec.c:98
decode.h
ff_ac3_default_coeffs
const uint8_t ff_ac3_default_coeffs[8][5][2]
Table for default stereo downmixing coefficients reference: Section 7.8.2 Downmixing Into Two Channel...
Definition: ac3dec_data.c:153
channel_map
static const uint8_t channel_map[8][8]
Definition: atrac3plusdec.c:52
kbdwin.h
ff_ac3_ungroup_3_in_7_bits_tab
uint8_t ff_ac3_ungroup_3_in_7_bits_tab[128][3]
table for ungrouping 3 values in 7 bits.
Definition: ac3dec_data.c:50
AC3HeaderInfo::sample_rate
uint16_t sample_rate
Definition: ac3_parser_internal.h:59
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:478
av_fallthrough
#define av_fallthrough
Definition: attributes.h:67
ff_ac3_heavy_dynamic_range_tab
float ff_ac3_heavy_dynamic_range_tab[256]
Definition: ac3dec.c:53
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:37
FF_DECODE_ERROR_INVALID_BITSTREAM
#define FF_DECODE_ERROR_INVALID_BITSTREAM
Definition: frame.h:722
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
AC3_DYNAMIC_RANGE1
#define AC3_DYNAMIC_RANGE1
Definition: ac3.h:74
mant_groups::b2_mant
int b2_mant[2]
Definition: ac3dec.c:386
ff_ctzll
#define ff_ctzll
Definition: intmath.h:125
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:489
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:391
ac3_upmix_delay
static void ac3_upmix_delay(AC3DecodeContext *s)
Upmix delay samples from stereo to original channel layout.
Definition: ac3dec.c:609
DBA_NONE
@ DBA_NONE
Definition: ac3defs.h:62
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:703
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:51
ff_eac3_custom_channel_map_locations
const uint64_t ff_eac3_custom_channel_map_locations[16][2]
Definition: ac3tab.c:164
AC3_DHEADPHONMOD_ON
@ AC3_DHEADPHONMOD_ON
Definition: ac3defs.h:98
AC3HeaderInfo::channels
uint8_t channels
Definition: ac3_parser_internal.h:61
AC3_PARSE_ERROR_CHANNEL_MAP
@ AC3_PARSE_ERROR_CHANNEL_MAP
Definition: ac3_parser_internal.h:92
f
f
Definition: af_crystalizer.c:122
ac3_downmix
static void ac3_downmix(AVCodecContext *avctx)
Definition: ac3dec.c:77
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1765
ac3_parser_internal.h
AC3_CHMODE_STEREO
@ AC3_CHMODE_STEREO
Definition: ac3defs.h:70
AVPacket::size
int size
Definition: packet.h:596
powf
#define powf(x, y)
Definition: libm.h:52
AC3_DMIXMOD_LTRT
@ AC3_DMIXMOD_LTRT
Definition: ac3defs.h:105
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:840
AC3_BLOCK_SIZE
#define AC3_BLOCK_SIZE
Definition: ac3defs.h:30
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
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:139
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:1043
AC3HeaderInfo::lfe_on
uint8_t lfe_on
Definition: ac3_parser_internal.h:44
AV_NUM_DATA_POINTERS
#define AV_NUM_DATA_POINTERS
Definition: frame.h:435
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
av_crc_get_table
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
Definition: crc.c:389
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
attributes.h
AC3_PARSE_ERROR_CRC
@ AC3_PARSE_ERROR_CRC
Definition: ac3_parser_internal.h:91
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:762
ff_ac3_bap1_mantissas
int ff_ac3_bap1_mantissas[32][3]
tables for ungrouping mantissas
Definition: ac3dec_data.c:94
AC3_DMIXMOD_LORO
@ AC3_DMIXMOD_LORO
Definition: ac3defs.h:106
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:811
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
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:108
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:397
CPL_CH
#define CPL_CH
coupling channel index
Definition: ac3defs.h:27
mant_groups::b1
int b1
Definition: ac3dec.c:388
decode_transform_coeffs_ch
static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch, mant_groups *m)
Definition: ac3dec.c:491
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:87
AC3_RENAME
#define AC3_RENAME(x)
Definition: ac3.h:67
frame_type
frame_type
Definition: jpeg2000_parser.c:32
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:91
av_malloc_array
#define av_malloc_array(a, b)
Definition: tableprint_vlc.h:32
AC3_CHMODE_DUALMONO
@ AC3_CHMODE_DUALMONO
Definition: ac3defs.h:68
ff_ac3_quantization_tab
const uint8_t ff_ac3_quantization_tab[16]
Quantization table: levels for symmetric.
Definition: ac3dec_data.c:144
ff_ac3_slow_decay_tab
const uint8_t ff_ac3_slow_decay_tab[4]
Definition: ac3tab.c:127
DBA_NEW
@ DBA_NEW
Definition: ac3defs.h:61
ac3_decode_end
static av_cold int ac3_decode_end(AVCodecContext *avctx)
Uninitialize the AC-3 decoder.
Definition: ac3dec.c:1738
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:56
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
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:69
AC3_CHMODE_3F2R
@ AC3_CHMODE_3F2R
Definition: ac3defs.h:75
AC3_CHMODE_2F1R
@ AC3_CHMODE_2F1R
Definition: ac3defs.h:72
ret
ret
Definition: filter_design.txt:187
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:265
AC3_CHMODE_2F2R
@ AC3_CHMODE_2F2R
Definition: ac3defs.h:74
AC3_DHEADPHONMOD_NOTINDICATED
@ AC3_DHEADPHONMOD_NOTINDICATED
Definition: ac3defs.h:96
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:244
U
#define U(x)
Definition: vpx_arith.h:37
DBA_RESERVED
@ DBA_RESERVED
Definition: ac3defs.h:63
AC3_DSURMOD_ON
@ AC3_DSURMOD_ON
Definition: ac3defs.h:82
AVCodecContext
main external API structure.
Definition: avcodec.h:439
channel_layout.h
AC3_DMIXMOD_NOTINDICATED
@ AC3_DMIXMOD_NOTINDICATED
Definition: ac3defs.h:104
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:715
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:421
mant_groups::b1_mant
int b1_mant[2]
Definition: ac3dec.c:385
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:1630
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:443
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:88
decode_transform_coeffs
static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
Decode the transform coefficients.
Definition: ac3dec.c:511
ff_ac3_bap5_mantissas
const int ff_ac3_bap5_mantissas[15+1]
Table 7.23.
Definition: ac3dec_data.c:76
ff_ac3_bap3_mantissas
const int ff_ac3_bap3_mantissas[7+1]
Ungrouped mantissa tables; the extra entry is padding to avoid range checks.
Definition: ac3dec_data.c:64
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:164
mem.h
AV_CODEC_FLAG_BITEXACT
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition: avcodec.h:322
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:37
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:135
scale
static void scale(int *out, const int *in, const int w, const int h, const int shift)
Definition: intra.c:278
AVPacket
This structure stores compressed data.
Definition: packet.h:572
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:466
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:956
do_imdct
static void do_imdct(AC3DecodeContext *s, int channels, int offset)
Inverse MDCT Transform.
Definition: ac3dec.c:571
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
avpriv_float_dsp_alloc
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
Definition: float_dsp.c:135
ff_ac3_fast_gain_tab
const uint16_t ff_ac3_fast_gain_tab[8]
Definition: ac3tab.c:147
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:89
dynamic_range_tab
static float dynamic_range_tab[256]
dynamic range table.
Definition: ac3dec.c:52
int32_t
int32_t
Definition: audioconvert.c:56
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
do_rematrixing
static void do_rematrixing(AC3DecodeContext *s)
Stereo rematrixing.
Definition: ac3dec.c:547
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
ff_eac3_parse_header
static int ff_eac3_parse_header(AC3DecodeContext *s, const AC3HeaderInfo *hdr)
Definition: eac3dec.c:288
AC3HeaderInfo::sr_shift
uint8_t sr_shift
Definition: ac3_parser_internal.h:58
AC3HeaderInfo::dialog_normalization
int8_t dialog_normalization[2]
Definition: ac3_parser_internal.h:70
ff_fmt_convert_init
av_cold void ff_fmt_convert_init(FmtConvertContext *c)
Definition: fmtconvert.c:44
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:390
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:60
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:383
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:113
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:177
intmath.h