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