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