FFmpeg
aacdec_usac.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 Lynne <dev@lynne.ee>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "aacdec_usac.h"
22 #include "aacdec_tab.h"
23 #include "aacdec_lpd.h"
24 #include "aacdec_ac.h"
25 
26 #include "libavcodec/aacsbr.h"
27 #include "libavcodec/aactab.h"
28 #include "libavcodec/mpeg4audio.h"
29 #include "libavcodec/unary.h"
30 
31 #include "libavutil/mem.h"
32 #include "libavutil/refstruct.h"
33 
34 #include "aacdec_usac_mps212.h"
35 
36 /* Number of scalefactor bands per complex prediction band, equal to 2. */
37 #define SFB_PER_PRED_BAND 2
38 
39 static inline uint32_t get_escaped_value(GetBitContext *gb, int nb1, int nb2, int nb3)
40 {
41  uint32_t val = get_bits(gb, nb1), val2;
42  if (val < ((1 << nb1) - 1))
43  return val;
44 
45  val += val2 = get_bits(gb, nb2);
46  if (nb3 && (val2 == ((1 << nb2) - 1)))
47  val += get_bits(gb, nb3);
48 
49  return val;
50 }
51 
52 /* ISO/IEC 23003-3, Table 74: bsOutputChannelPos */
53 static const enum AVChannel usac_ch_pos_to_av[64] = {
54  [0] = AV_CHAN_FRONT_LEFT,
55  [1] = AV_CHAN_FRONT_RIGHT,
58  [4] = AV_CHAN_SIDE_LEFT, // +110 degrees, Ls|LS|kAudioChannelLabel_LeftSurround
59  [5] = AV_CHAN_SIDE_RIGHT, // -110 degrees, Rs|RS|kAudioChannelLabel_RightSurround
62  [8] = AV_CHAN_BACK_LEFT, // +135 degrees, Lsr|BL|kAudioChannelLabel_RearSurroundLeft
63  [9] = AV_CHAN_BACK_RIGHT, // -135 degrees, Rsr|BR|kAudioChannelLabel_RearSurroundRight
64  [10] = AV_CHAN_BACK_CENTER,
67  [13] = AV_CHAN_SIDE_SURROUND_LEFT, // +90 degrees, Lss|SL|kAudioChannelLabel_LeftSideSurround
68  [14] = AV_CHAN_SIDE_SURROUND_RIGHT, // -90 degrees, Rss|SR|kAudioChannelLabel_RightSideSurround
69  [15] = AV_CHAN_WIDE_LEFT, // +60 degrees, Lw|FLw|kAudioChannelLabel_LeftWide
70  [16] = AV_CHAN_WIDE_RIGHT, // -60 degrees, Rw|FRw|kAudioChannelLabel_RightWide
74  [20] = AV_CHAN_TOP_BACK_LEFT,
77  [23] = AV_CHAN_TOP_SIDE_LEFT,
79  [25] = AV_CHAN_TOP_CENTER,
84  [30] = AV_CHAN_TOP_SURROUND_LEFT, ///< +110 degrees, Lvs, TpLS
85  [31] = AV_CHAN_TOP_SURROUND_RIGHT, ///< -110 degrees, Rvs, TpRS
86 };
87 
88 /* ISO/IEC 23003-4, Table A.48: bit width of bsMethodValue depends on methodDef. */
89 static int methodvalue_width(int method_def)
90 {
91  switch (method_def) {
92  case 7: return 5; /* mixing level */
93  case 8: return 2; /* room type */
94  default: return 8; /* loudness (0..6, 9) + reserved */
95  }
96 }
97 
99  GetBitContext *gb)
100 {
101  info->drc_set_id = get_bits(gb, 6);
102  info->downmix_id = get_bits(gb, 7);
103 
104  if ((info->sample_peak.present = get_bits1(gb))) /* samplePeakLevelPresent */
105  info->sample_peak.lvl = get_bits(gb, 12);
106 
107  if ((info->true_peak.present = get_bits1(gb))) { /* truePeakLevelPresent */
108  info->true_peak.lvl = get_bits(gb, 12);
109  info->true_peak.measurement = get_bits(gb, 4);
110  info->true_peak.reliability = get_bits(gb, 2);
111  }
112 
113  info->nb_measurements = get_bits(gb, 4);
114  for (int i = 0; i < info->nb_measurements; i++) {
115  info->measurements[i].method_def = get_bits(gb, 4);
116  info->measurements[i].method_val =
117  get_bits(gb, methodvalue_width(info->measurements[i].method_def));
118  info->measurements[i].measurement = get_bits(gb, 4);
119  info->measurements[i].reliability = get_bits(gb, 2);
120  }
121 
122  return 0;
123 }
124 
125 /* Pick the bsMethodValue of a program- or anchor-loudness measurement.
126  * Per ISO/IEC 23003-4 6.1.2.5, downmixId and drcSetId identify the signal a
127  * loudnessInfo() applies to; only downmixId == 0 (base layout) together with
128  * drcSetId == 0 (no DRC) describes the unprocessed signal we output, so
129  * measurements for any other downmix/DRC set must not be used. */
131 {
132  for (int i = 0; i < usac->loudness.nb_info; i++) {
133  const AACUSACLoudnessInfo *info = &usac->loudness.info[i];
134  if (info->downmix_id != 0 || info->drc_set_id != 0)
135  continue;
136  for (int j = 0; j < info->nb_measurements; j++) {
137  int method = info->measurements[j].method_def;
138  if (method == 1 || method == 2)
139  return info->measurements[j].method_val;
140  }
141  }
142  return -1;
143 }
144 
146  GetBitContext *gb)
147 {
148  int ret;
149 
150  usac->loudness.nb_album = get_bits(gb, 6); /* loudnessInfoAlbumCount */
151  usac->loudness.nb_info = get_bits(gb, 6); /* loudnessInfoCount */
152 
153  for (int i = 0; i < usac->loudness.nb_album; i++) {
154  ret = decode_loudness_info(ac, &usac->loudness.album_info[i], gb);
155  if (ret < 0)
156  return ret;
157  }
158 
159  for (int i = 0; i < usac->loudness.nb_info; i++) {
160  ret = decode_loudness_info(ac, &usac->loudness.info[i], gb);
161  if (ret < 0)
162  return ret;
163  }
164 
165  if (get_bits1(gb)) { /* loudnessInfoSetExtPresent */
167  while ((type = get_bits(gb, 4)) != UNIDRCLOUDEXT_TERM) {
168  uint8_t size_bits = get_bits(gb, 4) + 4; /* bitSizeLen */
169  uint32_t bit_size = get_bits_long(gb, size_bits) + 1; /* bitSize */
170  switch (type) {
171  case UNIDRCLOUDEXT_EQ:
172  avpriv_report_missing_feature(ac->avctx, "loudnessInfoV1");
173  return AVERROR_PATCHWELCOME;
174  default:
175  skip_bits_long(gb, bit_size);
176  break;
177  }
178  }
179  }
180 
181  return 0;
182 }
183 
186 {
187  uint8_t header_extra1;
188  uint8_t header_extra2;
189 
190  e->sbr.harmonic_sbr = get_bits1(gb); /* harmonicSBR */
191  e->sbr.bs_intertes = get_bits1(gb); /* bs_interTes */
192  e->sbr.bs_pvc = get_bits1(gb); /* bs_pvc */
193  if (e->sbr.harmonic_sbr || e->sbr.bs_intertes || e->sbr.bs_pvc) {
194  avpriv_report_missing_feature(ac->avctx, "AAC USAC eSBR");
195  return AVERROR_PATCHWELCOME;
196  }
197 
198  e->sbr.dflt.start_freq = get_bits(gb, 4); /* dflt_start_freq */
199  e->sbr.dflt.stop_freq = get_bits(gb, 4); /* dflt_stop_freq */
200 
201  header_extra1 = get_bits1(gb); /* dflt_header_extra1 */
202  header_extra2 = get_bits1(gb); /* dflt_header_extra2 */
203 
204  e->sbr.dflt.freq_scale = 2;
205  e->sbr.dflt.alter_scale = 1;
206  e->sbr.dflt.noise_bands = 2;
207  if (header_extra1) {
208  e->sbr.dflt.freq_scale = get_bits(gb, 2); /* dflt_freq_scale */
209  e->sbr.dflt.alter_scale = get_bits1(gb); /* dflt_alter_scale */
210  e->sbr.dflt.noise_bands = get_bits(gb, 2); /* dflt_noise_bands */
211  }
212 
213  e->sbr.dflt.limiter_bands = 2;
214  e->sbr.dflt.limiter_gains = 2;
215  e->sbr.dflt.interpol_freq = 1;
216  e->sbr.dflt.smoothing_mode = 1;
217  if (header_extra2) {
218  e->sbr.dflt.limiter_bands = get_bits(gb, 2); /* dflt_limiter_bands */
219  e->sbr.dflt.limiter_gains = get_bits(gb, 2); /* dflt_limiter_gains */
220  e->sbr.dflt.interpol_freq = get_bits1(gb); /* dflt_interpol_freq */
221  e->sbr.dflt.smoothing_mode = get_bits1(gb); /* dflt_smoothing_mode */
222  }
223 
224  return 0;
225 }
226 
228  GetBitContext *gb,
229  int sbr_ratio)
230 {
231  e->tw_mdct = get_bits1(gb); /* tw_mdct */
232  e->noise_fill = get_bits1(gb);
233  e->sbr.ratio = sbr_ratio;
234 }
235 
238 {
239  e->stereo_config_index = 0;
240  if (e->sbr.ratio) {
241  int ret = decode_usac_sbr_data(ac, e, gb);
242  if (ret < 0)
243  return ret;
244  e->stereo_config_index = get_bits(gb, 2);
245  }
246 
247  if (e->stereo_config_index) {
248  e->mps.freq_res = get_bits(gb, 3); /* bsFreqRes */
249  if (!e->mps.freq_res)
250  return AVERROR_INVALIDDATA; /* value 0 is reserved */
251 
252  int numBands = ((int[]){0,28,20,14,10,7,5,4})[e->mps.freq_res]; // ISO/IEC 23003-1:2007, 5.2, Table 39
253 
254  e->mps.fixed_gain = get_bits(gb, 3); /* bsFixedGainDMX */
255  e->mps.temp_shape_config = get_bits(gb, 2); /* bsTempShapeConfig */
256  e->mps.decorr_config = get_bits(gb, 2); /* bsDecorrConfig */
257  e->mps.high_rate_mode = get_bits1(gb); /* bsHighRateMode */
258  e->mps.phase_coding = get_bits1(gb); /* bsPhaseCoding */
259 
261  int otts_bands_phase = ((int[]){0,10,10,7,5,3,2,2})[e->mps.freq_res]; // Table 109: Default value of bsOttBandsPhase
262  if (e->mps.otts_bands_phase_present) { /* bsOttBandsPhasePresent */
263  otts_bands_phase = get_bits(gb, 5); /* bsOttBandsPhase */
264  if (otts_bands_phase > numBands)
265  return AVERROR_INVALIDDATA;
266  }
267  e->mps.otts_bands_phase = otts_bands_phase;
268 
269  e->mps.residual_coding = e->stereo_config_index >= 2; /* bsResidualCoding */
270  if (e->mps.residual_coding) {
271  int residual_bands = get_bits(gb, 5); /* bsResidualBands */
272  if (residual_bands > numBands)
273  return AVERROR_INVALIDDATA;
274  e->mps.residual_bands = residual_bands;
275 
277  e->mps.residual_bands);
278  e->mps.pseudo_lr = get_bits1(gb); /* bsPseudoLr */
279  }
280  if (e->mps.temp_shape_config == 2)
281  e->mps.env_quant_mode = get_bits1(gb); /* bsEnvQuantMode */
282  }
283 
284  return 0;
285 }
286 
287 /* ISO/IEC 23003-4, Table 62: channelLayout() */
289 {
290  int base_channel_count = get_bits(gb, 7); /* baseChannelCount */
291  if (get_bits1(gb)) { /* layoutSignallingPresent */
292  if (get_bits(gb, 8) == 0) /* definedLayout == 0 */
293  for (int i = 0; i < base_channel_count; i++)
294  skip_bits(gb, 7); /* speakerPosition */
295  }
296  return base_channel_count;
297 }
298 
299 /* ISO/IEC 23003-4, Table 63: downmixInstructions() */
300 static void skip_drc_downmix_instructions(GetBitContext *gb, int base_channel_count)
301 {
302  int target_channel_count;
303  skip_bits(gb, 7); /* downmixId */
304  target_channel_count = get_bits(gb, 7); /* targetChannelCount */
305  skip_bits(gb, 8); /* targetLayout */
306  if (get_bits1(gb)) /* downmixCoefficientsPresent */
307  skip_bits_long(gb, 4 * target_channel_count * base_channel_count);
308 }
309 
310 /* ISO/IEC 23003-4, Table 70: drcInstructionsBasic(), common with the
311  * uniDrc variant up to the loudness-target fields. */
313 {
314  int set_effects;
315 
316  skip_bits(gb, 6); /* drcSetId */
317  skip_bits(gb, 4); /* drcLocation */
318  skip_bits(gb, 7); /* downmixId */
319  if (get_bits1(gb)) { /* additionalDownmixIdPresent */
320  int add_downmix_cnt = get_bits(gb, 3); /* additionalDownmixIdCount */
321  for (int j = 0; j < add_downmix_cnt; j++)
322  skip_bits(gb, 7); /* additionalDownmixId */
323  }
324 
325  set_effects = get_bits(gb, 16); /* drcSetEffect */
326  if ((set_effects & (3 << 10)) == 0) {
327  if (get_bits1(gb)) /* limiterPeakTargetPresent */
328  skip_bits(gb, 8); /* bsLimiterPeakTarget */
329  }
330 
331  if (get_bits1(gb)) { /* drcSetTargetLoudnessPresent */
332  e->drc.loudness.upper = get_bits(gb, 6); /* bsDrcSetTargetLoudnessValueUpper */
333  if (get_bits1(gb)) /* drcSetTargetLoudnessValueLowerPresent */
334  e->drc.loudness.lower = get_bits(gb, 6); /* bsDrcSetTargetLoudnessValueLower */
335  }
336 }
337 
338 /* ISO/IEC 23003-4, Table 57: uniDrcConfig() */
340  GetBitContext *gb)
341 {
342  int nb_downmix_instr, nb_coeff_basic = 0, nb_instr_basic = 0;
343  int nb_coeff_uni, nb_instr_uni;
344  int base_channel_count;
345 
346  e->drc.loudness.lower = -1;
347  e->drc.loudness.upper = -1;
348 
349  if (get_bits1(gb)) /* sampleRatePresent */
350  skip_bits(gb, 18); /* bsSampleRate */
351 
352  nb_downmix_instr = get_bits(gb, 7); /* downmixInstructionsCount */
353 
354  if (get_bits1(gb)) { /* drcDescriptionBasicPresent */
355  nb_coeff_basic = get_bits(gb, 3); /* drcCoefficientsBasicCount */
356  nb_instr_basic = get_bits(gb, 4); /* drcInstructionsBasicCount */
357  }
358 
359  nb_coeff_uni = get_bits(gb, 3); /* drcCoefficientsUniDrcCount */
360  nb_instr_uni = get_bits(gb, 6); /* drcInstructionsUniDrcCount */
361 
362  if (nb_coeff_uni || nb_instr_uni) {
364  "AAC USAC uniDrc DRC processing");
365  return AVERROR_PATCHWELCOME;
366  }
367 
368  base_channel_count = decode_drc_channel_layout(gb);
369 
370  for (int i = 0; i < nb_downmix_instr; i++)
371  skip_drc_downmix_instructions(gb, base_channel_count);
372 
373  for (int i = 0; i < nb_coeff_basic; i++)
374  skip_bits(gb, 4 + 7); /* drcLocation, drcCharacteristic */
375 
376  for (int i = 0; i < nb_instr_basic; i++)
378 
379  if (get_bits1(gb)) { /* uniDrcConfigExtPresent */
380  enum AACUSACDRCExt type;
381  while ((type = get_bits(gb, 4)) != UNIDRCCONFEXT_TERM) {
382  uint8_t size_bits = get_bits(gb, 4) + 4; /* bitSizeLen */
383  uint32_t bit_size = get_bits_long(gb, size_bits) + 1; /* extBitSize */
384  switch (type) {
385  default:
386  skip_bits_long(gb, bit_size);
387  break;
388  }
389  }
390  }
391 
392  return 0;
393 }
394 
396  GetBitContext *gb)
397 {
398  int len = 0, ext_config_len;
399 
400  e->ext.type = get_escaped_value(gb, 4, 8, 16); /* usacExtElementType */
401  ext_config_len = get_escaped_value(gb, 4, 8, 16); /* usacExtElementConfigLength */
402 
403  if (get_bits1(gb)) /* usacExtElementDefaultLengthPresent */
404  len = get_escaped_value(gb, 8, 16, 0) + 1;
405 
406  e->ext.default_len = len;
407  e->ext.payload_frag = get_bits1(gb); /* usacExtElementPayloadFrag */
408 
409  av_log(ac->avctx, AV_LOG_DEBUG, "Extension present: type %i, len %i\n",
410  e->ext.type, ext_config_len);
411 
412  switch (e->ext.type) {
413 #if 0 /* Skip unsupported values */
414  case ID_EXT_ELE_MPEGS:
415  break;
416  case ID_EXT_ELE_SAOC:
417  break;
418 #endif
419  case ID_EXT_ELE_UNI_DRC: {
420  int start = get_bits_count(gb);
421  int ret = decode_drc_config(ac, e, gb);
422  int skip = 8*ext_config_len - (get_bits_count(gb) - start);
423  if (ret == AVERROR_PATCHWELCOME) {
424  /* Unsupported uniDrcConfig(): ignore the DRC metadata and treat
425  * the element as fill so the stream stays decodable. */
426  e->ext.type = ID_EXT_ELE_FILL;
427  ret = 0;
428  }
429  if (ret < 0)
430  return ret;
431  if (skip < 0)
432  return AVERROR_INVALIDDATA;
433  /* The config is byte-padded to usacExtElementConfigLength */
434  skip_bits_long(gb, skip);
435  break;
436  }
437  case ID_EXT_ELE_FILL:
438  break; /* This is what the spec does */
440  /* No configuration needed - fallthrough (len should be 0) */
441  default:
442  skip_bits(gb, 8*ext_config_len);
443  e->ext.type = ID_EXT_ELE_FILL;
444  break;
445  };
446 
447  return 0;
448 }
449 
451 {
452  AACUSACConfig *usac = &oc->usac;
453  int elem_id[3 /* SCE, CPE, LFE */] = { 0, 0, 0 };
454 
455  ChannelElement *che;
456  enum RawDataBlockType type;
457  int id, ch;
458 
459  /* Initialize state */
460  for (int i = 0; i < usac->nb_elems; i++) {
461  AACUsacElemConfig *e = &usac->elems[i];
462  if (e->type == ID_USAC_EXT)
463  continue;
464 
465  switch (e->type) {
466  case ID_USAC_SCE:
467  ch = 1;
468  type = TYPE_SCE;
469  id = elem_id[0]++;
470  break;
471  case ID_USAC_CPE:
472  ch = 2;
473  type = TYPE_CPE;
474  id = elem_id[1]++;
475  break;
476  case ID_USAC_LFE:
477  ch = 1;
478  type = TYPE_LFE;
479  id = elem_id[2]++;
480  break;
481  }
482 
483  che = ff_aac_get_che(ac, type, id);
484  if (che) {
485  AACUsacStereo *us = &che->us;
486  memset(us, 0, sizeof(*us));
487 
488  if (e->sbr.ratio)
489  ff_aac_sbr_config_usac(ac, che, e);
490 
491  for (int j = 0; j < ch; j++) {
492  SingleChannelElement *sce = &che->ch[j];
493  AACUsacElemData *ue = &sce->ue;
494 
495  memset(ue, 0, sizeof(*ue));
496 
497  if (!ch)
498  ue->noise.seed = 0x3039;
499  else
500  che->ch[1].ue.noise.seed = 0x10932;
501  }
502  }
503  }
504 
505  return 0;
506 }
507 
508 /* UsacConfig */
511  int channel_config)
512 {
513  int ret;
514  uint8_t freq_idx;
515  uint8_t channel_config_idx;
516  int nb_channels = 0;
517  int ratio_mult, ratio_dec;
518  int samplerate;
519  int sbr_ratio;
520  MPEG4AudioConfig *m4ac = &oc->m4ac;
521  AACUSACConfig *usac = &oc->usac;
522  int elem_id[3 /* SCE, CPE, LFE */];
523 
524  int map_pos_set = 0;
525  uint8_t layout_map[MAX_ELEM_ID*4][3] = { 0 };
526 
527  if (!ac)
528  return AVERROR_PATCHWELCOME;
529 
530  memset(usac, 0, sizeof(*usac));
531  usac->loudness.input_method_val = -1;
532 
533  freq_idx = get_bits(gb, 5); /* usacSamplingFrequencyIndex */
534  if (freq_idx == 0x1f) {
535  samplerate = get_bits(gb, 24); /* usacSamplingFrequency */
536  if (samplerate == 0)
537  return AVERROR(EINVAL);
538  } else {
539  samplerate = ff_aac_usac_samplerate[freq_idx];
540  if (samplerate < 0)
541  return AVERROR(EINVAL);
542  }
543 
544  usac->core_sbr_frame_len_idx = get_bits(gb, 3); /* coreSbrFrameLengthIndex */
545  m4ac->frame_length_short = usac->core_sbr_frame_len_idx == 0 ||
546  usac->core_sbr_frame_len_idx == 2;
547 
548  usac->core_frame_len = (usac->core_sbr_frame_len_idx == 0 ||
549  usac->core_sbr_frame_len_idx == 2) ? 768 : 1024;
550 
551  sbr_ratio = usac->core_sbr_frame_len_idx == 2 ? 2 :
552  usac->core_sbr_frame_len_idx == 3 ? 3 :
553  usac->core_sbr_frame_len_idx == 4 ? 1 :
554  0;
555 
556  if (sbr_ratio == 2) {
557  ratio_mult = 8;
558  ratio_dec = 3;
559  } else if (sbr_ratio == 3) {
560  ratio_mult = 2;
561  ratio_dec = 1;
562  } else if (sbr_ratio == 4) {
563  ratio_mult = 4;
564  ratio_dec = 1;
565  } else {
566  ratio_mult = 1;
567  ratio_dec = 1;
568  }
569 
570  avctx->sample_rate = samplerate;
571  m4ac->ext_sample_rate = samplerate;
572  m4ac->sample_rate = (samplerate * ratio_dec) / ratio_mult;
573 
575  m4ac->sbr = sbr_ratio > 0;
576 
577  channel_config_idx = get_bits(gb, 5); /* channelConfigurationIndex */
578  if (!channel_config_idx) {
579  /* UsacChannelConfig() */
580  nb_channels = get_escaped_value(gb, 5, 8, 16); /* numOutChannels */
581  if (nb_channels > 64)
582  return AVERROR(EINVAL);
583 
585 
586  ret = av_channel_layout_custom_init(&ac->oc[1].ch_layout, nb_channels);
587  if (ret < 0)
588  return ret;
589 
590  for (int i = 0; i < nb_channels; i++) {
591  AVChannelCustom *cm = &ac->oc[1].ch_layout.u.map[i];
592  cm->id = usac_ch_pos_to_av[get_bits(gb, 5)]; /* bsOutputChannelPos */
593  }
594 
598  if (ret < 0)
599  return ret;
600 
601  ret = av_channel_layout_copy(&avctx->ch_layout, &ac->oc[1].ch_layout);
602  if (ret < 0)
603  return ret;
604  } else {
605  int nb_elements;
606  if ((ret = ff_aac_set_default_channel_config(ac, avctx, layout_map,
607  &nb_elements, channel_config_idx)))
608  return ret;
609 
610  /* Fill in the number of expected channels */
611  for (int i = 0; i < nb_elements; i++)
612  nb_channels += layout_map[i][0] == TYPE_CPE ? 2 : 1;
613 
614  map_pos_set = 1;
615  }
616 
617  /* UsacDecoderConfig */
618  elem_id[0] = elem_id[1] = elem_id[2] = 0;
619  usac->nb_elems = get_escaped_value(gb, 4, 8, 16) + 1;
620  if (usac->nb_elems > 64) {
621  av_log(ac->avctx, AV_LOG_ERROR, "Too many elements: %i\n",
622  usac->nb_elems);
623  usac->nb_elems = 0;
624  return AVERROR(EINVAL);
625  }
626 
627  for (int i = 0; i < usac->nb_elems; i++) {
628  int map_count = elem_id[0] + elem_id[1] + elem_id[2];
629  AACUsacElemConfig *e = &usac->elems[i];
630  memset(e, 0, sizeof(*e));
631 
632  e->type = get_bits(gb, 2); /* usacElementType */
633  if (e->type != ID_USAC_EXT && (map_count + 1) > nb_channels) {
634  av_log(ac->avctx, AV_LOG_ERROR, "Too many channels for the channel "
635  "configuration\n");
636  usac->nb_elems = 0;
637  return AVERROR(EINVAL);
638  }
639 
640  av_log(ac->avctx, AV_LOG_DEBUG, "Element present: idx %i, type %i\n",
641  i, e->type);
642 
643  switch (e->type) {
644  case ID_USAC_SCE: /* SCE */
645  /* UsacCoreConfig */
646  decode_usac_element_core(e, gb, sbr_ratio);
647  if (e->sbr.ratio > 0) {
648  ret = decode_usac_sbr_data(ac, e, gb);
649  if (ret < 0)
650  return ret;
651  }
652  layout_map[map_count][0] = TYPE_SCE;
653  layout_map[map_count][1] = elem_id[0]++;
654  if (!map_pos_set)
655  layout_map[map_count][2] = AAC_CHANNEL_FRONT;
656 
657  break;
658  case ID_USAC_CPE: /* UsacChannelPairElementConf */
659  /* UsacCoreConfig */
660  decode_usac_element_core(e, gb, sbr_ratio);
661  ret = decode_usac_element_pair(ac, e, gb);
662  if (ret < 0)
663  return ret;
664  layout_map[map_count][0] = TYPE_CPE;
665  layout_map[map_count][1] = elem_id[1]++;
666  if (!map_pos_set)
667  layout_map[map_count][2] = AAC_CHANNEL_FRONT;
668 
669  break;
670  case ID_USAC_LFE: /* LFE */
671  /* LFE has no need for any configuration */
672  e->tw_mdct = 0;
673  e->noise_fill = 0;
674  layout_map[map_count][0] = TYPE_LFE;
675  layout_map[map_count][1] = elem_id[2]++;
676  if (!map_pos_set)
677  layout_map[map_count][2] = AAC_CHANNEL_LFE;
678 
679  break;
680  case ID_USAC_EXT: /* EXT */
681  ret = decode_usac_extension(ac, e, gb);
682  if (ret < 0)
683  return ret;
684  break;
685  };
686  }
687 
688  ret = ff_aac_output_configure(ac, layout_map, elem_id[0] + elem_id[1] + elem_id[2],
689  OC_GLOBAL_HDR, 0);
690  if (ret < 0) {
691  av_log(avctx, AV_LOG_ERROR, "Unable to parse channel config!\n");
692  usac->nb_elems = 0;
693  return ret;
694  }
695 
696  if (get_bits1(gb)) { /* usacConfigExtensionPresent */
697  int invalid;
698  int nb_extensions = get_escaped_value(gb, 2, 4, 8) + 1; /* numConfigExtensions */
699  for (int i = 0; i < nb_extensions; i++) {
700  int type = get_escaped_value(gb, 4, 8, 16);
701  int len = get_escaped_value(gb, 4, 8, 16);
702  switch (type) {
704  ret = decode_loudness_set(ac, usac, gb);
705  if (ret < 0)
706  return ret;
707  break;
709  usac->stream_identifier = get_bits(gb, 16);
710  break;
711  case ID_CONFIG_EXT_FILL: /* fallthrough */
712  invalid = 0;
713  while (len--) {
714  if (get_bits(gb, 8) != 0xA5)
715  invalid++;
716  }
717  if (invalid)
718  av_log(avctx, AV_LOG_WARNING, "Invalid fill bytes: %i\n",
719  invalid);
720  break;
721  default:
722  while (len--)
723  skip_bits(gb, 8);
724  break;
725  }
726  }
727  }
728 
730 
732  if (usac->loudness.input_method_val >= 0)
733  av_log(avctx, AV_LOG_VERBOSE,
734  "USAC input loudness: %.2f LKFS (bsMethodValue=%d)\n",
735  -57.75f + 0.25f * usac->loudness.input_method_val,
736  usac->loudness.input_method_val);
737 
738  ret = ff_aac_usac_reset_state(ac, oc);
739  if (ret < 0)
740  return ret;
741 
742  return 0;
743 }
744 
747  GetBitContext *gb, uint8_t global_gain)
748 {
749  IndividualChannelStream *ics = &sce->ics;
750 
751  /* Decode all scalefactors. */
752  int offset_sf = global_gain;
753  for (int g = 0; g < ics->num_window_groups; g++) {
754  for (int sfb = 0; sfb < ics->max_sfb; sfb++) {
755  if (g || sfb)
756  offset_sf += get_vlc2(gb, ff_vlc_scalefactors, 7, 3) - SCALE_DIFF_ZERO;
757  if (offset_sf > 255U) {
759  "Scalefactor (%d) out of range.\n", offset_sf);
760  return AVERROR_INVALIDDATA;
761  }
762 
763  sce->sfo[g*ics->max_sfb + sfb] = offset_sf - 100;
764  }
765  }
766 
767  return 0;
768 }
769 
770 /**
771  * Decode and dequantize arithmetically coded, uniformly quantized value
772  *
773  * @param coef array of dequantized, scaled spectral data
774  * @param sf array of scalefactors or intensity stereo positions
775  *
776  * @return Returns error status. 0 - OK, !0 - error
777  */
778 static int decode_spectrum_ac(AACDecContext *s, float coef[1024],
780  int reset, uint16_t len, uint16_t N)
781 {
782  AACArith ac;
783  int i, a, b;
784  uint32_t c;
785 
786  int gb_count;
787  GetBitContext gb2;
788 
789  c = ff_aac_ac_map_process(state, reset, N);
790 
791  if (!len) {
792  ff_aac_ac_finish(state, 0, N);
793  return 0;
794  }
795 
796  ff_aac_ac_init(&ac, gb);
797 
798  /* Backup reader for rolling back by 14 bits at the end */
799  gb2 = *gb;
800  gb_count = get_bits_count(&gb2);
801 
802  for (i = 0; i < len/2; i++) {
803  /* MSB */
804  int lvl, esc_nb, m;
806  for (lvl=esc_nb=0;;) {
807  uint32_t pki = ff_aac_ac_get_pk(c + (esc_nb << 17));
808  m = ff_aac_ac_decode(&ac, &gb2, ff_aac_ac_msb_cdfs[pki],
810  if (m < FF_AAC_AC_ESCAPE)
811  break;
812  lvl++;
813 
814  /* Cargo-culted value. */
815  if (lvl > 23)
816  return AVERROR(EINVAL);
817 
818  if ((esc_nb = lvl) > 7)
819  esc_nb = 7;
820  }
821 
822  b = m >> 2;
823  a = m - (b << 2);
824 
825  /* ARITH_STOP detection */
826  if (!m) {
827  if (esc_nb)
828  break;
829  a = b = 0;
830  }
831 
832  /* LSB */
833  for (int l = lvl; l > 0; l--) {
834  int lsbidx = !a ? 1 : (!b ? 0 : 2);
835  uint8_t r = ff_aac_ac_decode(&ac, &gb2, ff_aac_ac_lsb_cdfs[lsbidx],
837  a = (a << 1) | (r & 1);
838  b = (b << 1) | ((r >> 1) & 1);
839  }
840 
841  /* Dequantize coeffs here */
842  coef[2*i + 0] = a * cbrt(a);
843  coef[2*i + 1] = b * cbrt(b);
845  }
846 
847  if (len > 1) {
848  /* "Rewind" bitstream back by 14 bits */
849  int gb_count2 = get_bits_count(&gb2);
850  skip_bits(gb, gb_count2 - gb_count - 14);
851  } else {
852  *gb = gb2;
853  }
854 
856 
857  for (; i < N/2; i++) {
858  coef[2*i + 0] = 0;
859  coef[2*i + 1] = 0;
860  }
861 
862  /* Signs */
863  for (i = 0; i < len; i++) {
864  if (coef[i]) {
865  if (!get_bits1(gb)) /* s */
866  coef[i] *= -1;
867  }
868  }
869 
870  return 0;
871 }
872 
874  ChannelElement *cpe, GetBitContext *gb,
875  int num_window_groups,
876  int prev_num_window_groups,
877  int indep_flag)
878 {
879  int delta_code_time;
880  IndividualChannelStream *ics = &cpe->ch[0].ics;
881 
882  if (!get_bits1(gb)) { /* cplx_pred_all */
883  for (int g = 0; g < num_window_groups; g++) {
884  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb += SFB_PER_PRED_BAND) {
885  const uint8_t val = get_bits1(gb);
886  us->pred_used[g*cpe->max_sfb_ste + sfb] = val;
887  if ((sfb + 1) < cpe->max_sfb_ste)
888  us->pred_used[g*cpe->max_sfb_ste + sfb + 1] = val;
889  }
890  }
891  } else {
892  for (int g = 0; g < num_window_groups; g++)
893  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++)
894  us->pred_used[g*cpe->max_sfb_ste + sfb] = 1;
895  }
896 
897  us->pred_dir = get_bits1(gb);
898  us->complex_coef = get_bits1(gb);
899 
900  us->use_prev_frame = 0;
901  if (us->complex_coef && !indep_flag)
902  us->use_prev_frame = get_bits1(gb);
903 
904  delta_code_time = 0;
905  if (!indep_flag)
906  delta_code_time = get_bits1(gb);
907 
908  /* TODO: shouldn't be needed */
909  for (int g = 0; g < num_window_groups; g++) {
910  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb += SFB_PER_PRED_BAND) {
911  float last_alpha_q_re = 0;
912  float last_alpha_q_im = 0;
913  if (delta_code_time) {
914  if (g) {
915  /* Transient, after the first group - use the current frame,
916  * previous window, alpha values. */
917  last_alpha_q_re = us->alpha_q_re[(g - 1)*cpe->max_sfb_ste + sfb];
918  last_alpha_q_im = us->alpha_q_im[(g - 1)*cpe->max_sfb_ste + sfb];
919  } else if (!g &&
920  (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) &&
921  (ics->window_sequence[1] == EIGHT_SHORT_SEQUENCE)) {
922  /* The spec doesn't explicitly mention this, but it doesn't make
923  * any other sense otherwise! */
924  const int wg = prev_num_window_groups - 1;
925  last_alpha_q_re = us->prev_alpha_q_re[wg*cpe->max_sfb_ste + sfb];
926  last_alpha_q_im = us->prev_alpha_q_im[wg*cpe->max_sfb_ste + sfb];
927  } else {
928  last_alpha_q_re = us->prev_alpha_q_re[g*cpe->max_sfb_ste + sfb];
929  last_alpha_q_im = us->prev_alpha_q_im[g*cpe->max_sfb_ste + sfb];
930  }
931  } else {
932  if (sfb) {
933  last_alpha_q_re = us->alpha_q_re[g*cpe->max_sfb_ste + sfb - 1];
934  last_alpha_q_im = us->alpha_q_im[g*cpe->max_sfb_ste + sfb - 1];
935  }
936  }
937 
938  if (us->pred_used[g*cpe->max_sfb_ste + sfb]) {
939  int val = -get_vlc2(gb, ff_vlc_scalefactors, 7, 3) + 60;
940  last_alpha_q_re += val * 0.1f;
941  if (us->complex_coef) {
942  val = -get_vlc2(gb, ff_vlc_scalefactors, 7, 3) + 60;
943  last_alpha_q_im += val * 0.1f;
944  }
945  us->alpha_q_re[g*cpe->max_sfb_ste + sfb] = last_alpha_q_re;
946  us->alpha_q_im[g*cpe->max_sfb_ste + sfb] = last_alpha_q_im;
947  } else {
948  us->alpha_q_re[g*cpe->max_sfb_ste + sfb] = 0;
949  us->alpha_q_im[g*cpe->max_sfb_ste + sfb] = 0;
950  }
951 
952  if ((sfb + 1) < cpe->max_sfb_ste) {
953  us->alpha_q_re[g*cpe->max_sfb_ste + sfb + 1] =
954  us->alpha_q_re[g*cpe->max_sfb_ste + sfb];
955  us->alpha_q_im[g*cpe->max_sfb_ste + sfb + 1] =
956  us->alpha_q_im[g*cpe->max_sfb_ste + sfb];
957  }
958  }
959  }
960 
961  return 0;
962 }
963 
965  AACUSACConfig *usac)
966 {
967  AACUsacElemData *ue = &sce->ue;
968  IndividualChannelStream *ics = &sce->ics;
969  const int sampling_index = ac->oc[1].m4ac.sampling_index;
970 
971  /* Setup window parameters */
973  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
974  if (usac->core_frame_len == 768) {
975  ics->swb_offset = ff_swb_offset_96[sampling_index];
976  ics->num_swb = ff_aac_num_swb_96[sampling_index];
977  } else {
978  ics->swb_offset = ff_swb_offset_128[sampling_index];
979  ics->num_swb = ff_aac_num_swb_128[sampling_index];
980  }
981  ics->tns_max_bands = ff_tns_max_bands_usac_128[sampling_index];
982 
983  /* Setup scalefactor grouping. 7 bit mask. */
984  ics->num_window_groups = 0;
985  for (int j = 0; j < 7; j++) {
986  ics->group_len[j] = 1;
987  if (ue->scale_factor_grouping & (1 << (6 - j)))
988  ics->group_len[ics->num_window_groups] += 1;
989  else
990  ics->num_window_groups++;
991  }
992 
993  ics->group_len[7] = 1;
994  ics->num_window_groups++;
995  ics->num_windows = 8;
996  } else {
997  if (usac->core_frame_len == 768) {
998  ics->swb_offset = ff_swb_offset_768[sampling_index];
999  ics->num_swb = ff_aac_num_swb_768[sampling_index];
1000  } else {
1001  ics->swb_offset = ff_swb_offset_1024[sampling_index];
1002  ics->num_swb = ff_aac_num_swb_1024[sampling_index];
1003  }
1004  ics->tns_max_bands = ff_tns_max_bands_usac_1024[sampling_index];
1005 
1006  ics->group_len[0] = 1;
1007  ics->num_window_groups = 1;
1008  ics->num_windows = 1;
1009  }
1010 
1011  if (ics->max_sfb > ics->num_swb) {
1012  av_log(ac->avctx, AV_LOG_ERROR,
1013  "Number of scalefactor bands in group (%d) "
1014  "exceeds limit (%d).\n",
1015  ics->max_sfb, ics->num_swb);
1016  ics->max_sfb = 0;
1017  return AVERROR(EINVAL);
1018  }
1019 
1020  /* Just some defaults for the band types */
1021  for (int i = 0; i < FF_ARRAY_ELEMS(sce->band_type); i++)
1022  sce->band_type[i] = ESC_BT;
1023 
1024  return 0;
1025 }
1026 
1029  GetBitContext *gb, int indep_flag)
1030 {
1031  int ret, tns_active;
1032 
1033  AACUsacStereo *us = &cpe->us;
1034  SingleChannelElement *sce1 = &cpe->ch[0];
1035  SingleChannelElement *sce2 = &cpe->ch[1];
1036  IndividualChannelStream *ics1 = &sce1->ics;
1037  IndividualChannelStream *ics2 = &sce2->ics;
1038  AACUsacElemData *ue1 = &sce1->ue;
1039  AACUsacElemData *ue2 = &sce2->ue;
1040 
1041  us->common_window = 0;
1042  us->common_tw = 0;
1043 
1044  /* Alpha values must always be zeroed out for the current frame,
1045  * as they are propagated to the next frame and may be used. */
1046  memset(us->alpha_q_re, 0, sizeof(us->alpha_q_re));
1047  memset(us->alpha_q_im, 0, sizeof(us->alpha_q_im));
1048 
1049  if (!(!ue1->core_mode && !ue2->core_mode))
1050  return 0;
1051 
1052  tns_active = get_bits1(gb);
1053  us->common_window = get_bits1(gb);
1054 
1055  if (!us->common_window || indep_flag) {
1056  memset(us->prev_alpha_q_re, 0, sizeof(us->prev_alpha_q_re));
1057  memset(us->prev_alpha_q_im, 0, sizeof(us->prev_alpha_q_im));
1058  }
1059 
1060  if (us->common_window) {
1061  /* ics_info() */
1062  ics1->window_sequence[1] = ics1->window_sequence[0];
1063  ics2->window_sequence[1] = ics2->window_sequence[0];
1064  ics1->window_sequence[0] = ics2->window_sequence[0] = get_bits(gb, 2);
1065 
1066  ics1->use_kb_window[1] = ics1->use_kb_window[0];
1067  ics2->use_kb_window[1] = ics2->use_kb_window[0];
1068  ics1->use_kb_window[0] = ics2->use_kb_window[0] = get_bits1(gb);
1069 
1070  /* If there's a change in the transform sequence, zero out last frame's
1071  * stereo prediction coefficients */
1072  if ((ics1->window_sequence[0] == EIGHT_SHORT_SEQUENCE &&
1073  ics1->window_sequence[1] != EIGHT_SHORT_SEQUENCE) ||
1074  (ics1->window_sequence[1] == EIGHT_SHORT_SEQUENCE &&
1075  ics1->window_sequence[0] != EIGHT_SHORT_SEQUENCE) ||
1076  (ics2->window_sequence[0] == EIGHT_SHORT_SEQUENCE &&
1077  ics2->window_sequence[1] != EIGHT_SHORT_SEQUENCE) ||
1078  (ics2->window_sequence[1] == EIGHT_SHORT_SEQUENCE &&
1079  ics2->window_sequence[0] != EIGHT_SHORT_SEQUENCE)) {
1080  memset(us->prev_alpha_q_re, 0, sizeof(us->prev_alpha_q_re));
1081  memset(us->prev_alpha_q_im, 0, sizeof(us->prev_alpha_q_im));
1082  }
1083 
1084  if (ics1->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1085  ics1->max_sfb = ics2->max_sfb = get_bits(gb, 4);
1087  } else {
1088  ics1->max_sfb = ics2->max_sfb = get_bits(gb, 6);
1089  }
1090 
1091  if (!get_bits1(gb)) { /* common_max_sfb */
1092  if (ics2->window_sequence[0] == EIGHT_SHORT_SEQUENCE)
1093  ics2->max_sfb = get_bits(gb, 4);
1094  else
1095  ics2->max_sfb = get_bits(gb, 6);
1096  }
1097 
1098  ret = setup_sce(ac, sce1, usac);
1099  if (ret < 0) {
1100  ics2->max_sfb = 0;
1101  return ret;
1102  }
1103 
1104  ret = setup_sce(ac, sce2, usac);
1105  if (ret < 0)
1106  return ret;
1107 
1108  cpe->max_sfb_ste = FFMAX(ics1->max_sfb, ics2->max_sfb);
1109 
1110  us->ms_mask_mode = get_bits(gb, 2); /* ms_mask_present */
1111  memset(cpe->ms_mask, 0, sizeof(cpe->ms_mask));
1112  if (us->ms_mask_mode == 1) {
1113  for (int g = 0; g < ics1->num_window_groups; g++)
1114  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++)
1115  cpe->ms_mask[g*cpe->max_sfb_ste + sfb] = get_bits1(gb);
1116  } else if (us->ms_mask_mode == 2) {
1117  memset(cpe->ms_mask, 0xFF, sizeof(cpe->ms_mask));
1118  } else if ((us->ms_mask_mode == 3) && !ec->stereo_config_index) {
1119  ret = decode_usac_stereo_cplx(ac, us, cpe, gb,
1120  ics1->num_window_groups,
1121  ics1->prev_num_window_groups,
1122  indep_flag);
1123  if (ret < 0)
1124  return ret;
1125  }
1126  }
1127 
1128  if (ec->tw_mdct) {
1129  us->common_tw = get_bits1(gb);
1131  "AAC USAC timewarping");
1132  return AVERROR_PATCHWELCOME;
1133  }
1134 
1135  us->tns_on_lr = 0;
1136  ue1->tns_data_present = ue2->tns_data_present = 0;
1137  if (tns_active) {
1138  int common_tns = 0;
1139  if (us->common_window)
1140  common_tns = get_bits1(gb);
1141 
1142  us->tns_on_lr = get_bits1(gb);
1143  if (common_tns) {
1144  ret = ff_aac_decode_tns(ac, &sce1->tns, gb, ics1);
1145  if (ret < 0)
1146  return ret;
1147  memcpy(&sce2->tns, &sce1->tns, sizeof(sce1->tns));
1148  sce2->tns.present = 1;
1149  sce1->tns.present = 1;
1150  ue1->tns_data_present = 0;
1151  ue2->tns_data_present = 0;
1152  } else {
1153  if (get_bits1(gb)) {
1154  ue1->tns_data_present = 1;
1155  ue2->tns_data_present = 1;
1156  } else {
1157  ue2->tns_data_present = get_bits1(gb);
1158  ue1->tns_data_present = !ue2->tns_data_present;
1159  }
1160  }
1161  }
1162 
1163  return 0;
1164 }
1165 
1166 /* 7.2.4 Generation of random signs for spectral noise filling
1167  * This function is exactly defined, though we've helped the definition
1168  * along with being slightly faster. */
1169 static inline float noise_random_sign(unsigned int *seed)
1170 {
1171  unsigned int new_seed = *seed = ((*seed) * 69069) + 5;
1172  if (((new_seed) & 0x10000) > 0)
1173  return -1.f;
1174  return +1.f;
1175 }
1176 
1179 {
1180  float *coef;
1181  IndividualChannelStream *ics = &sce->ics;
1182 
1183  float noise_val = powf(2, ((float)ue->noise.level - 14.0f)/3.0f);
1184  int noise_offset = ue->noise.offset - 16;
1185  int band_off;
1186 
1189 
1190  coef = sce->coeffs;
1191  for (int g = 0; g < ics->num_window_groups; g++) {
1192  unsigned g_len = ics->group_len[g];
1193 
1194  for (int sfb = 0; sfb < ics->max_sfb; sfb++) {
1195  float *cb = coef + ics->swb_offset[sfb];
1196  int cb_len = ics->swb_offset[sfb + 1] - ics->swb_offset[sfb];
1197  int band_quantized_to_zero = 1;
1198 
1199  if (ics->swb_offset[sfb] < band_off)
1200  continue;
1201 
1202  for (int group = 0; group < (unsigned)g_len; group++, cb += 128) {
1203  for (int z = 0; z < cb_len; z++) {
1204  if (cb[z] == 0)
1205  cb[z] = noise_random_sign(&sce->ue.noise.seed) * noise_val;
1206  else
1207  band_quantized_to_zero = 0;
1208  }
1209  }
1210 
1211  if (band_quantized_to_zero) {
1212  sce->sfo[g*ics->max_sfb + sfb] = FFMAX(sce->sfo[g*ics->max_sfb + sfb] + noise_offset, -200);
1213  }
1214  }
1215  coef += g_len << 7;
1216  }
1217 }
1218 
1221 {
1222  IndividualChannelStream *ics = &sce->ics;
1223  float *coef;
1224 
1225  /* Synthesise noise */
1226  if (ue->noise.level)
1227  apply_noise_fill(ac, sce, ue);
1228 
1229  /* Noise filling may apply an offset to the scalefactor offset */
1230  ac->dsp.dequant_scalefactors(sce);
1231 
1232  /* Apply scalefactors */
1233  coef = sce->coeffs;
1234  for (int g = 0; g < ics->num_window_groups; g++) {
1235  unsigned g_len = ics->group_len[g];
1236 
1237  for (int sfb = 0; sfb < ics->max_sfb; sfb++) {
1238  float *cb = coef + ics->swb_offset[sfb];
1239  int cb_len = ics->swb_offset[sfb + 1] - ics->swb_offset[sfb];
1240  float sf = sce->sf[g*ics->max_sfb + sfb];
1241 
1242  for (int group = 0; group < (unsigned)g_len; group++, cb += 128)
1243  ac->fdsp->vector_fmul_scalar(cb, cb, sf, cb_len);
1244  }
1245  coef += g_len << 7;
1246  }
1247 }
1248 
1250  float *dmix_re)
1251 {
1252  IndividualChannelStream *ics = &cpe->ch[0].ics;
1253  int sign = !cpe->us.pred_dir ? +1 : -1;
1254  float *coef1 = cpe->ch[0].coeffs;
1255  float *coef2 = cpe->ch[1].coeffs;
1256 
1257  for (int g = 0; g < ics->num_window_groups; g++) {
1258  unsigned g_len = ics->group_len[g];
1259  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++) {
1260  int off = ics->swb_offset[sfb];
1261  int cb_len = ics->swb_offset[sfb + 1] - off;
1262 
1263  float *c1 = coef1 + off;
1264  float *c2 = coef2 + off;
1265  float *dm = dmix_re + off;
1266 
1267  for (int group = 0; group < (unsigned)g_len;
1268  group++, c1 += 128, c2 += 128, dm += 128) {
1269  for (int z = 0; z < cb_len; z++)
1270  dm[z] = 0.5*(c1[z] + sign*c2[z]);
1271  }
1272  }
1273 
1274  coef1 += g_len << 7;
1275  coef2 += g_len << 7;
1276  dmix_re += g_len << 7;
1277  }
1278 }
1279 
1281  float *dmix_re)
1282 {
1283  AACUsacStereo *us = &cpe->us;
1284  IndividualChannelStream *ics = &cpe->ch[0].ics;
1285  int sign = !cpe->us.pred_dir ? +1 : -1;
1286  float *coef1 = cpe->ch[0].coeffs;
1287  float *coef2 = cpe->ch[1].coeffs;
1288 
1289  for (int g = 0; g < ics->num_window_groups; g++) {
1290  unsigned g_len = ics->group_len[g];
1291  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++) {
1292  int off = ics->swb_offset[sfb];
1293  int cb_len = ics->swb_offset[sfb + 1] - off;
1294 
1295  float *c1 = coef1 + off;
1296  float *c2 = coef2 + off;
1297  float *dm = dmix_re + off;
1298 
1299  if (us->pred_used[g*cpe->max_sfb_ste + sfb]) {
1300  for (int group = 0; group < (unsigned)g_len;
1301  group++, c1 += 128, c2 += 128, dm += 128) {
1302  for (int z = 0; z < cb_len; z++)
1303  dm[z] = 0.5*(c1[z] + sign*c2[z]);
1304  }
1305  } else {
1306  for (int group = 0; group < (unsigned)g_len;
1307  group++, c1 += 128, c2 += 128, dm += 128) {
1308  for (int z = 0; z < cb_len; z++)
1309  dm[z] = c1[z];
1310  }
1311  }
1312  }
1313 
1314  coef1 += g_len << 7;
1315  coef2 += g_len << 7;
1316  dmix_re += g_len << 7;
1317  }
1318 }
1319 
1320 static void complex_stereo_interpolate_imag(float *im, float *re, const float f[7],
1321  int len, int factor_even, int factor_odd)
1322 {
1323  int i = 0;
1324  float s;
1325 
1326  s = f[6]*re[2] + f[5]*re[1] + f[4]*re[0] +
1327  f[3]*re[0] +
1328  f[2]*re[1] + f[1]*re[2] + f[0]*re[3];
1329  im[i] += s*factor_even;
1330 
1331  i = 1;
1332  s = f[6]*re[1] + f[5]*re[0] + f[4]*re[0] +
1333  f[3]*re[1] +
1334  f[2]*re[2] + f[1]*re[3] + f[0]*re[4];
1335  im[i] += s*factor_odd;
1336 
1337  i = 2;
1338  s = f[6]*re[0] + f[5]*re[0] + f[4]*re[1] +
1339  f[3]*re[2] +
1340  f[2]*re[3] + f[1]*re[4] + f[0]*re[5];
1341 
1342  im[i] += s*factor_even;
1343  for (i = 3; i < len - 4; i += 2) {
1344  s = f[6]*re[i-3] + f[5]*re[i-2] + f[4]*re[i-1] +
1345  f[3]*re[i] +
1346  f[2]*re[i+1] + f[1]*re[i+2] + f[0]*re[i+3];
1347  im[i+0] += s*factor_odd;
1348 
1349  s = f[6]*re[i-2] + f[5]*re[i-1] + f[4]*re[i] +
1350  f[3]*re[i+1] +
1351  f[2]*re[i+2] + f[1]*re[i+3] + f[0]*re[i+4];
1352  im[i+1] += s*factor_even;
1353  }
1354 
1355  i = len - 3;
1356  s = f[6]*re[i-3] + f[5]*re[i-2] + f[4]*re[i-1] +
1357  f[3]*re[i] +
1358  f[2]*re[i+1] + f[1]*re[i+2] + f[0]*re[i+2];
1359  im[i] += s*factor_odd;
1360 
1361  i = len - 2;
1362  s = f[6]*re[i-3] + f[5]*re[i-2] + f[4]*re[i-1] +
1363  f[3]*re[i] +
1364  f[2]*re[i+1] + f[1]*re[i+1] + f[0]*re[i];
1365  im[i] += s*factor_even;
1366 
1367  i = len - 1;
1368  s = f[6]*re[i-3] + f[5]*re[i-2] + f[4]*re[i-1] +
1369  f[3]*re[i] +
1370  f[2]*re[i] + f[1]*re[i-1] + f[0]*re[i-2];
1371  im[i] += s*factor_odd;
1372 }
1373 
1375 {
1376  AACUsacStereo *us = &cpe->us;
1377  IndividualChannelStream *ics = &cpe->ch[0].ics;
1378  float *coef1 = cpe->ch[0].coeffs;
1379  float *coef2 = cpe->ch[1].coeffs;
1380  float *dmix_im = us->dmix_im;
1381 
1382  for (int g = 0; g < ics->num_window_groups; g++) {
1383  unsigned g_len = ics->group_len[g];
1384  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++) {
1385  int off = ics->swb_offset[sfb];
1386  int cb_len = ics->swb_offset[sfb + 1] - off;
1387 
1388  float *c1 = coef1 + off;
1389  float *c2 = coef2 + off;
1390  float *dm_im = dmix_im + off;
1391  float alpha_re = us->alpha_q_re[g*cpe->max_sfb_ste + sfb];
1392  float alpha_im = us->alpha_q_im[g*cpe->max_sfb_ste + sfb];
1393 
1394  if (!us->pred_used[g*cpe->max_sfb_ste + sfb])
1395  continue;
1396 
1397  if (!cpe->us.pred_dir) {
1398  for (int group = 0; group < (unsigned)g_len;
1399  group++, c1 += 128, c2 += 128, dm_im += 128) {
1400  for (int z = 0; z < cb_len; z++) {
1401  float side;
1402  side = c2[z] - alpha_re*c1[z] - alpha_im*dm_im[z];
1403  c2[z] = c1[z] - side;
1404  c1[z] = c1[z] + side;
1405  }
1406  }
1407  } else {
1408  for (int group = 0; group < (unsigned)g_len;
1409  group++, c1 += 128, c2 += 128, dm_im += 128) {
1410  for (int z = 0; z < cb_len; z++) {
1411  float mid;
1412  mid = c2[z] - alpha_re*c1[z] - alpha_im*dm_im[z];
1413  c2[z] = mid - c1[z];
1414  c1[z] = mid + c1[z];
1415  }
1416  }
1417  }
1418  }
1419 
1420  coef1 += g_len << 7;
1421  coef2 += g_len << 7;
1422  dmix_im += g_len << 7;
1423  }
1424 }
1425 
1426 static const float *complex_stereo_get_filter(ChannelElement *cpe, int is_prev)
1427 {
1428  int win, shape;
1429  if (!is_prev) {
1430  switch (cpe->ch[0].ics.window_sequence[0]) {
1431  default:
1432  case ONLY_LONG_SEQUENCE:
1433  case EIGHT_SHORT_SEQUENCE:
1434  win = 0;
1435  break;
1436  case LONG_START_SEQUENCE:
1437  win = 1;
1438  break;
1439  case LONG_STOP_SEQUENCE:
1440  win = 2;
1441  break;
1442  }
1443 
1444  if (cpe->ch[0].ics.use_kb_window[0] == 0 &&
1445  cpe->ch[0].ics.use_kb_window[1] == 0)
1446  shape = 0;
1447  else if (cpe->ch[0].ics.use_kb_window[0] == 1 &&
1448  cpe->ch[0].ics.use_kb_window[1] == 1)
1449  shape = 1;
1450  else if (cpe->ch[0].ics.use_kb_window[0] == 0 &&
1451  cpe->ch[0].ics.use_kb_window[1] == 1)
1452  shape = 2;
1453  else if (cpe->ch[0].ics.use_kb_window[0] == 1 &&
1454  cpe->ch[0].ics.use_kb_window[1] == 0)
1455  shape = 3;
1456  else
1457  shape = 3;
1458  } else {
1459  win = cpe->ch[0].ics.window_sequence[0] == LONG_STOP_SEQUENCE;
1460  shape = cpe->ch[0].ics.use_kb_window[1];
1461  }
1462 
1463  return ff_aac_usac_mdst_filt_cur[win][shape];
1464 }
1465 
1467  ChannelElement *cpe, int nb_channels)
1468 {
1469  AACUsacStereo *us = &cpe->us;
1470 
1471  for (int ch = 0; ch < nb_channels; ch++) {
1472  SingleChannelElement *sce = &cpe->ch[ch];
1473  AACUsacElemData *ue = &sce->ue;
1474 
1475  if (!ue->core_mode)
1476  spectrum_scale(ac, sce, ue);
1477  }
1478 
1479  if (nb_channels > 1 && us->common_window) {
1480  for (int ch = 0; ch < nb_channels; ch++) {
1481  SingleChannelElement *sce = &cpe->ch[ch];
1482 
1483  /* Apply TNS, if the tns_on_lr bit is not set. */
1484  if (sce->tns.present && !us->tns_on_lr)
1485  ac->dsp.apply_tns(sce->coeffs, &sce->tns, &sce->ics, 1);
1486  }
1487 
1488  if (us->ms_mask_mode == 3) {
1489  const float *filt;
1490  complex_stereo_downmix_cur(ac, cpe, us->dmix_re);
1491  complex_stereo_downmix_prev(ac, cpe, us->prev_dmix_re);
1492 
1493  filt = complex_stereo_get_filter(cpe, 0);
1494  complex_stereo_interpolate_imag(us->dmix_im, us->dmix_re, filt,
1495  usac->core_frame_len, 1, 1);
1496  if (us->use_prev_frame) {
1497  filt = complex_stereo_get_filter(cpe, 1);
1498  complex_stereo_interpolate_imag(us->dmix_im, us->prev_dmix_re, filt,
1499  usac->core_frame_len, -1, 1);
1500  }
1501 
1502  apply_complex_stereo(ac, cpe);
1503  } else if (us->ms_mask_mode > 0) {
1504  ac->dsp.apply_mid_side_stereo(ac, cpe);
1505  }
1506  }
1507 
1508  /* Save coefficients and alpha values for prediction reasons */
1509  if (nb_channels > 1) {
1510  AACUsacStereo *us2 = &cpe->us;
1511  for (int ch = 0; ch < nb_channels; ch++) {
1512  SingleChannelElement *sce = &cpe->ch[ch];
1513  memcpy(sce->prev_coeffs, sce->coeffs, sizeof(sce->coeffs));
1514  }
1515  memcpy(us2->prev_alpha_q_re, us2->alpha_q_re, sizeof(us2->alpha_q_re));
1516  memcpy(us2->prev_alpha_q_im, us2->alpha_q_im, sizeof(us2->alpha_q_im));
1517  }
1518 
1519  for (int ch = 0; ch < nb_channels; ch++) {
1520  SingleChannelElement *sce = &cpe->ch[ch];
1521 
1522  /* Apply TNS, if it hasn't been applied yet. */
1523  if (sce->tns.present && ((nb_channels == 1) || (us->tns_on_lr)))
1524  ac->dsp.apply_tns(sce->coeffs, &sce->tns, &sce->ics, 1);
1525 
1526  if (!sce->ue.core_mode)
1527  ac->oc[1].m4ac.frame_length_short ? ac->dsp.imdct_and_windowing_768(ac, sce) :
1528  ac->dsp.imdct_and_windowing(ac, sce);
1529  }
1530 }
1531 
1532 static const uint8_t mps_fr_nb_bands[8] = {
1533  255 /* Reserved */, 28, 20, 14, 10, 7, 5, 4,
1534 };
1535 
1536 static const uint8_t mps_fr_stride_smg[4] = {
1537  1, 2, 5, 28,
1538 };
1539 
1540 static void decode_tsd(GetBitContext *gb, int *data,
1541  int nb_tr_slots, int nb_slots)
1542 {
1543  int nb_bits = av_log2(nb_slots / (nb_tr_slots + 1));
1544  int s = get_bits(gb, nb_bits);
1545  for (int k = 0; k < nb_slots; k++)
1546  data[k]=0;
1547 
1548  int p = nb_tr_slots + 1;
1549  for (int k = nb_slots - 1; k >= 0; k--) {
1550  if (p > k) {
1551  for (; k >= 0; k--)
1552  data[k] = 1;
1553  break;
1554  }
1555  int64_t c = k - p + 1;
1556  for (int h = 2; h <= p && c <= s; h++) {
1557  c += c*(k-p)/h;
1558  }
1559  if (s >= c) {
1560  s -= c;
1561  data[k] = 1;
1562  p--;
1563  if (!p)
1564  break;
1565  }
1566  }
1567 }
1568 
1571  GetBitContext *gb, int frame_indep_flag)
1572 {
1573  int err;
1574  int nb_bands = mps_fr_nb_bands[ec->mps.freq_res];
1575 
1576  /* Framing info */
1577  mps->framing_type = 0;
1578  mps->nb_param_sets = 2;
1579  if (ec->mps.high_rate_mode) {
1580  mps->framing_type = get_bits1(gb);
1581  mps->nb_param_sets = get_bits(gb, 3) + 1;
1582  }
1583  int param_slot_bits = usac->core_sbr_frame_len_idx == 4 ? 6 : 5;
1584  int nb_time_slots = usac->core_sbr_frame_len_idx == 4 ? 64 : 32;
1585 
1586  if (mps->framing_type)
1587  for (int i = 0; i < mps->nb_param_sets; i++)
1588  mps->param_sets[i] = get_bits(gb, param_slot_bits);
1589 
1590  int indep = frame_indep_flag;
1591  if (!frame_indep_flag)
1592  indep = get_bits1(gb);
1593 
1594  int extend_frame = mps->param_sets[mps->nb_param_sets - 1] !=
1595  (nb_time_slots - 1);
1596 
1597  /* CLD */
1598  err = ff_aac_ec_data_dec(gb, &mps->ott[MPS_CLD], MPS_CLD,
1599  0, 0, nb_bands,
1600  indep, indep, mps->nb_param_sets);
1601  if (err < 0) {
1602  av_log(ac->avctx, AV_LOG_ERROR, "Error parsing OTT CLD data!\n");
1603  return err;
1604  }
1606  0, 0, nb_bands, mps->nb_param_sets,
1607  mps->param_sets, extend_frame);
1608 
1609  /* ICC */
1610  err = ff_aac_ec_data_dec(gb, &mps->ott[MPS_ICC], MPS_ICC, 0, 0, nb_bands,
1611  indep, indep, mps->nb_param_sets);
1612  if (err < 0) {
1613  av_log(ac->avctx, AV_LOG_ERROR, "Error parsing OTT ICC data!\n");
1614  return err;
1615  }
1617  0, 0, nb_bands, mps->nb_param_sets,
1618  mps->param_sets, extend_frame);
1619 
1620  /* IPD */
1621  if (ec->mps.phase_coding) {
1622  if (get_bits1(gb)) {
1623  mps->opd_smoothing_mode = get_bits1(gb);
1624  err = ff_aac_ec_data_dec(gb, &mps->ott[MPS_IPD], MPS_IPD, 0, 0,
1625  ec->mps.otts_bands_phase,
1626  indep, indep, mps->nb_param_sets);
1628  0, 0, nb_bands, mps->nb_param_sets,
1629  mps->param_sets, extend_frame);
1630  if (err < 0) {
1631  av_log(ac->avctx, AV_LOG_ERROR, "Error parsing OTT IPD data!\n");
1632  return err;
1633  }
1634  }
1635  }
1636 
1637  /* SMG data */
1638  memset(mps->smooth_mode, 0, sizeof(mps->smooth_mode));
1639  if (ec->mps.high_rate_mode) {
1640  for (int i = 0; i < mps->nb_param_sets; i++) {
1641  mps->smooth_mode[i] = get_bits(gb, 2);
1642  if (mps->smooth_mode[i] >= 2)
1643  mps->smooth_time[i] = get_bits(gb, 2);
1644  if (mps->smooth_mode[i] >= 3) {
1645  mps->freq_res_stride_smg[i] = get_bits(gb, 2);
1646  int nb_data_bands = (nb_bands - 1);
1647  nb_data_bands /= (mps_fr_stride_smg[mps->freq_res_stride_smg[i]] + 1);
1648  for (int j = 0; j < nb_data_bands; j++)
1649  mps->smg_data[i][j] = get_bits1(gb);
1650  }
1651  }
1652  }
1653 
1654  /* Temp shape data */
1655  mps->tsd_enable = 0;
1656  if (ec->mps.temp_shape_config == 3) {
1657  mps->tsd_enable = get_bits1(gb);
1658  } else if (ec->mps.temp_shape_config) {
1659  mps->temp_shape_enable = get_bits1(gb);
1660  if (mps->temp_shape_enable) {
1661  for (int i = 0; i < 2; i++)
1662  mps->temp_shape_enable_ch[i] = get_bits1(gb);
1663  if (ec->mps.temp_shape_config == 2) {
1664  err = ff_aac_huff_dec_reshape(gb, mps->temp_shape_data, 16);
1665  if (err < 0) {
1666  av_log(ac->avctx, AV_LOG_ERROR,
1667  "Error parsing TSD reshape data!\n");
1668  return err;
1669  }
1670  }
1671  }
1672  }
1673 
1674  /* TSD data */
1675  if (mps->tsd_enable) {
1676  mps->tsd_num_tr_slots = get_bits(gb, param_slot_bits - 1);
1677  int tsd_pos[64];
1678  decode_tsd(gb, tsd_pos, mps->tsd_num_tr_slots, nb_time_slots);
1679  for (int i = 0; i < nb_time_slots; i++) {
1680  mps->tsd_phase_data[i] = 0;
1681  if (tsd_pos[i])
1682  mps->tsd_phase_data[i] = get_bits(gb, 3);
1683  }
1684  }
1685 
1686  return 0;
1687 }
1688 
1691  GetBitContext *gb, int indep_flag, int nb_channels)
1692 {
1693  int ret;
1694  int arith_reset_flag;
1695  AACUsacStereo *us = &che->us;
1696  int core_nb_channels = nb_channels;
1697 
1698  /* Local symbols */
1699  uint8_t global_gain;
1700 
1701  us->common_window = 0;
1702 
1703  for (int ch = 0; ch < core_nb_channels; ch++) {
1704  SingleChannelElement *sce = &che->ch[ch];
1705  AACUsacElemData *ue = &sce->ue;
1706 
1707  sce->tns.present = 0;
1708  ue->tns_data_present = 0;
1709 
1710  ue->core_mode = get_bits1(gb);
1711  }
1712 
1713  if (nb_channels > 1 && ec->stereo_config_index == 1)
1714  core_nb_channels = 1;
1715 
1716  if (core_nb_channels == 2) {
1717  ret = decode_usac_stereo_info(ac, usac, ec, che, gb, indep_flag);
1718  if (ret)
1719  return ret;
1720  }
1721 
1722  for (int ch = 0; ch < core_nb_channels; ch++) {
1723  SingleChannelElement *sce = &che->ch[ch];
1724  IndividualChannelStream *ics = &sce->ics;
1725  AACUsacElemData *ue = &sce->ue;
1726 
1727  if (ue->core_mode) { /* lpd_channel_stream */
1728  ret = ff_aac_ldp_parse_channel_stream(ac, usac, ue, gb);
1729  if (ret < 0)
1730  return ret;
1731  continue;
1732  }
1733 
1734  if ((core_nb_channels == 1) ||
1735  (che->ch[0].ue.core_mode != che->ch[1].ue.core_mode))
1736  ue->tns_data_present = get_bits1(gb);
1737 
1738  /* fd_channel_stream */
1739  global_gain = get_bits(gb, 8);
1740 
1741  ue->noise.level = 0;
1742  if (ec->noise_fill) {
1743  ue->noise.level = get_bits(gb, 3);
1744  ue->noise.offset = get_bits(gb, 5);
1745  }
1746 
1747  if (!us->common_window) {
1748  /* ics_info() */
1749  ics->window_sequence[1] = ics->window_sequence[0];
1750  ics->window_sequence[0] = get_bits(gb, 2);
1751  ics->use_kb_window[1] = ics->use_kb_window[0];
1752  ics->use_kb_window[0] = get_bits1(gb);
1753  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1754  ics->max_sfb = get_bits(gb, 4);
1755  ue->scale_factor_grouping = get_bits(gb, 7);
1756  } else {
1757  ics->max_sfb = get_bits(gb, 6);
1758  }
1759 
1760  ret = setup_sce(ac, sce, usac);
1761  if (ret < 0)
1762  return ret;
1763  }
1764 
1765  if (ec->tw_mdct && !us->common_tw) {
1766  /* tw_data() */
1767  if (get_bits1(gb)) { /* tw_data_present */
1768  /* Time warping is not supported in baseline profile streams. */
1770  "AAC USAC timewarping");
1771  return AVERROR_PATCHWELCOME;
1772  }
1773  }
1774 
1775  ret = decode_usac_scale_factors(ac, sce, gb, global_gain);
1776  if (ret < 0)
1777  return ret;
1778 
1779  if (ue->tns_data_present) {
1780  sce->tns.present = 1;
1781  ret = ff_aac_decode_tns(ac, &sce->tns, gb, ics);
1782  if (ret < 0)
1783  return ret;
1784  }
1785 
1786  /* ac_spectral_data */
1787  arith_reset_flag = indep_flag;
1788  if (!arith_reset_flag)
1789  arith_reset_flag = get_bits1(gb);
1790 
1791  /* Decode coeffs */
1792  memset(&sce->coeffs[0], 0, 1024*sizeof(float));
1793  for (int win = 0; win < ics->num_windows; win++) {
1794  int lg = ics->swb_offset[ics->max_sfb];
1795  int N;
1796  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE)
1797  N = usac->core_frame_len / 8;
1798  else
1799  N = usac->core_frame_len;
1800 
1801  ret = decode_spectrum_ac(ac, sce->coeffs + win*128, gb, &ue->ac,
1802  arith_reset_flag && (win == 0), lg, N);
1803  if (ret < 0)
1804  return ret;
1805  }
1806 
1807  if (get_bits1(gb)) { /* fac_data_present */
1808  const uint16_t len_8 = usac->core_frame_len / 8;
1809  const uint16_t len_16 = usac->core_frame_len / 16;
1810  const uint16_t fac_len = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE ?
1811  len_16 : len_8;
1812  ret = ff_aac_parse_fac_data(ue, gb, 1, fac_len);
1813  if (ret < 0)
1814  return ret;
1815  }
1816  }
1817 
1818  if (ec->sbr.ratio) {
1819  int sbr_ch = nb_channels;
1820  if (nb_channels == 2 &&
1821  !(ec->stereo_config_index == 0 || ec->stereo_config_index == 3))
1822  sbr_ch = 1;
1823 
1824  ret = ff_aac_sbr_decode_usac_data(ac, che, ec, gb, sbr_ch, indep_flag);
1825  if (ret < 0)
1826  return ret;
1827  }
1828 
1829  if (ec->stereo_config_index) {
1830  ret = parse_mps212(ac, usac, &us->mps, ec, gb, indep_flag);
1831  if (ret < 0)
1832  return ret;
1833  }
1834 
1835  spectrum_decode(ac, usac, che, core_nb_channels);
1836 
1837  if (ac->oc[1].m4ac.sbr > 0) {
1838  ac->proc.sbr_apply(ac, che, nb_channels == 2 ? TYPE_CPE : TYPE_SCE, 0,
1839  che->ch[0].output,
1840  che->ch[1].output);
1841  }
1842 
1843  return 0;
1844 }
1845 
1847 {
1848  int ret = 0;
1849  GetBitContext gbc;
1850  OutputConfiguration *oc = &ac->oc[1];
1851  MPEG4AudioConfig *m4ac = &oc->m4ac;
1852  MPEG4AudioConfig m4ac_bak = oc->m4ac;
1853  uint8_t temp_data[512];
1854  uint8_t *tmp_buf = temp_data;
1855  size_t tmp_buf_size = sizeof(temp_data);
1856 
1857  av_unused int crossfade;
1858  int num_preroll_frames;
1859 
1860  int config_len = get_escaped_value(gb, 4, 4, 8);
1861 
1862  /* Implementations are free to pad the config to any length, so use a
1863  * different reader for this. */
1864  gbc = *gb;
1865  ret = ff_aac_usac_config_decode(ac, ac->avctx, &gbc, oc, m4ac->chan_config);
1866  if (ret < 0) {
1867  *m4ac = m4ac_bak;
1868  return ret;
1869  } else {
1870  ac->oc[1].m4ac.chan_config = 0;
1871  }
1872 
1873  /* 7.18.3.3 Bitrate adaption
1874  * If configuration didn't change after applying preroll, continue
1875  * without decoding it. */
1876  if (!memcmp(m4ac, &m4ac_bak, sizeof(m4ac_bak)))
1877  return 0;
1878 
1879  skip_bits_long(gb, config_len*8);
1880 
1881  crossfade = get_bits1(gb); /* applyCrossfade */
1882  skip_bits1(gb); /* reserved */
1883  num_preroll_frames = get_escaped_value(gb, 2, 4, 0); /* numPreRollFrames */
1884 
1885  for (int i = 0; i < num_preroll_frames; i++) {
1886  int got_frame_ptr = 0;
1887  int au_len = get_escaped_value(gb, 16, 16, 0);
1888 
1889  if (au_len*8 > tmp_buf_size) {
1890  uint8_t *tmp2;
1891  tmp_buf = tmp_buf == temp_data ? NULL : tmp_buf;
1892  tmp2 = av_realloc_array(tmp_buf, au_len, 8);
1893  if (!tmp2) {
1894  if (tmp_buf != temp_data)
1895  av_free(tmp_buf);
1896  return AVERROR(ENOMEM);
1897  }
1898  tmp_buf = tmp2;
1899  }
1900 
1901  /* Byte alignment is not guaranteed. */
1902  for (int j = 0; j < au_len; j++)
1903  tmp_buf[j] = get_bits(gb, 8);
1904 
1905  ret = init_get_bits8(&gbc, tmp_buf, au_len);
1906  if (ret < 0)
1907  break;
1908 
1909  ret = ff_aac_usac_decode_frame(ac->avctx, ac, &gbc, &got_frame_ptr);
1910  if (ret < 0)
1911  break;
1912  }
1913 
1914  if (tmp_buf != temp_data)
1915  av_free(tmp_buf);
1916 
1917  return 0;
1918 }
1919 
1921  GetBitContext *gb)
1922 {
1923  uint8_t pl_frag_start = 1;
1924  uint8_t pl_frag_end = 1;
1925  uint32_t len;
1926 
1927  if (!get_bits1(gb)) /* usacExtElementPresent */
1928  return 0;
1929 
1930  if (get_bits1(gb)) { /* usacExtElementUseDefaultLength */
1931  len = e->ext.default_len;
1932  } else {
1933  len = get_bits(gb, 8); /* usacExtElementPayloadLength */
1934  if (len == 255)
1935  len += get_bits(gb, 16) - 2;
1936  }
1937 
1938  if (!len)
1939  return 0;
1940 
1941  if (e->ext.payload_frag) {
1942  pl_frag_start = get_bits1(gb); /* usacExtElementStart */
1943  pl_frag_end = get_bits1(gb); /* usacExtElementStop */
1944  }
1945 
1946  if (pl_frag_start)
1947  e->ext.pl_data_offset = 0;
1948 
1949  /* If an extension starts and ends this packet, we can directly use it below.
1950  * Otherwise, we have to copy it to a buffer and accumulate it. */
1951  if (!(pl_frag_start && pl_frag_end)) {
1952  /* Reallocate the data */
1953  uint8_t *tmp_buf = av_refstruct_alloc_ext(e->ext.pl_data_offset + len,
1955  NULL, NULL);
1956  if (!tmp_buf)
1957  return AVERROR(ENOMEM);
1958 
1959  /* Copy the data over only if we had saved data to begin with */
1960  if (e->ext.pl_buf)
1961  memcpy(tmp_buf, e->ext.pl_buf, e->ext.pl_data_offset);
1962 
1964  e->ext.pl_buf = tmp_buf;
1965 
1966  /* Readout data to a buffer */
1967  for (int i = 0; i < len; i++)
1968  e->ext.pl_buf[e->ext.pl_data_offset + i] = get_bits(gb, 8);
1969  }
1970 
1971  e->ext.pl_data_offset += len;
1972 
1973  if (pl_frag_end) {
1974  int ret = 0;
1975  int start_bits = get_bits_count(gb);
1976  const int pl_len = e->ext.pl_data_offset;
1977  GetBitContext *gb2 = gb;
1978  GetBitContext gbc;
1979  if (!(pl_frag_start && pl_frag_end)) {
1980  ret = init_get_bits8(&gbc, e->ext.pl_buf, pl_len);
1981  if (ret < 0)
1982  return ret;
1983 
1984  gb2 = &gbc;
1985  }
1986 
1987  switch (e->ext.type) {
1988  case ID_EXT_ELE_FILL:
1989  /* Filler elements have no usable payload */
1990  break;
1992  ret = parse_audio_preroll(ac, gb2);
1993  break;
1994  case ID_EXT_ELE_UNI_DRC:
1995  /* uniDrcGain() payload: DRC is not applied, just consume the
1996  * bits via skip_bits_long below. */
1997  break;
1998  default:
1999  /* This should never happen */
2000  av_assert0(0);
2001  }
2003  if (ret < 0)
2004  return ret;
2005 
2006  skip_bits_long(gb, pl_len*8 - (get_bits_count(gb) - start_bits));
2007  }
2008 
2009  return 0;
2010 }
2011 
2013  GetBitContext *gb, int *got_frame_ptr)
2014 {
2015  int ret, is_dmono = 0;
2016  int indep_flag, samples = 0;
2017  int audio_found = 0;
2018  int elem_id[3 /* SCE, CPE, LFE */] = { 0, 0, 0 };
2019  AVFrame *frame = ac->frame;
2020 
2021  int ratio_mult, ratio_dec;
2022  AACUSACConfig *usac = &ac->oc[1].usac;
2023  int sbr_ratio = usac->core_sbr_frame_len_idx == 2 ? 2 :
2024  usac->core_sbr_frame_len_idx == 3 ? 3 :
2025  usac->core_sbr_frame_len_idx == 4 ? 1 :
2026  0;
2027 
2028  if (sbr_ratio == 2) {
2029  ratio_mult = 8;
2030  ratio_dec = 3;
2031  } else if (sbr_ratio == 3) {
2032  ratio_mult = 2;
2033  ratio_dec = 1;
2034  } else if (sbr_ratio == 4) {
2035  ratio_mult = 4;
2036  ratio_dec = 1;
2037  } else {
2038  ratio_mult = 1;
2039  ratio_dec = 1;
2040  }
2041 
2043  ac->oc[1].status, 0);
2044 
2046 
2047  indep_flag = get_bits1(gb);
2048 
2049  for (int i = 0; i < ac->oc[1].usac.nb_elems; i++) {
2050  int layout_id;
2051  int layout_type;
2052  AACUsacElemConfig *e = &ac->oc[1].usac.elems[i];
2053  ChannelElement *che;
2054 
2055  if (e->type == ID_USAC_SCE) {
2056  layout_id = elem_id[0]++;
2057  layout_type = TYPE_SCE;
2058  che = ff_aac_get_che(ac, TYPE_SCE, layout_id);
2059  } else if (e->type == ID_USAC_CPE) {
2060  layout_id = elem_id[1]++;
2061  layout_type = TYPE_CPE;
2062  che = ff_aac_get_che(ac, TYPE_CPE, layout_id);
2063  } else if (e->type == ID_USAC_LFE) {
2064  layout_id = elem_id[2]++;
2065  layout_type = TYPE_LFE;
2066  che = ff_aac_get_che(ac, TYPE_LFE, layout_id);
2067  }
2068 
2069  if (e->type != ID_USAC_EXT && !che) {
2070  av_log(ac->avctx, AV_LOG_ERROR,
2071  "channel element %d.%d is not allocated\n",
2072  layout_type, layout_id);
2073  return AVERROR_INVALIDDATA;
2074  }
2075 
2076  switch (e->type) {
2077  case ID_USAC_LFE:
2078  /* Fallthrough */
2079  case ID_USAC_SCE:
2080  ret = decode_usac_core_coder(ac, &ac->oc[1].usac, e, che, gb,
2081  indep_flag, 1);
2082  if (ret < 0)
2083  return ret;
2084 
2085  audio_found = 1;
2086  che->present = 1;
2087  break;
2088  case ID_USAC_CPE:
2089  ret = decode_usac_core_coder(ac, &ac->oc[1].usac, e, che, gb,
2090  indep_flag, 2);
2091  if (ret < 0)
2092  return ret;
2093 
2094  audio_found = 1;
2095  che->present = 1;
2096  break;
2097  case ID_USAC_EXT:
2098  ret = parse_ext_ele(ac, e, gb);
2099  if (ret < 0)
2100  return ret;
2101  break;
2102  }
2103  }
2104 
2105  if (audio_found)
2106  samples = ac->oc[1].m4ac.frame_length_short ? 768 : 1024;
2107 
2108  samples = (samples * ratio_mult) / ratio_dec;
2109 
2110  if (ac->oc[1].status && audio_found) {
2111  avctx->sample_rate = ac->oc[1].m4ac.ext_sample_rate;
2112  avctx->frame_size = samples;
2113  ac->oc[1].status = OC_LOCKED;
2114  }
2115 
2116  if (!frame->data[0] && samples) {
2117  av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
2118  return AVERROR_INVALIDDATA;
2119  }
2120 
2121  if (samples) {
2122  frame->nb_samples = samples;
2123  frame->sample_rate = avctx->sample_rate;
2124  frame->flags = indep_flag ? AV_FRAME_FLAG_KEY : 0x0;
2125  *got_frame_ptr = 1;
2126  } else {
2127  av_frame_unref(ac->frame);
2128  frame->flags = indep_flag ? AV_FRAME_FLAG_KEY : 0x0;
2129  *got_frame_ptr = 0;
2130  }
2131 
2132  if (samples && ac->target_level) {
2133  int method_val = usac->loudness.input_method_val;
2134  if (method_val < 0) {
2135  if (!ac->warned_loudness_missing) {
2136  av_log(avctx, AV_LOG_WARNING,
2137  "target_level set but no program/anchor loudness "
2138  "measurement available; normalization skipped\n");
2139  ac->warned_loudness_missing = 1;
2140  }
2141  } else {
2142  /* Per ISO/IEC 23003-4 Table A.48: L = -57.75 + 0.25 * μ */
2143  float input_loudness = -57.75f + 0.25f * method_val;
2144  float gain_dB = (float)ac->target_level - input_loudness;
2145  float gain = powf(10.0f, gain_dB / 20.0f);
2146 
2147  for (int ch = 0; ch < frame->ch_layout.nb_channels; ch++)
2148  ac->fdsp->vector_fmul_scalar((float *)frame->extended_data[ch],
2149  (float *)frame->extended_data[ch],
2150  gain, frame->nb_samples);
2151  }
2152  }
2153 
2154  /* for dual-mono audio (SCE + SCE) */
2155  is_dmono = ac->dmono_mode && elem_id[0] == 2 &&
2158  if (is_dmono) {
2159  if (ac->dmono_mode == 1)
2160  frame->data[1] = frame->data[0];
2161  else if (ac->dmono_mode == 2)
2162  frame->data[0] = frame->data[1];
2163  }
2164 
2165  return 0;
2166 }
AACUsacMPSData::nb_param_sets
int nb_param_sets
Definition: aacdec.h:242
MAX_ELEM_ID
#define MAX_ELEM_ID
Definition: aac.h:34
AACUsacElemConfig::stereo_config_index
uint8_t stereo_config_index
Definition: aacdec.h:339
AVCodecContext::frame_size
int frame_size
Number of samples per channel in an audio frame.
Definition: avcodec.h:1068
ff_usac_noise_fill_start_offset
const uint8_t ff_usac_noise_fill_start_offset[2][2]
Definition: aactab.c:1999
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:280
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
AACUSACConfig::input_method_val
int input_method_val
Raw bsMethodValue (μ) of the program/anchor-loudness measurement selected for normalization at config...
Definition: aacdec.h:414
state
static struct @590 state
r
const char * r
Definition: vf_curves.c:127
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
decode_usac_stereo_info
static int decode_usac_stereo_info(AACDecContext *ac, AACUSACConfig *usac, AACUsacElemConfig *ec, ChannelElement *cpe, GetBitContext *gb, int indep_flag)
Definition: aacdec_usac.c:1027
aacdec_ac.h
AACUSACConfig
Definition: aacdec.h:395
ID_EXT_ELE_SAOC
@ ID_EXT_ELE_SAOC
Definition: aacdec.h:91
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:1040
AACUSACConfig::stream_identifier
uint16_t stream_identifier
Definition: aacdec.h:398
cb
static double cb(void *priv, double x, double y)
Definition: vf_geq.c:247
AACUSACConfig::nb_album
uint8_t nb_album
Definition: aacdec.h:404
spectrum_decode
static void spectrum_decode(AACDecContext *ac, AACUSACConfig *usac, ChannelElement *cpe, int nb_channels)
Definition: aacdec_usac.c:1466
AACUsacElemConfig::payload_frag
uint8_t payload_frag
Definition: aacdec.h:381
AACUsacMPSData::temp_shape_data
int16_t temp_shape_data[MPS_MAX_TIME_SLOTS]
Definition: aacdec.h:260
ff_aac_usac_config_decode
int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, OutputConfiguration *oc, int channel_config)
Definition: aacdec_usac.c:509
AV_CHAN_WIDE_LEFT
@ AV_CHAN_WIDE_LEFT
Definition: channel_layout.h:72
ID_USAC_LFE
@ ID_USAC_LFE
Definition: aacdec.h:78
get_bits_long
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:424
ff_aac_ac_lsb_cdfs
const uint16_t ff_aac_ac_lsb_cdfs[3][4]
Definition: aactab.c:1331
int64_t
long long int64_t
Definition: coverity.c:34
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:254
AVChannelLayout::map
AVChannelCustom * map
This member must be used when the channel order is AV_CHANNEL_ORDER_CUSTOM.
Definition: channel_layout.h:370
AACUsacElemConfig::tw_mdct
uint8_t tw_mdct
Definition: aacdec.h:336
aacsbr.h
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:466
AV_CHAN_TOP_SURROUND_LEFT
@ AV_CHAN_TOP_SURROUND_LEFT
+110 degrees, Lvs, TpLS
Definition: channel_layout.h:84
aacdec_usac_mps212.h
mps_fr_stride_smg
static const uint8_t mps_fr_stride_smg[4]
Definition: aacdec_usac.c:1536
complex_stereo_downmix_cur
static void complex_stereo_downmix_cur(AACDecContext *ac, ChannelElement *cpe, float *dmix_re)
Definition: aacdec_usac.c:1280
MPS_ICC
@ MPS_ICC
Definition: aacdec_usac_mps212.h:31
b
#define b
Definition: input.c:43
AACUsacMPSData
Definition: aacdec.h:239
data
const char data[16]
Definition: mxf.c:149
aacdec_usac.h
TemporalNoiseShaping::present
int present
Definition: aacdec.h:192
ue
#define ue(name, range_min, range_max)
Definition: cbs_h264.c:61
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:226
AACUsacElemData::scale_factor_grouping
uint8_t scale_factor_grouping
Definition: aacdec.h:134
AACUSACConfig::nb_info
uint8_t nb_info
Definition: aacdec.h:406
AACDecDSP::apply_tns
void(* apply_tns)(void *_coef_param, TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
Definition: aacdec.h:472
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
AACDecContext::proc
AACDecProc proc
Definition: aacdec.h:504
AACUsacElemConfig::bs_pvc
uint8_t bs_pvc
Definition: aacdec.h:346
c1
static const uint64_t c1
Definition: murmur3.c:52
AACUsacStereo::pred_dir
uint8_t pred_dir
Definition: aacdec.h:276
AACUsacElemData::tns_data_present
uint8_t tns_data_present
Definition: aacdec.h:135
ChannelElement::ch
SingleChannelElement ch[2]
Definition: aacdec.h:302
ff_aac_sample_rate_idx
static int ff_aac_sample_rate_idx(int rate)
Definition: aac.h:110
AACUsacElemConfig::dflt
struct AACUsacElemConfig::@29::@33 dflt
ff_swb_offset_128
const uint16_t *const ff_swb_offset_128[]
Definition: aactab.c:1940
ChannelElement::present
int present
Definition: aacdec.h:297
ID_CONFIG_EXT_STREAM_ID
@ ID_CONFIG_EXT_STREAM_ID
Definition: aacdec.h:85
ID_USAC_EXT
@ ID_USAC_EXT
Definition: aacdec.h:79
win
static float win(SuperEqualizerContext *s, float n, int N)
Definition: af_superequalizer.c:119
AACDecContext::dmono_mode
int dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
Definition: aacdec.h:573
MPEG4AudioConfig
Definition: mpeg4audio.h:29
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:383
AACUsacElemConfig::pseudo_lr
uint8_t pseudo_lr
Definition: aacdec.h:375
IndividualChannelStream::num_swb
int num_swb
number of scalefactor window bands
Definition: aacdec.h:178
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:337
AV_CHAN_SURROUND_DIRECT_LEFT
@ AV_CHAN_SURROUND_DIRECT_LEFT
Definition: channel_layout.h:74
SingleChannelElement::coeffs
float coeffs[1024]
coefficients for IMDCT, maybe processed
Definition: aacenc.h:119
AACUsacElemData::core_mode
uint8_t core_mode
Definition: aacdec.h:133
mpeg4audio.h
AACUsacElemConfig::ext
struct AACUsacElemConfig::@31 ext
AACArith
Definition: aacdec_ac.h:34
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:1055
AV_CHAN_TOP_BACK_RIGHT
@ AV_CHAN_TOP_BACK_RIGHT
Definition: channel_layout.h:67
parse_ext_ele
static int parse_ext_ele(AACDecContext *ac, AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:1920
ID_EXT_ELE_AUDIOPREROLL
@ ID_EXT_ELE_AUDIOPREROLL
Definition: aacdec.h:92
AACUSACConfig::loudness
struct AACUSACConfig::@35 loudness
TYPE_CPE
@ TYPE_CPE
Definition: aac.h:45
SFB_PER_PRED_BAND
#define SFB_PER_PRED_BAND
Definition: aacdec_usac.c:37
GetBitContext
Definition: get_bits.h:109
decode_spectrum_ac
static int decode_spectrum_ac(AACDecContext *s, float coef[1024], GetBitContext *gb, AACArithState *state, int reset, uint16_t len, uint16_t N)
Decode and dequantize arithmetically coded, uniformly quantized value.
Definition: aacdec_usac.c:778
AACUsacElemConfig::high_rate_mode
uint8_t high_rate_mode
Definition: aacdec.h:368
val
static double val(void *priv, double ch)
Definition: aeval.c:77
OutputConfiguration::status
enum OCStatus status
Definition: aacdec.h:423
type
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 type
Definition: writing_filters.txt:86
AACUsacElemConfig::freq_res
uint8_t freq_res
Definition: aacdec.h:364
av_unused
#define av_unused
Definition: attributes.h:164
refstruct.h
SingleChannelElement::ics
IndividualChannelStream ics
Definition: aacdec.h:218
AACUsacMPSData::smooth_time
int smooth_time[MPS_MAX_PARAM_SETS]
Definition: aacdec.h:252
cbrt
#define cbrt
Definition: tablegen.h:35
AACUsacElemConfig::pl_data_offset
uint32_t pl_data_offset
Definition: aacdec.h:383
ID_CONFIG_EXT_FILL
@ ID_CONFIG_EXT_FILL
Definition: aacdec.h:83
AACUsacElemConfig
Definition: aacdec.h:333
ff_aac_ec_data_dec
int ff_aac_ec_data_dec(GetBitContext *gb, AACMPSLosslessData *ld, enum AACMPSDataType data_type, int default_val, int start_band, int end_band, int frame_indep_flag, int indep_flag, int nb_param_sets)
Definition: aacdec_usac_mps212.c:599
AVChannelLayout::u
union AVChannelLayout::@518 u
Details about which channels are present in this layout.
AACUsacMPSData::param_sets
int param_sets[MPS_MAX_PARAM_SETS]
Definition: aacdec.h:243
complex_stereo_interpolate_imag
static void complex_stereo_interpolate_imag(float *im, float *re, const float f[7], int len, int factor_even, int factor_odd)
Definition: aacdec_usac.c:1320
AV_CHAN_BOTTOM_FRONT_LEFT
@ AV_CHAN_BOTTOM_FRONT_LEFT
Definition: channel_layout.h:80
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
AACDecDSP::dequant_scalefactors
void(* dequant_scalefactors)(SingleChannelElement *sce)
Definition: aacdec.h:466
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:544
AACUsacElemConfig::residual_bands
uint8_t residual_bands
Definition: aacdec.h:374
AV_FRAME_FLAG_KEY
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition: frame.h:681
OC_GLOBAL_HDR
@ OC_GLOBAL_HDR
Output configuration set in a global header but not yet locked.
Definition: aacdec.h:57
float
float
Definition: af_crystalizer.c:122
parse_mps212
static int parse_mps212(AACDecContext *ac, AACUSACConfig *usac, AACUsacMPSData *mps, AACUsacElemConfig *ec, GetBitContext *gb, int frame_indep_flag)
Definition: aacdec_usac.c:1569
s
#define s(width, name)
Definition: cbs_vp9.c:198
AACUsacElemConfig::harmonic_sbr
uint8_t harmonic_sbr
Definition: aacdec.h:344
AACDecDSP::apply_mid_side_stereo
void(* apply_mid_side_stereo)(AACDecContext *ac, ChannelElement *cpe)
Definition: aacdec.h:468
AACUSACDRCExt
AACUSACDRCExt
Definition: aacdec.h:101
av_realloc_array
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:217
AVChannelCustom
An AVChannelCustom defines a single channel within a custom order layout.
Definition: channel_layout.h:283
ff_aac_ac_finish
void ff_aac_ac_finish(AACArithState *state, int offset, int N)
Definition: aacdec_ac.c:196
g
const char * g
Definition: vf_curves.c:128
AACUsacMPSData::tsd_phase_data
int tsd_phase_data[64]
Definition: aacdec.h:263
AACUsacMPSData::tsd_num_tr_slots
int tsd_num_tr_slots
Definition: aacdec.h:262
EIGHT_SHORT_SEQUENCE
@ EIGHT_SHORT_SEQUENCE
Definition: aac.h:66
info
MIPS optimizations info
Definition: mips.txt:2
AACUsacElemConfig::mps
struct AACUsacElemConfig::@30 mps
decode_usac_scale_factors
static int decode_usac_scale_factors(AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb, uint8_t global_gain)
Definition: aacdec_usac.c:745
AV_CHAN_SIDE_RIGHT
@ AV_CHAN_SIDE_RIGHT
Definition: channel_layout.h:60
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
decode_tsd
static void decode_tsd(GetBitContext *gb, int *data, int nb_tr_slots, int nb_slots)
Definition: aacdec_usac.c:1540
av_refstruct_alloc_ext
static void * av_refstruct_alloc_ext(size_t size, unsigned flags, void *opaque, void(*free_cb)(AVRefStructOpaque opaque, void *obj))
A wrapper around av_refstruct_alloc_ext_c() for the common case of a non-const qualified opaque.
Definition: refstruct.h:94
ff_aac_get_che
ChannelElement * ff_aac_get_che(AACDecContext *ac, int type, int elem_id)
Definition: aacdec.c:623
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
AACUsacMPSData::tsd_enable
bool tsd_enable
Definition: aacdec.h:257
decode_drc_instructions_basic
static void decode_drc_instructions_basic(AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:312
AACUsacElemData
Definition: aacdec.h:132
AACUSACConfig::core_sbr_frame_len_idx
uint8_t core_sbr_frame_len_idx
Definition: aacdec.h:396
IndividualChannelStream
Individual Channel Stream.
Definition: aacdec.h:169
UNIDRCLOUDEXT_TERM
@ UNIDRCLOUDEXT_TERM
Definition: aacdec.h:97
ID_USAC_CPE
@ ID_USAC_CPE
Definition: aacdec.h:77
SCALE_DIFF_ZERO
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference
Definition: aac.h:95
AV_CHAN_TOP_SIDE_LEFT
@ AV_CHAN_TOP_SIDE_LEFT
Definition: channel_layout.h:77
ff_tns_max_bands_usac_1024
const uint8_t ff_tns_max_bands_usac_1024[]
Definition: aactab.c:1978
AACDecContext::fdsp
AVFloatDSPContext * fdsp
Definition: aacdec.h:555
ff_aac_usac_decode_frame
int ff_aac_usac_decode_frame(AVCodecContext *avctx, AACDecContext *ac, GetBitContext *gb, int *got_frame_ptr)
Definition: aacdec_usac.c:2012
AV_CHAN_TOP_SIDE_RIGHT
@ AV_CHAN_TOP_SIDE_RIGHT
Definition: channel_layout.h:78
ff_aac_ac_init
void ff_aac_ac_init(AACArith *ac, GetBitContext *gb)
Definition: aacdec_ac.c:103
if
if(ret)
Definition: filter_design.txt:179
decode_loudness_info
static int decode_loudness_info(AACDecContext *ac, AACUSACLoudnessInfo *info, GetBitContext *gb)
Definition: aacdec_usac.c:98
AV_CHAN_SIDE_SURROUND_LEFT
@ AV_CHAN_SIDE_SURROUND_LEFT
+90 degrees, Lss, SiL
Definition: channel_layout.h:82
AACDecProc::sbr_apply
void(* sbr_apply)(AACDecContext *ac, ChannelElement *che, int id_aac, int fl960, void *L, void *R)
Definition: aacdec.h:457
decode_drc_channel_layout
static int decode_drc_channel_layout(GetBitContext *gb)
Definition: aacdec_usac.c:288
ff_aac_ldp_parse_channel_stream
int ff_aac_ldp_parse_channel_stream(AACDecContext *ac, AACUSACConfig *usac, AACUsacElemData *ce, GetBitContext *gb)
Definition: aacdec_lpd.c:112
NULL
#define NULL
Definition: coverity.c:32
AACDecContext::target_level
int target_level
Target output loudness in dBFS, used for xHE-AAC loudness normalization based on the parsed loudnessI...
Definition: aacdec.h:582
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
AACUsacMPSData::ott
AACMPSLosslessData ott[MPS_ELE_NB]
Definition: aacdec.h:246
AACUsacElemData::seed
unsigned int seed
Definition: aacdec.h:153
AACUSACConfig::core_frame_len
uint16_t core_frame_len
Definition: aacdec.h:397
AVFloatDSPContext::vector_fmul_scalar
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
Definition: float_dsp.h:85
IndividualChannelStream::use_kb_window
uint8_t use_kb_window[2]
If set, use Kaiser-Bessel window, otherwise use a sine window.
Definition: aacdec.h:172
ff_aac_num_swb_128
const uint8_t ff_aac_num_swb_128[]
Definition: aactab.c:169
IndividualChannelStream::num_window_groups
int num_window_groups
Definition: aacdec.h:173
ff_tns_max_bands_usac_128
const uint8_t ff_tns_max_bands_usac_128[]
Definition: aactab.c:1994
AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL
#define AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL
The specified retype target order is ignored and the simplest possible (canonical) order is used for ...
Definition: channel_layout.h:721
AV_CHAN_TOP_BACK_CENTER
@ AV_CHAN_TOP_BACK_CENTER
Definition: channel_layout.h:66
AV_REFSTRUCT_FLAG_NO_ZEROING
#define AV_REFSTRUCT_FLAG_NO_ZEROING
If this flag is set in av_refstruct_alloc_ext_c(), the object will not be initially zeroed.
Definition: refstruct.h:67
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:391
MPEG4AudioConfig::sampling_index
int sampling_index
Definition: mpeg4audio.h:31
ChannelElement::ms_mask
uint8_t ms_mask[128]
Set if mid/side stereo is used for each scalefactor window band.
Definition: aacdec.h:300
mps_fr_nb_bands
static const uint8_t mps_fr_nb_bands[8]
Definition: aacdec_usac.c:1532
parse_audio_preroll
static int parse_audio_preroll(AACDecContext *ac, GetBitContext *gb)
Definition: aacdec_usac.c:1846
get_escaped_value
static uint32_t get_escaped_value(GetBitContext *gb, int nb1, int nb2, int nb3)
Definition: aacdec_usac.c:39
aactab.h
AV_CHAN_BOTTOM_FRONT_RIGHT
@ AV_CHAN_BOTTOM_FRONT_RIGHT
Definition: channel_layout.h:81
AACUsacElemConfig::noise_fill
uint8_t noise_fill
Definition: aacdec.h:337
AV_CHAN_TOP_CENTER
@ AV_CHAN_TOP_CENTER
Definition: channel_layout.h:61
AAC_CHANNEL_FRONT
@ AAC_CHANNEL_FRONT
Definition: aac.h:82
AACUsacElemConfig::temp_shape_config
uint8_t temp_shape_config
Definition: aacdec.h:366
seed
static unsigned int seed
Definition: videogen.c:78
get_vlc2
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:645
decode_usac_stereo_cplx
static int decode_usac_stereo_cplx(AACDecContext *ac, AACUsacStereo *us, ChannelElement *cpe, GetBitContext *gb, int num_window_groups, int prev_num_window_groups, int indep_flag)
Definition: aacdec_usac.c:873
ff_aac_ac_decode
uint16_t ff_aac_ac_decode(AACArith *ac, GetBitContext *gb, const uint16_t *cdf, uint16_t cdf_len)
Definition: aacdec_ac.c:110
spectrum_scale
static void spectrum_scale(AACDecContext *ac, SingleChannelElement *sce, AACUsacElemData *ue)
Definition: aacdec_usac.c:1219
AACUsacStereo
Definition: aacdec.h:266
OC_LOCKED
@ OC_LOCKED
Output configuration locked in place.
Definition: aacdec.h:58
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
AV_CHAN_FRONT_RIGHT_OF_CENTER
@ AV_CHAN_FRONT_RIGHT_OF_CENTER
Definition: channel_layout.h:57
IndividualChannelStream::prev_num_window_groups
int prev_num_window_groups
Previous frame's number of window groups.
Definition: aacdec.h:174
AACUsacElemConfig::default_len
uint32_t default_len
Definition: aacdec.h:382
OutputConfiguration::layout_map_tags
int layout_map_tags
Definition: aacdec.h:421
SingleChannelElement::ue
AACUsacElemData ue
USAC element data.
Definition: aacdec.h:219
AV_CHAN_FRONT_RIGHT
@ AV_CHAN_FRONT_RIGHT
Definition: channel_layout.h:51
AV_CHAN_FRONT_CENTER
@ AV_CHAN_FRONT_CENTER
Definition: channel_layout.h:52
OutputConfiguration::layout_map
uint8_t layout_map[MAX_ELEM_ID *4][3]
Definition: aacdec.h:420
AACUsacMPSData::smg_data
bool smg_data[MPS_MAX_PARAM_SETS][MPS_MAX_PARAM_BANDS]
Definition: aacdec.h:254
AACUsacElemConfig::sbr
struct AACUsacElemConfig::@29 sbr
AACUsacElemConfig::bs_intertes
uint8_t bs_intertes
Definition: aacdec.h:345
IndividualChannelStream::window_sequence
enum WindowSequence window_sequence[2]
Definition: aacdec.h:171
AACUsacMPSData::ott_idx
int ott_idx[MPS_ELE_NB][MPS_MAX_PARAM_SETS][MPS_MAX_PARAM_BANDS]
Definition: aacdec.h:247
AACDecContext::dsp
AACDecDSP dsp
Definition: aacdec.h:503
f
f
Definition: af_crystalizer.c:122
ff_swb_offset_1024
const uint16_t *const ff_swb_offset_1024[]
Definition: aactab.c:1900
AACUsacElemConfig::otts_bands_phase_present
uint8_t otts_bands_phase_present
Definition: aacdec.h:371
AACUsacMPSData::framing_type
int framing_type
Definition: aacdec.h:241
powf
#define powf(x, y)
Definition: libm.h:52
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:319
ONLY_LONG_SEQUENCE
@ ONLY_LONG_SEQUENCE
Definition: aac.h:64
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
AACDecDSP::imdct_and_windowing
void(* imdct_and_windowing)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:487
ChannelElement::max_sfb_ste
uint8_t max_sfb_ste
(USAC) Maximum of both max_sfb values
Definition: aacdec.h:299
AV_CHAN_LOW_FREQUENCY
@ AV_CHAN_LOW_FREQUENCY
Definition: channel_layout.h:53
ESC_BT
@ ESC_BT
Spectral data are coded with an escape sequence.
Definition: aac.h:73
SingleChannelElement::sfo
int sfo[128]
scalefactor offsets
Definition: aacdec.h:222
AACDecContext::warned_loudness_missing
int warned_loudness_missing
Definition: aacdec.h:583
MPS_CLD
@ MPS_CLD
Definition: aacdec_usac_mps212.h:30
AV_CHAN_BACK_RIGHT
@ AV_CHAN_BACK_RIGHT
Definition: channel_layout.h:55
avpriv_report_missing_feature
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
AV_CHAN_SIDE_LEFT
@ AV_CHAN_SIDE_LEFT
Definition: channel_layout.h:59
ChannelElement::us
AACUsacStereo us
Definition: aacdec.h:306
OutputConfiguration
Definition: aacdec.h:418
ff_aac_usac_mdst_filt_cur
const float ff_aac_usac_mdst_filt_cur[4][4][7]
Definition: aactab.c:3885
AACUsacMPSData::freq_res_stride_smg
int freq_res_stride_smg[MPS_MAX_PARAM_SETS]
Definition: aacdec.h:253
MPS_IPD
@ MPS_IPD
Definition: aacdec_usac_mps212.h:32
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
av_channel_layout_retype
int av_channel_layout_retype(AVChannelLayout *channel_layout, enum AVChannelOrder order, int flags)
Change the AVChannelOrder of a channel layout.
Definition: channel_layout.c:887
AV_CHAN_TOP_FRONT_RIGHT
@ AV_CHAN_TOP_FRONT_RIGHT
Definition: channel_layout.h:64
AV_CHANNEL_ORDER_NATIVE
@ AV_CHANNEL_ORDER_NATIVE
The native channel order, i.e.
Definition: channel_layout.h:125
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:416
ff_aac_ac_get_context
uint32_t ff_aac_ac_get_context(AACArithState *state, uint32_t c, int i, int N)
Definition: aacdec_ac.c:57
AV_CHAN_FRONT_LEFT_OF_CENTER
@ AV_CHAN_FRONT_LEFT_OF_CENTER
Definition: channel_layout.h:56
N
#define N
Definition: af_mcompand.c:54
AACUsacElemData::noise
struct AACUsacElemData::@20 noise
SingleChannelElement::band_type
enum BandType band_type[128]
band types
Definition: aacdec.h:221
AACUsacElemConfig::fixed_gain
uint8_t fixed_gain
Definition: aacdec.h:365
ID_CONFIG_EXT_LOUDNESS_INFO
@ ID_CONFIG_EXT_LOUDNESS_INFO
Definition: aacdec.h:84
unary.h
SingleChannelElement::output
float * output
PCM output.
Definition: aacdec.h:234
av_channel_layout_compare
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
Definition: channel_layout.c:811
ff_aac_ac_get_pk
uint32_t ff_aac_ac_get_pk(uint32_t c)
Definition: aacdec_ac.c:73
av_channel_layout_custom_init
int av_channel_layout_custom_init(AVChannelLayout *channel_layout, int nb_channels)
Initialize a custom channel layout with the specified number of channels.
Definition: channel_layout.c:233
av_refstruct_unref
void av_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
Definition: refstruct.c:120
AVChannel
AVChannel
Definition: channel_layout.h:47
apply_noise_fill
static void apply_noise_fill(AACDecContext *ac, SingleChannelElement *sce, AACUsacElemData *ue)
Definition: aacdec_usac.c:1177
AV_CHAN_TOP_SURROUND_RIGHT
@ AV_CHAN_TOP_SURROUND_RIGHT
-110 degrees, Rvs, TpRS
Definition: channel_layout.h:85
RawDataBlockType
RawDataBlockType
Definition: aac.h:43
AV_CHAN_SURROUND_DIRECT_RIGHT
@ AV_CHAN_SURROUND_DIRECT_RIGHT
Definition: channel_layout.h:75
SingleChannelElement
Single Channel Element - used for both SCE and LFE elements.
Definition: aacdec.h:217
ff_swb_offset_768
const uint16_t *const ff_swb_offset_768[]
Definition: aactab.c:1916
decode_usac_element_pair
static int decode_usac_element_pair(AACDecContext *ac, AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:236
IndividualChannelStream::num_windows
int num_windows
Definition: aacdec.h:179
OutputConfiguration::usac
AACUSACConfig usac
Definition: aacdec.h:424
AACUsacElemConfig::drc
struct AACUsacElemConfig::@32 drc
LONG_STOP_SEQUENCE
@ LONG_STOP_SEQUENCE
Definition: aac.h:67
usac_ch_pos_to_av
static enum AVChannel usac_ch_pos_to_av[64]
Definition: aacdec_usac.c:53
ChannelElement
channel element - generic struct for SCE/CPE/CCE/LFE
Definition: aacdec.h:296
IndividualChannelStream::swb_offset
const uint16_t * swb_offset
table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular wind...
Definition: aacdec.h:177
decode_drc_config
static int decode_drc_config(AACDecContext *ac, AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:339
ff_aac_parse_fac_data
int ff_aac_parse_fac_data(AACUsacElemData *ce, GetBitContext *gb, int use_gain, int len)
Definition: aacdec_lpd.c:93
ff_aac_usac_samplerate
const int ff_aac_usac_samplerate[32]
Definition: aactab.c:3877
AACUsacElemConfig::type
enum AACUsacElem type
Definition: aacdec.h:334
TYPE_LFE
@ TYPE_LFE
Definition: aac.h:47
av_frame_unref
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:496
complex_stereo_get_filter
static const float * complex_stereo_get_filter(ChannelElement *cpe, int is_prev)
Definition: aacdec_usac.c:1426
MPEG4AudioConfig::chan_config
int chan_config
Definition: mpeg4audio.h:33
AACUsacElemConfig::decorr_config
uint8_t decorr_config
Definition: aacdec.h:367
ff_aac_ac_update_context
void ff_aac_ac_update_context(AACArithState *state, int idx, uint16_t a, uint16_t b)
Definition: aacdec_ac.c:91
TYPE_SCE
@ TYPE_SCE
Definition: aac.h:44
len
int len
Definition: vorbis_enc_data.h:426
filt
static const int8_t filt[NUMTAPS *2]
Definition: af_earwax.c:40
complex_stereo_downmix_prev
static void complex_stereo_downmix_prev(AACDecContext *ac, ChannelElement *cpe, float *dmix_re)
Definition: aacdec_usac.c:1249
AACDecContext::oc
OutputConfiguration oc[2]
Definition: aacdec.h:585
MPEG4AudioConfig::ext_sample_rate
int ext_sample_rate
Definition: mpeg4audio.h:37
IndividualChannelStream::tns_max_bands
int tns_max_bands
Definition: aacdec.h:180
ff_aac_num_swb_96
const uint8_t ff_aac_num_swb_96[]
Definition: aactab.c:173
ff_aac_ac_map_process
uint32_t ff_aac_ac_map_process(AACArithState *state, int reset, int N)
Definition: aacdec_ac.c:25
AACUSACConfig::nb_elems
int nb_elems
Definition: aacdec.h:401
ID_EXT_ELE_UNI_DRC
@ ID_EXT_ELE_UNI_DRC
Definition: aacdec.h:93
AAC_CHANNEL_LFE
@ AAC_CHANNEL_LFE
Definition: aac.h:85
decode_usac_sbr_data
static int decode_usac_sbr_data(AACDecContext *ac, AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:184
ret
ret
Definition: filter_design.txt:187
ff_aac_num_swb_1024
const uint8_t ff_aac_num_swb_1024[]
Definition: aactab.c:149
AACUsacMPSData::temp_shape_enable
bool temp_shape_enable
Definition: aacdec.h:258
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:265
AACDecContext::frame
struct AVFrame * frame
Definition: aacdec.h:506
decode_usac_element_core
static void decode_usac_element_core(AACUsacElemConfig *e, GetBitContext *gb, int sbr_ratio)
Definition: aacdec_usac.c:227
LONG_START_SEQUENCE
@ LONG_START_SEQUENCE
Definition: aac.h:65
UNIDRCLOUDEXT_EQ
@ UNIDRCLOUDEXT_EQ
Definition: aacdec.h:98
id
enum AVCodecID id
Definition: dts2pts.c:578
AACUsacMPSData::smooth_mode
int smooth_mode[MPS_MAX_PARAM_SETS]
Definition: aacdec.h:251
aacdec_lpd.h
AV_CHAN_BACK_CENTER
@ AV_CHAN_BACK_CENTER
Definition: channel_layout.h:58
SingleChannelElement::tns
TemporalNoiseShaping tns
Definition: aacdec.h:220
U
#define U(x)
Definition: vpx_arith.h:37
AACDecContext
main AAC decoding context
Definition: aacdec.h:499
AACUSACConfig::info
AACUSACLoudnessInfo info[64]
Definition: aacdec.h:407
AVCodecContext
main external API structure.
Definition: avcodec.h:443
c2
static const uint64_t c2
Definition: murmur3.c:53
AACUsacMPSData::temp_shape_enable_ch
bool temp_shape_enable_ch[2]
Definition: aacdec.h:259
AACUsacElemConfig::loudness
struct AACUsacElemConfig::@32::@34 loudness
AV_CHAN_LOW_FREQUENCY_2
@ AV_CHAN_LOW_FREQUENCY_2
Definition: channel_layout.h:76
AACDecContext::avctx
struct AVCodecContext * avctx
Definition: aacdec.h:501
AV_CHAN_TOP_BACK_LEFT
@ AV_CHAN_TOP_BACK_LEFT
Definition: channel_layout.h:65
noise_random_sign
static float noise_random_sign(unsigned int *seed)
Definition: aacdec_usac.c:1169
apply_complex_stereo
static void apply_complex_stereo(AACDecContext *ac, ChannelElement *cpe)
Definition: aacdec_usac.c:1374
aacdec_tab.h
setup_sce
static int setup_sce(AACDecContext *ac, SingleChannelElement *sce, AACUSACConfig *usac)
Definition: aacdec_usac.c:964
AACUSACLoudnessInfo
Definition: aacdec.h:309
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1636
av_channel_layout_uninit
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
Definition: channel_layout.c:443
cm
#define cm
Definition: dvbsubdec.c:40
AACUsacElemConfig::env_quant_mode
uint8_t env_quant_mode
Definition: aacdec.h:376
AV_CHAN_BACK_LEFT
@ AV_CHAN_BACK_LEFT
Definition: channel_layout.h:54
MPEG4AudioConfig::sbr
int sbr
-1 implicit, 1 presence
Definition: mpeg4audio.h:34
samples
Filter the word “frame” indicates either a video frame or a group of audio samples
Definition: filter_design.txt:8
ff_aac_decode_tns
int ff_aac_decode_tns(AACDecContext *ac, TemporalNoiseShaping *tns, GetBitContext *gb, const IndividualChannelStream *ics)
Decode Temporal Noise Shaping data; reference: table 4.48.
Definition: aacdec.c:1678
Windows::Graphics::DirectX::Direct3D11::p
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
Definition: vsrc_gfxcapture_winrt.hpp:53
ff_aac_usac_reset_state
int ff_aac_usac_reset_state(AACDecContext *ac, OutputConfiguration *oc)
Definition: aacdec_usac.c:450
AV_CHAN_BOTTOM_FRONT_CENTER
@ AV_CHAN_BOTTOM_FRONT_CENTER
Definition: channel_layout.h:79
AACUsacElemConfig::ratio
int ratio
Definition: aacdec.h:342
decode_loudness_set
static int decode_loudness_set(AACDecContext *ac, AACUSACConfig *usac, GetBitContext *gb)
Definition: aacdec_usac.c:145
av_channel_layout_copy
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
Definition: channel_layout.c:450
OutputConfiguration::m4ac
MPEG4AudioConfig m4ac
Definition: aacdec.h:419
ff_aac_map_index_data
int ff_aac_map_index_data(AACMPSLosslessData *ld, enum AACMPSDataType data_type, int dst_idx[MPS_MAX_PARAM_SETS][MPS_MAX_PARAM_BANDS], int default_value, int start_band, int stop_band, int nb_param_sets, const int *param_set_idx, int extend_frame)
Definition: aacdec_usac_mps212.c:786
AV_CHAN_TOP_FRONT_CENTER
@ AV_CHAN_TOP_FRONT_CENTER
Definition: channel_layout.h:63
AACUSACConfig::elems
AACUsacElemConfig elems[MAX_ELEM_ID]
Definition: aacdec.h:400
us
#define us(width, name, range_min, range_max, subs,...)
Definition: cbs_apv.c:70
skip_drc_downmix_instructions
static void skip_drc_downmix_instructions(GetBitContext *gb, int base_channel_count)
Definition: aacdec_usac.c:300
AV_CHAN_SIDE_SURROUND_RIGHT
@ AV_CHAN_SIDE_SURROUND_RIGHT
-90 degrees, Rss, SiR
Definition: channel_layout.h:83
mem.h
FF_AAC_AC_ESCAPE
#define FF_AAC_AC_ESCAPE
Definition: aacdec_ac.h:40
OutputConfiguration::ch_layout
AVChannelLayout ch_layout
Definition: aacdec.h:422
AV_CHAN_WIDE_RIGHT
@ AV_CHAN_WIDE_RIGHT
Definition: channel_layout.h:73
ff_aac_sbr_decode_usac_data
int ff_aac_sbr_decode_usac_data(AACDecContext *ac, ChannelElement *che, AACUsacElemConfig *ue, GetBitContext *gb, int sbr_ch, int indep_flag)
Decode frame SBR data, USAC.
Definition: aacsbr_template.c:1209
decode_usac_core_coder
static int decode_usac_core_coder(AACDecContext *ac, AACUSACConfig *usac, AACUsacElemConfig *ec, ChannelElement *che, GetBitContext *gb, int indep_flag, int nb_channels)
Definition: aacdec_usac.c:1689
AACDecDSP::imdct_and_windowing_768
void(* imdct_and_windowing_768)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:488
MPEG4AudioConfig::frame_length_short
int frame_length_short
Definition: mpeg4audio.h:41
ID_EXT_ELE_MPEGS
@ ID_EXT_ELE_MPEGS
Definition: aacdec.h:90
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AACUsacMPSData::opd_smoothing_mode
bool opd_smoothing_mode
Definition: aacdec.h:248
ff_aac_ac_msb_cdfs
const uint16_t ff_aac_ac_msb_cdfs[64][17]
Definition: aactab.c:1200
ff_vlc_scalefactors
VLCElem ff_vlc_scalefactors[352]
Definition: aacdec_tab.c:111
AV_CHAN_TOP_FRONT_LEFT
@ AV_CHAN_TOP_FRONT_LEFT
Definition: channel_layout.h:62
IndividualChannelStream::max_sfb
uint8_t max_sfb
number of scalefactor bands per group
Definition: aacdec.h:170
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
h
h
Definition: vp9dsp_template.c:2070
AV_CHAN_FRONT_LEFT
@ AV_CHAN_FRONT_LEFT
Definition: channel_layout.h:50
ff_aac_set_default_channel_config
int ff_aac_set_default_channel_config(AACDecContext *ac, AVCodecContext *avctx, uint8_t(*layout_map)[3], int *tags, int channel_config)
Set up channel positions based on a default channel configuration as specified in table 1....
Definition: aacdec.c:583
ff_aac_huff_dec_reshape
int ff_aac_huff_dec_reshape(GetBitContext *gb, int16_t *out_data, int nb_val)
Definition: aacdec_usac_mps212.c:686
AACArithState
Definition: aacdec_ac.h:27
AACUsacElemConfig::residual_coding
uint8_t residual_coding
Definition: aacdec.h:373
ff_aac_sbr_config_usac
int ff_aac_sbr_config_usac(AACDecContext *ac, ChannelElement *che, AACUsacElemConfig *ue)
Due to channel allocation not being known upon SBR parameter transmission, supply the parameters sepa...
Definition: aacsbr_template.c:1201
AACUsacElemConfig::otts_bands_phase
uint8_t otts_bands_phase
Definition: aacdec.h:372
AACUSACLoudnessExt
AACUSACLoudnessExt
Definition: aacdec.h:96
IndividualChannelStream::group_len
uint8_t group_len[8]
Definition: aacdec.h:175
UNIDRCCONFEXT_TERM
@ UNIDRCCONFEXT_TERM
Definition: aacdec.h:102
ff_aac_num_swb_768
const uint8_t ff_aac_num_swb_768[]
Definition: aactab.c:157
AACUsacElemConfig::pl_buf
uint8_t * pl_buf
Definition: aacdec.h:384
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
AV_PROFILE_AAC_USAC
#define AV_PROFILE_AAC_USAC
Definition: defs.h:76
select_loudness_measurement
static int select_loudness_measurement(const AACUSACConfig *usac)
Definition: aacdec_usac.c:130
skip
static void BS_FUNC() skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
Definition: bitstream_template.h:383
methodvalue_width
static int methodvalue_width(int method_def)
Definition: aacdec_usac.c:89
AACUsacElemConfig::phase_coding
uint8_t phase_coding
Definition: aacdec.h:369
ff_aac_output_configure
int ff_aac_output_configure(AACDecContext *ac, uint8_t layout_map[MAX_ELEM_ID *4][3], int tags, enum OCStatus oc_type, int get_new_frame)
Configure output channel order based on the current program configuration element.
Definition: aacdec.c:487
ID_EXT_ELE_FILL
@ ID_EXT_ELE_FILL
Definition: aacdec.h:89
AACUSACConfig::album_info
AACUSACLoudnessInfo album_info[64]
Definition: aacdec.h:405
MPEG4AudioConfig::sample_rate
int sample_rate
Definition: mpeg4audio.h:32
ff_swb_offset_96
const uint16_t *const ff_swb_offset_96[]
Definition: aactab.c:1958
decode_usac_extension
static int decode_usac_extension(AACDecContext *ac, AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:395
ID_USAC_SCE
@ ID_USAC_SCE
Definition: aacdec.h:76