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 /* Number of scalefactor bands per complex prediction band, equal to 2. */
35 #define SFB_PER_PRED_BAND 2
36 
37 static inline uint32_t get_escaped_value(GetBitContext *gb, int nb1, int nb2, int nb3)
38 {
39  uint32_t val = get_bits(gb, nb1), val2;
40  if (val < ((1 << nb1) - 1))
41  return val;
42 
43  val += val2 = get_bits(gb, nb2);
44  if (nb3 && (val2 == ((1 << nb2) - 1)))
45  val += get_bits(gb, nb3);
46 
47  return val;
48 }
49 
50 /* ISO/IEC 23003-3, Table 74 — bsOutputChannelPos */
51 static const enum AVChannel usac_ch_pos_to_av[64] = {
52  [0] = AV_CHAN_FRONT_LEFT,
53  [1] = AV_CHAN_FRONT_RIGHT,
56  [4] = AV_CHAN_SIDE_LEFT, // +110 degrees, Ls|LS|kAudioChannelLabel_LeftSurround
57  [5] = AV_CHAN_SIDE_RIGHT, // -110 degrees, Rs|RS|kAudioChannelLabel_RightSurround
60  [8] = AV_CHAN_BACK_LEFT, // +135 degrees, Lsr|BL|kAudioChannelLabel_RearSurroundLeft
61  [9] = AV_CHAN_BACK_RIGHT, // -135 degrees, Rsr|BR|kAudioChannelLabel_RearSurroundRight
62  [10] = AV_CHAN_BACK_CENTER,
65  [13] = AV_CHAN_SIDE_SURROUND_LEFT, // +90 degrees, Lss|SL|kAudioChannelLabel_LeftSideSurround
66  [14] = AV_CHAN_SIDE_SURROUND_RIGHT, // -90 degrees, Rss|SR|kAudioChannelLabel_RightSideSurround
67  [15] = AV_CHAN_WIDE_LEFT, // +60 degrees, Lw|FLw|kAudioChannelLabel_LeftWide
68  [16] = AV_CHAN_WIDE_RIGHT, // -60 degrees, Rw|FRw|kAudioChannelLabel_RightWide
72  [20] = AV_CHAN_TOP_BACK_LEFT,
75  [23] = AV_CHAN_TOP_SIDE_LEFT,
77  [25] = AV_CHAN_TOP_CENTER,
82  [30] = AV_CHAN_TOP_SURROUND_LEFT, ///< +110 degrees, Lvs, TpLS
83  [31] = AV_CHAN_TOP_SURROUND_RIGHT, ///< -110 degrees, Rvs, TpRS
84 };
85 
87  GetBitContext *gb)
88 {
89  info->drc_set_id = get_bits(gb, 6);
90  info->downmix_id = get_bits(gb, 7);
91 
92  if ((info->sample_peak.present = get_bits1(gb))) /* samplePeakLevelPresent */
93  info->sample_peak.lvl = get_bits(gb, 12);
94 
95  if ((info->true_peak.present = get_bits1(gb))) { /* truePeakLevelPresent */
96  info->true_peak.lvl = get_bits(gb, 12);
97  info->true_peak.measurement = get_bits(gb, 4);
98  info->true_peak.reliability = get_bits(gb, 2);
99  }
100 
101  info->nb_measurements = get_bits(gb, 4);
102  for (int i = 0; i < info->nb_measurements; i++) {
103  info->measurements[i].method_def = get_bits(gb, 4);
104  info->measurements[i].method_val = get_unary(gb, 0, 8);
105  info->measurements[i].measurement = get_bits(gb, 4);
106  info->measurements[i].reliability = get_bits(gb, 2);
107  }
108 
109  return 0;
110 }
111 
113  GetBitContext *gb)
114 {
115  int ret;
116 
117  usac->loudness.nb_album = get_bits(gb, 6); /* loudnessInfoAlbumCount */
118  usac->loudness.nb_info = get_bits(gb, 6); /* loudnessInfoCount */
119 
120  for (int i = 0; i < usac->loudness.nb_album; i++) {
121  ret = decode_loudness_info(ac, &usac->loudness.album_info[i], gb);
122  if (ret < 0)
123  return ret;
124  }
125 
126  for (int i = 0; i < usac->loudness.nb_info; i++) {
127  ret = decode_loudness_info(ac, &usac->loudness.info[i], gb);
128  if (ret < 0)
129  return ret;
130  }
131 
132  if (get_bits1(gb)) { /* loudnessInfoSetExtPresent */
134  while ((type = get_bits(gb, 4)) != UNIDRCLOUDEXT_TERM) {
135  uint8_t size_bits = get_bits(gb, 4) + 4;
136  uint8_t bit_size = get_bits(gb, size_bits) + 1;
137  switch (type) {
138  case UNIDRCLOUDEXT_EQ:
139  avpriv_report_missing_feature(ac->avctx, "loudnessInfoV1");
140  return AVERROR_PATCHWELCOME;
141  default:
142  for (int i = 0; i < bit_size; i++)
143  skip_bits1(gb);
144  }
145  }
146  }
147 
148  return 0;
149 }
150 
153 {
154  uint8_t header_extra1;
155  uint8_t header_extra2;
156 
157  e->sbr.harmonic_sbr = get_bits1(gb); /* harmonicSBR */
158  e->sbr.bs_intertes = get_bits1(gb); /* bs_interTes */
159  e->sbr.bs_pvc = get_bits1(gb); /* bs_pvc */
160  if (e->sbr.harmonic_sbr || e->sbr.bs_intertes || e->sbr.bs_pvc) {
161  avpriv_report_missing_feature(ac->avctx, "AAC USAC eSBR");
162  return AVERROR_PATCHWELCOME;
163  }
164 
165  e->sbr.dflt.start_freq = get_bits(gb, 4); /* dflt_start_freq */
166  e->sbr.dflt.stop_freq = get_bits(gb, 4); /* dflt_stop_freq */
167 
168  header_extra1 = get_bits1(gb); /* dflt_header_extra1 */
169  header_extra2 = get_bits1(gb); /* dflt_header_extra2 */
170 
171  e->sbr.dflt.freq_scale = 2;
172  e->sbr.dflt.alter_scale = 1;
173  e->sbr.dflt.noise_bands = 2;
174  if (header_extra1) {
175  e->sbr.dflt.freq_scale = get_bits(gb, 2); /* dflt_freq_scale */
176  e->sbr.dflt.alter_scale = get_bits1(gb); /* dflt_alter_scale */
177  e->sbr.dflt.noise_bands = get_bits(gb, 2); /* dflt_noise_bands */
178  }
179 
180  e->sbr.dflt.limiter_bands = 2;
181  e->sbr.dflt.limiter_gains = 2;
182  e->sbr.dflt.interpol_freq = 1;
183  e->sbr.dflt.smoothing_mode = 1;
184  if (header_extra2) {
185  e->sbr.dflt.limiter_bands = get_bits(gb, 2); /* dflt_limiter_bands */
186  e->sbr.dflt.limiter_gains = get_bits(gb, 2); /* dflt_limiter_gains */
187  e->sbr.dflt.interpol_freq = get_bits1(gb); /* dflt_interpol_freq */
188  e->sbr.dflt.smoothing_mode = get_bits1(gb); /* dflt_smoothing_mode */
189  }
190 
191  return 0;
192 }
193 
195  GetBitContext *gb,
196  int sbr_ratio)
197 {
198  e->tw_mdct = get_bits1(gb); /* tw_mdct */
199  e->noise_fill = get_bits1(gb);
200  e->sbr.ratio = sbr_ratio;
201 }
202 
205 {
206  e->stereo_config_index = 0;
207  if (e->sbr.ratio) {
208  int ret = decode_usac_sbr_data(ac, e, gb);
209  if (ret < 0)
210  return ret;
211  e->stereo_config_index = get_bits(gb, 2);
212  }
213 
214  if (e->stereo_config_index) {
215  e->mps.freq_res = get_bits(gb, 3); /* bsFreqRes */
216  e->mps.fixed_gain = get_bits(gb, 3); /* bsFixedGainDMX */
217  e->mps.temp_shape_config = get_bits(gb, 2); /* bsTempShapeConfig */
218  e->mps.decorr_config = get_bits(gb, 2); /* bsDecorrConfig */
219  e->mps.high_rate_mode = get_bits1(gb); /* bsHighRateMode */
220  e->mps.phase_coding = get_bits1(gb); /* bsPhaseCoding */
221 
222  if (get_bits1(gb)) /* bsOttBandsPhasePresent */
223  e->mps.otts_bands_phase = get_bits(gb, 5); /* bsOttBandsPhase */
224 
225  e->mps.residual_coding = e->stereo_config_index >= 2; /* bsResidualCoding */
226  if (e->mps.residual_coding) {
227  e->mps.residual_bands = get_bits(gb, 5); /* bsResidualBands */
228  e->mps.pseudo_lr = get_bits1(gb); /* bsPseudoLr */
229  }
230  if (e->mps.temp_shape_config == 2)
231  e->mps.env_quant_mode = get_bits1(gb); /* bsEnvQuantMode */
232  }
233 
234  return 0;
235 }
236 
238  GetBitContext *gb)
239 {
240  int len = 0, ext_config_len;
241 
242  e->ext.type = get_escaped_value(gb, 4, 8, 16); /* usacExtElementType */
243  ext_config_len = get_escaped_value(gb, 4, 8, 16); /* usacExtElementConfigLength */
244 
245  if (get_bits1(gb)) /* usacExtElementDefaultLengthPresent */
246  len = get_escaped_value(gb, 8, 16, 0) + 1;
247 
248  e->ext.default_len = len;
249  e->ext.payload_frag = get_bits1(gb); /* usacExtElementPayloadFrag */
250 
251  av_log(ac->avctx, AV_LOG_DEBUG, "Extension present: type %i, len %i\n",
252  e->ext.type, ext_config_len);
253 
254  switch (e->ext.type) {
255 #if 0 /* Skip unsupported values */
256  case ID_EXT_ELE_MPEGS:
257  break;
258  case ID_EXT_ELE_SAOC:
259  break;
260  case ID_EXT_ELE_UNI_DRC:
261  break;
262 #endif
263  case ID_EXT_ELE_FILL:
264  break; /* This is what the spec does */
266  /* No configuration needed - fallthrough (len should be 0) */
267  default:
268  skip_bits(gb, 8*ext_config_len);
269  e->ext.type = ID_EXT_ELE_FILL;
270  break;
271  };
272 
273  return 0;
274 }
275 
277 {
278  AACUSACConfig *usac = &oc->usac;
279  int elem_id[3 /* SCE, CPE, LFE */] = { 0, 0, 0 };
280 
281  ChannelElement *che;
282  enum RawDataBlockType type;
283  int id, ch;
284 
285  /* Initialize state */
286  for (int i = 0; i < usac->nb_elems; i++) {
287  AACUsacElemConfig *e = &usac->elems[i];
288  if (e->type == ID_USAC_EXT)
289  continue;
290 
291  switch (e->type) {
292  case ID_USAC_SCE:
293  ch = 1;
294  type = TYPE_SCE;
295  id = elem_id[0]++;
296  break;
297  case ID_USAC_CPE:
298  ch = 2;
299  type = TYPE_CPE;
300  id = elem_id[1]++;
301  break;
302  case ID_USAC_LFE:
303  ch = 1;
304  type = TYPE_LFE;
305  id = elem_id[2]++;
306  break;
307  }
308 
309  che = ff_aac_get_che(ac, type, id);
310  if (che) {
311  AACUsacStereo *us = &che->us;
312  memset(us, 0, sizeof(*us));
313 
314  if (e->sbr.ratio)
315  ff_aac_sbr_config_usac(ac, che, e);
316 
317  for (int j = 0; j < ch; j++) {
318  SingleChannelElement *sce = &che->ch[ch];
319  AACUsacElemData *ue = &sce->ue;
320 
321  memset(ue, 0, sizeof(*ue));
322 
323  if (!ch)
324  ue->noise.seed = 0x3039;
325  else
326  che->ch[1].ue.noise.seed = 0x10932;
327  }
328  }
329  }
330 
331  return 0;
332 }
333 
334 /* UsacConfig */
337  int channel_config)
338 {
339  int ret;
340  uint8_t freq_idx;
341  uint8_t channel_config_idx;
342  int nb_channels = 0;
343  int ratio_mult, ratio_dec;
344  int samplerate;
345  int sbr_ratio;
346  MPEG4AudioConfig *m4ac = &oc->m4ac;
347  AACUSACConfig *usac = &oc->usac;
348  int elem_id[3 /* SCE, CPE, LFE */];
349 
350  int map_pos_set = 0;
351  uint8_t layout_map[MAX_ELEM_ID*4][3] = { 0 };
352 
353  if (!ac)
354  return AVERROR_PATCHWELCOME;
355 
356  memset(usac, 0, sizeof(*usac));
357 
358  freq_idx = get_bits(gb, 5); /* usacSamplingFrequencyIndex */
359  if (freq_idx == 0x1f) {
360  samplerate = get_bits(gb, 24); /* usacSamplingFrequency */
361  } else {
362  samplerate = ff_aac_usac_samplerate[freq_idx];
363  if (samplerate < 0)
364  return AVERROR(EINVAL);
365  }
366 
367  usac->core_sbr_frame_len_idx = get_bits(gb, 3); /* coreSbrFrameLengthIndex */
368  m4ac->frame_length_short = usac->core_sbr_frame_len_idx == 0 ||
369  usac->core_sbr_frame_len_idx == 2;
370 
371  usac->core_frame_len = (usac->core_sbr_frame_len_idx == 0 ||
372  usac->core_sbr_frame_len_idx == 2) ? 768 : 1024;
373 
374  sbr_ratio = usac->core_sbr_frame_len_idx == 2 ? 2 :
375  usac->core_sbr_frame_len_idx == 3 ? 3 :
376  usac->core_sbr_frame_len_idx == 4 ? 1 :
377  0;
378 
379  if (sbr_ratio == 2) {
380  ratio_mult = 8;
381  ratio_dec = 3;
382  } else if (sbr_ratio == 3) {
383  ratio_mult = 2;
384  ratio_dec = 1;
385  } else if (sbr_ratio == 4) {
386  ratio_mult = 4;
387  ratio_dec = 1;
388  } else {
389  ratio_mult = 1;
390  ratio_dec = 1;
391  }
392 
393  avctx->sample_rate = samplerate;
394  m4ac->ext_sample_rate = samplerate;
395  m4ac->sample_rate = (samplerate * ratio_dec) / ratio_mult;
396 
398  m4ac->sbr = sbr_ratio > 0;
399 
400  channel_config_idx = get_bits(gb, 5); /* channelConfigurationIndex */
401  if (!channel_config_idx) {
402  /* UsacChannelConfig() */
403  nb_channels = get_escaped_value(gb, 5, 8, 16); /* numOutChannels */
404  if (nb_channels > 64)
405  return AVERROR(EINVAL);
406 
408 
409  ret = av_channel_layout_custom_init(&ac->oc[1].ch_layout, nb_channels);
410  if (ret < 0)
411  return ret;
412 
413  for (int i = 0; i < nb_channels; i++) {
414  AVChannelCustom *cm = &ac->oc[1].ch_layout.u.map[i];
415  cm->id = usac_ch_pos_to_av[get_bits(gb, 5)]; /* bsOutputChannelPos */
416  }
417 
421  if (ret < 0)
422  return ret;
423 
424  ret = av_channel_layout_copy(&avctx->ch_layout, &ac->oc[1].ch_layout);
425  if (ret < 0)
426  return ret;
427  } else {
428  int nb_elements;
429  if ((ret = ff_aac_set_default_channel_config(ac, avctx, layout_map,
430  &nb_elements, channel_config_idx)))
431  return ret;
432 
433  /* Fill in the number of expected channels */
434  for (int i = 0; i < nb_elements; i++)
435  nb_channels += layout_map[i][0] == TYPE_CPE ? 2 : 1;
436 
437  map_pos_set = 1;
438  }
439 
440  /* UsacDecoderConfig */
441  elem_id[0] = elem_id[1] = elem_id[2] = 0;
442  usac->nb_elems = get_escaped_value(gb, 4, 8, 16) + 1;
443  if (usac->nb_elems > 64) {
444  av_log(ac->avctx, AV_LOG_ERROR, "Too many elements: %i\n",
445  usac->nb_elems);
446  usac->nb_elems = 0;
447  return AVERROR(EINVAL);
448  }
449 
450  for (int i = 0; i < usac->nb_elems; i++) {
451  int map_count = elem_id[0] + elem_id[1] + elem_id[2];
452  AACUsacElemConfig *e = &usac->elems[i];
453  memset(e, 0, sizeof(*e));
454 
455  e->type = get_bits(gb, 2); /* usacElementType */
456  if (e->type != ID_USAC_EXT && (map_count + 1) > nb_channels) {
457  av_log(ac->avctx, AV_LOG_ERROR, "Too many channels for the channel "
458  "configuration\n");
459  usac->nb_elems = 0;
460  return AVERROR(EINVAL);
461  }
462 
463  av_log(ac->avctx, AV_LOG_DEBUG, "Element present: idx %i, type %i\n",
464  i, e->type);
465 
466  switch (e->type) {
467  case ID_USAC_SCE: /* SCE */
468  /* UsacCoreConfig */
469  decode_usac_element_core(e, gb, sbr_ratio);
470  if (e->sbr.ratio > 0) {
471  ret = decode_usac_sbr_data(ac, e, gb);
472  if (ret < 0)
473  return ret;
474  }
475  layout_map[map_count][0] = TYPE_SCE;
476  layout_map[map_count][1] = elem_id[0]++;
477  if (!map_pos_set)
478  layout_map[map_count][2] = AAC_CHANNEL_FRONT;
479 
480  break;
481  case ID_USAC_CPE: /* UsacChannelPairElementConf */
482  /* UsacCoreConfig */
483  decode_usac_element_core(e, gb, sbr_ratio);
484  ret = decode_usac_element_pair(ac, e, gb);
485  if (ret < 0)
486  return ret;
487  layout_map[map_count][0] = TYPE_CPE;
488  layout_map[map_count][1] = elem_id[1]++;
489  if (!map_pos_set)
490  layout_map[map_count][2] = AAC_CHANNEL_FRONT;
491 
492  break;
493  case ID_USAC_LFE: /* LFE */
494  /* LFE has no need for any configuration */
495  e->tw_mdct = 0;
496  e->noise_fill = 0;
497  layout_map[map_count][0] = TYPE_LFE;
498  layout_map[map_count][1] = elem_id[2]++;
499  if (!map_pos_set)
500  layout_map[map_count][2] = AAC_CHANNEL_LFE;
501 
502  break;
503  case ID_USAC_EXT: /* EXT */
504  ret = decode_usac_extension(ac, e, gb);
505  if (ret < 0)
506  return ret;
507  break;
508  };
509  }
510 
511  ret = ff_aac_output_configure(ac, layout_map, elem_id[0] + elem_id[1] + elem_id[2],
512  OC_GLOBAL_HDR, 0);
513  if (ret < 0) {
514  av_log(avctx, AV_LOG_ERROR, "Unable to parse channel config!\n");
515  usac->nb_elems = 0;
516  return ret;
517  }
518 
519  if (get_bits1(gb)) { /* usacConfigExtensionPresent */
520  int invalid;
521  int nb_extensions = get_escaped_value(gb, 2, 4, 8) + 1; /* numConfigExtensions */
522  for (int i = 0; i < nb_extensions; i++) {
523  int type = get_escaped_value(gb, 4, 8, 16);
524  int len = get_escaped_value(gb, 4, 8, 16);
525  switch (type) {
527  ret = decode_loudness_set(ac, usac, gb);
528  if (ret < 0)
529  return ret;
530  break;
532  usac->stream_identifier = get_bits(gb, 16);
533  break;
534  case ID_CONFIG_EXT_FILL: /* fallthrough */
535  invalid = 0;
536  while (len--) {
537  if (get_bits(gb, 8) != 0xA5)
538  invalid++;
539  }
540  if (invalid)
541  av_log(avctx, AV_LOG_WARNING, "Invalid fill bytes: %i\n",
542  invalid);
543  break;
544  default:
545  while (len--)
546  skip_bits(gb, 8);
547  break;
548  }
549  }
550  }
551 
553 
554  ret = ff_aac_usac_reset_state(ac, oc);
555  if (ret < 0)
556  return ret;
557 
558  return 0;
559 }
560 
563  GetBitContext *gb, uint8_t global_gain)
564 {
565  IndividualChannelStream *ics = &sce->ics;
566 
567  /* Decode all scalefactors. */
568  int offset_sf = global_gain;
569  for (int g = 0; g < ics->num_window_groups; g++) {
570  for (int sfb = 0; sfb < ics->max_sfb; sfb++) {
571  if (g || sfb)
572  offset_sf += get_vlc2(gb, ff_vlc_scalefactors, 7, 3) - SCALE_DIFF_ZERO;
573  if (offset_sf > 255U) {
575  "Scalefactor (%d) out of range.\n", offset_sf);
576  return AVERROR_INVALIDDATA;
577  }
578 
579  sce->sfo[g*ics->max_sfb + sfb] = offset_sf - 100;
580  }
581  }
582 
583  return 0;
584 }
585 
586 /**
587  * Decode and dequantize arithmetically coded, uniformly quantized value
588  *
589  * @param coef array of dequantized, scaled spectral data
590  * @param sf array of scalefactors or intensity stereo positions
591  *
592  * @return Returns error status. 0 - OK, !0 - error
593  */
594 static int decode_spectrum_ac(AACDecContext *s, float coef[1024],
596  int reset, uint16_t len, uint16_t N)
597 {
598  AACArith ac;
599  int i, a, b;
600  uint32_t c;
601 
602  int gb_count;
603  GetBitContext gb2;
604 
605  c = ff_aac_ac_map_process(state, reset, N);
606 
607  if (!len) {
608  ff_aac_ac_finish(state, 0, N);
609  return 0;
610  }
611 
612  ff_aac_ac_init(&ac, gb);
613 
614  /* Backup reader for rolling back by 14 bits at the end */
615  gb2 = *gb;
616  gb_count = get_bits_count(&gb2);
617 
618  for (i = 0; i < len/2; i++) {
619  /* MSB */
620  int lvl, esc_nb, m;
622  for (lvl=esc_nb=0;;) {
623  uint32_t pki = ff_aac_ac_get_pk(c + (esc_nb << 17));
624  m = ff_aac_ac_decode(&ac, &gb2, ff_aac_ac_msb_cdfs[pki],
626  if (m < FF_AAC_AC_ESCAPE)
627  break;
628  lvl++;
629 
630  /* Cargo-culted value. */
631  if (lvl > 23)
632  return AVERROR(EINVAL);
633 
634  if ((esc_nb = lvl) > 7)
635  esc_nb = 7;
636  }
637 
638  b = m >> 2;
639  a = m - (b << 2);
640 
641  /* ARITH_STOP detection */
642  if (!m) {
643  if (esc_nb)
644  break;
645  a = b = 0;
646  }
647 
648  /* LSB */
649  for (int l = lvl; l > 0; l--) {
650  int lsbidx = !a ? 1 : (!b ? 0 : 2);
651  uint8_t r = ff_aac_ac_decode(&ac, &gb2, ff_aac_ac_lsb_cdfs[lsbidx],
653  a = (a << 1) | (r & 1);
654  b = (b << 1) | ((r >> 1) & 1);
655  }
656 
657  /* Dequantize coeffs here */
658  coef[2*i + 0] = a * cbrt(a);
659  coef[2*i + 1] = b * cbrt(b);
661  }
662 
663  if (len > 1) {
664  /* "Rewind" bitstream back by 14 bits */
665  int gb_count2 = get_bits_count(&gb2);
666  skip_bits(gb, gb_count2 - gb_count - 14);
667  } else {
668  *gb = gb2;
669  }
670 
672 
673  for (; i < N/2; i++) {
674  coef[2*i + 0] = 0;
675  coef[2*i + 1] = 0;
676  }
677 
678  /* Signs */
679  for (i = 0; i < len; i++) {
680  if (coef[i]) {
681  if (!get_bits1(gb)) /* s */
682  coef[i] *= -1;
683  }
684  }
685 
686  return 0;
687 }
688 
690  ChannelElement *cpe, GetBitContext *gb,
691  int num_window_groups,
692  int prev_num_window_groups,
693  int indep_flag)
694 {
695  int delta_code_time;
696  IndividualChannelStream *ics = &cpe->ch[0].ics;
697 
698  if (!get_bits1(gb)) { /* cplx_pred_all */
699  for (int g = 0; g < num_window_groups; g++) {
700  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb += SFB_PER_PRED_BAND) {
701  const uint8_t val = get_bits1(gb);
702  us->pred_used[g*cpe->max_sfb_ste + sfb] = val;
703  if ((sfb + 1) < cpe->max_sfb_ste)
704  us->pred_used[g*cpe->max_sfb_ste + sfb + 1] = val;
705  }
706  }
707  } else {
708  for (int g = 0; g < num_window_groups; g++)
709  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++)
710  us->pred_used[g*cpe->max_sfb_ste + sfb] = 1;
711  }
712 
713  us->pred_dir = get_bits1(gb);
714  us->complex_coef = get_bits1(gb);
715 
716  us->use_prev_frame = 0;
717  if (us->complex_coef && !indep_flag)
718  us->use_prev_frame = get_bits1(gb);
719 
720  delta_code_time = 0;
721  if (!indep_flag)
722  delta_code_time = get_bits1(gb);
723 
724  /* TODO: shouldn't be needed */
725  for (int g = 0; g < num_window_groups; g++) {
726  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb += SFB_PER_PRED_BAND) {
727  float last_alpha_q_re = 0;
728  float last_alpha_q_im = 0;
729  if (delta_code_time) {
730  if (g) {
731  /* Transient, after the first group - use the current frame,
732  * previous window, alpha values. */
733  last_alpha_q_re = us->alpha_q_re[(g - 1)*cpe->max_sfb_ste + sfb];
734  last_alpha_q_im = us->alpha_q_im[(g - 1)*cpe->max_sfb_ste + sfb];
735  } else if (!g &&
736  (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) &&
737  (ics->window_sequence[1] == EIGHT_SHORT_SEQUENCE)) {
738  /* The spec doesn't explicitly mention this, but it doesn't make
739  * any other sense otherwise! */
740  const int wg = prev_num_window_groups - 1;
741  last_alpha_q_re = us->prev_alpha_q_re[wg*cpe->max_sfb_ste + sfb];
742  last_alpha_q_im = us->prev_alpha_q_im[wg*cpe->max_sfb_ste + sfb];
743  } else {
744  last_alpha_q_re = us->prev_alpha_q_re[g*cpe->max_sfb_ste + sfb];
745  last_alpha_q_im = us->prev_alpha_q_im[g*cpe->max_sfb_ste + sfb];
746  }
747  } else {
748  if (sfb) {
749  last_alpha_q_re = us->alpha_q_re[g*cpe->max_sfb_ste + sfb - 1];
750  last_alpha_q_im = us->alpha_q_im[g*cpe->max_sfb_ste + sfb - 1];
751  }
752  }
753 
754  if (us->pred_used[g*cpe->max_sfb_ste + sfb]) {
755  int val = -get_vlc2(gb, ff_vlc_scalefactors, 7, 3) + 60;
756  last_alpha_q_re += val * 0.1f;
757  if (us->complex_coef) {
758  val = -get_vlc2(gb, ff_vlc_scalefactors, 7, 3) + 60;
759  last_alpha_q_im += val * 0.1f;
760  }
761  us->alpha_q_re[g*cpe->max_sfb_ste + sfb] = last_alpha_q_re;
762  us->alpha_q_im[g*cpe->max_sfb_ste + sfb] = last_alpha_q_im;
763  } else {
764  us->alpha_q_re[g*cpe->max_sfb_ste + sfb] = 0;
765  us->alpha_q_im[g*cpe->max_sfb_ste + sfb] = 0;
766  }
767 
768  if ((sfb + 1) < cpe->max_sfb_ste) {
769  us->alpha_q_re[g*cpe->max_sfb_ste + sfb + 1] =
770  us->alpha_q_re[g*cpe->max_sfb_ste + sfb];
771  us->alpha_q_im[g*cpe->max_sfb_ste + sfb + 1] =
772  us->alpha_q_im[g*cpe->max_sfb_ste + sfb];
773  }
774  }
775  }
776 
777  return 0;
778 }
779 
781  AACUSACConfig *usac)
782 {
783  AACUsacElemData *ue = &sce->ue;
784  IndividualChannelStream *ics = &sce->ics;
785  const int sampling_index = ac->oc[1].m4ac.sampling_index;
786 
787  /* Setup window parameters */
789  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
790  if (usac->core_frame_len == 768) {
791  ics->swb_offset = ff_swb_offset_96[sampling_index];
792  ics->num_swb = ff_aac_num_swb_96[sampling_index];
793  } else {
794  ics->swb_offset = ff_swb_offset_128[sampling_index];
795  ics->num_swb = ff_aac_num_swb_128[sampling_index];
796  }
797  ics->tns_max_bands = ff_tns_max_bands_usac_128[sampling_index];
798 
799  /* Setup scalefactor grouping. 7 bit mask. */
800  ics->num_window_groups = 0;
801  for (int j = 0; j < 7; j++) {
802  ics->group_len[j] = 1;
803  if (ue->scale_factor_grouping & (1 << (6 - j)))
804  ics->group_len[ics->num_window_groups] += 1;
805  else
806  ics->num_window_groups++;
807  }
808 
809  ics->group_len[7] = 1;
810  ics->num_window_groups++;
811  ics->num_windows = 8;
812  } else {
813  if (usac->core_frame_len == 768) {
814  ics->swb_offset = ff_swb_offset_768[sampling_index];
815  ics->num_swb = ff_aac_num_swb_768[sampling_index];
816  } else {
817  ics->swb_offset = ff_swb_offset_1024[sampling_index];
818  ics->num_swb = ff_aac_num_swb_1024[sampling_index];
819  }
820  ics->tns_max_bands = ff_tns_max_bands_usac_1024[sampling_index];
821 
822  ics->group_len[0] = 1;
823  ics->num_window_groups = 1;
824  ics->num_windows = 1;
825  }
826 
827  if (ics->max_sfb > ics->num_swb) {
829  "Number of scalefactor bands in group (%d) "
830  "exceeds limit (%d).\n",
831  ics->max_sfb, ics->num_swb);
832  ics->max_sfb = 0;
833  return AVERROR(EINVAL);
834  }
835 
836  /* Just some defaults for the band types */
837  for (int i = 0; i < FF_ARRAY_ELEMS(sce->band_type); i++)
838  sce->band_type[i] = ESC_BT;
839 
840  return 0;
841 }
842 
845  GetBitContext *gb, int indep_flag)
846 {
847  int ret, tns_active;
848 
849  AACUsacStereo *us = &cpe->us;
850  SingleChannelElement *sce1 = &cpe->ch[0];
851  SingleChannelElement *sce2 = &cpe->ch[1];
852  IndividualChannelStream *ics1 = &sce1->ics;
853  IndividualChannelStream *ics2 = &sce2->ics;
854  AACUsacElemData *ue1 = &sce1->ue;
855  AACUsacElemData *ue2 = &sce2->ue;
856 
857  us->common_window = 0;
858  us->common_tw = 0;
859 
860  /* Alpha values must always be zeroed out for the current frame,
861  * as they are propagated to the next frame and may be used. */
862  memset(us->alpha_q_re, 0, sizeof(us->alpha_q_re));
863  memset(us->alpha_q_im, 0, sizeof(us->alpha_q_im));
864 
865  if (!(!ue1->core_mode && !ue2->core_mode))
866  return 0;
867 
868  tns_active = get_bits1(gb);
869  us->common_window = get_bits1(gb);
870 
871  if (!us->common_window || indep_flag) {
872  memset(us->prev_alpha_q_re, 0, sizeof(us->prev_alpha_q_re));
873  memset(us->prev_alpha_q_im, 0, sizeof(us->prev_alpha_q_im));
874  }
875 
876  if (us->common_window) {
877  /* ics_info() */
878  ics1->window_sequence[1] = ics1->window_sequence[0];
879  ics2->window_sequence[1] = ics2->window_sequence[0];
880  ics1->window_sequence[0] = ics2->window_sequence[0] = get_bits(gb, 2);
881 
882  ics1->use_kb_window[1] = ics1->use_kb_window[0];
883  ics2->use_kb_window[1] = ics2->use_kb_window[0];
884  ics1->use_kb_window[0] = ics2->use_kb_window[0] = get_bits1(gb);
885 
886  /* If there's a change in the transform sequence, zero out last frame's
887  * stereo prediction coefficients */
888  if ((ics1->window_sequence[0] == EIGHT_SHORT_SEQUENCE &&
889  ics1->window_sequence[1] != EIGHT_SHORT_SEQUENCE) ||
890  (ics1->window_sequence[1] == EIGHT_SHORT_SEQUENCE &&
891  ics1->window_sequence[0] != EIGHT_SHORT_SEQUENCE) ||
892  (ics2->window_sequence[0] == EIGHT_SHORT_SEQUENCE &&
893  ics2->window_sequence[1] != EIGHT_SHORT_SEQUENCE) ||
894  (ics2->window_sequence[1] == EIGHT_SHORT_SEQUENCE &&
895  ics2->window_sequence[0] != EIGHT_SHORT_SEQUENCE)) {
896  memset(us->prev_alpha_q_re, 0, sizeof(us->prev_alpha_q_re));
897  memset(us->prev_alpha_q_im, 0, sizeof(us->prev_alpha_q_im));
898  }
899 
900  if (ics1->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
901  ics1->max_sfb = ics2->max_sfb = get_bits(gb, 4);
903  } else {
904  ics1->max_sfb = ics2->max_sfb = get_bits(gb, 6);
905  }
906 
907  if (!get_bits1(gb)) { /* common_max_sfb */
908  if (ics2->window_sequence[0] == EIGHT_SHORT_SEQUENCE)
909  ics2->max_sfb = get_bits(gb, 4);
910  else
911  ics2->max_sfb = get_bits(gb, 6);
912  }
913 
914  ret = setup_sce(ac, sce1, usac);
915  if (ret < 0) {
916  ics2->max_sfb = 0;
917  return ret;
918  }
919 
920  ret = setup_sce(ac, sce2, usac);
921  if (ret < 0)
922  return ret;
923 
924  cpe->max_sfb_ste = FFMAX(ics1->max_sfb, ics2->max_sfb);
925 
926  us->ms_mask_mode = get_bits(gb, 2); /* ms_mask_present */
927  memset(cpe->ms_mask, 0, sizeof(cpe->ms_mask));
928  if (us->ms_mask_mode == 1) {
929  for (int g = 0; g < ics1->num_window_groups; g++)
930  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++)
931  cpe->ms_mask[g*cpe->max_sfb_ste + sfb] = get_bits1(gb);
932  } else if (us->ms_mask_mode == 2) {
933  memset(cpe->ms_mask, 0xFF, sizeof(cpe->ms_mask));
934  } else if ((us->ms_mask_mode == 3) && !ec->stereo_config_index) {
935  ret = decode_usac_stereo_cplx(ac, us, cpe, gb,
936  ics1->num_window_groups,
938  indep_flag);
939  if (ret < 0)
940  return ret;
941  }
942  }
943 
944  if (ec->tw_mdct) {
945  us->common_tw = get_bits1(gb);
947  "AAC USAC timewarping");
948  return AVERROR_PATCHWELCOME;
949  }
950 
951  us->tns_on_lr = 0;
952  ue1->tns_data_present = ue2->tns_data_present = 0;
953  if (tns_active) {
954  int common_tns = 0;
955  if (us->common_window)
956  common_tns = get_bits1(gb);
957 
958  us->tns_on_lr = get_bits1(gb);
959  if (common_tns) {
960  ret = ff_aac_decode_tns(ac, &sce1->tns, gb, ics1);
961  if (ret < 0)
962  return ret;
963  memcpy(&sce2->tns, &sce1->tns, sizeof(sce1->tns));
964  sce2->tns.present = 1;
965  sce1->tns.present = 1;
966  ue1->tns_data_present = 0;
967  ue2->tns_data_present = 0;
968  } else {
969  if (get_bits1(gb)) {
970  ue1->tns_data_present = 1;
971  ue2->tns_data_present = 1;
972  } else {
973  ue2->tns_data_present = get_bits1(gb);
974  ue1->tns_data_present = !ue2->tns_data_present;
975  }
976  }
977  }
978 
979  return 0;
980 }
981 
982 /* 7.2.4 Generation of random signs for spectral noise filling
983  * This function is exactly defined, though we've helped the definition
984  * along with being slightly faster. */
985 static inline float noise_random_sign(unsigned int *seed)
986 {
987  unsigned int new_seed = *seed = ((*seed) * 69069) + 5;
988  if (((new_seed) & 0x10000) > 0)
989  return -1.f;
990  return +1.f;
991 }
992 
995 {
996  float *coef;
997  IndividualChannelStream *ics = &sce->ics;
998 
999  float noise_val = powf(2, ((float)ue->noise.level - 14.0f)/3.0f);
1000  int noise_offset = ue->noise.offset - 16;
1001  int band_off;
1002 
1005 
1006  coef = sce->coeffs;
1007  for (int g = 0; g < ics->num_window_groups; g++) {
1008  unsigned g_len = ics->group_len[g];
1009 
1010  for (int sfb = 0; sfb < ics->max_sfb; sfb++) {
1011  float *cb = coef + ics->swb_offset[sfb];
1012  int cb_len = ics->swb_offset[sfb + 1] - ics->swb_offset[sfb];
1013  int band_quantized_to_zero = 1;
1014 
1015  if (ics->swb_offset[sfb] < band_off)
1016  continue;
1017 
1018  for (int group = 0; group < (unsigned)g_len; group++, cb += 128) {
1019  for (int z = 0; z < cb_len; z++) {
1020  if (cb[z] == 0)
1021  cb[z] = noise_random_sign(&sce->ue.noise.seed) * noise_val;
1022  else
1023  band_quantized_to_zero = 0;
1024  }
1025  }
1026 
1027  if (band_quantized_to_zero) {
1028  sce->sfo[g*ics->max_sfb + sfb] = FFMAX(sce->sfo[g*ics->max_sfb + sfb] + noise_offset, -200);
1029  }
1030  }
1031  coef += g_len << 7;
1032  }
1033 }
1034 
1037 {
1038  IndividualChannelStream *ics = &sce->ics;
1039  float *coef;
1040 
1041  /* Synthesise noise */
1042  if (ue->noise.level)
1043  apply_noise_fill(ac, sce, ue);
1044 
1045  /* Noise filling may apply an offset to the scalefactor offset */
1046  ac->dsp.dequant_scalefactors(sce);
1047 
1048  /* Apply scalefactors */
1049  coef = sce->coeffs;
1050  for (int g = 0; g < ics->num_window_groups; g++) {
1051  unsigned g_len = ics->group_len[g];
1052 
1053  for (int sfb = 0; sfb < ics->max_sfb; sfb++) {
1054  float *cb = coef + ics->swb_offset[sfb];
1055  int cb_len = ics->swb_offset[sfb + 1] - ics->swb_offset[sfb];
1056  float sf = sce->sf[g*ics->max_sfb + sfb];
1057 
1058  for (int group = 0; group < (unsigned)g_len; group++, cb += 128)
1059  ac->fdsp->vector_fmul_scalar(cb, cb, sf, cb_len);
1060  }
1061  coef += g_len << 7;
1062  }
1063 }
1064 
1066  float *dmix_re)
1067 {
1068  IndividualChannelStream *ics = &cpe->ch[0].ics;
1069  int sign = !cpe->us.pred_dir ? +1 : -1;
1070  float *coef1 = cpe->ch[0].coeffs;
1071  float *coef2 = cpe->ch[1].coeffs;
1072 
1073  for (int g = 0; g < ics->num_window_groups; g++) {
1074  unsigned g_len = ics->group_len[g];
1075  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++) {
1076  int off = ics->swb_offset[sfb];
1077  int cb_len = ics->swb_offset[sfb + 1] - off;
1078 
1079  float *c1 = coef1 + off;
1080  float *c2 = coef2 + off;
1081  float *dm = dmix_re + off;
1082 
1083  for (int group = 0; group < (unsigned)g_len;
1084  group++, c1 += 128, c2 += 128, dm += 128) {
1085  for (int z = 0; z < cb_len; z++)
1086  dm[z] = 0.5*(c1[z] + sign*c2[z]);
1087  }
1088  }
1089 
1090  coef1 += g_len << 7;
1091  coef2 += g_len << 7;
1092  dmix_re += g_len << 7;
1093  }
1094 }
1095 
1097  float *dmix_re)
1098 {
1099  AACUsacStereo *us = &cpe->us;
1100  IndividualChannelStream *ics = &cpe->ch[0].ics;
1101  int sign = !cpe->us.pred_dir ? +1 : -1;
1102  float *coef1 = cpe->ch[0].coeffs;
1103  float *coef2 = cpe->ch[1].coeffs;
1104 
1105  for (int g = 0; g < ics->num_window_groups; g++) {
1106  unsigned g_len = ics->group_len[g];
1107  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++) {
1108  int off = ics->swb_offset[sfb];
1109  int cb_len = ics->swb_offset[sfb + 1] - off;
1110 
1111  float *c1 = coef1 + off;
1112  float *c2 = coef2 + off;
1113  float *dm = dmix_re + off;
1114 
1115  if (us->pred_used[g*cpe->max_sfb_ste + sfb]) {
1116  for (int group = 0; group < (unsigned)g_len;
1117  group++, c1 += 128, c2 += 128, dm += 128) {
1118  for (int z = 0; z < cb_len; z++)
1119  dm[z] = 0.5*(c1[z] + sign*c2[z]);
1120  }
1121  } else {
1122  for (int group = 0; group < (unsigned)g_len;
1123  group++, c1 += 128, c2 += 128, dm += 128) {
1124  for (int z = 0; z < cb_len; z++)
1125  dm[z] = c1[z];
1126  }
1127  }
1128  }
1129 
1130  coef1 += g_len << 7;
1131  coef2 += g_len << 7;
1132  dmix_re += g_len << 7;
1133  }
1134 }
1135 
1136 static void complex_stereo_interpolate_imag(float *im, float *re, const float f[7],
1137  int len, int factor_even, int factor_odd)
1138 {
1139  int i = 0;
1140  float s;
1141 
1142  s = f[6]*re[2] + f[5]*re[1] + f[4]*re[0] +
1143  f[3]*re[0] +
1144  f[2]*re[1] + f[1]*re[2] + f[0]*re[3];
1145  im[i] += s*factor_even;
1146 
1147  i = 1;
1148  s = f[6]*re[1] + f[5]*re[0] + f[4]*re[0] +
1149  f[3]*re[1] +
1150  f[2]*re[2] + f[1]*re[3] + f[0]*re[4];
1151  im[i] += s*factor_odd;
1152 
1153  i = 2;
1154  s = f[6]*re[0] + f[5]*re[0] + f[4]*re[1] +
1155  f[3]*re[2] +
1156  f[2]*re[3] + f[1]*re[4] + f[0]*re[5];
1157 
1158  im[i] += s*factor_even;
1159  for (i = 3; i < len - 4; i += 2) {
1160  s = f[6]*re[i-3] + f[5]*re[i-2] + f[4]*re[i-1] +
1161  f[3]*re[i] +
1162  f[2]*re[i+1] + f[1]*re[i+2] + f[0]*re[i+3];
1163  im[i+0] += s*factor_odd;
1164 
1165  s = f[6]*re[i-2] + f[5]*re[i-1] + f[4]*re[i] +
1166  f[3]*re[i+1] +
1167  f[2]*re[i+2] + f[1]*re[i+3] + f[0]*re[i+4];
1168  im[i+1] += s*factor_even;
1169  }
1170 
1171  i = len - 3;
1172  s = f[6]*re[i-3] + f[5]*re[i-2] + f[4]*re[i-1] +
1173  f[3]*re[i] +
1174  f[2]*re[i+1] + f[1]*re[i+2] + f[0]*re[i+2];
1175  im[i] += s*factor_odd;
1176 
1177  i = len - 2;
1178  s = f[6]*re[i-3] + f[5]*re[i-2] + f[4]*re[i-1] +
1179  f[3]*re[i] +
1180  f[2]*re[i+1] + f[1]*re[i+1] + f[0]*re[i];
1181  im[i] += s*factor_even;
1182 
1183  i = len - 1;
1184  s = f[6]*re[i-3] + f[5]*re[i-2] + f[4]*re[i-1] +
1185  f[3]*re[i] +
1186  f[2]*re[i] + f[1]*re[i-1] + f[0]*re[i-2];
1187  im[i] += s*factor_odd;
1188 }
1189 
1191 {
1192  AACUsacStereo *us = &cpe->us;
1193  IndividualChannelStream *ics = &cpe->ch[0].ics;
1194  float *coef1 = cpe->ch[0].coeffs;
1195  float *coef2 = cpe->ch[1].coeffs;
1196  float *dmix_im = us->dmix_im;
1197 
1198  for (int g = 0; g < ics->num_window_groups; g++) {
1199  unsigned g_len = ics->group_len[g];
1200  for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb++) {
1201  int off = ics->swb_offset[sfb];
1202  int cb_len = ics->swb_offset[sfb + 1] - off;
1203 
1204  float *c1 = coef1 + off;
1205  float *c2 = coef2 + off;
1206  float *dm_im = dmix_im + off;
1207  float alpha_re = us->alpha_q_re[g*cpe->max_sfb_ste + sfb];
1208  float alpha_im = us->alpha_q_im[g*cpe->max_sfb_ste + sfb];
1209 
1210  if (!us->pred_used[g*cpe->max_sfb_ste + sfb])
1211  continue;
1212 
1213  if (!cpe->us.pred_dir) {
1214  for (int group = 0; group < (unsigned)g_len;
1215  group++, c1 += 128, c2 += 128, dm_im += 128) {
1216  for (int z = 0; z < cb_len; z++) {
1217  float side;
1218  side = c2[z] - alpha_re*c1[z] - alpha_im*dm_im[z];
1219  c2[z] = c1[z] - side;
1220  c1[z] = c1[z] + side;
1221  }
1222  }
1223  } else {
1224  for (int group = 0; group < (unsigned)g_len;
1225  group++, c1 += 128, c2 += 128, dm_im += 128) {
1226  for (int z = 0; z < cb_len; z++) {
1227  float mid;
1228  mid = c2[z] - alpha_re*c1[z] - alpha_im*dm_im[z];
1229  c2[z] = mid - c1[z];
1230  c1[z] = mid + c1[z];
1231  }
1232  }
1233  }
1234  }
1235 
1236  coef1 += g_len << 7;
1237  coef2 += g_len << 7;
1238  dmix_im += g_len << 7;
1239  }
1240 }
1241 
1242 static const float *complex_stereo_get_filter(ChannelElement *cpe, int is_prev)
1243 {
1244  int win, shape;
1245  if (!is_prev) {
1246  switch (cpe->ch[0].ics.window_sequence[0]) {
1247  default:
1248  case ONLY_LONG_SEQUENCE:
1249  case EIGHT_SHORT_SEQUENCE:
1250  win = 0;
1251  break;
1252  case LONG_START_SEQUENCE:
1253  win = 1;
1254  break;
1255  case LONG_STOP_SEQUENCE:
1256  win = 2;
1257  break;
1258  }
1259 
1260  if (cpe->ch[0].ics.use_kb_window[0] == 0 &&
1261  cpe->ch[0].ics.use_kb_window[1] == 0)
1262  shape = 0;
1263  else if (cpe->ch[0].ics.use_kb_window[0] == 1 &&
1264  cpe->ch[0].ics.use_kb_window[1] == 1)
1265  shape = 1;
1266  else if (cpe->ch[0].ics.use_kb_window[0] == 0 &&
1267  cpe->ch[0].ics.use_kb_window[1] == 1)
1268  shape = 2;
1269  else if (cpe->ch[0].ics.use_kb_window[0] == 1 &&
1270  cpe->ch[0].ics.use_kb_window[1] == 0)
1271  shape = 3;
1272  else
1273  shape = 3;
1274  } else {
1275  win = cpe->ch[0].ics.window_sequence[0] == LONG_STOP_SEQUENCE;
1276  shape = cpe->ch[0].ics.use_kb_window[1];
1277  }
1278 
1279  return ff_aac_usac_mdst_filt_cur[win][shape];
1280 }
1281 
1283  ChannelElement *cpe, int nb_channels)
1284 {
1285  AACUsacStereo *us = &cpe->us;
1286 
1287  for (int ch = 0; ch < nb_channels; ch++) {
1288  SingleChannelElement *sce = &cpe->ch[ch];
1289  AACUsacElemData *ue = &sce->ue;
1290 
1291  spectrum_scale(ac, sce, ue);
1292  }
1293 
1294  if (nb_channels > 1 && us->common_window) {
1295  for (int ch = 0; ch < nb_channels; ch++) {
1296  SingleChannelElement *sce = &cpe->ch[ch];
1297 
1298  /* Apply TNS, if the tns_on_lr bit is not set. */
1299  if (sce->tns.present && !us->tns_on_lr)
1300  ac->dsp.apply_tns(sce->coeffs, &sce->tns, &sce->ics, 1);
1301  }
1302 
1303  if (us->ms_mask_mode == 3) {
1304  const float *filt;
1305  complex_stereo_downmix_cur(ac, cpe, us->dmix_re);
1306  complex_stereo_downmix_prev(ac, cpe, us->prev_dmix_re);
1307 
1308  filt = complex_stereo_get_filter(cpe, 0);
1309  complex_stereo_interpolate_imag(us->dmix_im, us->dmix_re, filt,
1310  usac->core_frame_len, 1, 1);
1311  if (us->use_prev_frame) {
1312  filt = complex_stereo_get_filter(cpe, 1);
1313  complex_stereo_interpolate_imag(us->dmix_im, us->prev_dmix_re, filt,
1314  usac->core_frame_len, -1, 1);
1315  }
1316 
1317  apply_complex_stereo(ac, cpe);
1318  } else if (us->ms_mask_mode > 0) {
1319  ac->dsp.apply_mid_side_stereo(ac, cpe);
1320  }
1321  }
1322 
1323  /* Save coefficients and alpha values for prediction reasons */
1324  if (nb_channels > 1) {
1325  AACUsacStereo *us = &cpe->us;
1326  for (int ch = 0; ch < nb_channels; ch++) {
1327  SingleChannelElement *sce = &cpe->ch[ch];
1328  memcpy(sce->prev_coeffs, sce->coeffs, sizeof(sce->coeffs));
1329  }
1330  memcpy(us->prev_alpha_q_re, us->alpha_q_re, sizeof(us->alpha_q_re));
1331  memcpy(us->prev_alpha_q_im, us->alpha_q_im, sizeof(us->alpha_q_im));
1332  }
1333 
1334  for (int ch = 0; ch < nb_channels; ch++) {
1335  SingleChannelElement *sce = &cpe->ch[ch];
1336 
1337  /* Apply TNS, if it hasn't been applied yet. */
1338  if (sce->tns.present && ((nb_channels == 1) || (us->tns_on_lr)))
1339  ac->dsp.apply_tns(sce->coeffs, &sce->tns, &sce->ics, 1);
1340 
1341  ac->oc[1].m4ac.frame_length_short ? ac->dsp.imdct_and_windowing_768(ac, sce) :
1342  ac->dsp.imdct_and_windowing(ac, sce);
1343  }
1344 }
1345 
1348  GetBitContext *gb, int indep_flag, int nb_channels)
1349 {
1350  int ret;
1351  int arith_reset_flag;
1352  AACUsacStereo *us = &che->us;
1353  int core_nb_channels = nb_channels;
1354 
1355  /* Local symbols */
1356  uint8_t global_gain;
1357 
1358  us->common_window = 0;
1359 
1360  for (int ch = 0; ch < core_nb_channels; ch++) {
1361  SingleChannelElement *sce = &che->ch[ch];
1362  AACUsacElemData *ue = &sce->ue;
1363 
1364  sce->tns.present = 0;
1365  ue->tns_data_present = 0;
1366 
1367  ue->core_mode = get_bits1(gb);
1368  }
1369 
1370  if (nb_channels > 1 && ec->stereo_config_index == 1)
1371  core_nb_channels = 1;
1372 
1373  if (core_nb_channels == 2) {
1374  ret = decode_usac_stereo_info(ac, usac, ec, che, gb, indep_flag);
1375  if (ret)
1376  return ret;
1377  }
1378 
1379  for (int ch = 0; ch < core_nb_channels; ch++) {
1380  SingleChannelElement *sce = &che->ch[ch];
1381  IndividualChannelStream *ics = &sce->ics;
1382  AACUsacElemData *ue = &sce->ue;
1383 
1384  if (ue->core_mode) { /* lpd_channel_stream */
1385  ret = ff_aac_ldp_parse_channel_stream(ac, usac, ue, gb);
1386  if (ret < 0)
1387  return ret;
1388  continue;
1389  }
1390 
1391  if ((core_nb_channels == 1) ||
1392  (che->ch[0].ue.core_mode != che->ch[1].ue.core_mode))
1393  ue->tns_data_present = get_bits1(gb);
1394 
1395  /* fd_channel_stream */
1396  global_gain = get_bits(gb, 8);
1397 
1398  ue->noise.level = 0;
1399  if (ec->noise_fill) {
1400  ue->noise.level = get_bits(gb, 3);
1401  ue->noise.offset = get_bits(gb, 5);
1402  }
1403 
1404  if (!us->common_window) {
1405  /* ics_info() */
1406  ics->window_sequence[1] = ics->window_sequence[0];
1407  ics->window_sequence[0] = get_bits(gb, 2);
1408  ics->use_kb_window[1] = ics->use_kb_window[0];
1409  ics->use_kb_window[0] = get_bits1(gb);
1410  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1411  ics->max_sfb = get_bits(gb, 4);
1412  ue->scale_factor_grouping = get_bits(gb, 7);
1413  } else {
1414  ics->max_sfb = get_bits(gb, 6);
1415  }
1416 
1417  ret = setup_sce(ac, sce, usac);
1418  if (ret < 0)
1419  return ret;
1420  }
1421 
1422  if (ec->tw_mdct && !us->common_tw) {
1423  /* tw_data() */
1424  if (get_bits1(gb)) { /* tw_data_present */
1425  /* Time warping is not supported in baseline profile streams. */
1427  "AAC USAC timewarping");
1428  return AVERROR_PATCHWELCOME;
1429  }
1430  }
1431 
1432  ret = decode_usac_scale_factors(ac, sce, gb, global_gain);
1433  if (ret < 0)
1434  return ret;
1435 
1436  if (ue->tns_data_present) {
1437  sce->tns.present = 1;
1438  ret = ff_aac_decode_tns(ac, &sce->tns, gb, ics);
1439  if (ret < 0)
1440  return ret;
1441  }
1442 
1443  /* ac_spectral_data */
1444  arith_reset_flag = indep_flag;
1445  if (!arith_reset_flag)
1446  arith_reset_flag = get_bits1(gb);
1447 
1448  /* Decode coeffs */
1449  memset(&sce->coeffs[0], 0, 1024*sizeof(float));
1450  for (int win = 0; win < ics->num_windows; win++) {
1451  int lg = ics->swb_offset[ics->max_sfb];
1452  int N;
1453  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE)
1454  N = usac->core_frame_len / 8;
1455  else
1456  N = usac->core_frame_len;
1457 
1458  ret = decode_spectrum_ac(ac, sce->coeffs + win*128, gb, &ue->ac,
1459  arith_reset_flag && (win == 0), lg, N);
1460  if (ret < 0)
1461  return ret;
1462  }
1463 
1464  if (get_bits1(gb)) { /* fac_data_present */
1465  const uint16_t len_8 = usac->core_frame_len / 8;
1466  const uint16_t len_16 = usac->core_frame_len / 16;
1467  const uint16_t fac_len = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE ? len_16 : len_8;
1468  ret = ff_aac_parse_fac_data(ue, gb, 1, fac_len);
1469  if (ret < 0)
1470  return ret;
1471  }
1472  }
1473 
1474  if (ec->sbr.ratio) {
1475  int sbr_ch = nb_channels;
1476  if (nb_channels == 2 &&
1477  !(ec->stereo_config_index == 0 || ec->stereo_config_index == 3))
1478  sbr_ch = 1;
1479 
1480  ret = ff_aac_sbr_decode_usac_data(ac, che, ec, gb, sbr_ch, indep_flag);
1481  if (ret < 0)
1482  return ret;
1483  }
1484 
1485  if (ec->stereo_config_index) {
1486  avpriv_report_missing_feature(ac->avctx, "AAC USAC Mps212");
1487  return AVERROR_PATCHWELCOME;
1488  }
1489 
1490  spectrum_decode(ac, usac, che, core_nb_channels);
1491 
1492  if (ac->oc[1].m4ac.sbr > 0) {
1493  ac->proc.sbr_apply(ac, che, nb_channels == 2 ? TYPE_CPE : TYPE_SCE,
1494  che->ch[0].output,
1495  che->ch[1].output);
1496  }
1497 
1498  return 0;
1499 }
1500 
1502 {
1503  int ret = 0;
1504  GetBitContext gbc;
1505  OutputConfiguration *oc = &ac->oc[1];
1506  MPEG4AudioConfig *m4ac = &oc->m4ac;
1507  MPEG4AudioConfig m4ac_bak = oc->m4ac;
1508  uint8_t temp_data[512];
1509  uint8_t *tmp_buf = temp_data;
1510  size_t tmp_buf_size = sizeof(temp_data);
1511 
1512  av_unused int crossfade;
1513  int num_preroll_frames;
1514 
1515  int config_len = get_escaped_value(gb, 4, 4, 8);
1516 
1517  /* Implementations are free to pad the config to any length, so use a
1518  * different reader for this. */
1519  gbc = *gb;
1520  ret = ff_aac_usac_config_decode(ac, ac->avctx, &gbc, oc, m4ac->chan_config);
1521  if (ret < 0) {
1522  *m4ac = m4ac_bak;
1523  return ret;
1524  } else {
1525  ac->oc[1].m4ac.chan_config = 0;
1526  }
1527 
1528  /* 7.18.3.3 Bitrate adaption
1529  * If configuration didn't change after applying preroll, continue
1530  * without decoding it. */
1531  if (!memcmp(m4ac, &m4ac_bak, sizeof(m4ac_bak)))
1532  return 0;
1533 
1534  skip_bits_long(gb, config_len*8);
1535 
1536  crossfade = get_bits1(gb); /* applyCrossfade */
1537  skip_bits1(gb); /* reserved */
1538  num_preroll_frames = get_escaped_value(gb, 2, 4, 0); /* numPreRollFrames */
1539 
1540  for (int i = 0; i < num_preroll_frames; i++) {
1541  int got_frame_ptr = 0;
1542  int au_len = get_escaped_value(gb, 16, 16, 0);
1543 
1544  if (au_len*8 > tmp_buf_size) {
1545  uint8_t *tmp2;
1546  tmp_buf = tmp_buf == temp_data ? NULL : tmp_buf;
1547  tmp2 = av_realloc_array(tmp_buf, au_len, 8);
1548  if (!tmp2) {
1549  if (tmp_buf != temp_data)
1550  av_free(tmp_buf);
1551  return AVERROR(ENOMEM);
1552  }
1553  tmp_buf = tmp2;
1554  }
1555 
1556  /* Byte alignment is not guaranteed. */
1557  for (int i = 0; i < au_len; i++)
1558  tmp_buf[i] = get_bits(gb, 8);
1559 
1560  ret = init_get_bits8(&gbc, tmp_buf, au_len);
1561  if (ret < 0)
1562  break;
1563 
1564  ret = ff_aac_usac_decode_frame(ac->avctx, ac, &gbc, &got_frame_ptr);
1565  if (ret < 0)
1566  break;
1567  }
1568 
1569  if (tmp_buf != temp_data)
1570  av_free(tmp_buf);
1571 
1572  return 0;
1573 }
1574 
1576  GetBitContext *gb)
1577 {
1578  uint8_t pl_frag_start = 1;
1579  uint8_t pl_frag_end = 1;
1580  uint32_t len;
1581 
1582  if (!get_bits1(gb)) /* usacExtElementPresent */
1583  return 0;
1584 
1585  if (get_bits1(gb)) { /* usacExtElementUseDefaultLength */
1586  len = e->ext.default_len;
1587  } else {
1588  len = get_bits(gb, 8); /* usacExtElementPayloadLength */
1589  if (len == 255)
1590  len += get_bits(gb, 16) - 2;
1591  }
1592 
1593  if (!len)
1594  return 0;
1595 
1596  if (e->ext.payload_frag) {
1597  pl_frag_start = get_bits1(gb); /* usacExtElementStart */
1598  pl_frag_end = get_bits1(gb); /* usacExtElementStop */
1599  }
1600 
1601  if (pl_frag_start)
1602  e->ext.pl_data_offset = 0;
1603 
1604  /* If an extension starts and ends this packet, we can directly use it below.
1605  * Otherwise, we have to copy it to a buffer and accumulate it. */
1606  if (!(pl_frag_start && pl_frag_end)) {
1607  /* Reallocate the data */
1608  uint8_t *tmp_buf = av_refstruct_alloc_ext(e->ext.pl_data_offset + len,
1610  NULL, NULL);
1611  if (!tmp_buf)
1612  return AVERROR(ENOMEM);
1613 
1614  /* Copy the data over only if we had saved data to begin with */
1615  if (e->ext.pl_buf)
1616  memcpy(tmp_buf, e->ext.pl_buf, e->ext.pl_data_offset);
1617 
1619  e->ext.pl_buf = tmp_buf;
1620 
1621  /* Readout data to a buffer */
1622  for (int i = 0; i < len; i++)
1623  e->ext.pl_buf[e->ext.pl_data_offset + i] = get_bits(gb, 8);
1624  }
1625 
1626  e->ext.pl_data_offset += len;
1627 
1628  if (pl_frag_end) {
1629  int ret = 0;
1630  int start_bits = get_bits_count(gb);
1631  const int pl_len = e->ext.pl_data_offset;
1632  GetBitContext *gb2 = gb;
1633  GetBitContext gbc;
1634  if (!(pl_frag_start && pl_frag_end)) {
1635  ret = init_get_bits8(&gbc, e->ext.pl_buf, pl_len);
1636  if (ret < 0)
1637  return ret;
1638 
1639  gb2 = &gbc;
1640  }
1641 
1642  switch (e->ext.type) {
1643  case ID_EXT_ELE_FILL:
1644  /* Filler elements have no usable payload */
1645  break;
1647  ret = parse_audio_preroll(ac, gb2);
1648  break;
1649  default:
1650  /* This should never happen */
1651  av_assert0(0);
1652  }
1654  if (ret < 0)
1655  return ret;
1656 
1657  skip_bits_long(gb, pl_len*8 - (get_bits_count(gb) - start_bits));
1658  }
1659 
1660  return 0;
1661 }
1662 
1664  GetBitContext *gb, int *got_frame_ptr)
1665 {
1666  int ret, is_dmono = 0;
1667  int indep_flag, samples = 0;
1668  int audio_found = 0;
1669  int elem_id[3 /* SCE, CPE, LFE */] = { 0, 0, 0 };
1670  AVFrame *frame = ac->frame;
1671 
1672  int ratio_mult, ratio_dec;
1673  AACUSACConfig *usac = &ac->oc[1].usac;
1674  int sbr_ratio = usac->core_sbr_frame_len_idx == 2 ? 2 :
1675  usac->core_sbr_frame_len_idx == 3 ? 3 :
1676  usac->core_sbr_frame_len_idx == 4 ? 1 :
1677  0;
1678 
1679  if (sbr_ratio == 2) {
1680  ratio_mult = 8;
1681  ratio_dec = 3;
1682  } else if (sbr_ratio == 3) {
1683  ratio_mult = 2;
1684  ratio_dec = 1;
1685  } else if (sbr_ratio == 4) {
1686  ratio_mult = 4;
1687  ratio_dec = 1;
1688  } else {
1689  ratio_mult = 1;
1690  ratio_dec = 1;
1691  }
1692 
1694  ac->oc[1].status, 0);
1695 
1697 
1698  indep_flag = get_bits1(gb);
1699 
1700  for (int i = 0; i < ac->oc[1].usac.nb_elems; i++) {
1701  int layout_id;
1702  int layout_type;
1703  AACUsacElemConfig *e = &ac->oc[1].usac.elems[i];
1704  ChannelElement *che;
1705 
1706  if (e->type == ID_USAC_SCE) {
1707  layout_id = elem_id[0]++;
1708  layout_type = TYPE_SCE;
1709  che = ff_aac_get_che(ac, TYPE_SCE, layout_id);
1710  } else if (e->type == ID_USAC_CPE) {
1711  layout_id = elem_id[1]++;
1712  layout_type = TYPE_CPE;
1713  che = ff_aac_get_che(ac, TYPE_CPE, layout_id);
1714  } else if (e->type == ID_USAC_LFE) {
1715  layout_id = elem_id[2]++;
1716  layout_type = TYPE_LFE;
1717  che = ff_aac_get_che(ac, TYPE_LFE, layout_id);
1718  }
1719 
1720  if (e->type != ID_USAC_EXT && !che) {
1721  av_log(ac->avctx, AV_LOG_ERROR,
1722  "channel element %d.%d is not allocated\n",
1723  layout_type, layout_id);
1724  return AVERROR_INVALIDDATA;
1725  }
1726 
1727  switch (e->type) {
1728  case ID_USAC_LFE:
1729  /* Fallthrough */
1730  case ID_USAC_SCE:
1731  ret = decode_usac_core_coder(ac, &ac->oc[1].usac, e, che, gb,
1732  indep_flag, 1);
1733  if (ret < 0)
1734  return ret;
1735 
1736  audio_found = 1;
1737  che->present = 1;
1738  break;
1739  case ID_USAC_CPE:
1740  ret = decode_usac_core_coder(ac, &ac->oc[1].usac, e, che, gb,
1741  indep_flag, 2);
1742  if (ret < 0)
1743  return ret;
1744 
1745  audio_found = 1;
1746  che->present = 1;
1747  break;
1748  case ID_USAC_EXT:
1749  ret = parse_ext_ele(ac, e, gb);
1750  if (ret < 0)
1751  return ret;
1752  break;
1753  }
1754  }
1755 
1756  if (audio_found)
1757  samples = ac->oc[1].m4ac.frame_length_short ? 768 : 1024;
1758 
1759  samples = (samples * ratio_mult) / ratio_dec;
1760 
1761  if (ac->oc[1].status && audio_found) {
1762  avctx->sample_rate = ac->oc[1].m4ac.ext_sample_rate;
1763  avctx->frame_size = samples;
1764  ac->oc[1].status = OC_LOCKED;
1765  }
1766 
1767  if (!frame->data[0] && samples) {
1768  av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
1769  return AVERROR_INVALIDDATA;
1770  }
1771 
1772  if (samples) {
1773  frame->nb_samples = samples;
1774  frame->sample_rate = avctx->sample_rate;
1775  frame->flags = indep_flag ? AV_FRAME_FLAG_KEY : 0x0;
1776  *got_frame_ptr = 1;
1777  } else {
1778  av_frame_unref(ac->frame);
1779  frame->flags = indep_flag ? AV_FRAME_FLAG_KEY : 0x0;
1780  *got_frame_ptr = 0;
1781  }
1782 
1783  /* for dual-mono audio (SCE + SCE) */
1784  is_dmono = ac->dmono_mode && elem_id[0] == 2 &&
1787  if (is_dmono) {
1788  if (ac->dmono_mode == 1)
1789  frame->data[1] = frame->data[0];
1790  else if (ac->dmono_mode == 2)
1791  frame->data[0] = frame->data[1];
1792  }
1793 
1794  return 0;
1795 }
MAX_ELEM_ID
#define MAX_ELEM_ID
Definition: aac.h:34
AACUsacElemConfig::stereo_config_index
uint8_t stereo_config_index
Definition: aacdec.h:303
AVCodecContext::frame_size
int frame_size
Number of samples per channel in an audio frame.
Definition: avcodec.h:1051
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:276
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
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:843
aacdec_ac.h
AACUSACConfig
Definition: aacdec.h:351
ID_EXT_ELE_SAOC
@ ID_EXT_ELE_SAOC
Definition: aacdec.h:90
AV_CHANNEL_LAYOUT_STEREO
#define AV_CHANNEL_LAYOUT_STEREO
Definition: channel_layout.h:395
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1024
AACUSACConfig::stream_identifier
uint16_t stream_identifier
Definition: aacdec.h:354
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:360
spectrum_decode
static void spectrum_decode(AACDecContext *ac, AACUSACConfig *usac, ChannelElement *cpe, int nb_channels)
Definition: aacdec_usac.c:1282
AACUsacElemConfig::payload_frag
uint8_t payload_frag
Definition: aacdec.h:344
AACUsacElemConfig::sbr
struct AACUsacElemConfig::@24 sbr
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:335
AV_CHAN_WIDE_LEFT
@ AV_CHAN_WIDE_LEFT
Definition: channel_layout.h:72
ID_USAC_LFE
@ ID_USAC_LFE
Definition: aacdec.h:77
ff_aac_ac_lsb_cdfs
const uint16_t ff_aac_ac_lsb_cdfs[3][4]
Definition: aactab.c:1331
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:250
AVChannelLayout::map
AVChannelCustom * map
This member must be used when the channel order is AV_CHANNEL_ORDER_CUSTOM.
Definition: channel_layout.h:370
av_unused
#define av_unused
Definition: attributes.h:131
AACUsacElemConfig::tw_mdct
uint8_t tw_mdct
Definition: aacdec.h:300
aacsbr.h
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:427
AV_CHAN_TOP_SURROUND_LEFT
@ AV_CHAN_TOP_SURROUND_LEFT
+110 degrees, Lvs, TpLS
Definition: channel_layout.h:84
complex_stereo_downmix_cur
static void complex_stereo_downmix_cur(AACDecContext *ac, ChannelElement *cpe, float *dmix_re)
Definition: aacdec_usac.c:1096
b
#define b
Definition: input.c:42
aacdec_usac.h
TemporalNoiseShaping::present
int present
Definition: aacdec.h:185
AACUsacElemData::scale_factor_grouping
uint8_t scale_factor_grouping
Definition: aacdec.h:127
AACUSACConfig::nb_info
uint8_t nb_info
Definition: aacdec.h:362
AACDecDSP::apply_tns
void(* apply_tns)(void *_coef_param, TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
Definition: aacdec.h:421
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
AACDecContext::proc
AACDecProc proc
Definition: aacdec.h:453
AACUsacElemConfig::bs_pvc
uint8_t bs_pvc
Definition: aacdec.h:310
c1
static const uint64_t c1
Definition: murmur3.c:52
AACUsacStereo::pred_dir
uint8_t pred_dir
Definition: aacdec.h:242
AACUsacElemData::tns_data_present
uint8_t tns_data_present
Definition: aacdec.h:128
ChannelElement::ch
SingleChannelElement ch[2]
Definition: aacdec.h:266
ff_aac_sample_rate_idx
static int ff_aac_sample_rate_idx(int rate)
Definition: aac.h:106
ff_swb_offset_128
const uint16_t *const ff_swb_offset_128[]
Definition: aactab.c:1940
ChannelElement::present
int present
Definition: aacdec.h:261
ID_CONFIG_EXT_STREAM_ID
@ ID_CONFIG_EXT_STREAM_ID
Definition: aacdec.h:84
ID_USAC_EXT
@ ID_USAC_EXT
Definition: aacdec.h:78
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:522
MPEG4AudioConfig
Definition: mpeg4audio.h:29
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:379
AACUsacElemConfig::pseudo_lr
uint8_t pseudo_lr
Definition: aacdec.h:338
IndividualChannelStream::num_swb
int num_swb
number of scalefactor window bands
Definition: aacdec.h:171
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:333
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:126
mpeg4audio.h
AACArith
Definition: aacdec_ac.h:34
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:1039
AV_CHAN_TOP_BACK_RIGHT
@ AV_CHAN_TOP_BACK_RIGHT
Definition: channel_layout.h:67
AACUsacElemConfig::dflt
struct AACUsacElemConfig::@24::@27 dflt
parse_ext_ele
static int parse_ext_ele(AACDecContext *ac, AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:1575
ID_EXT_ELE_AUDIOPREROLL
@ ID_EXT_ELE_AUDIOPREROLL
Definition: aacdec.h:91
TYPE_CPE
@ TYPE_CPE
Definition: aac.h:41
SFB_PER_PRED_BAND
#define SFB_PER_PRED_BAND
Definition: aacdec_usac.c:35
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:594
ue
#define ue(name, range_min, range_max)
Definition: cbs_h2645.c:254
AACUsacElemConfig::high_rate_mode
uint8_t high_rate_mode
Definition: aacdec.h:332
val
static double val(void *priv, double ch)
Definition: aeval.c:77
AACDecProc::sbr_apply
void(* sbr_apply)(AACDecContext *ac, ChannelElement *che, int id_aac, void *L, void *R)
Definition: aacdec.h:406
OutputConfiguration::status
enum OCStatus status
Definition: aacdec.h:372
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:328
refstruct.h
SingleChannelElement::ics
IndividualChannelStream ics
Definition: aacdec.h:211
cbrt
#define cbrt
Definition: tablegen.h:35
AACUsacElemConfig::pl_data_offset
uint32_t pl_data_offset
Definition: aacdec.h:346
ID_CONFIG_EXT_FILL
@ ID_CONFIG_EXT_FILL
Definition: aacdec.h:82
AACUsacElemConfig
Definition: aacdec.h:297
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:1136
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
AACUsacElemConfig::ext
struct AACUsacElemConfig::@26 ext
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
AACDecDSP::dequant_scalefactors
void(* dequant_scalefactors)(SingleChannelElement *sce)
Definition: aacdec.h:415
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:539
AACUsacElemConfig::residual_bands
uint8_t residual_bands
Definition: aacdec.h:337
AV_FRAME_FLAG_KEY
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition: frame.h:642
OC_GLOBAL_HDR
@ OC_GLOBAL_HDR
Output configuration set in a global header but not yet locked.
Definition: aacdec.h:56
s
#define s(width, name)
Definition: cbs_vp9.c:198
AACUsacElemConfig::harmonic_sbr
uint8_t harmonic_sbr
Definition: aacdec.h:308
AACDecDSP::apply_mid_side_stereo
void(* apply_mid_side_stereo)(AACDecContext *ac, ChannelElement *cpe)
Definition: aacdec.h:417
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
EIGHT_SHORT_SEQUENCE
@ EIGHT_SHORT_SEQUENCE
Definition: aac.h:62
info
MIPS optimizations info
Definition: mips.txt:2
decode_usac_scale_factors
static int decode_usac_scale_factors(AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb, uint8_t global_gain)
Definition: aacdec_usac.c:561
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:41
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:617
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
AACUsacElemData
Definition: aacdec.h:125
AACUSACConfig::core_sbr_frame_len_idx
uint8_t core_sbr_frame_len_idx
Definition: aacdec.h:352
IndividualChannelStream
Individual Channel Stream.
Definition: aacdec.h:162
UNIDRCLOUDEXT_TERM
@ UNIDRCLOUDEXT_TERM
Definition: aacdec.h:96
ID_USAC_CPE
@ ID_USAC_CPE
Definition: aacdec.h:76
SCALE_DIFF_ZERO
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference
Definition: aac.h:91
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:504
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:1663
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
decode_loudness_info
static int decode_loudness_info(AACDecContext *ac, AACUSACLoudnessInfo *info, GetBitContext *gb)
Definition: aacdec_usac.c:86
AV_CHAN_SIDE_SURROUND_LEFT
@ AV_CHAN_SIDE_SURROUND_LEFT
+90 degrees, Lss, SiL
Definition: channel_layout.h:82
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
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
AACUsacElemData::seed
unsigned int seed
Definition: aacdec.h:146
AACUSACConfig::core_frame_len
uint16_t core_frame_len
Definition: aacdec.h:353
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:165
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:166
ff_tns_max_bands_usac_128
const uint8_t ff_tns_max_bands_usac_128[]
Definition: aactab.c:1994
AACUSACConfig::loudness
struct AACUSACConfig::@28 loudness
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:386
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:264
parse_audio_preroll
static int parse_audio_preroll(AACDecContext *ac, GetBitContext *gb)
Definition: aacdec_usac.c:1501
get_escaped_value
static uint32_t get_escaped_value(GetBitContext *gb, int nb1, int nb2, int nb3)
Definition: aacdec_usac.c:37
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:301
AV_CHAN_TOP_CENTER
@ AV_CHAN_TOP_CENTER
Definition: channel_layout.h:61
AAC_CHANNEL_FRONT
@ AAC_CHANNEL_FRONT
Definition: aac.h:78
AACUsacElemConfig::temp_shape_config
uint8_t temp_shape_config
Definition: aacdec.h:330
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:646
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:689
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:1035
AACUsacStereo
Definition: aacdec.h:232
OC_LOCKED
@ OC_LOCKED
Output configuration locked in place.
Definition: aacdec.h:57
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:167
get_unary
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
Definition: unary.h:46
AACUsacElemConfig::default_len
uint32_t default_len
Definition: aacdec.h:345
OutputConfiguration::layout_map_tags
int layout_map_tags
Definition: aacdec.h:370
SingleChannelElement::ue
AACUsacElemData ue
USAC element data.
Definition: aacdec.h:212
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:369
AACUsacElemConfig::bs_intertes
uint8_t bs_intertes
Definition: aacdec.h:309
IndividualChannelStream::window_sequence
enum WindowSequence window_sequence[2]
Definition: aacdec.h:164
AACDecContext::dsp
AACDecDSP dsp
Definition: aacdec.h:452
f
f
Definition: af_crystalizer.c:122
ff_swb_offset_1024
const uint16_t *const ff_swb_offset_1024[]
Definition: aactab.c:1900
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:60
AACDecDSP::imdct_and_windowing
void(* imdct_and_windowing)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:436
ChannelElement::max_sfb_ste
uint8_t max_sfb_ste
(USAC) Maximum of both max_sfb values
Definition: aacdec.h:263
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:69
SingleChannelElement::sfo
int sfo[128]
scalefactor offsets
Definition: aacdec.h:215
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:270
OutputConfiguration
Definition: aacdec.h:367
ff_aac_usac_mdst_filt_cur
const float ff_aac_usac_mdst_filt_cur[4][4][7]
Definition: aactab.c:3885
AACUsacElemConfig::mps
struct AACUsacElemConfig::@25 mps
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:885
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:411
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
SingleChannelElement::band_type
enum BandType band_type[128]
band types
Definition: aacdec.h:214
AACUsacElemConfig::fixed_gain
uint8_t fixed_gain
Definition: aacdec.h:329
ID_CONFIG_EXT_LOUDNESS_INFO
@ ID_CONFIG_EXT_LOUDNESS_INFO
Definition: aacdec.h:83
unary.h
SingleChannelElement::output
float * output
PCM output.
Definition: aacdec.h:227
av_channel_layout_compare
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
Definition: channel_layout.c:809
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:232
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:993
AV_CHAN_TOP_SURROUND_RIGHT
@ AV_CHAN_TOP_SURROUND_RIGHT
-110 degrees, Rvs, TpRS
Definition: channel_layout.h:85
RawDataBlockType
RawDataBlockType
Definition: aac.h:39
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:210
ff_swb_offset_768
const uint16_t *const ff_swb_offset_768[]
Definition: aactab.c:1916
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
decode_usac_element_pair
static int decode_usac_element_pair(AACDecContext *ac, AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:203
IndividualChannelStream::num_windows
int num_windows
Definition: aacdec.h:172
OutputConfiguration::usac
AACUSACConfig usac
Definition: aacdec.h:373
LONG_STOP_SEQUENCE
@ LONG_STOP_SEQUENCE
Definition: aac.h:63
usac_ch_pos_to_av
static enum AVChannel usac_ch_pos_to_av[64]
Definition: aacdec_usac.c:51
ChannelElement
channel element - generic struct for SCE/CPE/CCE/LFE
Definition: aacdec.h:260
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:170
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:298
TYPE_LFE
@ TYPE_LFE
Definition: aac.h:43
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:1242
MPEG4AudioConfig::chan_config
int chan_config
Definition: mpeg4audio.h:33
AACUsacElemConfig::decorr_config
uint8_t decorr_config
Definition: aacdec.h:331
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:40
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:1065
AACDecContext::oc
OutputConfiguration oc[2]
Definition: aacdec.h:527
MPEG4AudioConfig::ext_sample_rate
int ext_sample_rate
Definition: mpeg4audio.h:37
IndividualChannelStream::tns_max_bands
int tns_max_bands
Definition: aacdec.h:173
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:357
ID_EXT_ELE_UNI_DRC
@ ID_EXT_ELE_UNI_DRC
Definition: aacdec.h:92
AAC_CHANNEL_LFE
@ AAC_CHANNEL_LFE
Definition: aac.h:81
decode_usac_sbr_data
static int decode_usac_sbr_data(AACDecContext *ac, AACUsacElemConfig *e, GetBitContext *gb)
Definition: aacdec_usac.c:151
ret
ret
Definition: filter_design.txt:187
ff_aac_num_swb_1024
const uint8_t ff_aac_num_swb_1024[]
Definition: aactab.c:149
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:455
decode_usac_element_core
static void decode_usac_element_core(AACUsacElemConfig *e, GetBitContext *gb, int sbr_ratio)
Definition: aacdec_usac.c:194
LONG_START_SEQUENCE
@ LONG_START_SEQUENCE
Definition: aac.h:61
UNIDRCLOUDEXT_EQ
@ UNIDRCLOUDEXT_EQ
Definition: aacdec.h:97
id
enum AVCodecID id
Definition: dts2pts.c:367
aacdec_lpd.h
AV_CHAN_BACK_CENTER
@ AV_CHAN_BACK_CENTER
Definition: channel_layout.h:58
SingleChannelElement::tns
TemporalNoiseShaping tns
Definition: aacdec.h:213
U
#define U(x)
Definition: vpx_arith.h:37
AACDecContext
main AAC decoding context
Definition: aacdec.h:448
AACUSACConfig::info
AACUSACLoudnessInfo info[64]
Definition: aacdec.h:363
AVCodecContext
main external API structure.
Definition: avcodec.h:431
c2
static const uint64_t c2
Definition: murmur3.c:53
state
static struct @521 state
AV_CHAN_LOW_FREQUENCY_2
@ AV_CHAN_LOW_FREQUENCY_2
Definition: channel_layout.h:76
AACDecContext::avctx
struct AVCodecContext * avctx
Definition: aacdec.h:450
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:985
apply_complex_stereo
static void apply_complex_stereo(AACDecContext *ac, ChannelElement *cpe)
Definition: aacdec_usac.c:1190
aacdec_tab.h
setup_sce
static int setup_sce(AACDecContext *ac, SingleChannelElement *sce, AACUSACConfig *usac)
Definition: aacdec_usac.c:780
AACUSACLoudnessInfo
Definition: aacdec.h:273
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1618
av_channel_layout_uninit
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
Definition: channel_layout.c:442
cm
#define cm
Definition: dvbsubdec.c:40
AACUsacElemConfig::env_quant_mode
uint8_t env_quant_mode
Definition: aacdec.h:339
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:1584
ff_aac_usac_reset_state
int ff_aac_usac_reset_state(AACDecContext *ac, OutputConfiguration *oc)
Definition: aacdec_usac.c:276
AV_CHAN_BOTTOM_FRONT_CENTER
@ AV_CHAN_BOTTOM_FRONT_CENTER
Definition: channel_layout.h:79
AACUsacElemConfig::ratio
int ratio
Definition: aacdec.h:306
decode_loudness_set
static int decode_loudness_set(AACDecContext *ac, AACUSACConfig *usac, GetBitContext *gb)
Definition: aacdec_usac.c:112
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:449
OutputConfiguration::m4ac
MPEG4AudioConfig m4ac
Definition: aacdec.h:368
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:356
us
#define us(width, name, range_min, range_max, subs,...)
Definition: cbs_apv.c:72
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:371
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:1346
AACDecDSP::imdct_and_windowing_768
void(* imdct_and_windowing_768)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:437
MPEG4AudioConfig::frame_length_short
int frame_length_short
Definition: mpeg4audio.h:41
ID_EXT_ELE_MPEGS
@ ID_EXT_ELE_MPEGS
Definition: aacdec.h:89
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
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
AVChannelLayout::u
union AVChannelLayout::@472 u
Details about which channels are present in this layout.
AV_CHAN_TOP_FRONT_LEFT
@ AV_CHAN_TOP_FRONT_LEFT
Definition: channel_layout.h:62
AACUsacElemData::noise
struct AACUsacElemData::@15 noise
IndividualChannelStream::max_sfb
uint8_t max_sfb
number of scalefactor bands per group
Definition: aacdec.h:163
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
AV_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:577
AACArithState
Definition: aacdec_ac.h:27
AACUsacElemConfig::residual_coding
uint8_t residual_coding
Definition: aacdec.h:336
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:335
AACUSACLoudnessExt
AACUSACLoudnessExt
Definition: aacdec.h:95
IndividualChannelStream::group_len
uint8_t group_len[8]
Definition: aacdec.h:168
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:347
AV_PROFILE_AAC_USAC
#define AV_PROFILE_AAC_USAC
Definition: defs.h:76
AACUsacElemConfig::phase_coding
uint8_t phase_coding
Definition: aacdec.h:333
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:481
ID_EXT_ELE_FILL
@ ID_EXT_ELE_FILL
Definition: aacdec.h:88
AACUSACConfig::album_info
AACUSACLoudnessInfo album_info[64]
Definition: aacdec.h:361
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:237
ID_USAC_SCE
@ ID_USAC_SCE
Definition: aacdec.h:75