FFmpeg
eac3dec.c
Go to the documentation of this file.
1 /*
2  * E-AC-3 decoder
3  * Copyright (c) 2007 Bartlomiej Wolowiec <bartek.wolowiec@gmail.com>
4  * Copyright (c) 2008 Justin Ruggles
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 /*
24  * There are several features of E-AC-3 that this decoder does not yet support.
25  *
26  * Enhanced Coupling
27  * No known samples exist. If any ever surface, this feature should not be
28  * too difficult to implement.
29  *
30  * Reduced Sample Rates
31  * No known samples exist. The spec also does not give clear information
32  * on how this is to be implemented.
33  *
34  * Transient Pre-noise Processing
35  * This is side information which a decoder should use to reduce artifacts
36  * caused by transients. There are samples which are known to have this
37  * information, but this decoder currently ignores it.
38  */
39 
40 
41 #include "avcodec.h"
42 #include "aac_ac3_parser.h"
43 #include "ac3.h"
44 #include "ac3dec.h"
45 #include "ac3dec_data.h"
46 #include "eac3_data.h"
47 
48 /** gain adaptive quantization mode */
49 typedef enum {
54 } EAC3GaqMode;
55 
56 #define EAC3_SR_CODE_REDUCED 3
57 
58 static void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
59 {
60  int bin, bnd, ch, i;
61  uint8_t wrapflag[SPX_MAX_BANDS]={1,0,}, num_copy_sections, copy_sizes[SPX_MAX_BANDS];
62  float rms_energy[SPX_MAX_BANDS];
63 
64  /* Set copy index mapping table. Set wrap flags to apply a notch filter at
65  wrap points later on. */
66  bin = s->spx_dst_start_freq;
67  num_copy_sections = 0;
68  for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
69  int copysize;
70  int bandsize = s->spx_band_sizes[bnd];
71  if (bin + bandsize > s->spx_src_start_freq) {
72  copy_sizes[num_copy_sections++] = bin - s->spx_dst_start_freq;
73  bin = s->spx_dst_start_freq;
74  wrapflag[bnd] = 1;
75  }
76  for (i = 0; i < bandsize; i += copysize) {
77  if (bin == s->spx_src_start_freq) {
78  copy_sizes[num_copy_sections++] = bin - s->spx_dst_start_freq;
79  bin = s->spx_dst_start_freq;
80  }
81  copysize = FFMIN(bandsize - i, s->spx_src_start_freq - bin);
82  bin += copysize;
83  }
84  }
85  copy_sizes[num_copy_sections++] = bin - s->spx_dst_start_freq;
86 
87  for (ch = 1; ch <= s->fbw_channels; ch++) {
88  if (!s->channel_uses_spx[ch])
89  continue;
90 
91  /* Copy coeffs from normal bands to extension bands */
92  bin = s->spx_src_start_freq;
93  for (i = 0; i < num_copy_sections; i++) {
94  memcpy(&s->transform_coeffs[ch][bin],
95  &s->transform_coeffs[ch][s->spx_dst_start_freq],
96  copy_sizes[i]*sizeof(INTFLOAT));
97  bin += copy_sizes[i];
98  }
99 
100  /* Calculate RMS energy for each SPX band. */
101  bin = s->spx_src_start_freq;
102  for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
103  int bandsize = s->spx_band_sizes[bnd];
104  float accum = 0.0f;
105  for (i = 0; i < bandsize; i++) {
106  float coeff = s->transform_coeffs[ch][bin++];
107  accum += coeff * coeff;
108  }
109  rms_energy[bnd] = sqrtf(accum / bandsize);
110  }
111 
112  /* Apply a notch filter at transitions between normal and extension
113  bands and at all wrap points. */
114  if (s->spx_atten_code[ch] >= 0) {
115  const float *atten_tab = ff_eac3_spx_atten_tab[s->spx_atten_code[ch]];
116  bin = s->spx_src_start_freq - 2;
117  for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
118  if (wrapflag[bnd]) {
119  INTFLOAT *coeffs = &s->transform_coeffs[ch][bin];
120  coeffs[0] *= atten_tab[0];
121  coeffs[1] *= atten_tab[1];
122  coeffs[2] *= atten_tab[2];
123  coeffs[3] *= atten_tab[1];
124  coeffs[4] *= atten_tab[0];
125  }
126  bin += s->spx_band_sizes[bnd];
127  }
128  }
129 
130  /* Apply noise-blended coefficient scaling based on previously
131  calculated RMS energy, blending factors, and SPX coordinates for
132  each band. */
133  bin = s->spx_src_start_freq;
134  for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
135  float nscale = s->spx_noise_blend[ch][bnd] * rms_energy[bnd] * (1.0f / INT32_MIN);
136  float sscale = s->spx_signal_blend[ch][bnd];
137 #if USE_FIXED
138  // spx_noise_blend and spx_signal_blend are both FP.23
139  nscale *= 1.0 / (1<<23);
140  sscale *= 1.0 / (1<<23);
141 #endif
142  for (i = 0; i < s->spx_band_sizes[bnd]; i++) {
143  float noise = nscale * (int32_t)av_lfg_get(&s->dith_state);
144  s->transform_coeffs[ch][bin] *= sscale;
145  s->transform_coeffs[ch][bin++] += noise;
146  }
147  }
148  }
149 }
150 
151 
152 /** lrint(M_SQRT2*cos(2*M_PI/12)*(1<<23)) */
153 #define COEFF_0 10273905LL
154 
155 /** lrint(M_SQRT2*cos(0*M_PI/12)*(1<<23)) = lrint(M_SQRT2*(1<<23)) */
156 #define COEFF_1 11863283LL
157 
158 /** lrint(M_SQRT2*cos(5*M_PI/12)*(1<<23)) */
159 #define COEFF_2 3070444LL
160 
161 /**
162  * Calculate 6-point IDCT of the pre-mantissas.
163  * All calculations are 24-bit fixed-point.
164  */
165 static void idct6(int pre_mant[6])
166 {
167  int tmp;
168  int even0, even1, even2, odd0, odd1, odd2;
169 
170  odd1 = pre_mant[1] - pre_mant[3] - pre_mant[5];
171 
172  even2 = ( pre_mant[2] * COEFF_0) >> 23;
173  tmp = ( pre_mant[4] * COEFF_1) >> 23;
174  odd0 = ((pre_mant[1] + pre_mant[5]) * COEFF_2) >> 23;
175 
176  even0 = pre_mant[0] + (tmp >> 1);
177  even1 = pre_mant[0] - tmp;
178 
179  tmp = even0;
180  even0 = tmp + even2;
181  even2 = tmp - even2;
182 
183  tmp = odd0;
184  odd0 = tmp + pre_mant[1] + pre_mant[3];
185  odd2 = tmp + pre_mant[5] - pre_mant[3];
186 
187  pre_mant[0] = even0 + odd0;
188  pre_mant[1] = even1 + odd1;
189  pre_mant[2] = even2 + odd2;
190  pre_mant[3] = even2 - odd2;
191  pre_mant[4] = even1 - odd1;
192  pre_mant[5] = even0 - odd0;
193 }
194 
195 static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
196 {
197  int bin, blk, gs;
198  int end_bap, gaq_mode;
199  GetBitContext *gbc = &s->gbc;
200  int gaq_gain[AC3_MAX_COEFS];
201 
202  gaq_mode = get_bits(gbc, 2);
203  end_bap = (gaq_mode < 2) ? 12 : 17;
204 
205  /* if GAQ gain is used, decode gain codes for bins with hebap between
206  8 and end_bap */
207  gs = 0;
208  if (gaq_mode == EAC3_GAQ_12 || gaq_mode == EAC3_GAQ_14) {
209  /* read 1-bit GAQ gain codes */
210  for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
211  if (s->bap[ch][bin] > 7 && s->bap[ch][bin] < end_bap)
212  gaq_gain[gs++] = get_bits1(gbc) << (gaq_mode-1);
213  }
214  } else if (gaq_mode == EAC3_GAQ_124) {
215  /* read 1.67-bit GAQ gain codes (3 codes in 5 bits) */
216  int gc = 2;
217  for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
218  if (s->bap[ch][bin] > 7 && s->bap[ch][bin] < 17) {
219  if (gc++ == 2) {
220  int group_code = get_bits(gbc, 5);
221  if (group_code > 26) {
222  av_log(s->avctx, AV_LOG_WARNING, "GAQ gain group code out-of-range\n");
223  group_code = 26;
224  }
225  gaq_gain[gs++] = ff_ac3_ungroup_3_in_5_bits_tab[group_code][0];
226  gaq_gain[gs++] = ff_ac3_ungroup_3_in_5_bits_tab[group_code][1];
227  gaq_gain[gs++] = ff_ac3_ungroup_3_in_5_bits_tab[group_code][2];
228  gc = 0;
229  }
230  }
231  }
232  }
233 
234  gs=0;
235  for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
236  int hebap = s->bap[ch][bin];
237  int bits = ff_eac3_bits_vs_hebap[hebap];
238  if (!hebap) {
239  /* zero-mantissa dithering */
240  for (blk = 0; blk < 6; blk++) {
241  s->pre_mantissa[ch][bin][blk] = (av_lfg_get(&s->dith_state) & 0x7FFFFF) - 0x400000;
242  }
243  } else if (hebap < 8) {
244  /* Vector Quantization */
245  int v = get_bits(gbc, bits);
246  for (blk = 0; blk < 6; blk++) {
247  s->pre_mantissa[ch][bin][blk] = ff_eac3_mantissa_vq[hebap][v][blk] * (1 << 8);
248  }
249  } else {
250  /* Gain Adaptive Quantization */
251  int gbits, log_gain;
252  if (gaq_mode != EAC3_GAQ_NO && hebap < end_bap) {
253  log_gain = gaq_gain[gs++];
254  } else {
255  log_gain = 0;
256  }
257  gbits = bits - log_gain;
258 
259  for (blk = 0; blk < 6; blk++) {
260  int mant = get_sbits(gbc, gbits);
261  if (log_gain && mant == -(1 << (gbits-1))) {
262  /* large mantissa */
263  int b;
264  int mbits = bits - (2 - log_gain);
265  mant = get_sbits(gbc, mbits);
266  mant = ((unsigned)mant) << (23 - (mbits - 1));
267  /* remap mantissa value to correct for asymmetric quantization */
268  if (mant >= 0)
269  b = 1 << (23 - log_gain);
270  else
271  b = ff_eac3_gaq_remap_2_4_b[hebap-8][log_gain-1] * (1 << 8);
272  mant += ((ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] * (int64_t)mant) >> 15) + b;
273  } else {
274  /* small mantissa, no GAQ, or Gk=1 */
275  mant *= (1 << 24 - bits);
276  if (!log_gain) {
277  /* remap mantissa value for no GAQ or Gk=1 */
278  mant += (ff_eac3_gaq_remap_1[hebap-8] * (int64_t)mant) >> 15;
279  }
280  }
281  s->pre_mantissa[ch][bin][blk] = mant;
282  }
283  }
284  idct6(s->pre_mantissa[ch][bin]);
285  }
286 }
287 
288 static int ff_eac3_parse_header(AC3DecodeContext *s)
289 {
290  int i, blk, ch;
291  int ac3_exponent_strategy, parse_aht_info, parse_spx_atten_data;
292  int parse_transient_proc_info;
293  int num_cpl_blocks;
294  GetBitContext *gbc = &s->gbc;
295 
296  /* An E-AC-3 stream can have multiple independent streams which the
297  application can select from. each independent stream can also contain
298  dependent streams which are used to add or replace channels. */
299  if (s->frame_type == EAC3_FRAME_TYPE_RESERVED) {
300  av_log(s->avctx, AV_LOG_ERROR, "Reserved frame type\n");
302  }
303 
304  /* The substream id indicates which substream this frame belongs to. each
305  independent stream has its own substream id, and the dependent streams
306  associated to an independent stream have matching substream id's. */
307  if (s->substreamid) {
308  /* only decode substream with id=0. skip any additional substreams. */
309  if (!s->eac3_subsbtreamid_found) {
310  s->eac3_subsbtreamid_found = 1;
311  avpriv_request_sample(s->avctx, "Additional substreams");
312  }
314  }
315 
316  if (s->bit_alloc_params.sr_code == EAC3_SR_CODE_REDUCED) {
317  /* The E-AC-3 specification does not tell how to handle reduced sample
318  rates in bit allocation. The best assumption would be that it is
319  handled like AC-3 DolbyNet, but we cannot be sure until we have a
320  sample which utilizes this feature. */
321  avpriv_request_sample(s->avctx, "Reduced sampling rate");
322  return AVERROR_PATCHWELCOME;
323  }
324  skip_bits(gbc, 5); // skip bitstream id
325 
326  /* volume control params */
327  for (i = 0; i < (s->channel_mode ? 1 : 2); i++) {
328  s->dialog_normalization[i] = -get_bits(gbc, 5);
329  if (s->dialog_normalization[i] == 0) {
330  s->dialog_normalization[i] = -31;
331  }
332  if (s->target_level != 0) {
333  s->level_gain[i] = powf(2.0f,
334  (float)(s->target_level - s->dialog_normalization[i])/6.0f);
335  }
336  s->compression_exists[i] = get_bits1(gbc);
337  if (s->compression_exists[i]) {
338  s->heavy_dynamic_range[i] = AC3_HEAVY_RANGE(get_bits(gbc, 8));
339  }
340  }
341 
342  /* dependent stream channel map */
343  if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
344  if (get_bits1(gbc)) {
345  int64_t channel_layout = 0;
346  int channel_map = get_bits(gbc, 16);
347  av_log(s->avctx, AV_LOG_DEBUG, "channel_map: %0X\n", channel_map);
348 
349  for (i = 0; i < 16; i++)
350  if (channel_map & (1 << (EAC3_MAX_CHANNELS - i - 1)))
351  channel_layout |= ff_eac3_custom_channel_map_locations[i][1];
352 
353  if (av_popcount64(channel_layout) > EAC3_MAX_CHANNELS) {
354  return AVERROR_INVALIDDATA;
355  }
356  s->channel_map = channel_map;
357  }
358  }
359 
360  /* mixing metadata */
361  if (get_bits1(gbc)) {
362  /* center and surround mix levels */
363  if (s->channel_mode > AC3_CHMODE_STEREO) {
364  s->preferred_downmix = get_bits(gbc, 2);
365  if (s->channel_mode & 1) {
366  /* if three front channels exist */
367  s->center_mix_level_ltrt = get_bits(gbc, 3);
368  s->center_mix_level = get_bits(gbc, 3);
369  }
370  if (s->channel_mode & 4) {
371  /* if a surround channel exists */
372  s->surround_mix_level_ltrt = av_clip(get_bits(gbc, 3), 3, 7);
373  s->surround_mix_level = av_clip(get_bits(gbc, 3), 3, 7);
374  }
375  }
376 
377  /* lfe mix level */
378  if (s->lfe_on && (s->lfe_mix_level_exists = get_bits1(gbc))) {
379  s->lfe_mix_level = get_bits(gbc, 5);
380  }
381 
382  /* info for mixing with other streams and substreams */
383  if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT) {
384  for (i = 0; i < (s->channel_mode ? 1 : 2); i++) {
385  // TODO: apply program scale factor
386  if (get_bits1(gbc)) {
387  skip_bits(gbc, 6); // skip program scale factor
388  }
389  }
390  if (get_bits1(gbc)) {
391  skip_bits(gbc, 6); // skip external program scale factor
392  }
393  /* skip mixing parameter data */
394  switch(get_bits(gbc, 2)) {
395  case 1: skip_bits(gbc, 5); break;
396  case 2: skip_bits(gbc, 12); break;
397  case 3: {
398  int mix_data_size = (get_bits(gbc, 5) + 2) << 3;
399  skip_bits_long(gbc, mix_data_size);
400  break;
401  }
402  }
403  /* skip pan information for mono or dual mono source */
404  if (s->channel_mode < AC3_CHMODE_STEREO) {
405  for (i = 0; i < (s->channel_mode ? 1 : 2); i++) {
406  if (get_bits1(gbc)) {
407  /* note: this is not in the ATSC A/52B specification
408  reference: ETSI TS 102 366 V1.1.1
409  section: E.1.3.1.25 */
410  skip_bits(gbc, 8); // skip pan mean direction index
411  skip_bits(gbc, 6); // skip reserved paninfo bits
412  }
413  }
414  }
415  /* skip mixing configuration information */
416  if (get_bits1(gbc)) {
417  for (blk = 0; blk < s->num_blocks; blk++) {
418  if (s->num_blocks == 1 || get_bits1(gbc)) {
419  skip_bits(gbc, 5);
420  }
421  }
422  }
423  }
424  }
425 
426  /* informational metadata */
427  if (get_bits1(gbc)) {
428  s->bitstream_mode = get_bits(gbc, 3);
429  skip_bits(gbc, 2); // skip copyright bit and original bitstream bit
430  if (s->channel_mode == AC3_CHMODE_STEREO) {
431  s->dolby_surround_mode = get_bits(gbc, 2);
432  s->dolby_headphone_mode = get_bits(gbc, 2);
433  }
434  if (s->channel_mode >= AC3_CHMODE_2F2R) {
435  s->dolby_surround_ex_mode = get_bits(gbc, 2);
436  }
437  for (i = 0; i < (s->channel_mode ? 1 : 2); i++) {
438  if (get_bits1(gbc)) {
439  skip_bits(gbc, 8); // skip mix level, room type, and A/D converter type
440  }
441  }
442  if (s->bit_alloc_params.sr_code != EAC3_SR_CODE_REDUCED) {
443  skip_bits1(gbc); // skip source sample rate code
444  }
445  }
446 
447  /* converter synchronization flag
448  If frames are less than six blocks, this bit should be turned on
449  once every 6 blocks to indicate the start of a frame set.
450  reference: RFC 4598, Section 2.1.3 Frame Sets */
451  if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && s->num_blocks != 6) {
452  skip_bits1(gbc); // skip converter synchronization flag
453  }
454 
455  /* original frame size code if this stream was converted from AC-3 */
456  if (s->frame_type == EAC3_FRAME_TYPE_AC3_CONVERT &&
457  (s->num_blocks == 6 || get_bits1(gbc))) {
458  skip_bits(gbc, 6); // skip frame size code
459  }
460 
461  /* additional bitstream info */
462  if (get_bits1(gbc)) {
463  int addbsil = get_bits(gbc, 6);
464  for (i = 0; i < addbsil + 1; i++) {
465  skip_bits(gbc, 8); // skip additional bit stream info
466  }
467  }
468 
469  /* audio frame syntax flags, strategy data, and per-frame data */
470 
471  if (s->num_blocks == 6) {
472  ac3_exponent_strategy = get_bits1(gbc);
473  parse_aht_info = get_bits1(gbc);
474  } else {
475  /* less than 6 blocks, so use AC-3-style exponent strategy syntax, and
476  do not use AHT */
477  ac3_exponent_strategy = 1;
478  parse_aht_info = 0;
479  }
480 
481  s->snr_offset_strategy = get_bits(gbc, 2);
482  parse_transient_proc_info = get_bits1(gbc);
483 
484  s->block_switch_syntax = get_bits1(gbc);
485  if (!s->block_switch_syntax)
486  memset(s->block_switch, 0, sizeof(s->block_switch));
487 
488  s->dither_flag_syntax = get_bits1(gbc);
489  if (!s->dither_flag_syntax) {
490  for (ch = 1; ch <= s->fbw_channels; ch++)
491  s->dither_flag[ch] = 1;
492  }
493  s->dither_flag[CPL_CH] = s->dither_flag[s->lfe_ch] = 0;
494 
495  s->bit_allocation_syntax = get_bits1(gbc);
496  if (!s->bit_allocation_syntax) {
497  /* set default bit allocation parameters */
498  s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[2];
499  s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[1];
500  s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab [1];
501  s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[2];
502  s->bit_alloc_params.floor = ff_ac3_floor_tab [7];
503  }
504 
505  s->fast_gain_syntax = get_bits1(gbc);
506  s->dba_syntax = get_bits1(gbc);
507  s->skip_syntax = get_bits1(gbc);
508  parse_spx_atten_data = get_bits1(gbc);
509 
510  /* coupling strategy occurrence and coupling use per block */
511  num_cpl_blocks = 0;
512  if (s->channel_mode > 1) {
513  for (blk = 0; blk < s->num_blocks; blk++) {
514  s->cpl_strategy_exists[blk] = (!blk || get_bits1(gbc));
515  if (s->cpl_strategy_exists[blk]) {
516  s->cpl_in_use[blk] = get_bits1(gbc);
517  } else {
518  s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
519  }
520  num_cpl_blocks += s->cpl_in_use[blk];
521  }
522  } else {
523  memset(s->cpl_in_use, 0, sizeof(s->cpl_in_use));
524  }
525 
526  /* exponent strategy data */
527  if (ac3_exponent_strategy) {
528  /* AC-3-style exponent strategy syntax */
529  for (blk = 0; blk < s->num_blocks; blk++) {
530  for (ch = !s->cpl_in_use[blk]; ch <= s->fbw_channels; ch++) {
531  s->exp_strategy[blk][ch] = get_bits(gbc, 2);
532  }
533  }
534  } else {
535  /* LUT-based exponent strategy syntax */
536  for (ch = !((s->channel_mode > 1) && num_cpl_blocks); ch <= s->fbw_channels; ch++) {
537  int frmchexpstr = get_bits(gbc, 5);
538  for (blk = 0; blk < 6; blk++) {
539  s->exp_strategy[blk][ch] = ff_eac3_frm_expstr[frmchexpstr][blk];
540  }
541  }
542  }
543  /* LFE exponent strategy */
544  if (s->lfe_on) {
545  for (blk = 0; blk < s->num_blocks; blk++) {
546  s->exp_strategy[blk][s->lfe_ch] = get_bits1(gbc);
547  }
548  }
549  /* original exponent strategies if this stream was converted from AC-3 */
550  if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT &&
551  (s->num_blocks == 6 || get_bits1(gbc))) {
552  skip_bits(gbc, 5 * s->fbw_channels); // skip converter channel exponent strategy
553  }
554 
555  /* determine which channels use AHT */
556  if (parse_aht_info) {
557  /* For AHT to be used, all non-zero blocks must reuse exponents from
558  the first block. Furthermore, for AHT to be used in the coupling
559  channel, all blocks must use coupling and use the same coupling
560  strategy. */
561  s->channel_uses_aht[CPL_CH]=0;
562  for (ch = (num_cpl_blocks != 6); ch <= s->channels; ch++) {
563  int use_aht = 1;
564  for (blk = 1; blk < 6; blk++) {
565  if ((s->exp_strategy[blk][ch] != EXP_REUSE) ||
566  (!ch && s->cpl_strategy_exists[blk])) {
567  use_aht = 0;
568  break;
569  }
570  }
571  s->channel_uses_aht[ch] = use_aht && get_bits1(gbc);
572  }
573  } else {
574  memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
575  }
576 
577  /* per-frame SNR offset */
578  if (!s->snr_offset_strategy) {
579  int csnroffst = (get_bits(gbc, 6) - 15) << 4;
580  int snroffst = (csnroffst + get_bits(gbc, 4)) << 2;
581  for (ch = 0; ch <= s->channels; ch++)
582  s->snr_offset[ch] = snroffst;
583  }
584 
585  /* transient pre-noise processing data */
586  if (parse_transient_proc_info) {
587  for (ch = 1; ch <= s->fbw_channels; ch++) {
588  if (get_bits1(gbc)) { // channel in transient processing
589  skip_bits(gbc, 10); // skip transient processing location
590  skip_bits(gbc, 8); // skip transient processing length
591  }
592  }
593  }
594 
595  /* spectral extension attenuation data */
596  for (ch = 1; ch <= s->fbw_channels; ch++) {
597  if (parse_spx_atten_data && get_bits1(gbc)) {
598  s->spx_atten_code[ch] = get_bits(gbc, 5);
599  } else {
600  s->spx_atten_code[ch] = -1;
601  }
602  }
603 
604  /* block start information */
605  if (s->num_blocks > 1 && get_bits1(gbc)) {
606  /* reference: Section E2.3.2.27
607  nblkstrtbits = (numblks - 1) * (4 + ceiling(log2(words_per_frame)))
608  The spec does not say what this data is or what it's used for.
609  It is likely the offset of each block within the frame. */
610  int block_start_bits = (s->num_blocks-1) * (4 + av_log2(s->frame_size-2));
611  skip_bits_long(gbc, block_start_bits);
612  avpriv_request_sample(s->avctx, "Block start info");
613  }
614 
615  /* syntax state initialization */
616  for (ch = 1; ch <= s->fbw_channels; ch++) {
617  s->first_spx_coords[ch] = 1;
618  s->first_cpl_coords[ch] = 1;
619  }
620  s->first_cpl_leak = 1;
621 
622  return 0;
623 }
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:291
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
ff_ac3_fast_decay_tab
const uint8_t ff_ac3_fast_decay_tab[4]
Definition: ac3tab.c:130
av_clip
#define av_clip
Definition: common.h:95
ff_eac3_parse_header
static int ff_eac3_parse_header(AC3DecodeContext *s)
Definition: eac3dec.c:288
ff_eac3_frm_expstr
const uint8_t ff_eac3_frm_expstr[32][6]
Table E2.14 Frame Exponent Strategy Combinations.
Definition: eac3_data.c:1064
av_popcount64
#define av_popcount64
Definition: common.h:152
aac_ac3_parser.h
EAC3_GAQ_14
@ EAC3_GAQ_14
Definition: eac3dec.c:52
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
b
#define b
Definition: input.c:34
EAC3_FRAME_TYPE_RESERVED
@ EAC3_FRAME_TYPE_RESERVED
Definition: ac3defs.h:101
COEFF_0
#define COEFF_0
lrint(M_SQRT2*cos(2*M_PI/12)*(1<<23))
Definition: eac3dec.c:153
ff_eac3_decode_transform_coeffs_aht_ch
static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
Definition: eac3dec.c:195
ff_eac3_gaq_remap_2_4_a
const int16_t ff_eac3_gaq_remap_2_4_a[9][2]
Table E3.6, Gk=2 & Gk=4, A Large mantissa inverse quantization, remapping scale factors ff_eac3_gaq_r...
Definition: eac3_data.c:51
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:467
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:379
ac3dec.h
GetBitContext
Definition: get_bits.h:61
EAC3_FRAME_TYPE_DEPENDENT
@ EAC3_FRAME_TYPE_DEPENDENT
Definition: ac3defs.h:99
COEFF_2
#define COEFF_2
lrint(M_SQRT2*cos(5*M_PI/12)*(1<<23))
Definition: eac3dec.c:159
EXP_REUSE
#define EXP_REUSE
Definition: ac3defs.h:38
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
s
#define s(width, name)
Definition: cbs_vp9.c:256
EAC3_GAQ_12
@ EAC3_GAQ_12
Definition: eac3dec.c:51
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
AC3_MAX_COEFS
#define AC3_MAX_COEFS
Definition: ac3defs.h:29
eac3_data.h
ff_ac3_floor_tab
const int16_t ff_ac3_floor_tab[8]
Definition: ac3tab.c:142
bits
uint8_t bits
Definition: vp3data.h:141
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:359
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
blk
#define blk(i)
Definition: sha.c:186
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:498
sqrtf
static __device__ float sqrtf(float a)
Definition: cuda_runtime.h:184
EAC3_SR_CODE_REDUCED
#define EAC3_SR_CODE_REDUCED
Definition: eac3dec.c:56
idct6
static void idct6(int pre_mant[6])
Calculate 6-point IDCT of the pre-mantissas.
Definition: eac3dec.c:165
ff_eac3_gaq_remap_2_4_b
const int16_t ff_eac3_gaq_remap_2_4_b[9][2]
Table E3.6, Gk=2 & Gk=4, B Large mantissa inverse quantization, negative mantissa remapping offsets f...
Definition: eac3_data.c:68
ff_eac3_custom_channel_map_locations
const uint64_t ff_eac3_custom_channel_map_locations[16][2]
Definition: ac3tab.c:150
ff_eac3_bits_vs_hebap
const uint8_t ff_eac3_bits_vs_hebap[20]
Definition: eac3_data.c:32
EAC3_FRAME_TYPE_AC3_CONVERT
@ EAC3_FRAME_TYPE_AC3_CONVERT
Definition: ac3defs.h:100
f
f
Definition: af_crystalizer.c:122
AC3_CHMODE_STEREO
@ AC3_CHMODE_STEREO
Definition: ac3defs.h:57
powf
#define powf(x, y)
Definition: libm.h:50
ff_ac3_db_per_bit_tab
const uint16_t ff_ac3_db_per_bit_tab[4]
Definition: ac3tab.c:138
ac3dec_data.h
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
COEFF_1
#define COEFF_1
lrint(M_SQRT2*cos(0*M_PI/12)*(1<<23)) = lrint(M_SQRT2*(1<<23))
Definition: eac3dec.c:156
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:538
ff_eac3_mantissa_vq
const int16_t(*const [8] ff_eac3_mantissa_vq)[6]
Definition: eac3_data.c:1050
CPL_CH
#define CPL_CH
coupling channel index
Definition: ac3defs.h:27
EAC3_GAQ_NO
@ EAC3_GAQ_NO
Definition: eac3dec.c:50
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
ff_ac3_slow_decay_tab
const uint8_t ff_ac3_slow_decay_tab[4]
Definition: ac3tab.c:126
ff_eac3_apply_spectral_extension
static void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
Definition: eac3dec.c:58
AC3_HEAVY_RANGE
#define AC3_HEAVY_RANGE(x)
Definition: ac3.h:72
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
EAC3_GAQ_124
@ EAC3_GAQ_124
Definition: eac3dec.c:53
AAC_AC3_PARSE_ERROR_FRAME_TYPE
@ AAC_AC3_PARSE_ERROR_FRAME_TYPE
Definition: aac_ac3_parser.h:35
avcodec.h
ff_eac3_gaq_remap_1
const int16_t ff_eac3_gaq_remap_1[12]
Table E3.6, Gk=1 No gain (Gk=1) inverse quantization, remapping scale factors ff_eac3_gaq_remap[hebap...
Definition: eac3_data.c:42
AC3_CHMODE_2F2R
@ AC3_CHMODE_2F2R
Definition: ac3defs.h:61
EAC3_MAX_CHANNELS
#define EAC3_MAX_CHANNELS
maximum number of channels in EAC3
Definition: ac3defs.h:25
noise
static int noise(AVBSFContext *ctx, AVPacket *pkt)
Definition: noise_bsf.c:120
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:36
ff_ac3_slow_gain_tab
const uint16_t ff_ac3_slow_gain_tab[4]
Definition: ac3tab.c:134
ac3.h
int32_t
int32_t
Definition: audioconvert.c:56
coeff
static const double coeff[2][5]
Definition: vf_owdenoise.c:78
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
INTFLOAT
float INTFLOAT
Definition: aac_defines.h:86
EAC3GaqMode
EAC3GaqMode
gain adaptive quantization mode
Definition: eac3dec.c:49
ff_eac3_spx_atten_tab
const float ff_eac3_spx_atten_tab[32][3]
Table E.25: Spectral Extension Attenuation Table ff_eac3_spx_atten_tab[code][bin]=pow(2....
Definition: eac3_data.c:1103