FFmpeg
aacdec.c
Go to the documentation of this file.
1 /*
2  * Common parts of the AAC decoders
3  * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org )
4  * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com )
5  * Copyright (c) 2008-2013 Alex Converse <alex.converse@gmail.com>
6  *
7  * AAC LATM decoder
8  * Copyright (c) 2008-2010 Paul Kendall <paul@kcbbs.gen.nz>
9  * Copyright (c) 2010 Janne Grunau <janne-libav@jannau.net>
10  *
11  * AAC decoder fixed-point implementation
12  * Copyright (c) 2013
13  * MIPS Technologies, Inc., California.
14  *
15  * This file is part of FFmpeg.
16  *
17  * FFmpeg is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  *
22  * FFmpeg is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25  * Lesser General Public License for more details.
26  *
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with FFmpeg; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31 
32 /* We use several quantization functions here (Q31, Q30),
33  * for which we need this to be defined for them to work as expected. */
34 #define USE_FIXED 1
35 
36 #include "config_components.h"
37 
38 #include <limits.h>
39 #include <stddef.h>
40 
41 #include "aacdec.h"
42 #include "aacdec_tab.h"
43 #include "aacdec_usac.h"
44 
45 #include "libavcodec/aac.h"
46 #include "libavcodec/aac_defines.h"
47 #include "libavcodec/aacsbr.h"
48 #include "libavcodec/aactab.h"
49 #include "libavcodec/adts_header.h"
50 
51 #include "libavcodec/avcodec.h"
52 #include "libavcodec/internal.h"
54 #include "libavcodec/decode.h"
55 #include "libavcodec/profiles.h"
56 
57 #include "libavutil/attributes.h"
58 #include "libavutil/error.h"
59 #include "libavutil/log.h"
60 #include "libavutil/macros.h"
61 #include "libavutil/mem.h"
62 #include "libavutil/opt.h"
63 #include "libavutil/tx.h"
64 #include "libavutil/version.h"
65 #include "libavutil/refstruct.h"
66 
67 /*
68  * supported tools
69  *
70  * Support? Name
71  * N (code in SoC repo) gain control
72  * Y block switching
73  * Y window shapes - standard
74  * N window shapes - Low Delay
75  * Y filterbank - standard
76  * N (code in SoC repo) filterbank - Scalable Sample Rate
77  * Y Temporal Noise Shaping
78  * Y Long Term Prediction
79  * Y intensity stereo
80  * Y channel coupling
81  * Y frequency domain prediction
82  * Y Perceptual Noise Substitution
83  * Y Mid/Side stereo
84  * N Scalable Inverse AAC Quantization
85  * N Frequency Selective Switch
86  * N upsampling filter
87  * Y quantization & coding - AAC
88  * N quantization & coding - TwinVQ
89  * N quantization & coding - BSAC
90  * N AAC Error Resilience tools
91  * N Error Resilience payload syntax
92  * N Error Protection tool
93  * N CELP
94  * N Silence Compression
95  * N HVXC
96  * N HVXC 4kbits/s VR
97  * N Structured Audio tools
98  * N Structured Audio Sample Bank Format
99  * N MIDI
100  * N Harmonic and Individual Lines plus Noise
101  * N Text-To-Speech Interface
102  * Y Spectral Band Replication
103  * Y (not in this code) Layer-1
104  * Y (not in this code) Layer-2
105  * Y (not in this code) Layer-3
106  * N SinuSoidal Coding (Transient, Sinusoid, Noise)
107  * Y Parametric Stereo
108  * N Direct Stream Transfer
109  * Y (not in fixed point code) Enhanced AAC Low Delay (ER AAC ELD)
110  *
111  * Note: - HE AAC v1 comprises LC AAC with Spectral Band Replication.
112  * - HE AAC v2 comprises LC AAC with Spectral Band Replication and
113  Parametric Stereo.
114  */
115 
116 #define overread_err "Input buffer exhausted before END element found\n"
117 
118 static int count_channels(uint8_t (*layout)[3], int tags)
119 {
120  int i, sum = 0;
121  for (i = 0; i < tags; i++) {
122  int syn_ele = layout[i][0];
123  int pos = layout[i][2];
124  sum += (1 + (syn_ele == TYPE_CPE)) *
126  }
127  return sum;
128 }
129 
130 /**
131  * Check for the channel element in the current channel position configuration.
132  * If it exists, make sure the appropriate element is allocated and map the
133  * channel order to match the internal FFmpeg channel layout.
134  *
135  * @param che_pos current channel position configuration
136  * @param type channel element type
137  * @param id channel element id
138  * @param channels count of the number of channels in the configuration
139  *
140  * @return Returns error status. 0 - OK, !0 - error
141  */
143  enum ChannelPosition che_pos,
144  int type, int id, int *channels)
145 {
146  if (*channels >= MAX_CHANNELS)
147  return AVERROR_INVALIDDATA;
148  if (che_pos) {
149  if (!ac->che[type][id]) {
150  int ret = ac->proc.sbr_ctx_alloc_init(ac, &ac->che[type][id], type);
151  if (ret < 0)
152  return ret;
153  }
154  if (type != TYPE_CCE) {
155  if (*channels >= MAX_CHANNELS - (type == TYPE_CPE || (type == TYPE_SCE && ac->oc[1].m4ac.ps == 1))) {
156  av_log(ac->avctx, AV_LOG_ERROR, "Too many channels\n");
157  return AVERROR_INVALIDDATA;
158  }
159  ac->output_element[(*channels)++] = &ac->che[type][id]->ch[0];
160  if (type == TYPE_CPE ||
161  (type == TYPE_SCE && ac->oc[1].m4ac.ps == 1)) {
162  ac->output_element[(*channels)++] = &ac->che[type][id]->ch[1];
163  }
164  }
165  } else {
166  if (ac->che[type][id]) {
167  for (int i = 0; i < FF_ARRAY_ELEMS(ac->tag_che_map); i++) {
168  for (int j = 0; j < MAX_ELEM_ID; j++) {
169  if (ac->tag_che_map[i][j] == ac->che[type][id])
170  ac->tag_che_map[i][j] = NULL;
171  }
172  }
173  ac->proc.sbr_ctx_close(ac->che[type][id]);
174  }
175  av_freep(&ac->che[type][id]);
176  memset(ac->output_element, 0, sizeof(ac->output_element));
177  }
178  return 0;
179 }
180 
182 {
183  AACDecContext *ac = avctx->priv_data;
184  int type, id, ch, ret;
185 
186  /* set channel pointers to internal buffers by default */
187  for (type = 0; type < 4; type++) {
188  for (id = 0; id < MAX_ELEM_ID; id++) {
189  ChannelElement *che = ac->che[type][id];
190  if (che) {
191  che->ch[0].output = che->ch[0].ret_buf;
192  che->ch[1].output = che->ch[1].ret_buf;
193  }
194  }
195  }
196 
197  /* get output buffer */
198  av_frame_unref(ac->frame);
199  if (!avctx->ch_layout.nb_channels)
200  return 1;
201 
202  ac->frame->nb_samples = 2048;
203  if ((ret = ff_get_buffer(avctx, ac->frame, 0)) < 0)
204  return ret;
205 
206  /* map output channel pointers to AVFrame data */
207  for (ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
208  if (ac->output_element[ch])
209  ac->output_element[ch]->output = (void *)ac->frame->extended_data[ch];
210  }
211 
212  return 0;
213 }
214 
216  uint64_t av_position;
217  uint8_t syn_ele;
218  uint8_t elem_id;
219  uint8_t aac_position;
220 };
221 
222 static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
223  uint8_t (*layout_map)[3], int offset, uint64_t left,
224  uint64_t right, int pos, uint64_t *layout)
225 {
226  if (layout_map[offset][0] == TYPE_CPE) {
227  e2c_vec[offset] = (struct elem_to_channel) {
228  .av_position = left | right,
229  .syn_ele = TYPE_CPE,
230  .elem_id = layout_map[offset][1],
231  .aac_position = pos
232  };
233  if (e2c_vec[offset].av_position != UINT64_MAX)
234  *layout |= e2c_vec[offset].av_position;
235 
236  return 1;
237  } else {
238  e2c_vec[offset] = (struct elem_to_channel) {
239  .av_position = left,
240  .syn_ele = TYPE_SCE,
241  .elem_id = layout_map[offset][1],
242  .aac_position = pos
243  };
244  e2c_vec[offset + 1] = (struct elem_to_channel) {
245  .av_position = right,
246  .syn_ele = TYPE_SCE,
247  .elem_id = layout_map[offset + 1][1],
248  .aac_position = pos
249  };
250  if (left != UINT64_MAX)
251  *layout |= left;
252 
253  if (right != UINT64_MAX)
254  *layout |= right;
255 
256  return 2;
257  }
258 }
259 
260 static int count_paired_channels(uint8_t (*layout_map)[3], int tags, int pos,
261  int current)
262 {
263  int num_pos_channels = 0;
264  int first_cpe = 0;
265  int sce_parity = 0;
266  int i;
267  for (i = current; i < tags; i++) {
268  if (layout_map[i][2] != pos)
269  break;
270  if (layout_map[i][0] == TYPE_CPE) {
271  if (sce_parity) {
272  if (pos == AAC_CHANNEL_FRONT && !first_cpe) {
273  sce_parity = 0;
274  } else {
275  return -1;
276  }
277  }
278  num_pos_channels += 2;
279  first_cpe = 1;
280  } else {
281  num_pos_channels++;
282  sce_parity ^= (pos != AAC_CHANNEL_LFE);
283  }
284  }
285  if (sce_parity &&
286  (pos == AAC_CHANNEL_FRONT && first_cpe))
287  return -1;
288 
289  return num_pos_channels;
290 }
291 
292 static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t (*layout_map)[3],
293  uint64_t *layout, int tags, int layer, int pos, int *current)
294 {
295  int i = *current, j = 0;
296  int nb_channels = count_paired_channels(layout_map, tags, pos, i);
297 
298  if (nb_channels < 0 || nb_channels > 5)
299  return 0;
300 
301  if (pos == AAC_CHANNEL_LFE) {
302  while (nb_channels) {
303  if (ff_aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE)
304  return -1;
305  e2c_vec[i] = (struct elem_to_channel) {
306  .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][j],
307  .syn_ele = layout_map[i][0],
308  .elem_id = layout_map[i][1],
309  .aac_position = pos
310  };
311  *layout |= e2c_vec[i].av_position;
312  i++;
313  j++;
314  nb_channels--;
315  }
316  *current = i;
317 
318  return 0;
319  }
320 
321  while (nb_channels & 1) {
322  if (ff_aac_channel_map[layer][pos - 1][0] == AV_CHAN_NONE)
323  return -1;
324  if (ff_aac_channel_map[layer][pos - 1][0] == AV_CHAN_UNUSED)
325  break;
326  e2c_vec[i] = (struct elem_to_channel) {
327  .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][0],
328  .syn_ele = layout_map[i][0],
329  .elem_id = layout_map[i][1],
330  .aac_position = pos
331  };
332  *layout |= e2c_vec[i].av_position;
333  i++;
334  nb_channels--;
335  }
336 
337  j = (pos != AAC_CHANNEL_SIDE) && nb_channels <= 3 ? 3 : 1;
338  while (nb_channels >= 2) {
339  if (ff_aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE ||
340  ff_aac_channel_map[layer][pos - 1][j+1] == AV_CHAN_NONE)
341  return -1;
342  i += assign_pair(e2c_vec, layout_map, i,
343  1ULL << ff_aac_channel_map[layer][pos - 1][j],
344  1ULL << ff_aac_channel_map[layer][pos - 1][j+1],
345  pos, layout);
346  j += 2;
347  nb_channels -= 2;
348  }
349  while (nb_channels & 1) {
350  if (ff_aac_channel_map[layer][pos - 1][5] == AV_CHAN_NONE)
351  return -1;
352  e2c_vec[i] = (struct elem_to_channel) {
353  .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][5],
354  .syn_ele = layout_map[i][0],
355  .elem_id = layout_map[i][1],
356  .aac_position = pos
357  };
358  *layout |= e2c_vec[i].av_position;
359  i++;
360  nb_channels--;
361  }
362  if (nb_channels)
363  return -1;
364 
365  *current = i;
366 
367  return 0;
368 }
369 
370 static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
371 {
372  int i, n, total_non_cc_elements;
373  struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } };
374  uint64_t layout = 0;
375 
376  if (FF_ARRAY_ELEMS(e2c_vec) < tags)
377  return 0;
378 
379  for (n = 0, i = 0; n < 3 && i < tags; n++) {
380  int ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_FRONT, &i);
381  if (ret < 0)
382  return 0;
383  ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_SIDE, &i);
384  if (ret < 0)
385  return 0;
386  ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_BACK, &i);
387  if (ret < 0)
388  return 0;
389  ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_LFE, &i);
390  if (ret < 0)
391  return 0;
392  }
393 
394  total_non_cc_elements = n = i;
395 
396  if (layout == AV_CH_LAYOUT_22POINT2) {
397  // For 22.2 reorder the result as needed
398  FFSWAP(struct elem_to_channel, e2c_vec[2], e2c_vec[0]); // FL & FR first (final), FC third
399  FFSWAP(struct elem_to_channel, e2c_vec[2], e2c_vec[1]); // FC second (final), FLc & FRc third
400  FFSWAP(struct elem_to_channel, e2c_vec[6], e2c_vec[2]); // LFE1 third (final), FLc & FRc seventh
401  FFSWAP(struct elem_to_channel, e2c_vec[4], e2c_vec[3]); // BL & BR fourth (final), SiL & SiR fifth
402  FFSWAP(struct elem_to_channel, e2c_vec[6], e2c_vec[4]); // FLc & FRc fifth (final), SiL & SiR seventh
403  FFSWAP(struct elem_to_channel, e2c_vec[7], e2c_vec[6]); // LFE2 seventh (final), SiL & SiR eight (final)
404  FFSWAP(struct elem_to_channel, e2c_vec[9], e2c_vec[8]); // TpFL & TpFR ninth (final), TFC tenth (final)
405  FFSWAP(struct elem_to_channel, e2c_vec[11], e2c_vec[10]); // TC eleventh (final), TpSiL & TpSiR twelfth
406  FFSWAP(struct elem_to_channel, e2c_vec[12], e2c_vec[11]); // TpBL & TpBR twelfth (final), TpSiL & TpSiR thirteenth (final)
407  } else {
408  // For everything else, utilize the AV channel position define as a
409  // stable sort.
410  do {
411  int next_n = 0;
412  for (i = 1; i < n; i++)
413  if (e2c_vec[i - 1].av_position > e2c_vec[i].av_position) {
414  FFSWAP(struct elem_to_channel, e2c_vec[i - 1], e2c_vec[i]);
415  next_n = i;
416  }
417  n = next_n;
418  } while (n > 0);
419 
420  }
421 
422  for (i = 0; i < total_non_cc_elements; i++) {
423  layout_map[i][0] = e2c_vec[i].syn_ele;
424  layout_map[i][1] = e2c_vec[i].elem_id;
425  layout_map[i][2] = e2c_vec[i].aac_position;
426  }
427 
428  return layout;
429 }
430 
432 {
433  int i;
434 
435  for (i = 0; i < src->usac.nb_elems; i++) {
436  AACUsacElemConfig *src_e = &src->usac.elems[i];
437  AACUsacElemConfig *dst_e = &dst->usac.elems[i];
438  /* dst_e->ext.pl_buf is guaranteed to be set to src_e->ext.pl_buf
439  * upon this function's return */
440  av_refstruct_replace(&dst_e->ext.pl_buf, src_e->ext.pl_buf);
441  }
442 
443  /* Unref all additional buffers to close leaks */
444  for (; i < dst->usac.nb_elems; i++)
445  av_refstruct_unref(&dst->usac.elems[i].ext.pl_buf);
446 
447  /* Set all other properties */
448  *dst = *src;
449 }
450 
451 /**
452  * Save current output configuration if and only if it has been locked.
453  */
455 {
456  int pushed = 0;
457 
458  if (ac->oc[1].status == OC_LOCKED || ac->oc[0].status == OC_NONE) {
459  copy_oc(&ac->oc[0], &ac->oc[1]);
460  pushed = 1;
461  }
462  ac->oc[1].status = OC_NONE;
463  return pushed;
464 }
465 
466 /**
467  * Restore the previous output configuration if and only if the current
468  * configuration is unlocked.
469  */
471 {
472  if (ac->oc[1].status != OC_LOCKED && ac->oc[0].status != OC_NONE) {
473  copy_oc(&ac->oc[1], &ac->oc[0]);
474 
475  ac->avctx->ch_layout = ac->oc[1].ch_layout;
477  ac->oc[1].status, 0);
478  }
479 }
480 
481 /**
482  * Configure output channel order based on the current program
483  * configuration element.
484  *
485  * @return Returns error status. 0 - OK, !0 - error
486  */
488  uint8_t layout_map[MAX_ELEM_ID * 4][3], int tags,
489  enum OCStatus oc_type, int get_new_frame)
490 {
491  AVCodecContext *avctx = ac->avctx;
492  int i, channels = 0, ret;
493  uint64_t layout = 0;
494  uint8_t id_map[TYPE_END][MAX_ELEM_ID] = {{ 0 }};
495  uint8_t type_counts[TYPE_END] = { 0 };
496 
497  if (get_new_frame && !ac->frame)
498  return AVERROR_INVALIDDATA;
499 
500  if (ac->oc[1].layout_map != layout_map) {
501  memcpy(ac->oc[1].layout_map, layout_map, tags * sizeof(layout_map[0]));
502  ac->oc[1].layout_map_tags = tags;
503  }
504  for (i = 0; i < tags; i++) {
505  int type = layout_map[i][0];
506  int id = layout_map[i][1];
507  id_map[type][id] = type_counts[type]++;
508  if (id_map[type][id] >= MAX_ELEM_ID) {
509  avpriv_request_sample(ac->avctx, "Too large remapped id");
510  return AVERROR_PATCHWELCOME;
511  }
512  }
513  // Try to sniff a reasonable channel order, otherwise output the
514  // channels in the order the PCE declared them.
516  layout = sniff_channel_order(layout_map, tags);
517  for (i = 0; i < tags; i++) {
518  int type = layout_map[i][0];
519  int id = layout_map[i][1];
520  int iid = id_map[type][id];
521  int position = layout_map[i][2];
522  // Allocate or free elements depending on if they are in the
523  // current program configuration.
524  ret = che_configure(ac, position, type, iid, &channels);
525  if (ret < 0)
526  return ret;
527  ac->tag_che_map[type][id] = ac->che[type][iid];
528  }
529  if (ac->oc[1].m4ac.ps == 1 && channels == 2) {
530  if (layout == AV_CH_FRONT_CENTER) {
532  } else {
533  layout = 0;
534  }
535  }
536 
538  if (layout)
540  else {
542  ac->oc[1].ch_layout.nb_channels = channels;
543  }
544 
545  av_channel_layout_copy(&avctx->ch_layout, &ac->oc[1].ch_layout);
546  ac->oc[1].status = oc_type;
547 
548  if (get_new_frame) {
549  if ((ret = frame_configure_elements(ac->avctx)) < 0)
550  return ret;
551  }
552 
553  return 0;
554 }
555 
556 static av_cold void flush(AVCodecContext *avctx)
557 {
558  AACDecContext *ac= avctx->priv_data;
559  int type, i, j;
560 
561  for (type = 3; type >= 0; type--) {
562  for (i = 0; i < MAX_ELEM_ID; i++) {
563  ChannelElement *che = ac->che[type][i];
564  if (che) {
565  for (j = 0; j <= 1; j++) {
566  memset(che->ch[j].saved, 0, sizeof(che->ch[j].saved));
567  }
568  }
569  }
570  }
571 
572 #if CONFIG_AAC_DECODER
573  ff_aac_usac_reset_state(ac, &ac->oc[1]);
574 #endif
575 }
576 
577 /**
578  * Set up channel positions based on a default channel configuration
579  * as specified in table 1.17.
580  *
581  * @return Returns error status. 0 - OK, !0 - error
582  */
584  uint8_t (*layout_map)[3],
585  int *tags,
586  int channel_config)
587 {
588  if (channel_config < 1 || (channel_config > 7 && channel_config < 11) ||
589  channel_config > 14) {
590  av_log(avctx, AV_LOG_ERROR,
591  "invalid default channel configuration (%d)\n",
592  channel_config);
593  return AVERROR_INVALIDDATA;
594  }
595  *tags = ff_tags_per_config[channel_config];
596  memcpy(layout_map, ff_aac_channel_layout_map[channel_config - 1],
597  *tags * sizeof(*layout_map));
598 
599  /*
600  * AAC specification has 7.1(wide) as a default layout for 8-channel streams.
601  * However, at least Nero AAC encoder encodes 7.1 streams using the default
602  * channel config 7, mapping the side channels of the original audio stream
603  * to the second AAC_CHANNEL_FRONT pair in the AAC stream. Similarly, e.g. FAAD
604  * decodes the second AAC_CHANNEL_FRONT pair as side channels, therefore decoding
605  * the incorrect streams as if they were correct (and as the encoder intended).
606  *
607  * As actual intended 7.1(wide) streams are very rare, default to assuming a
608  * 7.1 layout was intended.
609  */
610  if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) {
611  layout_map[2][2] = AAC_CHANNEL_BACK;
612 
613  if (!ac || !ac->warned_71_wide++) {
614  av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout"
615  " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
616  " according to the specification instead.\n", FF_COMPLIANCE_STRICT);
617  }
618  }
619 
620  return 0;
621 }
622 
624 {
625  /* For PCE based channel configurations map the channels solely based
626  * on tags. */
627  if (!ac->oc[1].m4ac.chan_config) {
628  return ac->tag_che_map[type][elem_id];
629  }
630  // Allow single CPE stereo files to be signalled with mono configuration.
631  if (!ac->tags_mapped && type == TYPE_CPE &&
632  ac->oc[1].m4ac.chan_config == 1) {
633  uint8_t layout_map[MAX_ELEM_ID*4][3];
634  int layout_map_tags;
636 
637  av_log(ac->avctx, AV_LOG_DEBUG, "mono with CPE\n");
638 
639  if (ff_aac_set_default_channel_config(ac, ac->avctx, layout_map,
640  &layout_map_tags, 2) < 0)
641  return NULL;
642  if (ff_aac_output_configure(ac, layout_map, layout_map_tags,
643  OC_TRIAL_FRAME, 1) < 0)
644  return NULL;
645 
646  ac->oc[1].m4ac.chan_config = 2;
647  ac->oc[1].m4ac.ps = 0;
648  }
649  // And vice-versa
650  if (!ac->tags_mapped && type == TYPE_SCE &&
651  ac->oc[1].m4ac.chan_config == 2) {
652  uint8_t layout_map[MAX_ELEM_ID * 4][3];
653  int layout_map_tags;
655 
656  av_log(ac->avctx, AV_LOG_DEBUG, "stereo with SCE\n");
657 
658  layout_map_tags = 2;
659  layout_map[0][0] = layout_map[1][0] = TYPE_SCE;
660  layout_map[0][2] = layout_map[1][2] = AAC_CHANNEL_FRONT;
661  layout_map[0][1] = 0;
662  layout_map[1][1] = 1;
663  if (ff_aac_output_configure(ac, layout_map, layout_map_tags,
664  OC_TRIAL_FRAME, 1) < 0)
665  return NULL;
666 
667  if (ac->oc[1].m4ac.sbr)
668  ac->oc[1].m4ac.ps = -1;
669  }
670  /* For indexed channel configurations map the channels solely based
671  * on position. */
672  switch (ac->oc[1].m4ac.chan_config) {
673  case 14:
674  if (ac->tags_mapped > 2 && ((type == TYPE_CPE && elem_id < 3) ||
675  (type == TYPE_LFE && elem_id < 1))) {
676  ac->tags_mapped++;
677  return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id];
678  }
680  case 13:
681  if (ac->tags_mapped > 3 && ((type == TYPE_CPE && elem_id < 8) ||
682  (type == TYPE_SCE && elem_id < 6) ||
683  (type == TYPE_LFE && elem_id < 2))) {
684  ac->tags_mapped++;
685  return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id];
686  }
688  case 12:
689  case 7:
690  if (ac->tags_mapped == 3 && type == TYPE_CPE) {
691  ac->tags_mapped++;
692  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2];
693  }
695  case 11:
696  if (ac->tags_mapped == 3 && type == TYPE_SCE) {
697  ac->tags_mapped++;
698  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
699  }
701  case 6:
702  /* Some streams incorrectly code 5.1 audio as
703  * SCE[0] CPE[0] CPE[1] SCE[1]
704  * instead of
705  * SCE[0] CPE[0] CPE[1] LFE[0].
706  * If we seem to have encountered such a stream, transfer
707  * the LFE[0] element to the SCE[1]'s mapping */
708  if (ac->tags_mapped == ff_tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
709  if (!ac->warned_remapping_once && (type != TYPE_LFE || elem_id != 0)) {
711  "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n",
712  type == TYPE_SCE ? "SCE" : "LFE", elem_id);
713  ac->warned_remapping_once++;
714  }
715  ac->tags_mapped++;
716  return ac->tag_che_map[type][elem_id] = ac->che[TYPE_LFE][0];
717  }
719  case 5:
720  if (ac->tags_mapped == 2 && type == TYPE_CPE) {
721  ac->tags_mapped++;
722  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][1];
723  }
725  case 4:
726  /* Some streams incorrectly code 4.0 audio as
727  * SCE[0] CPE[0] LFE[0]
728  * instead of
729  * SCE[0] CPE[0] SCE[1].
730  * If we seem to have encountered such a stream, transfer
731  * the SCE[1] element to the LFE[0]'s mapping */
732  if (ac->tags_mapped == ff_tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
733  if (!ac->warned_remapping_once && (type != TYPE_SCE || elem_id != 1)) {
735  "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n",
736  type == TYPE_SCE ? "SCE" : "LFE", elem_id);
737  ac->warned_remapping_once++;
738  }
739  ac->tags_mapped++;
740  return ac->tag_che_map[type][elem_id] = ac->che[TYPE_SCE][1];
741  }
742  if (ac->tags_mapped == 2 &&
743  ac->oc[1].m4ac.chan_config == 4 &&
744  type == TYPE_SCE) {
745  ac->tags_mapped++;
746  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
747  }
749  case 3:
750  case 2:
751  if (ac->tags_mapped == (ac->oc[1].m4ac.chan_config != 2) &&
752  type == TYPE_CPE) {
753  ac->tags_mapped++;
754  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][0];
755  } else if (ac->tags_mapped == 1 && ac->oc[1].m4ac.chan_config == 2 &&
756  type == TYPE_SCE) {
757  ac->tags_mapped++;
758  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
759  }
761  case 1:
762  if (!ac->tags_mapped && type == TYPE_SCE) {
763  ac->tags_mapped++;
764  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][0];
765  }
767  default:
768  return NULL;
769  }
770 }
771 
772 /**
773  * Decode an array of 4 bit element IDs, optionally interleaved with a
774  * stereo/mono switching bit.
775  *
776  * @param type speaker type/position for these channels
777  */
778 static void decode_channel_map(uint8_t layout_map[][3],
779  enum ChannelPosition type,
780  GetBitContext *gb, int n)
781 {
782  while (n--) {
784  switch (type) {
785  case AAC_CHANNEL_FRONT:
786  case AAC_CHANNEL_BACK:
787  case AAC_CHANNEL_SIDE:
788  syn_ele = get_bits1(gb);
789  break;
790  case AAC_CHANNEL_CC:
791  skip_bits1(gb);
792  syn_ele = TYPE_CCE;
793  break;
794  case AAC_CHANNEL_LFE:
795  syn_ele = TYPE_LFE;
796  break;
797  default:
798  // AAC_CHANNEL_OFF has no channel map
799  av_assert0(0);
800  }
801  layout_map[0][0] = syn_ele;
802  layout_map[0][1] = get_bits(gb, 4);
803  layout_map[0][2] = type;
804  layout_map++;
805  }
806 }
807 
808 static inline void relative_align_get_bits(GetBitContext *gb,
809  int reference_position) {
810  int n = (reference_position - get_bits_count(gb) & 7);
811  if (n)
812  skip_bits(gb, n);
813 }
814 
815 /**
816  * Decode program configuration element; reference: table 4.2.
817  *
818  * @return Returns error status. 0 - OK, !0 - error
819  */
820 static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac,
821  uint8_t (*layout_map)[3],
822  GetBitContext *gb, int byte_align_ref)
823 {
824  int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
825  int sampling_index;
826  int comment_len;
827  int tags;
828 
829  skip_bits(gb, 2); // object_type
830 
831  sampling_index = get_bits(gb, 4);
832  if (m4ac->sampling_index != sampling_index)
833  av_log(avctx, AV_LOG_WARNING,
834  "Sample rate index in program config element does not "
835  "match the sample rate index configured by the container.\n");
836 
837  num_front = get_bits(gb, 4);
838  num_side = get_bits(gb, 4);
839  num_back = get_bits(gb, 4);
840  num_lfe = get_bits(gb, 2);
841  num_assoc_data = get_bits(gb, 3);
842  num_cc = get_bits(gb, 4);
843 
844  if (get_bits1(gb))
845  skip_bits(gb, 4); // mono_mixdown_tag
846  if (get_bits1(gb))
847  skip_bits(gb, 4); // stereo_mixdown_tag
848 
849  if (get_bits1(gb))
850  skip_bits(gb, 3); // mixdown_coeff_index and pseudo_surround
851 
852  if (get_bits_left(gb) < 5 * (num_front + num_side + num_back + num_cc) + 4 *(num_lfe + num_assoc_data + num_cc)) {
853  av_log(avctx, AV_LOG_ERROR, "decode_pce: " overread_err);
854  return -1;
855  }
856  decode_channel_map(layout_map , AAC_CHANNEL_FRONT, gb, num_front);
857  tags = num_front;
858  decode_channel_map(layout_map + tags, AAC_CHANNEL_SIDE, gb, num_side);
859  tags += num_side;
860  decode_channel_map(layout_map + tags, AAC_CHANNEL_BACK, gb, num_back);
861  tags += num_back;
862  decode_channel_map(layout_map + tags, AAC_CHANNEL_LFE, gb, num_lfe);
863  tags += num_lfe;
864 
865  skip_bits_long(gb, 4 * num_assoc_data);
866 
867  decode_channel_map(layout_map + tags, AAC_CHANNEL_CC, gb, num_cc);
868  tags += num_cc;
869 
870  relative_align_get_bits(gb, byte_align_ref);
871 
872  /* comment field, first byte is length */
873  comment_len = get_bits(gb, 8) * 8;
874  if (get_bits_left(gb) < comment_len) {
875  av_log(avctx, AV_LOG_ERROR, "decode_pce: " overread_err);
876  return AVERROR_INVALIDDATA;
877  }
878  skip_bits_long(gb, comment_len);
879  return tags;
880 }
881 
882 /**
883  * Decode GA "General Audio" specific configuration; reference: table 4.1.
884  *
885  * @param ac pointer to AACDecContext, may be null
886  * @param avctx pointer to AVCCodecContext, used for logging
887  *
888  * @return Returns error status. 0 - OK, !0 - error
889  */
891  GetBitContext *gb,
892  int get_bit_alignment,
893  MPEG4AudioConfig *m4ac,
894  int channel_config)
895 {
896  int extension_flag, ret, ep_config, res_flags;
897  uint8_t layout_map[MAX_ELEM_ID*4][3];
898  int tags = 0;
899 
900  m4ac->frame_length_short = get_bits1(gb);
901 
902  if (get_bits1(gb)) // dependsOnCoreCoder
903  skip_bits(gb, 14); // coreCoderDelay
904  extension_flag = get_bits1(gb);
905 
906  if (m4ac->object_type == AOT_AAC_SCALABLE ||
908  skip_bits(gb, 3); // layerNr
909 
910  if (channel_config == 0) {
911  skip_bits(gb, 4); // element_instance_tag
912  tags = decode_pce(avctx, m4ac, layout_map, gb, get_bit_alignment);
913  if (tags < 0)
914  return tags;
915  } else {
916  if ((ret = ff_aac_set_default_channel_config(ac, avctx, layout_map,
917  &tags, channel_config)))
918  return ret;
919  }
920 
921  if (count_channels(layout_map, tags) > 1) {
922  m4ac->ps = 0;
923  } else if (m4ac->sbr == 1 && m4ac->ps == -1)
924  m4ac->ps = 1;
925 
926  if (ac && (ret = ff_aac_output_configure(ac, layout_map, tags, OC_GLOBAL_HDR, 0)))
927  return ret;
928 
929  if (extension_flag) {
930  switch (m4ac->object_type) {
931  case AOT_ER_BSAC:
932  skip_bits(gb, 5); // numOfSubFrame
933  skip_bits(gb, 11); // layer_length
934  break;
935  case AOT_ER_AAC_LC:
936  case AOT_ER_AAC_LTP:
937  case AOT_ER_AAC_SCALABLE:
938  case AOT_ER_AAC_LD:
939  res_flags = get_bits(gb, 3);
940  if (res_flags) {
942  "AAC data resilience (flags %x)",
943  res_flags);
944  return AVERROR_PATCHWELCOME;
945  }
946  break;
947  }
948  skip_bits1(gb); // extensionFlag3 (TBD in version 3)
949  }
950  switch (m4ac->object_type) {
951  case AOT_ER_AAC_LC:
952  case AOT_ER_AAC_LTP:
953  case AOT_ER_AAC_SCALABLE:
954  case AOT_ER_AAC_LD:
955  ep_config = get_bits(gb, 2);
956  if (ep_config) {
958  "epConfig %d", ep_config);
959  return AVERROR_PATCHWELCOME;
960  }
961  }
962  return 0;
963 }
964 
966  GetBitContext *gb,
967  MPEG4AudioConfig *m4ac,
968  int channel_config)
969 {
970  int ret, ep_config, res_flags;
971  uint8_t layout_map[MAX_ELEM_ID*4][3];
972  int tags = 0;
973  const int ELDEXT_TERM = 0;
974 
975  m4ac->ps = 0;
976  m4ac->sbr = 0;
977  m4ac->frame_length_short = get_bits1(gb);
978 
979  res_flags = get_bits(gb, 3);
980  if (res_flags) {
982  "AAC data resilience (flags %x)",
983  res_flags);
984  return AVERROR_PATCHWELCOME;
985  }
986 
987  if (get_bits1(gb)) { // ldSbrPresentFlag
989  "Low Delay SBR");
990  return AVERROR_PATCHWELCOME;
991  }
992 
993  while (get_bits(gb, 4) != ELDEXT_TERM) {
994  int len = get_bits(gb, 4);
995  if (len == 15)
996  len += get_bits(gb, 8);
997  if (len == 15 + 255)
998  len += get_bits(gb, 16);
999  if (get_bits_left(gb) < len * 8 + 4) {
1000  av_log(avctx, AV_LOG_ERROR, overread_err);
1001  return AVERROR_INVALIDDATA;
1002  }
1003  skip_bits_long(gb, 8 * len);
1004  }
1005 
1006  if ((ret = ff_aac_set_default_channel_config(ac, avctx, layout_map,
1007  &tags, channel_config)))
1008  return ret;
1009 
1010  if (ac && (ret = ff_aac_output_configure(ac, layout_map, tags, OC_GLOBAL_HDR, 0)))
1011  return ret;
1012 
1013  ep_config = get_bits(gb, 2);
1014  if (ep_config) {
1016  "epConfig %d", ep_config);
1017  return AVERROR_PATCHWELCOME;
1018  }
1019  return 0;
1020 }
1021 
1022 /**
1023  * Decode audio specific configuration; reference: table 1.13.
1024  *
1025  * @param ac pointer to AACDecContext, may be null
1026  * @param avctx pointer to AVCCodecContext, used for logging
1027  * @param m4ac pointer to MPEG4AudioConfig, used for parsing
1028  * @param gb buffer holding an audio specific config
1029  * @param get_bit_alignment relative alignment for byte align operations
1030  * @param sync_extension look for an appended sync extension
1031  *
1032  * @return Returns error status or number of consumed bits. <0 - error
1033  */
1035  AVCodecContext *avctx,
1036  OutputConfiguration *oc,
1037  GetBitContext *gb,
1038  int get_bit_alignment,
1039  int sync_extension)
1040 {
1041  int i, ret;
1042  GetBitContext gbc = *gb;
1043  MPEG4AudioConfig *m4ac = &oc->m4ac;
1044  MPEG4AudioConfig m4ac_bak = *m4ac;
1045 
1046  if ((i = ff_mpeg4audio_get_config_gb(m4ac, &gbc, sync_extension, avctx)) < 0) {
1047  *m4ac = m4ac_bak;
1048  return AVERROR_INVALIDDATA;
1049  }
1050 
1051  if (m4ac->sampling_index > 12) {
1052  av_log(avctx, AV_LOG_ERROR,
1053  "invalid sampling rate index %d\n",
1054  m4ac->sampling_index);
1055  *m4ac = m4ac_bak;
1056  return AVERROR_INVALIDDATA;
1057  }
1058  if (m4ac->object_type == AOT_ER_AAC_LD &&
1059  (m4ac->sampling_index < 3 || m4ac->sampling_index > 7)) {
1060  av_log(avctx, AV_LOG_ERROR,
1061  "invalid low delay sampling rate index %d\n",
1062  m4ac->sampling_index);
1063  *m4ac = m4ac_bak;
1064  return AVERROR_INVALIDDATA;
1065  }
1066 
1067  skip_bits_long(gb, i);
1068 
1069  switch (m4ac->object_type) {
1070  case AOT_AAC_MAIN:
1071  case AOT_AAC_LC:
1072  case AOT_AAC_SSR:
1073  case AOT_AAC_LTP:
1074  case AOT_ER_AAC_LC:
1075  case AOT_ER_AAC_LD:
1076  if ((ret = decode_ga_specific_config(ac, avctx, gb, get_bit_alignment,
1077  &oc->m4ac, m4ac->chan_config)) < 0)
1078  return ret;
1079  break;
1080  case AOT_ER_AAC_ELD:
1081  if ((ret = decode_eld_specific_config(ac, avctx, gb,
1082  &oc->m4ac, m4ac->chan_config)) < 0)
1083  return ret;
1084  break;
1085 #if CONFIG_AAC_DECODER
1086  case AOT_USAC:
1087  if ((ret = ff_aac_usac_config_decode(ac, avctx, gb,
1088  oc, m4ac->chan_config)) < 0)
1089  return ret;
1090  break;
1091 #endif
1092  default:
1094  "Audio object type %s%d",
1095  m4ac->sbr == 1 ? "SBR+" : "",
1096  m4ac->object_type);
1097  return AVERROR(ENOSYS);
1098  }
1099 
1100  ff_dlog(avctx,
1101  "AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
1102  m4ac->object_type, m4ac->chan_config, m4ac->sampling_index,
1103  m4ac->sample_rate, m4ac->sbr,
1104  m4ac->ps);
1105 
1106  return get_bits_count(gb);
1107 }
1108 
1110  AVCodecContext *avctx,
1111  OutputConfiguration *oc,
1112  const uint8_t *data, int64_t bit_size,
1113  int sync_extension)
1114 {
1115  int i, ret;
1116  GetBitContext gb;
1117 
1118  if (bit_size < 0 || bit_size > INT_MAX) {
1119  av_log(avctx, AV_LOG_ERROR, "Audio specific config size is invalid\n");
1120  return AVERROR_INVALIDDATA;
1121  }
1122 
1123  ff_dlog(avctx, "audio specific config size %d\n", (int)bit_size >> 3);
1124  for (i = 0; i < bit_size >> 3; i++)
1125  ff_dlog(avctx, "%02x ", data[i]);
1126  ff_dlog(avctx, "\n");
1127 
1128  if ((ret = init_get_bits(&gb, data, bit_size)) < 0)
1129  return ret;
1130 
1131  return decode_audio_specific_config_gb(ac, avctx, oc, &gb, 0,
1132  sync_extension);
1133 }
1134 
1136 {
1137  AACDecContext *ac = avctx->priv_data;
1138 
1139  for (int i = 0; i < 2; i++) {
1140  OutputConfiguration *oc = &ac->oc[i];
1141  AACUSACConfig *usac = &oc->usac;
1142  for (int j = 0; j < usac->nb_elems; j++) {
1143  AACUsacElemConfig *ec = &usac->elems[j];
1145  }
1146 
1148  }
1149 
1150  for (int type = 0; type < FF_ARRAY_ELEMS(ac->che); type++) {
1151  for (int i = 0; i < MAX_ELEM_ID; i++) {
1152  if (ac->che[type][i]) {
1153  ac->proc.sbr_ctx_close(ac->che[type][i]);
1154  av_freep(&ac->che[type][i]);
1155  }
1156  }
1157  }
1158 
1159  av_tx_uninit(&ac->mdct96);
1160  av_tx_uninit(&ac->mdct120);
1161  av_tx_uninit(&ac->mdct128);
1162  av_tx_uninit(&ac->mdct480);
1163  av_tx_uninit(&ac->mdct512);
1164  av_tx_uninit(&ac->mdct768);
1165  av_tx_uninit(&ac->mdct960);
1166  av_tx_uninit(&ac->mdct1024);
1167  av_tx_uninit(&ac->mdct_ltp);
1168 
1169  // Compiler will optimize this branch away.
1170  if (ac->is_fixed)
1171  av_freep(&ac->RENAME_FIXED(fdsp));
1172  else
1173  av_freep(&ac->fdsp);
1174 
1175  return 0;
1176 }
1177 
1178 static av_cold int init_dsp(AVCodecContext *avctx)
1179 {
1180  AACDecContext *ac = avctx->priv_data;
1181  int is_fixed = ac->is_fixed, ret;
1182  float scale_fixed, scale_float;
1183  const float *const scalep = is_fixed ? &scale_fixed : &scale_float;
1184  enum AVTXType tx_type = is_fixed ? AV_TX_INT32_MDCT : AV_TX_FLOAT_MDCT;
1185 
1186 #define MDCT_INIT(s, fn, len, sval) \
1187  scale_fixed = (sval) * 128.0f; \
1188  scale_float = (sval) / 32768.0f; \
1189  ret = av_tx_init(&s, &fn, tx_type, 1, len, scalep, 0); \
1190  if (ret < 0) \
1191  return ret
1192 
1193  MDCT_INIT(ac->mdct96, ac->mdct96_fn, 96, 1.0/96);
1194  MDCT_INIT(ac->mdct120, ac->mdct120_fn, 120, 1.0/120);
1195  MDCT_INIT(ac->mdct128, ac->mdct128_fn, 128, 1.0/128);
1196  MDCT_INIT(ac->mdct480, ac->mdct480_fn, 480, 1.0/480);
1197  MDCT_INIT(ac->mdct512, ac->mdct512_fn, 512, 1.0/512);
1198  MDCT_INIT(ac->mdct768, ac->mdct768_fn, 768, 1.0/768);
1199  MDCT_INIT(ac->mdct960, ac->mdct960_fn, 960, 1.0/960);
1200  MDCT_INIT(ac->mdct1024, ac->mdct1024_fn, 1024, 1.0/1024);
1201 #undef MDCT_INIT
1202 
1203  /* LTP forward MDCT */
1204  scale_fixed = -1.0;
1205  scale_float = -32786.0*2 + 36;
1206  ret = av_tx_init(&ac->mdct_ltp, &ac->mdct_ltp_fn, tx_type, 0, 1024, scalep, 0);
1207  if (ret < 0)
1208  return ret;
1209 
1210  return 0;
1211 }
1212 
1214 {
1215  AACDecContext *ac = avctx->priv_data;
1216  int ret;
1217 
1218  if (avctx->sample_rate > 96000)
1219  return AVERROR_INVALIDDATA;
1220 
1222 
1223  ac->avctx = avctx;
1224  ac->oc[1].m4ac.sample_rate = avctx->sample_rate;
1225 
1226  if (avctx->extradata_size > 0) {
1227  if ((ret = decode_audio_specific_config(ac, ac->avctx, &ac->oc[1],
1228  avctx->extradata,
1229  avctx->extradata_size * 8LL,
1230  1)) < 0)
1231  return ret;
1232  } else {
1233  int sr, i;
1234  uint8_t layout_map[MAX_ELEM_ID*4][3];
1235  int layout_map_tags;
1236 
1237  sr = ff_aac_sample_rate_idx(avctx->sample_rate);
1238  ac->oc[1].m4ac.sampling_index = sr;
1239  ac->oc[1].m4ac.channels = avctx->ch_layout.nb_channels;
1240  ac->oc[1].m4ac.sbr = -1;
1241  ac->oc[1].m4ac.ps = -1;
1242 
1243  for (i = 0; i < FF_ARRAY_ELEMS(ff_mpeg4audio_channels); i++)
1245  break;
1247  i = 0;
1248  }
1249  ac->oc[1].m4ac.chan_config = i;
1250 
1251  if (ac->oc[1].m4ac.chan_config) {
1252  ret = ff_aac_set_default_channel_config(ac, avctx, layout_map,
1253  &layout_map_tags,
1254  ac->oc[1].m4ac.chan_config);
1255  if (!ret)
1256  ff_aac_output_configure(ac, layout_map, layout_map_tags,
1257  OC_GLOBAL_HDR, 0);
1258  else if (avctx->err_recognition & AV_EF_EXPLODE)
1259  return AVERROR_INVALIDDATA;
1260  }
1261  }
1262 
1263  if (avctx->ch_layout.nb_channels > MAX_CHANNELS) {
1264  av_log(avctx, AV_LOG_ERROR, "Too many channels\n");
1265  return AVERROR_INVALIDDATA;
1266  }
1267 
1268  ac->random_state = 0x1f2e3d4c;
1269 
1270  return init_dsp(avctx);
1271 }
1272 
1273 /**
1274  * Skip data_stream_element; reference: table 4.10.
1275  */
1277 {
1278  int byte_align = get_bits1(gb);
1279  int count = get_bits(gb, 8);
1280  if (count == 255)
1281  count += get_bits(gb, 8);
1282  if (byte_align)
1283  align_get_bits(gb);
1284 
1285  if (get_bits_left(gb) < 8 * count) {
1286  av_log(ac->avctx, AV_LOG_ERROR, "skip_data_stream_element: "overread_err);
1287  return AVERROR_INVALIDDATA;
1288  }
1289  skip_bits_long(gb, 8 * count);
1290  return 0;
1291 }
1292 
1294  GetBitContext *gb)
1295 {
1296  int sfb;
1297  if (get_bits1(gb)) {
1298  ics->predictor_reset_group = get_bits(gb, 5);
1299  if (ics->predictor_reset_group == 0 ||
1300  ics->predictor_reset_group > 30) {
1301  av_log(ac->avctx, AV_LOG_ERROR,
1302  "Invalid Predictor Reset Group.\n");
1303  return AVERROR_INVALIDDATA;
1304  }
1305  }
1306  for (sfb = 0; sfb < FFMIN(ics->max_sfb, ff_aac_pred_sfb_max[ac->oc[1].m4ac.sampling_index]); sfb++) {
1307  ics->prediction_used[sfb] = get_bits1(gb);
1308  }
1309  return 0;
1310 }
1311 
1312 /**
1313  * Decode Long Term Prediction data; reference: table 4.xx.
1314  */
1316  GetBitContext *gb, uint8_t max_sfb)
1317 {
1318  int sfb;
1319 
1320  ltp->lag = get_bits(gb, 11);
1321  if (CONFIG_AAC_FIXED_DECODER && ac->is_fixed)
1322  ltp->coef_fixed = Q30(ff_ltp_coef[get_bits(gb, 3)]);
1323  else if (CONFIG_AAC_DECODER)
1324  ltp->coef = ff_ltp_coef[get_bits(gb, 3)];
1325 
1326  for (sfb = 0; sfb < FFMIN(max_sfb, MAX_LTP_LONG_SFB); sfb++)
1327  ltp->used[sfb] = get_bits1(gb);
1328 }
1329 
1330 /**
1331  * Decode Individual Channel Stream info; reference: table 4.6.
1332  */
1334  GetBitContext *gb)
1335 {
1336  const MPEG4AudioConfig *const m4ac = &ac->oc[1].m4ac;
1337  const int aot = m4ac->object_type;
1338  const int sampling_index = m4ac->sampling_index;
1339  int ret_fail = AVERROR_INVALIDDATA;
1340 
1341  if (aot != AOT_ER_AAC_ELD) {
1342  if (get_bits1(gb)) {
1343  av_log(ac->avctx, AV_LOG_ERROR, "Reserved bit set.\n");
1345  return AVERROR_INVALIDDATA;
1346  }
1347  ics->window_sequence[1] = ics->window_sequence[0];
1348  ics->window_sequence[0] = get_bits(gb, 2);
1349  if (aot == AOT_ER_AAC_LD &&
1350  ics->window_sequence[0] != ONLY_LONG_SEQUENCE) {
1351  av_log(ac->avctx, AV_LOG_ERROR,
1352  "AAC LD is only defined for ONLY_LONG_SEQUENCE but "
1353  "window sequence %d found.\n", ics->window_sequence[0]);
1355  return AVERROR_INVALIDDATA;
1356  }
1357  ics->use_kb_window[1] = ics->use_kb_window[0];
1358  ics->use_kb_window[0] = get_bits1(gb);
1359  }
1361  ics->num_window_groups = 1;
1362  ics->group_len[0] = 1;
1363  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1364  int i;
1365  ics->max_sfb = get_bits(gb, 4);
1366  for (i = 0; i < 7; i++) {
1367  if (get_bits1(gb)) {
1368  ics->group_len[ics->num_window_groups - 1]++;
1369  } else {
1370  ics->num_window_groups++;
1371  ics->group_len[ics->num_window_groups - 1] = 1;
1372  }
1373  }
1374  ics->num_windows = 8;
1375  if (m4ac->frame_length_short) {
1376  ics->swb_offset = ff_swb_offset_120[sampling_index];
1377  ics->num_swb = ff_aac_num_swb_120[sampling_index];
1378  } else {
1379  ics->swb_offset = ff_swb_offset_128[sampling_index];
1380  ics->num_swb = ff_aac_num_swb_128[sampling_index];
1381  }
1382  ics->tns_max_bands = ff_tns_max_bands_128[sampling_index];
1383  ics->predictor_present = 0;
1384  } else {
1385  ics->max_sfb = get_bits(gb, 6);
1386  ics->num_windows = 1;
1387  if (aot == AOT_ER_AAC_LD || aot == AOT_ER_AAC_ELD) {
1388  if (m4ac->frame_length_short) {
1389  ics->swb_offset = ff_swb_offset_480[sampling_index];
1390  ics->num_swb = ff_aac_num_swb_480[sampling_index];
1391  ics->tns_max_bands = ff_tns_max_bands_480[sampling_index];
1392  } else {
1393  ics->swb_offset = ff_swb_offset_512[sampling_index];
1394  ics->num_swb = ff_aac_num_swb_512[sampling_index];
1395  ics->tns_max_bands = ff_tns_max_bands_512[sampling_index];
1396  }
1397  if (!ics->num_swb || !ics->swb_offset) {
1398  ret_fail = AVERROR_BUG;
1399  goto fail;
1400  }
1401  } else {
1402  if (m4ac->frame_length_short) {
1403  ics->num_swb = ff_aac_num_swb_960[sampling_index];
1404  ics->swb_offset = ff_swb_offset_960[sampling_index];
1405  } else {
1406  ics->num_swb = ff_aac_num_swb_1024[sampling_index];
1407  ics->swb_offset = ff_swb_offset_1024[sampling_index];
1408  }
1409  ics->tns_max_bands = ff_tns_max_bands_1024[sampling_index];
1410  }
1411  if (aot != AOT_ER_AAC_ELD) {
1412  ics->predictor_present = get_bits1(gb);
1413  ics->predictor_reset_group = 0;
1414  }
1415  if (ics->predictor_present) {
1416  if (aot == AOT_AAC_MAIN) {
1417  if (decode_prediction(ac, ics, gb)) {
1418  goto fail;
1419  }
1420  } else if (aot == AOT_AAC_LC ||
1421  aot == AOT_ER_AAC_LC) {
1422  av_log(ac->avctx, AV_LOG_ERROR,
1423  "Prediction is not allowed in AAC-LC.\n");
1424  goto fail;
1425  } else {
1426  if (aot == AOT_ER_AAC_LD) {
1427  av_log(ac->avctx, AV_LOG_ERROR,
1428  "LTP in ER AAC LD not yet implemented.\n");
1429  ret_fail = AVERROR_PATCHWELCOME;
1430  goto fail;
1431  }
1432  if ((ics->ltp.present = get_bits(gb, 1)))
1433  decode_ltp(ac, &ics->ltp, gb, ics->max_sfb);
1434  }
1435  }
1436  }
1437 
1438  if (ics->max_sfb > ics->num_swb) {
1439  av_log(ac->avctx, AV_LOG_ERROR,
1440  "Number of scalefactor bands in group (%d) "
1441  "exceeds limit (%d).\n",
1442  ics->max_sfb, ics->num_swb);
1443  goto fail;
1444  }
1445 
1446  return 0;
1447 fail:
1448  ics->max_sfb = 0;
1449  return ret_fail;
1450 }
1451 
1452 /**
1453  * Decode band types (section_data payload); reference: table 4.46.
1454  *
1455  * @param band_type array of the used band type
1456  * @param band_type_run_end array of the last scalefactor band of a band type run
1457  *
1458  * @return Returns error status. 0 - OK, !0 - error
1459  */
1461  GetBitContext *gb)
1462 {
1463  IndividualChannelStream *ics = &sce->ics;
1464  const int bits = (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) ? 3 : 5;
1465 
1466  for (int g = 0; g < ics->num_window_groups; g++) {
1467  int k = 0;
1468  while (k < ics->max_sfb) {
1469  uint8_t sect_end = k;
1470  int sect_len_incr;
1471  int sect_band_type = get_bits(gb, 4);
1472  if (sect_band_type == 12) {
1473  av_log(ac->avctx, AV_LOG_ERROR, "invalid band type\n");
1474  return AVERROR_INVALIDDATA;
1475  }
1476  do {
1477  sect_len_incr = get_bits(gb, bits);
1478  sect_end += sect_len_incr;
1479  if (get_bits_left(gb) < 0) {
1480  av_log(ac->avctx, AV_LOG_ERROR, "decode_band_types: "overread_err);
1481  return AVERROR_INVALIDDATA;
1482  }
1483  if (sect_end > ics->max_sfb) {
1484  av_log(ac->avctx, AV_LOG_ERROR,
1485  "Number of bands (%d) exceeds limit (%d).\n",
1486  sect_end, ics->max_sfb);
1487  return AVERROR_INVALIDDATA;
1488  }
1489  } while (sect_len_incr == (1 << bits) - 1);
1490  for (; k < sect_end; k++)
1491  sce->band_type[g*ics->max_sfb + k] = sect_band_type;
1492  }
1493  }
1494  return 0;
1495 }
1496 
1497 /**
1498  * Decode scalefactors; reference: table 4.47.
1499  *
1500  * @param global_gain first scalefactor value as scalefactors are differentially coded
1501  * @param band_type array of the used band type
1502  * @param band_type_run_end array of the last scalefactor band of a band type run
1503  * @param sf array of scalefactors or intensity stereo positions
1504  *
1505  * @return Returns error status. 0 - OK, !0 - error
1506  */
1508  GetBitContext *gb, unsigned int global_gain)
1509 {
1510  IndividualChannelStream *ics = &sce->ics;
1511  int offset[3] = { global_gain, global_gain - NOISE_OFFSET, 0 };
1512  int clipped_offset;
1513  int noise_flag = 1;
1514 
1515  for (int g = 0; g < ics->num_window_groups; g++) {
1516  for (int sfb = 0; sfb < ics->max_sfb; sfb++) {
1517  switch (sce->band_type[g*ics->max_sfb + sfb]) {
1518  case ZERO_BT:
1519  sce->sfo[g*ics->max_sfb + sfb] = 0;
1520  break;
1521  case INTENSITY_BT: /* fallthrough */
1522  case INTENSITY_BT2:
1524  clipped_offset = av_clip(offset[2], -155, 100);
1525  if (offset[2] != clipped_offset) {
1527  "If you heard an audible artifact, there may be a bug in the decoder. "
1528  "Clipped intensity stereo position (%d -> %d)",
1529  offset[2], clipped_offset);
1530  }
1531  sce->sfo[g*ics->max_sfb + sfb] = clipped_offset - 100;
1532  break;
1533  case NOISE_BT:
1534  if (noise_flag-- > 0)
1535  offset[1] += get_bits(gb, NOISE_PRE_BITS) - NOISE_PRE;
1536  else
1538  clipped_offset = av_clip(offset[1], -100, 155);
1539  if (offset[1] != clipped_offset) {
1541  "If you heard an audible artifact, there may be a bug in the decoder. "
1542  "Clipped noise gain (%d -> %d)",
1543  offset[1], clipped_offset);
1544  }
1545  sce->sfo[g*ics->max_sfb + sfb] = clipped_offset;
1546  break;
1547  default:
1549  if (offset[0] > 255U) {
1550  av_log(ac->avctx, AV_LOG_ERROR,
1551  "Scalefactor (%d) out of range.\n", offset[0]);
1552  return AVERROR_INVALIDDATA;
1553  }
1554  sce->sfo[g*ics->max_sfb + sfb] = offset[0] - 100;
1555  break;
1556  }
1557  }
1558  }
1559 
1560  return 0;
1561 }
1562 
1563 /**
1564  * Decode pulse data; reference: table 4.7.
1565  */
1566 static int decode_pulses(Pulse *pulse, GetBitContext *gb,
1567  const uint16_t *swb_offset, int num_swb)
1568 {
1569  int i, pulse_swb;
1570  pulse->num_pulse = get_bits(gb, 2) + 1;
1571  pulse_swb = get_bits(gb, 6);
1572  if (pulse_swb >= num_swb)
1573  return -1;
1574  pulse->pos[0] = swb_offset[pulse_swb];
1575  pulse->pos[0] += get_bits(gb, 5);
1576  if (pulse->pos[0] >= swb_offset[num_swb])
1577  return -1;
1578  pulse->amp[0] = get_bits(gb, 4);
1579  for (i = 1; i < pulse->num_pulse; i++) {
1580  pulse->pos[i] = get_bits(gb, 5) + pulse->pos[i - 1];
1581  if (pulse->pos[i] >= swb_offset[num_swb])
1582  return -1;
1583  pulse->amp[i] = get_bits(gb, 4);
1584  }
1585  return 0;
1586 }
1587 
1588 /**
1589  * Decode Temporal Noise Shaping data; reference: table 4.48.
1590  *
1591  * @return Returns error status. 0 - OK, !0 - error
1592  */
1594  GetBitContext *gb, const IndividualChannelStream *ics)
1595 {
1596  int tns_max_order = INT32_MAX;
1597  const int is_usac = ac->oc[1].m4ac.object_type == AOT_USAC;
1598  int w, filt, i, coef_len, coef_res, coef_compress;
1599  const int is8 = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE;
1600 
1601  /* USAC doesn't seem to have a limit */
1602  if (!is_usac)
1603  tns_max_order = is8 ? 7 : ac->oc[1].m4ac.object_type == AOT_AAC_MAIN ? 20 : 12;
1604 
1605  for (w = 0; w < ics->num_windows; w++) {
1606  if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) {
1607  coef_res = get_bits1(gb);
1608 
1609  for (filt = 0; filt < tns->n_filt[w]; filt++) {
1610  int tmp2_idx;
1611  tns->length[w][filt] = get_bits(gb, 6 - 2 * is8);
1612 
1613  if (is_usac)
1614  tns->order[w][filt] = get_bits(gb, 4 - is8);
1615  else
1616  tns->order[w][filt] = get_bits(gb, 5 - (2 * is8));
1617 
1618  if (tns->order[w][filt] > tns_max_order) {
1619  av_log(ac->avctx, AV_LOG_ERROR,
1620  "TNS filter order %d is greater than maximum %d.\n",
1621  tns->order[w][filt], tns_max_order);
1622  tns->order[w][filt] = 0;
1623  return AVERROR_INVALIDDATA;
1624  }
1625  if (tns->order[w][filt]) {
1626  tns->direction[w][filt] = get_bits1(gb);
1627  coef_compress = get_bits1(gb);
1628  coef_len = coef_res + 3 - coef_compress;
1629  tmp2_idx = 2 * coef_compress + coef_res;
1630 
1631  for (i = 0; i < tns->order[w][filt]; i++) {
1632  if (CONFIG_AAC_FIXED_DECODER && ac->is_fixed)
1633  tns->coef_fixed[w][filt][i] = Q31(ff_tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)]);
1634  else if (CONFIG_AAC_DECODER)
1635  tns->coef[w][filt][i] = ff_tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)];
1636  }
1637  }
1638  }
1639  }
1640  }
1641  return 0;
1642 }
1643 
1644 /**
1645  * Decode Mid/Side data; reference: table 4.54.
1646  *
1647  * @param ms_present Indicates mid/side stereo presence. [0] mask is all 0s;
1648  * [1] mask is decoded from bitstream; [2] mask is all 1s;
1649  * [3] reserved for scalable AAC
1650  */
1652  int ms_present)
1653 {
1654  int idx;
1655  int max_idx = cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb;
1656  cpe->max_sfb_ste = cpe->ch[0].ics.max_sfb;
1657  if (ms_present == 1) {
1658  for (idx = 0; idx < max_idx; idx++)
1659  cpe->ms_mask[idx] = get_bits1(gb);
1660  } else if (ms_present == 2) {
1661  memset(cpe->ms_mask, 1, max_idx * sizeof(cpe->ms_mask[0]));
1662  }
1663 }
1664 
1666 {
1667  // wd_num, wd_test, aloc_size
1668  static const uint8_t gain_mode[4][3] = {
1669  {1, 0, 5}, // ONLY_LONG_SEQUENCE = 0,
1670  {2, 1, 2}, // LONG_START_SEQUENCE,
1671  {8, 0, 2}, // EIGHT_SHORT_SEQUENCE,
1672  {2, 1, 5}, // LONG_STOP_SEQUENCE
1673  };
1674 
1675  const int mode = sce->ics.window_sequence[0];
1676  uint8_t bd, wd, ad;
1677 
1678  // FIXME: Store the gain control data on |sce| and do something with it.
1679  uint8_t max_band = get_bits(gb, 2);
1680  for (bd = 0; bd < max_band; bd++) {
1681  for (wd = 0; wd < gain_mode[mode][0]; wd++) {
1682  uint8_t adjust_num = get_bits(gb, 3);
1683  for (ad = 0; ad < adjust_num; ad++) {
1684  skip_bits(gb, 4 + ((wd == 0 && gain_mode[mode][1])
1685  ? 4
1686  : gain_mode[mode][2]));
1687  }
1688  }
1689  }
1690 }
1691 
1692 /**
1693  * Decode an individual_channel_stream payload; reference: table 4.44.
1694  *
1695  * @param common_window Channels have independent [0], or shared [1], Individual Channel Stream information.
1696  * @param scale_flag scalable [1] or non-scalable [0] AAC (Unused until scalable AAC is implemented.)
1697  *
1698  * @return Returns error status. 0 - OK, !0 - error
1699  */
1701  GetBitContext *gb, int common_window, int scale_flag)
1702 {
1703  Pulse pulse;
1704  TemporalNoiseShaping *tns = &sce->tns;
1705  IndividualChannelStream *ics = &sce->ics;
1706  int global_gain, eld_syntax, er_syntax, pulse_present = 0;
1707  int ret;
1708 
1709  eld_syntax = ac->oc[1].m4ac.object_type == AOT_ER_AAC_ELD;
1710  er_syntax = ac->oc[1].m4ac.object_type == AOT_ER_AAC_LC ||
1711  ac->oc[1].m4ac.object_type == AOT_ER_AAC_LTP ||
1712  ac->oc[1].m4ac.object_type == AOT_ER_AAC_LD ||
1713  ac->oc[1].m4ac.object_type == AOT_ER_AAC_ELD;
1714 
1715  /* This assignment is to silence a GCC warning about the variable being used
1716  * uninitialized when in fact it always is.
1717  */
1718  pulse.num_pulse = 0;
1719 
1720  global_gain = get_bits(gb, 8);
1721 
1722  if (!common_window && !scale_flag) {
1723  ret = decode_ics_info(ac, ics, gb);
1724  if (ret < 0)
1725  goto fail;
1726  }
1727 
1728  if ((ret = decode_band_types(ac, sce, gb)) < 0)
1729  goto fail;
1730  if ((ret = decode_scalefactors(ac, sce, gb, global_gain)) < 0)
1731  goto fail;
1732 
1733  ac->dsp.dequant_scalefactors(sce);
1734 
1735  pulse_present = 0;
1736  if (!scale_flag) {
1737  if (!eld_syntax && (pulse_present = get_bits1(gb))) {
1738  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1739  av_log(ac->avctx, AV_LOG_ERROR,
1740  "Pulse tool not allowed in eight short sequence.\n");
1742  goto fail;
1743  }
1744  if (decode_pulses(&pulse, gb, ics->swb_offset, ics->num_swb)) {
1745  av_log(ac->avctx, AV_LOG_ERROR,
1746  "Pulse data corrupt or invalid.\n");
1748  goto fail;
1749  }
1750  }
1751  tns->present = get_bits1(gb);
1752  if (tns->present && !er_syntax) {
1753  ret = ff_aac_decode_tns(ac, tns, gb, ics);
1754  if (ret < 0)
1755  goto fail;
1756  }
1757  if (!eld_syntax && get_bits1(gb)) {
1758  decode_gain_control(sce, gb);
1759  if (!ac->warned_gain_control) {
1760  avpriv_report_missing_feature(ac->avctx, "Gain control");
1761  ac->warned_gain_control = 1;
1762  }
1763  }
1764  // I see no textual basis in the spec for this occurring after SSR gain
1765  // control, but this is what both reference and real implementations do
1766  if (tns->present && er_syntax) {
1767  ret = ff_aac_decode_tns(ac, tns, gb, ics);
1768  if (ret < 0)
1769  goto fail;
1770  }
1771  }
1772 
1773  ret = ac->proc.decode_spectrum_and_dequant(ac, gb,
1774  pulse_present ? &pulse : NULL,
1775  sce);
1776  if (ret < 0)
1777  goto fail;
1778 
1779  if (ac->oc[1].m4ac.object_type == AOT_AAC_MAIN && !common_window)
1780  ac->dsp.apply_prediction(ac, sce);
1781 
1782  return 0;
1783 fail:
1784  memset(sce->sfo, 0, sizeof(sce->sfo));
1785  tns->present = 0;
1786  return ret;
1787 }
1788 
1789 /**
1790  * Decode a channel_pair_element; reference: table 4.4.
1791  *
1792  * @return Returns error status. 0 - OK, !0 - error
1793  */
1795 {
1796  int i, ret, common_window, ms_present = 0;
1797  int eld_syntax = ac->oc[1].m4ac.object_type == AOT_ER_AAC_ELD;
1798 
1799  common_window = eld_syntax || get_bits1(gb);
1800  if (common_window) {
1801  if (decode_ics_info(ac, &cpe->ch[0].ics, gb))
1802  return AVERROR_INVALIDDATA;
1803  i = cpe->ch[1].ics.use_kb_window[0];
1804  cpe->ch[1].ics = cpe->ch[0].ics;
1805  cpe->ch[1].ics.use_kb_window[1] = i;
1806  if (cpe->ch[1].ics.predictor_present &&
1807  (ac->oc[1].m4ac.object_type != AOT_AAC_MAIN))
1808  if ((cpe->ch[1].ics.ltp.present = get_bits(gb, 1)))
1809  decode_ltp(ac, &cpe->ch[1].ics.ltp, gb, cpe->ch[1].ics.max_sfb);
1810  ms_present = get_bits(gb, 2);
1811  if (ms_present == 3) {
1812  av_log(ac->avctx, AV_LOG_ERROR, "ms_present = 3 is reserved.\n");
1813  return AVERROR_INVALIDDATA;
1814  } else if (ms_present)
1815  decode_mid_side_stereo(cpe, gb, ms_present);
1816  }
1817  if ((ret = ff_aac_decode_ics(ac, &cpe->ch[0], gb, common_window, 0)))
1818  return ret;
1819  if ((ret = ff_aac_decode_ics(ac, &cpe->ch[1], gb, common_window, 0)))
1820  return ret;
1821 
1822  if (common_window) {
1823  if (ms_present)
1824  ac->dsp.apply_mid_side_stereo(ac, cpe);
1825  if (ac->oc[1].m4ac.object_type == AOT_AAC_MAIN) {
1826  ac->dsp.apply_prediction(ac, &cpe->ch[0]);
1827  ac->dsp.apply_prediction(ac, &cpe->ch[1]);
1828  }
1829  }
1830 
1831  ac->dsp.apply_intensity_stereo(ac, cpe, ms_present);
1832  return 0;
1833 }
1834 
1835 /**
1836  * Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
1837  *
1838  * @return Returns number of bytes consumed.
1839  */
1841  GetBitContext *gb)
1842 {
1843  int i;
1844  int num_excl_chan = 0;
1845 
1846  do {
1847  for (i = 0; i < 7; i++)
1848  che_drc->exclude_mask[num_excl_chan++] = get_bits1(gb);
1849  } while (num_excl_chan < MAX_CHANNELS - 7 && get_bits1(gb));
1850 
1851  return num_excl_chan / 7;
1852 }
1853 
1854 /**
1855  * Decode dynamic range information; reference: table 4.52.
1856  *
1857  * @return Returns number of bytes consumed.
1858  */
1860  GetBitContext *gb)
1861 {
1862  int n = 1;
1863  int drc_num_bands = 1;
1864  int i;
1865 
1866  /* pce_tag_present? */
1867  if (get_bits1(gb)) {
1868  che_drc->pce_instance_tag = get_bits(gb, 4);
1869  skip_bits(gb, 4); // tag_reserved_bits
1870  n++;
1871  }
1872 
1873  /* excluded_chns_present? */
1874  if (get_bits1(gb)) {
1875  n += decode_drc_channel_exclusions(che_drc, gb);
1876  }
1877 
1878  /* drc_bands_present? */
1879  if (get_bits1(gb)) {
1880  che_drc->band_incr = get_bits(gb, 4);
1881  che_drc->interpolation_scheme = get_bits(gb, 4);
1882  n++;
1883  drc_num_bands += che_drc->band_incr;
1884  for (i = 0; i < drc_num_bands; i++) {
1885  che_drc->band_top[i] = get_bits(gb, 8);
1886  n++;
1887  }
1888  }
1889 
1890  /* prog_ref_level_present? */
1891  if (get_bits1(gb)) {
1892  che_drc->prog_ref_level = get_bits(gb, 7);
1893  skip_bits1(gb); // prog_ref_level_reserved_bits
1894  n++;
1895  }
1896 
1897  for (i = 0; i < drc_num_bands; i++) {
1898  che_drc->dyn_rng_sgn[i] = get_bits1(gb);
1899  che_drc->dyn_rng_ctl[i] = get_bits(gb, 7);
1900  n++;
1901  }
1902 
1903  return n;
1904 }
1905 
1906 static int decode_fill(AACDecContext *ac, GetBitContext *gb, int len) {
1907  uint8_t buf[256];
1908  int i, major, minor;
1909 
1910  if (len < 13+7*8)
1911  goto unknown;
1912 
1913  get_bits(gb, 13); len -= 13;
1914 
1915  for(i=0; i+1<sizeof(buf) && len>=8; i++, len-=8)
1916  buf[i] = get_bits(gb, 8);
1917 
1918  buf[i] = 0;
1919  if (ac->avctx->debug & FF_DEBUG_PICT_INFO)
1920  av_log(ac->avctx, AV_LOG_DEBUG, "FILL:%s\n", buf);
1921 
1922  if (sscanf(buf, "libfaac %d.%d", &major, &minor) == 2){
1923  ac->avctx->internal->skip_samples = 1024;
1924  }
1925 
1926 unknown:
1927  skip_bits_long(gb, len);
1928 
1929  return 0;
1930 }
1931 
1932 /**
1933  * Decode extension data (incomplete); reference: table 4.51.
1934  *
1935  * @param cnt length of TYPE_FIL syntactic element in bytes
1936  *
1937  * @return Returns number of bytes consumed
1938  */
1940  ChannelElement *che, enum RawDataBlockType elem_type)
1941 {
1942  int crc_flag = 0;
1943  int res = cnt;
1944  int type = get_bits(gb, 4);
1945 
1946  if (ac->avctx->debug & FF_DEBUG_STARTCODE)
1947  av_log(ac->avctx, AV_LOG_DEBUG, "extension type: %d len:%d\n", type, cnt);
1948 
1949  switch (type) { // extension type
1950  case EXT_SBR_DATA_CRC:
1951  crc_flag++;
1953  case EXT_SBR_DATA:
1954  if (!che) {
1955  av_log(ac->avctx, AV_LOG_ERROR, "SBR was found before the first channel element.\n");
1956  return res;
1957  } else if (!ac->oc[1].m4ac.sbr) {
1958  av_log(ac->avctx, AV_LOG_ERROR, "SBR signaled to be not-present but was found in the bitstream.\n");
1959  skip_bits_long(gb, 8 * cnt - 4);
1960  return res;
1961  } else if (ac->oc[1].m4ac.sbr == -1 && ac->oc[1].status == OC_LOCKED) {
1962  av_log(ac->avctx, AV_LOG_ERROR, "Implicit SBR was found with a first occurrence after the first frame.\n");
1963  skip_bits_long(gb, 8 * cnt - 4);
1964  return res;
1965  } else if (ac->oc[1].m4ac.ps == -1 && ac->oc[1].status < OC_LOCKED &&
1966  ac->avctx->ch_layout.nb_channels == 1) {
1967  ac->oc[1].m4ac.sbr = 1;
1968  ac->oc[1].m4ac.ps = 1;
1971  ac->oc[1].status, 1);
1972  } else {
1973  ac->oc[1].m4ac.sbr = 1;
1975  }
1976 
1977  ac->proc.sbr_decode_extension(ac, che, gb, crc_flag, cnt, elem_type,
1978  ac->oc[1].m4ac.frame_length_short);
1979 
1980  if (ac->oc[1].m4ac.ps == 1 && !ac->warned_he_aac_mono) {
1981  av_log(ac->avctx, AV_LOG_VERBOSE, "Treating HE-AAC mono as stereo.\n");
1982  ac->warned_he_aac_mono = 1;
1983  }
1984  break;
1985  case EXT_DYNAMIC_RANGE:
1986  res = decode_dynamic_range(&ac->che_drc, gb);
1987  break;
1988  case EXT_FILL:
1989  decode_fill(ac, gb, 8 * cnt - 4);
1990  break;
1991  case EXT_FILL_DATA:
1992  case EXT_DATA_ELEMENT:
1993  default:
1994  skip_bits_long(gb, 8 * cnt - 4);
1995  break;
1996  };
1997  return res;
1998 }
1999 
2000 /**
2001  * channel coupling transformation interface
2002  *
2003  * @param apply_coupling_method pointer to (in)dependent coupling function
2004  */
2006  enum RawDataBlockType type, int elem_id,
2007  enum CouplingPoint coupling_point,
2008  void (*apply_coupling_method)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
2009 {
2010  int i, c;
2011 
2012  for (i = 0; i < MAX_ELEM_ID; i++) {
2013  ChannelElement *cce = ac->che[TYPE_CCE][i];
2014  int index = 0;
2015 
2016  if (cce && cce->coup.coupling_point == coupling_point) {
2017  ChannelCoupling *coup = &cce->coup;
2018 
2019  for (c = 0; c <= coup->num_coupled; c++) {
2020  if (coup->type[c] == type && coup->id_select[c] == elem_id) {
2021  if (coup->ch_select[c] != 1) {
2022  apply_coupling_method(ac, &cc->ch[0], cce, index);
2023  if (coup->ch_select[c] != 0)
2024  index++;
2025  }
2026  if (coup->ch_select[c] != 2)
2027  apply_coupling_method(ac, &cc->ch[1], cce, index++);
2028  } else
2029  index += 1 + (coup->ch_select[c] == 3);
2030  }
2031  }
2032  }
2033 }
2034 
2035 /**
2036  * Convert spectral data to samples, applying all supported tools as appropriate.
2037  */
2039 {
2040  int i, type;
2042  switch (ac->oc[1].m4ac.object_type) {
2043  case AOT_ER_AAC_LD:
2045  break;
2046  case AOT_ER_AAC_ELD:
2048  break;
2049  default:
2050  if (ac->oc[1].m4ac.frame_length_short)
2052  else
2054  }
2055  for (type = 3; type >= 0; type--) {
2056  for (i = 0; i < MAX_ELEM_ID; i++) {
2057  ChannelElement *che = ac->che[type][i];
2058  if (che && che->present) {
2059  if (type <= TYPE_CPE)
2061  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP) {
2062  if (che->ch[0].ics.predictor_present) {
2063  if (che->ch[0].ics.ltp.present)
2064  ac->dsp.apply_ltp(ac, &che->ch[0]);
2065  if (che->ch[1].ics.ltp.present && type == TYPE_CPE)
2066  ac->dsp.apply_ltp(ac, &che->ch[1]);
2067  }
2068  }
2069  if (che->ch[0].tns.present)
2070  ac->dsp.apply_tns(che->ch[0].coeffs,
2071  &che->ch[0].tns, &che->ch[0].ics, 1);
2072  if (che->ch[1].tns.present)
2073  ac->dsp.apply_tns(che->ch[1].coeffs,
2074  &che->ch[1].tns, &che->ch[1].ics, 1);
2075  if (type <= TYPE_CPE)
2077  if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT) {
2078  imdct_and_window(ac, &che->ch[0]);
2079  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP)
2080  ac->dsp.update_ltp(ac, &che->ch[0]);
2081  if (type == TYPE_CPE) {
2082  imdct_and_window(ac, &che->ch[1]);
2083  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP)
2084  ac->dsp.update_ltp(ac, &che->ch[1]);
2085  }
2086  if (ac->oc[1].m4ac.sbr > 0) {
2087  ac->proc.sbr_apply(ac, che, type,
2088  ac->oc[1].m4ac.frame_length_short,
2089  che->ch[0].output,
2090  che->ch[1].output);
2091  }
2092  }
2093  if (type <= TYPE_CCE)
2095  ac->dsp.clip_output(ac, che, type, samples);
2096  che->present = 0;
2097  } else if (che) {
2098  av_log(ac->avctx, AV_LOG_VERBOSE, "ChannelElement %d.%d missing \n", type, i);
2099  }
2100  }
2101  }
2102 }
2103 
2105 {
2106  int size;
2107  AACADTSHeaderInfo hdr_info;
2108  uint8_t layout_map[MAX_ELEM_ID*4][3];
2109  int layout_map_tags, ret;
2110 
2111  size = ff_adts_header_parse(gb, &hdr_info);
2112  if (size > 0) {
2113  if (!ac->warned_num_aac_frames && hdr_info.num_aac_frames != 1) {
2114  // This is 2 for "VLB " audio in NSV files.
2115  // See samples/nsv/vlb_audio.
2117  "More than one AAC RDB per ADTS frame");
2118  ac->warned_num_aac_frames = 1;
2119  }
2121  if (hdr_info.chan_config) {
2122  ac->oc[1].m4ac.chan_config = hdr_info.chan_config;
2124  layout_map,
2125  &layout_map_tags,
2126  hdr_info.chan_config)) < 0)
2127  return ret;
2128  if ((ret = ff_aac_output_configure(ac, layout_map, layout_map_tags,
2129  FFMAX(ac->oc[1].status,
2130  OC_TRIAL_FRAME), 0)) < 0)
2131  return ret;
2132  } else {
2133  ac->oc[1].m4ac.chan_config = 0;
2134  /**
2135  * dual mono frames in Japanese DTV can have chan_config 0
2136  * WITHOUT specifying PCE.
2137  * thus, set dual mono as default.
2138  */
2139  if (ac->dmono_mode && ac->oc[0].status == OC_NONE) {
2140  layout_map_tags = 2;
2141  layout_map[0][0] = layout_map[1][0] = TYPE_SCE;
2142  layout_map[0][2] = layout_map[1][2] = AAC_CHANNEL_FRONT;
2143  layout_map[0][1] = 0;
2144  layout_map[1][1] = 1;
2145  if (ff_aac_output_configure(ac, layout_map, layout_map_tags,
2146  OC_TRIAL_FRAME, 0))
2147  return -7;
2148  }
2149  }
2150  ac->oc[1].m4ac.sample_rate = hdr_info.sample_rate;
2151  ac->oc[1].m4ac.sampling_index = hdr_info.sampling_index;
2152  ac->oc[1].m4ac.object_type = hdr_info.object_type;
2153  ac->oc[1].m4ac.frame_length_short = 0;
2154  if (ac->oc[0].status != OC_LOCKED ||
2155  ac->oc[0].m4ac.chan_config != hdr_info.chan_config ||
2156  ac->oc[0].m4ac.sample_rate != hdr_info.sample_rate) {
2157  ac->oc[1].m4ac.sbr = -1;
2158  ac->oc[1].m4ac.ps = -1;
2159  }
2160  if (!hdr_info.crc_absent)
2161  skip_bits(gb, 16);
2162  }
2163  return size;
2164 }
2165 
2167  int *got_frame_ptr, GetBitContext *gb)
2168 {
2169  AACDecContext *ac = avctx->priv_data;
2170  const MPEG4AudioConfig *const m4ac = &ac->oc[1].m4ac;
2171  ChannelElement *che;
2172  int err, i;
2173  int samples = m4ac->frame_length_short ? 960 : 1024;
2174  int chan_config = m4ac->chan_config;
2175  int aot = m4ac->object_type;
2176 
2177  if (aot == AOT_ER_AAC_LD || aot == AOT_ER_AAC_ELD)
2178  samples >>= 1;
2179 
2180  ac->frame = frame;
2181 
2182  if ((err = frame_configure_elements(avctx)) < 0)
2183  return err;
2184 
2185  // The AV_PROFILE_AAC_* defines are all object_type - 1
2186  // This may lead to an undefined profile being signaled
2187  ac->avctx->profile = aot - 1;
2188 
2189  ac->tags_mapped = 0;
2190 
2191  if (chan_config < 0 || (chan_config >= 8 && chan_config < 11) || chan_config >= 13) {
2192  avpriv_request_sample(avctx, "Unknown ER channel configuration %d",
2193  chan_config);
2194  return AVERROR_INVALIDDATA;
2195  }
2196  for (i = 0; i < ff_tags_per_config[chan_config]; i++) {
2197  const int elem_type = ff_aac_channel_layout_map[chan_config-1][i][0];
2198  const int elem_id = ff_aac_channel_layout_map[chan_config-1][i][1];
2199  if (!(che=ff_aac_get_che(ac, elem_type, elem_id))) {
2200  av_log(ac->avctx, AV_LOG_ERROR,
2201  "channel element %d.%d is not allocated\n",
2202  elem_type, elem_id);
2203  return AVERROR_INVALIDDATA;
2204  }
2205  che->present = 1;
2206  if (aot != AOT_ER_AAC_ELD)
2207  skip_bits(gb, 4);
2208  switch (elem_type) {
2209  case TYPE_SCE:
2210  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2211  break;
2212  case TYPE_CPE:
2213  err = decode_cpe(ac, gb, che);
2214  break;
2215  case TYPE_LFE:
2216  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2217  break;
2218  }
2219  if (err < 0)
2220  return err;
2221  }
2222 
2224 
2225  if (!ac->frame->data[0] && samples) {
2226  av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
2227  return AVERROR_INVALIDDATA;
2228  }
2229 
2230  ac->frame->nb_samples = samples;
2231  ac->frame->sample_rate = avctx->sample_rate;
2232  ac->frame->flags |= AV_FRAME_FLAG_KEY;
2233  *got_frame_ptr = 1;
2234 
2235  skip_bits_long(gb, get_bits_left(gb));
2236  return 0;
2237 }
2238 
2240  GetBitContext *gb, int *got_frame_ptr)
2241 {
2242  int err;
2243  int is_dmono;
2244  int elem_id;
2245  enum RawDataBlockType elem_type, che_prev_type = TYPE_END;
2246  uint8_t che_presence[4][MAX_ELEM_ID] = {{0}};
2247  ChannelElement *che = NULL, *che_prev = NULL;
2248  int samples = 0, multiplier, audio_found = 0, pce_found = 0, sce_count = 0;
2249  AVFrame *frame = ac->frame;
2250 
2251  int payload_alignment = get_bits_count(gb);
2252  // parse
2253  while ((elem_type = get_bits(gb, 3)) != TYPE_END) {
2254  elem_id = get_bits(gb, 4);
2255 
2256  if (avctx->debug & FF_DEBUG_STARTCODE)
2257  av_log(avctx, AV_LOG_DEBUG, "Elem type:%x id:%x\n", elem_type, elem_id);
2258 
2259  if (!avctx->ch_layout.nb_channels && elem_type != TYPE_PCE)
2260  return AVERROR_INVALIDDATA;
2261 
2262  if (elem_type < TYPE_DSE) {
2263  if (che_presence[elem_type][elem_id]) {
2264  int error = che_presence[elem_type][elem_id] > 1;
2265  av_log(ac->avctx, error ? AV_LOG_ERROR : AV_LOG_DEBUG, "channel element %d.%d duplicate\n",
2266  elem_type, elem_id);
2267  if (error)
2268  return AVERROR_INVALIDDATA;
2269  }
2270  che_presence[elem_type][elem_id]++;
2271 
2272  if (!(che=ff_aac_get_che(ac, elem_type, elem_id))) {
2273  av_log(ac->avctx, AV_LOG_ERROR, "channel element %d.%d is not allocated\n",
2274  elem_type, elem_id);
2275  return AVERROR_INVALIDDATA;
2276  }
2277  samples = ac->oc[1].m4ac.frame_length_short ? 960 : 1024;
2278  che->present = 1;
2279  }
2280 
2281  switch (elem_type) {
2282 
2283  case TYPE_SCE:
2284  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2285  audio_found = 1;
2286  sce_count++;
2287  break;
2288 
2289  case TYPE_CPE:
2290  err = decode_cpe(ac, gb, che);
2291  audio_found = 1;
2292  break;
2293 
2294  case TYPE_CCE:
2295  err = ac->proc.decode_cce(ac, gb, che);
2296  break;
2297 
2298  case TYPE_LFE:
2299  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2300  audio_found = 1;
2301  break;
2302 
2303  case TYPE_DSE:
2304  err = skip_data_stream_element(ac, gb);
2305  break;
2306 
2307  case TYPE_PCE: {
2308  uint8_t layout_map[MAX_ELEM_ID*4][3] = {{0}};
2309  int tags;
2310 
2311  int pushed = push_output_configuration(ac);
2312  if (pce_found && !pushed)
2313  return AVERROR_INVALIDDATA;
2314 
2315  tags = decode_pce(avctx, &ac->oc[1].m4ac, layout_map, gb,
2316  payload_alignment);
2317  if (tags < 0) {
2318  err = tags;
2319  break;
2320  }
2321  if (pce_found) {
2322  av_log(avctx, AV_LOG_ERROR,
2323  "Not evaluating a further program_config_element as this construct is dubious at best.\n");
2325  } else {
2326  err = ff_aac_output_configure(ac, layout_map, tags, OC_TRIAL_PCE, 1);
2327  if (!err)
2328  ac->oc[1].m4ac.chan_config = 0;
2329  pce_found = 1;
2330  }
2331  break;
2332  }
2333 
2334  case TYPE_FIL:
2335  if (elem_id == 15)
2336  elem_id += get_bits(gb, 8) - 1;
2337  if (get_bits_left(gb) < 8 * elem_id) {
2338  av_log(avctx, AV_LOG_ERROR, "TYPE_FIL: "overread_err);
2339  return AVERROR_INVALIDDATA;
2340  }
2341  err = 0;
2342  while (elem_id > 0) {
2343  int ret = decode_extension_payload(ac, gb, elem_id, che_prev, che_prev_type);
2344  if (ret < 0) {
2345  err = ret;
2346  break;
2347  }
2348  elem_id -= ret;
2349  }
2350  break;
2351 
2352  default:
2353  err = AVERROR_BUG; /* should not happen, but keeps compiler happy */
2354  break;
2355  }
2356 
2357  if (elem_type < TYPE_DSE) {
2358  che_prev = che;
2359  che_prev_type = elem_type;
2360  }
2361 
2362  if (err)
2363  return err;
2364 
2365  if (get_bits_left(gb) < 3) {
2366  av_log(avctx, AV_LOG_ERROR, overread_err);
2367  return AVERROR_INVALIDDATA;
2368  }
2369  }
2370 
2371  if (!avctx->ch_layout.nb_channels)
2372  return 0;
2373 
2374  multiplier = (ac->oc[1].m4ac.sbr == 1) ? ac->oc[1].m4ac.ext_sample_rate > ac->oc[1].m4ac.sample_rate : 0;
2375  samples <<= multiplier;
2376 
2378 
2379  if (ac->oc[1].status && audio_found) {
2380  avctx->sample_rate = ac->oc[1].m4ac.sample_rate << multiplier;
2381  avctx->frame_size = samples;
2382  ac->oc[1].status = OC_LOCKED;
2383  }
2384 
2385  if (!ac->frame->data[0] && samples) {
2386  av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
2387  return AVERROR_INVALIDDATA;
2388  }
2389 
2390  if (samples) {
2391  ac->frame->nb_samples = samples;
2392  ac->frame->sample_rate = avctx->sample_rate;
2393  ac->frame->flags |= AV_FRAME_FLAG_KEY;
2394  *got_frame_ptr = 1;
2395  } else {
2396  av_frame_unref(ac->frame);
2397  *got_frame_ptr = 0;
2398  }
2399 
2400  /* for dual-mono audio (SCE + SCE) */
2401  is_dmono = ac->dmono_mode && sce_count == 2 &&
2404  if (is_dmono) {
2405  if (ac->dmono_mode == 1)
2406  frame->data[1] = frame->data[0];
2407  else if (ac->dmono_mode == 2)
2408  frame->data[0] = frame->data[1];
2409  }
2410 
2411  return 0;
2412 }
2413 
2415  int *got_frame_ptr, GetBitContext *gb,
2416  const AVPacket *avpkt)
2417 {
2418  int err;
2419  AACDecContext *ac = avctx->priv_data;
2420 
2421  ac->frame = frame;
2422  *got_frame_ptr = 0;
2423 
2424  // USAC can't be packed into ADTS due to field size limitations.
2425  if (show_bits(gb, 12) == 0xfff && ac->oc[1].m4ac.object_type != AOT_USAC) {
2426  if ((err = parse_adts_frame_header(ac, gb)) < 0) {
2427  av_log(avctx, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
2428  goto fail;
2429  }
2430  if (ac->oc[1].m4ac.sampling_index > 12) {
2431  av_log(ac->avctx, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->oc[1].m4ac.sampling_index);
2432  err = AVERROR_INVALIDDATA;
2433  goto fail;
2434  }
2435  }
2436 
2437  if ((err = frame_configure_elements(avctx)) < 0)
2438  goto fail;
2439 
2440  // The AV_PROFILE_AAC_* defines are all object_type - 1
2441  // This may lead to an undefined profile being signaled
2442  ac->avctx->profile = ac->oc[1].m4ac.object_type - 1;
2443 
2444  ac->tags_mapped = 0;
2445 
2446  if (ac->oc[1].m4ac.object_type == AOT_USAC) {
2447  if (ac->is_fixed) {
2449  "AAC USAC fixed-point decoding");
2450  return AVERROR_PATCHWELCOME;
2451  }
2452 #if CONFIG_AAC_DECODER
2453  err = ff_aac_usac_decode_frame(avctx, ac, gb, got_frame_ptr);
2454  if (err < 0)
2455  goto fail;
2456 #endif
2457  } else {
2458  err = decode_frame_ga(avctx, ac, gb, got_frame_ptr);
2459  if (err < 0)
2460  goto fail;
2461  }
2462 
2463  return err;
2464 
2465 fail:
2467  return err;
2468 }
2469 
2471  int *got_frame_ptr, AVPacket *avpkt)
2472 {
2473  AACDecContext *ac = avctx->priv_data;
2474  const uint8_t *buf = avpkt->data;
2475  int buf_size = avpkt->size;
2476  GetBitContext gb;
2477  int buf_consumed;
2478  int buf_offset;
2479  int err;
2480  size_t new_extradata_size;
2481  const uint8_t *new_extradata = av_packet_get_side_data(avpkt,
2483  &new_extradata_size);
2484  size_t jp_dualmono_size;
2485  const uint8_t *jp_dualmono = av_packet_get_side_data(avpkt,
2487  &jp_dualmono_size);
2488 
2489  if (new_extradata) {
2490  /* discard previous configuration */
2491  ac->oc[1].status = OC_NONE;
2492  err = decode_audio_specific_config(ac, ac->avctx, &ac->oc[1],
2493  new_extradata,
2494  new_extradata_size * 8LL, 1);
2495  if (err < 0) {
2496  return err;
2497  }
2498  }
2499 
2500  ac->dmono_mode = 0;
2501  if (jp_dualmono && jp_dualmono_size > 0)
2502  ac->dmono_mode = 1 + *jp_dualmono;
2503  if (ac->force_dmono_mode >= 0)
2504  ac->dmono_mode = ac->force_dmono_mode;
2505 
2506  if (INT_MAX / 8 <= buf_size)
2507  return AVERROR_INVALIDDATA;
2508 
2509  if ((err = init_get_bits8(&gb, buf, buf_size)) < 0)
2510  return err;
2511 
2512  switch (ac->oc[1].m4ac.object_type) {
2513  case AOT_ER_AAC_LC:
2514  case AOT_ER_AAC_LTP:
2515  case AOT_ER_AAC_LD:
2516  case AOT_ER_AAC_ELD:
2517  err = aac_decode_er_frame(avctx, frame, got_frame_ptr, &gb);
2518  break;
2519  default:
2520  err = aac_decode_frame_int(avctx, frame, got_frame_ptr, &gb, avpkt);
2521  }
2522  if (err < 0)
2523  return err;
2524 
2525  buf_consumed = (get_bits_count(&gb) + 7) >> 3;
2526  for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
2527  if (buf[buf_offset])
2528  break;
2529 
2530  return buf_size > buf_offset ? buf_consumed : buf_size;
2531 }
2532 
2533 #if CONFIG_AAC_LATM_DECODER
2534 #include "aacdec_latm.h"
2535 #endif
2536 
2537 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
2538 #define OFF(field) offsetof(AACDecContext, field)
2539 static const AVOption options[] = {
2540  /**
2541  * AVOptions for Japanese DTV specific extensions (ADTS only)
2542  */
2543  {"dual_mono_mode", "Select the channel to decode for dual mono",
2544  OFF(force_dmono_mode), AV_OPT_TYPE_INT, {.i64=-1}, -1, 2,
2545  AACDEC_FLAGS, .unit = "dual_mono_mode"},
2546 
2547  {"auto", "autoselection", 0, AV_OPT_TYPE_CONST, {.i64=-1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2548  {"main", "Select Main/Left channel", 0, AV_OPT_TYPE_CONST, {.i64= 1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2549  {"sub" , "Select Sub/Right channel", 0, AV_OPT_TYPE_CONST, {.i64= 2}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2550  {"both", "Select both channels", 0, AV_OPT_TYPE_CONST, {.i64= 0}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2551 
2552  { "channel_order", "Order in which the channels are to be exported",
2553  OFF(output_channel_order), AV_OPT_TYPE_INT,
2554  { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, AACDEC_FLAGS, .unit = "channel_order" },
2555  { "default", "normal libavcodec channel order", 0, AV_OPT_TYPE_CONST,
2556  { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
2557  { "coded", "order in which the channels are coded in the bitstream",
2558  0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
2559 
2560  {NULL},
2561 };
2562 
2563 static const AVClass decoder_class = {
2564  .class_name = "AAC decoder",
2565  .item_name = av_default_item_name,
2566  .option = options,
2567  .version = LIBAVUTIL_VERSION_INT,
2568 };
2569 
2570 #if CONFIG_AAC_DECODER
2571 const FFCodec ff_aac_decoder = {
2572  .p.name = "aac",
2573  CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
2574  .p.type = AVMEDIA_TYPE_AUDIO,
2575  .p.id = AV_CODEC_ID_AAC,
2576  .p.priv_class = &decoder_class,
2577  .priv_data_size = sizeof(AACDecContext),
2579  .close = decode_close,
2582  .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
2583  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2585  .flush = flush,
2586  .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
2587 };
2588 #endif
2589 
2590 #if CONFIG_AAC_FIXED_DECODER
2591 const FFCodec ff_aac_fixed_decoder = {
2592  .p.name = "aac_fixed",
2593  CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
2594  .p.type = AVMEDIA_TYPE_AUDIO,
2595  .p.id = AV_CODEC_ID_AAC,
2596  .p.priv_class = &decoder_class,
2597  .priv_data_size = sizeof(AACDecContext),
2599  .close = decode_close,
2602  .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
2603  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2605  .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
2606  .flush = flush,
2607 };
2608 #endif
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:32
ChannelCoupling::type
enum RawDataBlockType type[8]
Type of channel element to be coupled - SCE or CPE.
Definition: aacdec.h:200
CouplingPoint
CouplingPoint
The point during decoding at which channel coupling is applied.
Definition: aacdec.h:69
MAX_ELEM_ID
#define MAX_ELEM_ID
Definition: aac.h:34
AVCodecContext::frame_size
int frame_size
Number of samples per channel in an audio frame.
Definition: avcodec.h:1063
AAC_CHANNEL_BACK
@ AAC_CHANNEL_BACK
Definition: aac.h:84
AV_SAMPLE_FMT_FLTP
@ AV_SAMPLE_FMT_FLTP
float, planar
Definition: samplefmt.h:66
decode_close
static av_cold int decode_close(AVCodecContext *avctx)
Definition: aacdec.c:1135
decode_frame_ga
static int decode_frame_ga(AVCodecContext *avctx, AACDecContext *ac, GetBitContext *gb, int *got_frame_ptr)
Definition: aacdec.c:2239
AACDecProc::decode_spectrum_and_dequant
int(* decode_spectrum_and_dequant)(AACDecContext *ac, GetBitContext *gb, const Pulse *pulse, SingleChannelElement *sce)
Definition: aacdec.h:427
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
ff_aac_num_swb_120
#define ff_aac_num_swb_120
Definition: aactab.h:79
pop_output_configuration
static void pop_output_configuration(AACDecContext *ac)
Restore the previous output configuration if and only if the current configuration is unlocked.
Definition: aacdec.c:470
AACDecContext::mdct960_fn
av_tx_fn mdct960_fn
Definition: aacdec.h:530
ff_tns_max_bands_128
const uint8_t ff_tns_max_bands_128[]
Definition: aactab.c:1990
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
av_clip
#define av_clip
Definition: common.h:100
BETWEEN_TNS_AND_IMDCT
@ BETWEEN_TNS_AND_IMDCT
Definition: aacdec.h:71
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:43
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:688
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
AACDecDSP::apply_intensity_stereo
void(* apply_intensity_stereo)(AACDecContext *ac, ChannelElement *cpe, int ms_present)
Definition: aacdec.h:449
AACUSACConfig
Definition: aacdec.h:382
assign_channels
static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t(*layout_map)[3], uint64_t *layout, int tags, int layer, int pos, int *current)
Definition: aacdec.c:292
TYPE_FIL
@ TYPE_FIL
Definition: aac.h:50
EXT_FILL
@ EXT_FILL
Definition: aac.h:55
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:1036
AACDecContext::mdct1024_fn
av_tx_fn mdct1024_fn
Definition: aacdec.h:531
decode_scalefactors
static int decode_scalefactors(AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb, unsigned int global_gain)
Decode scalefactors; reference: table 4.47.
Definition: aacdec.c:1507
AACDecContext::warned_he_aac_mono
int warned_he_aac_mono
Definition: aacdec.h:562
AACDecContext::mdct96
AVTXContext * mdct96
Definition: aacdec.h:514
AV_PKT_DATA_NEW_EXTRADATA
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
Definition: packet.h:56
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:354
AVCodecInternal::skip_samples
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
Definition: internal.h:125
AACDecProc::sbr_ctx_alloc_init
int(* sbr_ctx_alloc_init)(AACDecContext *ac, ChannelElement **che, int id_aac)
Definition: aacdec.h:434
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1410
Pulse::num_pulse
int num_pulse
Definition: aac.h:104
ff_ltp_coef
const float ff_ltp_coef[8]
Definition: aactab.c:110
int64_t
long long int64_t
Definition: coverity.c:34
decode_audio_specific_config
static int decode_audio_specific_config(AACDecContext *ac, AVCodecContext *avctx, OutputConfiguration *oc, const uint8_t *data, int64_t bit_size, int sync_extension)
Definition: aacdec.c:1109
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:254
AACDecContext::mdct768
AVTXContext * mdct768
Definition: aacdec.h:519
OC_TRIAL_PCE
@ OC_TRIAL_PCE
Output configuration under trial specified by an inband PCE.
Definition: aacdec.h:55
aacsbr.h
mode
Definition: swscale.c:60
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:435
aac_decode_frame_int
static int aac_decode_frame_int(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, GetBitContext *gb, const AVPacket *avpkt)
Definition: aacdec.c:2414
decode_drc_channel_exclusions
static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc, GetBitContext *gb)
Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4....
Definition: aacdec.c:1840
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:595
ff_aac_num_swb_960
const uint8_t ff_aac_num_swb_960[]
Definition: aactab.c:153
AVOption
AVOption.
Definition: opt.h:429
AACDecContext::mdct960
AVTXContext * mdct960
Definition: aacdec.h:520
AOT_ER_AAC_LTP
@ AOT_ER_AAC_LTP
N Error Resilient Long Term Prediction.
Definition: mpeg4audio.h:90
TYPE_PCE
@ TYPE_PCE
Definition: aac.h:49
AV_SAMPLE_FMT_S32P
@ AV_SAMPLE_FMT_S32P
signed 32 bits, planar
Definition: samplefmt.h:65
data
const char data[16]
Definition: mxf.c:149
aacdec_usac.h
FF_COMPLIANCE_STRICT
#define FF_COMPLIANCE_STRICT
Strictly conform to all the things in the spec no matter what consequences.
Definition: defs.h:59
TemporalNoiseShaping::present
int present
Definition: aacdec.h:186
FFCodec
Definition: codec_internal.h:127
parse_adts_frame_header
static int parse_adts_frame_header(AACDecContext *ac, GetBitContext *gb)
Definition: aacdec.c:2104
ff_aac_profiles
const AVProfile ff_aac_profiles[]
Definition: profiles.c:27
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:226
AACDecContext::tag_che_map
ChannelElement * tag_che_map[4][MAX_ELEM_ID]
Definition: aacdec.h:496
LongTermPrediction::used
int8_t used[MAX_LTP_LONG_SFB]
Definition: aacdec.h:122
AACDecDSP::apply_tns
void(* apply_tns)(void *_coef_param, TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
Definition: aacdec.h:452
AVFrame::flags
int flags
Frame flags, a combination of AV_FRAME_FLAGS.
Definition: frame.h:679
AVChannelLayout::order
enum AVChannelOrder order
Channel order used in this layout.
Definition: channel_layout.h:324
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
ff_aac_num_swb_480
const uint8_t ff_aac_num_swb_480[]
Definition: aactab.c:165
AACDecContext::warned_remapping_once
int warned_remapping_once
Definition: aacdec.h:498
AACDecContext::proc
AACDecProc proc
Definition: aacdec.h:484
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:329
AACDecContext::mdct512_fn
av_tx_fn mdct512_fn
Definition: aacdec.h:528
AACDecDSP::apply_prediction
void(* apply_prediction)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:458
ChannelElement::ch
SingleChannelElement ch[2]
Definition: aacdec.h:296
ff_aac_sample_rate_idx
static int ff_aac_sample_rate_idx(int rate)
Definition: aac.h:110
EXT_DYNAMIC_RANGE
@ EXT_DYNAMIC_RANGE
Definition: aac.h:58
ff_swb_offset_128
const uint16_t *const ff_swb_offset_128[]
Definition: aactab.c:1940
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:517
av_tx_init
av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, int inv, int len, const void *scale, uint64_t flags)
Initialize a transform context with the given configuration (i)MDCTs with an odd length are currently...
Definition: tx.c:903
ff_aac_decode_ics
int ff_aac_decode_ics(AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb, int common_window, int scale_flag)
Decode an individual_channel_stream payload; reference: table 4.44.
Definition: aacdec.c:1700
ChannelElement::present
int present
Definition: aacdec.h:291
FF_DEBUG_PICT_INFO
#define FF_DEBUG_PICT_INFO
Definition: avcodec.h:1387
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:456
ff_tns_max_bands_1024
const uint8_t ff_tns_max_bands_1024[]
Definition: aactab.c:1974
ff_aac_decode_init_float
int ff_aac_decode_init_float(AVCodecContext *avctx)
Definition: aacdec_float.c:164
AACDecContext::dmono_mode
int dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
Definition: aacdec.h:553
MPEG4AudioConfig
Definition: mpeg4audio.h:29
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:383
DynamicRangeControl
Dynamic Range Control - decoded from the bitstream but not processed further.
Definition: aacdec.h:410
IndividualChannelStream::num_swb
int num_swb
number of scalefactor window bands
Definition: aacdec.h:172
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:197
options
static const AVOption options[]
Definition: aacdec.c:2539
ff_aac_decode_init_fixed
int ff_aac_decode_init_fixed(AVCodecContext *avctx)
Dequantization-related.
Definition: aacdec_fixed.c:87
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:337
ChannelCoupling::coupling_point
enum CouplingPoint coupling_point
The point during decoding at which coupling is applied.
Definition: aacdec.h:198
SingleChannelElement::coeffs
float coeffs[1024]
coefficients for IMDCT, maybe processed
Definition: aacenc.h:119
ff_aac_num_swb_512
const uint8_t ff_aac_num_swb_512[]
Definition: aactab.c:161
AACDecContext::force_dmono_mode
int force_dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
Definition: aacdec.h:552
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
AACDecContext::mdct480
AVTXContext * mdct480
Definition: aacdec.h:517
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:1051
macros.h
fail
#define fail()
Definition: checkasm.h:224
ChannelElement::coup
ChannelCoupling coup
Definition: aacdec.h:298
ChannelCoupling::id_select
int id_select[8]
element id
Definition: aacdec.h:201
SingleChannelElement::ret_buf
float ret_buf[2048]
PCM output buffer.
Definition: aacenc.h:120
ff_adts_header_parse
int ff_adts_header_parse(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
Parse the ADTS frame header to the end of the variable header, which is the first 54 bits.
Definition: adts_header.c:30
AACDecContext::warned_71_wide
unsigned warned_71_wide
Definition: aacdec.h:560
TYPE_CPE
@ TYPE_CPE
Definition: aac.h:45
GetBitContext
Definition: get_bits.h:109
AV_EF_BITSTREAM
#define AV_EF_BITSTREAM
detect bitstream specification deviations
Definition: defs.h:49
AACDecContext::tags_mapped
int tags_mapped
Definition: aacdec.h:497
Pulse::amp
int amp[4]
Definition: aac.h:107
Pulse::pos
int pos[4]
Definition: aac.h:106
OutputConfiguration::status
enum OCStatus status
Definition: aacdec.h:403
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
IndividualChannelStream::prediction_used
uint8_t prediction_used[41]
Definition: aacdec.h:178
AACDecContext::che_drc
DynamicRangeControl che_drc
Definition: aacdec.h:489
MAX_LTP_LONG_SFB
#define MAX_LTP_LONG_SFB
Definition: aac.h:37
refstruct.h
SingleChannelElement::ics
IndividualChannelStream ics
Definition: aacdec.h:212
AACDecContext::mdct480_fn
av_tx_fn mdct480_fn
Definition: aacdec.h:527
decode_cpe
static int decode_cpe(AACDecContext *ac, GetBitContext *gb, ChannelElement *cpe)
Decode a channel_pair_element; reference: table 4.4.
Definition: aacdec.c:1794
decode_pulses
static int decode_pulses(Pulse *pulse, GetBitContext *gb, const uint16_t *swb_offset, int num_swb)
Decode pulse data; reference: table 4.7.
Definition: aacdec.c:1566
AACUsacElemConfig
Definition: aacdec.h:327
AOT_ER_AAC_LC
@ AOT_ER_AAC_LC
N Error Resilient Low Complexity.
Definition: mpeg4audio.h:88
AACADTSHeaderInfo::chan_config
uint8_t chan_config
Definition: adts_header.h:42
decode_fill
static int decode_fill(AACDecContext *ac, GetBitContext *gb, int len)
Definition: aacdec.c:1906
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
ZERO_BT
@ ZERO_BT
Scalefactors and spectral data are all zero.
Definition: aac.h:71
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
AACDecDSP::dequant_scalefactors
void(* dequant_scalefactors)(SingleChannelElement *sce)
Definition: aacdec.h:446
av_cold
#define av_cold
Definition: attributes.h:119
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:544
DynamicRangeControl::exclude_mask
int exclude_mask[MAX_CHANNELS]
Channels to be excluded from DRC processing.
Definition: aacdec.h:414
AV_FRAME_FLAG_KEY
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition: frame.h:650
AV_CH_LAYOUT_22POINT2
#define AV_CH_LAYOUT_22POINT2
Definition: channel_layout.h:256
ff_aac_decode_init
av_cold int ff_aac_decode_init(AVCodecContext *avctx)
Definition: aacdec.c:1213
OC_GLOBAL_HDR
@ OC_GLOBAL_HDR
Output configuration set in a global header but not yet locked.
Definition: aacdec.h:57
AACDecContext::mdct_ltp
AVTXContext * mdct_ltp
Definition: aacdec.h:522
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:523
NOISE_BT
@ NOISE_BT
Spectral data are scaled white noise not coded in the bitstream.
Definition: aac.h:75
AV_TX_FLOAT_MDCT
@ AV_TX_FLOAT_MDCT
Standard MDCT with a sample data type of float, double or int32_t, respectively.
Definition: tx.h:68
AOT_ER_AAC_LD
@ AOT_ER_AAC_LD
N Error Resilient Low Delay.
Definition: mpeg4audio.h:94
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:347
AACDecDSP::apply_mid_side_stereo
void(* apply_mid_side_stereo)(AACDecContext *ac, ChannelElement *cpe)
Definition: aacdec.h:448
ff_swb_offset_960
const uint16_t *const ff_swb_offset_960[]
Definition: aactab.c:1908
ChannelCoupling::num_coupled
int num_coupled
number of target elements
Definition: aacdec.h:199
AV_TX_INT32_MDCT
@ AV_TX_INT32_MDCT
Definition: tx.h:70
g
const char * g
Definition: vf_curves.c:128
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:201
EIGHT_SHORT_SEQUENCE
@ EIGHT_SHORT_SEQUENCE
Definition: aac.h:66
AV_CHANNEL_ORDER_UNSPEC
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
Definition: channel_layout.h:119
TemporalNoiseShaping::direction
int direction[8][4]
Definition: aacdec.h:189
av_channel_layout_from_mask
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
Definition: channel_layout.c:253
INTENSITY_BT2
@ INTENSITY_BT2
Scalefactor data are intensity stereo positions (out of phase).
Definition: aac.h:76
bits
uint8_t bits
Definition: vp3data.h:128
AACDecProc::decode_cce
int(* decode_cce)(AACDecContext *ac, GetBitContext *gb, ChannelElement *che)
Definition: aacdec.h:432
TYPE_DSE
@ TYPE_DSE
Definition: aac.h:48
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
elem_to_channel::av_position
uint64_t av_position
Definition: aacdec.c:216
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
flush
static av_cold void flush(AVCodecContext *avctx)
Definition: aacdec.c:556
ChannelPosition
ChannelPosition
Definition: aac.h:80
AACDecDSP::imdct_and_windowing_ld
void(* imdct_and_windowing_ld)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:470
channels
channels
Definition: aptx.h:31
decode.h
limits.h
LongTermPrediction::present
int8_t present
Definition: aacdec.h:119
IndividualChannelStream
Individual Channel Stream.
Definition: aacdec.h:163
AACDecContext::che
ChannelElement * che[4][MAX_ELEM_ID]
Definition: aacdec.h:495
SCALE_DIFF_ZERO
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference
Definition: aac.h:95
av_fallthrough
#define av_fallthrough
Definition: attributes.h:67
NOISE_PRE
#define NOISE_PRE
preamble for NOISE_BT, put in bitstream with the first noise band
Definition: aac.h:99
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:332
AACDecContext::fdsp
AVFloatDSPContext * fdsp
Definition: aacdec.h:535
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:1844
AACDecContext::warned_num_aac_frames
int warned_num_aac_frames
Definition: aacdec.h:559
AACADTSHeaderInfo::num_aac_frames
uint8_t num_aac_frames
Definition: adts_header.h:43
INTENSITY_BT
@ INTENSITY_BT
Scalefactor data are intensity stereo positions (in phase).
Definition: aac.h:77
AACDecProc::sbr_apply
void(* sbr_apply)(AACDecContext *ac, ChannelElement *che, int id_aac, int fl960, void *L, void *R)
Definition: aacdec.h:437
elem_to_channel::syn_ele
uint8_t syn_ele
Definition: aacdec.c:217
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
decode_extension_payload
static int decode_extension_payload(AACDecContext *ac, GetBitContext *gb, int cnt, ChannelElement *che, enum RawDataBlockType elem_type)
Decode extension data (incomplete); reference: table 4.51.
Definition: aacdec.c:1939
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
AACDecContext::mdct96_fn
av_tx_fn mdct96_fn
Definition: aacdec.h:524
NULL
#define NULL
Definition: coverity.c:32
spectral_to_sample
static void spectral_to_sample(AACDecContext *ac, int samples)
Convert spectral data to samples, applying all supported tools as appropriate.
Definition: aacdec.c:2038
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
AACUsacElemConfig::ext
struct AACUsacElemConfig::@30 ext
IndividualChannelStream::use_kb_window
uint8_t use_kb_window[2]
If set, use Kaiser-Bessel window, otherwise use a sine window.
Definition: aacdec.h:166
ff_aac_num_swb_128
const uint8_t ff_aac_num_swb_128[]
Definition: aactab.c:169
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:474
IndividualChannelStream::num_window_groups
int num_window_groups
Definition: aacdec.h:167
AAC_CHANNEL_SIDE
@ AAC_CHANNEL_SIDE
Definition: aac.h:83
BEFORE_TNS
@ BEFORE_TNS
Definition: aacdec.h:70
AACADTSHeaderInfo::sampling_index
uint8_t sampling_index
Definition: adts_header.h:41
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:242
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:391
ff_aac_ch_layout
const AVChannelLayout ff_aac_ch_layout[]
Definition: aacdec_tab.c:96
profiles.h
MPEG4AudioConfig::sampling_index
int sampling_index
Definition: mpeg4audio.h:31
ff_aac_fixed_decoder
const FFCodec ff_aac_fixed_decoder
AOT_USAC
@ AOT_USAC
Y Unified Speech and Audio Coding.
Definition: mpeg4audio.h:113
ChannelElement::ms_mask
uint8_t ms_mask[128]
Set if mid/side stereo is used for each scalefactor window band.
Definition: aacdec.h:294
options
Definition: swscale.c:45
aac.h
aactab.h
IndividualChannelStream::predictor_present
int predictor_present
Definition: aacdec.h:175
DynamicRangeControl::band_top
int band_top[17]
Indicates the top of the i-th DRC band in units of 4 spectral lines.
Definition: aacdec.h:417
ff_swb_offset_480
const uint16_t *const ff_swb_offset_480[]
Definition: aactab.c:1932
AAC_CHANNEL_FRONT
@ AAC_CHANNEL_FRONT
Definition: aac.h:82
sniff_channel_order
static uint64_t sniff_channel_order(uint8_t(*layout_map)[3], int tags)
Definition: aacdec.c:370
aac_decode_er_frame
static int aac_decode_er_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, GetBitContext *gb)
Definition: aacdec.c:2166
AV_CH_FRONT_CENTER
#define AV_CH_FRONT_CENTER
Definition: channel_layout.h:177
count_channels
static int count_channels(uint8_t(*layout)[3], int tags)
Definition: aacdec.c:118
AOT_AAC_MAIN
@ AOT_AAC_MAIN
Y Main.
Definition: mpeg4audio.h:73
decode_mid_side_stereo
static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb, int ms_present)
Decode Mid/Side data; reference: table 4.54.
Definition: aacdec.c:1651
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
AAC_CHANNEL_OFF
@ AAC_CHANNEL_OFF
Definition: aac.h:81
AACDecContext::mdct120
AVTXContext * mdct120
Definition: aacdec.h:515
OC_LOCKED
@ OC_LOCKED
Output configuration locked in place.
Definition: aacdec.h:58
index
int index
Definition: gxfenc.c:90
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
IndividualChannelStream::prev_num_window_groups
int prev_num_window_groups
Previous frame's number of window groups.
Definition: aacdec.h:168
aac_decode_frame
static int aac_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Definition: aacdec.c:2470
error.h
ff_tns_max_bands_512
const uint8_t ff_tns_max_bands_512[]
Definition: aactab.c:1982
OutputConfiguration::layout_map_tags
int layout_map_tags
Definition: aacdec.h:401
AV_CODEC_CAP_CHANNEL_CONF
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition: codec.h:91
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:462
OutputConfiguration::layout_map
uint8_t layout_map[MAX_ELEM_ID *4][3]
Definition: aacdec.h:400
ff_dlog
#define ff_dlog(a,...)
Definition: tableprint_vlc.h:28
AACDecDSP::update_ltp
void(* update_ltp)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:456
AACDecDSP::apply_independent_coupling
void(* apply_independent_coupling)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Definition: aacdec.h:463
frame_configure_elements
static int frame_configure_elements(AVCodecContext *avctx)
Definition: aacdec.c:181
ff_aac_pred_sfb_max
const uint8_t ff_aac_pred_sfb_max[]
Definition: aactab.c:177
IndividualChannelStream::window_sequence
enum WindowSequence window_sequence[2]
Definition: aacdec.h:165
AACDecContext::dsp
AACDecDSP dsp
Definition: aacdec.h:483
AACDecDSP::clip_output
void(* clip_output)(AACDecContext *ac, ChannelElement *che, int type, int samples)
Definition: aacdec.h:473
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1765
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:551
AOT_ER_AAC_SCALABLE
@ AOT_ER_AAC_SCALABLE
N Error Resilient Scalable.
Definition: mpeg4audio.h:91
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
OC_NONE
@ OC_NONE
Output unconfigured.
Definition: aacdec.h:54
AACDecDSP::apply_dependent_coupling
void(* apply_dependent_coupling)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Definition: aacdec.h:460
ff_swb_offset_1024
const uint16_t *const ff_swb_offset_1024[]
Definition: aactab.c:1900
AOT_AAC_SCALABLE
@ AOT_AAC_SCALABLE
N Scalable.
Definition: mpeg4audio.h:78
AVPacket::size
int size
Definition: packet.h:596
skip_data_stream_element
static int skip_data_stream_element(AACDecContext *ac, GetBitContext *gb)
Skip data_stream_element; reference: table 4.10.
Definition: aacdec.c:1276
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:94
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:319
codec_internal.h
ONLY_LONG_SEQUENCE
@ ONLY_LONG_SEQUENCE
Definition: aac.h:64
TYPE_END
@ TYPE_END
Definition: aac.h:51
AACDecContext::mdct1024
AVTXContext * mdct1024
Definition: aacdec.h:521
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
AVTXType
AVTXType
Definition: tx.h:39
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
AVFrame::sample_rate
int sample_rate
Sample rate of the audio data.
Definition: frame.h:598
AACDecDSP::imdct_and_windowing
void(* imdct_and_windowing)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:467
ChannelElement::max_sfb_ste
uint8_t max_sfb_ste
(USAC) Maximum of both max_sfb values
Definition: aacdec.h:293
OCStatus
OCStatus
Output configuration status.
Definition: aacdec.h:53
size
int size
Definition: twinvq_data.h:10344
SingleChannelElement::sfo
int sfo[128]
scalefactor offsets
Definition: aacdec.h:216
ff_tags_per_config
const int8_t ff_tags_per_config[16]
Definition: aacdec_tab.c:38
DynamicRangeControl::prog_ref_level
int prog_ref_level
A reference level for the long-term program audio level for all channels combined.
Definition: aacdec.h:418
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.
AACDecContext::output_element
SingleChannelElement * output_element[MAX_CHANNELS]
Points to each SingleChannelElement.
Definition: aacdec.h:544
ff_mpeg4audio_get_config_gb
int ff_mpeg4audio_get_config_gb(MPEG4AudioConfig *c, GetBitContext *gb, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a potentially unaligned GetBitContext to retrieve audio configura...
Definition: mpeg4audio.c:92
AACDecContext::output_channel_order
enum AACOutputChannelOrder output_channel_order
Definition: aacdec.h:556
decode_dynamic_range
static int decode_dynamic_range(DynamicRangeControl *che_drc, GetBitContext *gb)
Decode dynamic range information; reference: table 4.52.
Definition: aacdec.c:1859
OutputConfiguration
Definition: aacdec.h:398
elem_to_channel::elem_id
uint8_t elem_id
Definition: aacdec.c:218
ff_tns_max_bands_480
const uint8_t ff_tns_max_bands_480[]
Definition: aactab.c:1986
elem_to_channel
Definition: aacdec.c:215
ff_swb_offset_512
const uint16_t *const ff_swb_offset_512[]
Definition: aactab.c:1924
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
attributes.h
decoder_class
static const AVClass decoder_class
Definition: aacdec.c:2563
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:416
AACADTSHeaderInfo::object_type
uint8_t object_type
Definition: adts_header.h:40
CODEC_SAMPLEFMTS
#define CODEC_SAMPLEFMTS(...)
Definition: codec_internal.h:386
SingleChannelElement::band_type
enum BandType band_type[128]
band types
Definition: aacdec.h:215
MAX_CHANNELS
#define MAX_CHANNELS
Definition: aac.h:33
AV_CHAN_UNUSED
@ AV_CHAN_UNUSED
Channel is empty can be safely skipped.
Definition: channel_layout.h:91
AACDecContext::mdct128
AVTXContext * mdct128
Definition: aacdec.h:516
DynamicRangeControl::dyn_rng_ctl
int dyn_rng_ctl[17]
DRC magnitude information.
Definition: aacdec.h:413
decode_ga_specific_config
static int decode_ga_specific_config(AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, int get_bit_alignment, MPEG4AudioConfig *m4ac, int channel_config)
Decode GA "General Audio" specific configuration; reference: table 4.1.
Definition: aacdec.c:890
AACDecDSP::apply_ltp
void(* apply_ltp)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:455
SingleChannelElement::output
float * output
PCM output.
Definition: aacdec.h:228
MPEG4AudioConfig::channels
int channels
Definition: mpeg4audio.h:39
av_tx_uninit
av_cold void av_tx_uninit(AVTXContext **ctx)
Frees a context and sets *ctx to NULL, does nothing when *ctx == NULL.
Definition: tx.c:295
decode_eld_specific_config
static int decode_eld_specific_config(AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, MPEG4AudioConfig *m4ac, int channel_config)
Definition: aacdec.c:965
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
EXT_FILL_DATA
@ EXT_FILL_DATA
Definition: aac.h:56
decode_prediction
static int decode_prediction(AACDecContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
Definition: aacdec.c:1293
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:221
AOT_AAC_SSR
@ AOT_AAC_SSR
N (code in SoC repo) Scalable Sample Rate.
Definition: mpeg4audio.h:75
AACDecContext::mdct768_fn
av_tx_fn mdct768_fn
Definition: aacdec.h:529
MDCT_INIT
#define MDCT_INIT(s, fn, len, sval)
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
AACDecDSP::imdct_and_windowing_960
void(* imdct_and_windowing_960)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:469
layout
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 layout
Definition: filter_design.txt:18
decode_audio_specific_config_gb
static int decode_audio_specific_config_gb(AACDecContext *ac, AVCodecContext *avctx, OutputConfiguration *oc, GetBitContext *gb, int get_bit_alignment, int sync_extension)
Decode audio specific configuration; reference: table 1.13.
Definition: aacdec.c:1034
ff_tns_tmp2_map
const float *const ff_tns_tmp2_map[4]
Definition: aactab.c:142
CHANNEL_ORDER_CODED
@ CHANNEL_ORDER_CODED
Definition: aacdec.h:63
AVFrame::nb_samples
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:515
RawDataBlockType
RawDataBlockType
Definition: aac.h:43
log.h
SingleChannelElement
Single Channel Element - used for both SCE and LFE elements.
Definition: aacdec.h:211
AACDecContext::is_fixed
int is_fixed
Definition: aacdec.h:564
IndividualChannelStream::num_windows
int num_windows
Definition: aacdec.h:173
OutputConfiguration::usac
AACUSACConfig usac
Definition: aacdec.h:404
AACDecContext::warned_gain_control
int warned_gain_control
Definition: aacdec.h:561
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:522
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:373
av_packet_get_side_data
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size)
Get side information from packet.
Definition: packet.c:252
ff_aac_channel_layout_map
const uint8_t ff_aac_channel_layout_map[16][16][3]
Definition: aacdec_tab.c:40
push_output_configuration
static int push_output_configuration(AACDecContext *ac)
Save current output configuration if and only if it has been locked.
Definition: aacdec.c:454
AACDecContext::random_state
int random_state
Definition: aacdec.h:537
relative_align_get_bits
static void relative_align_get_bits(GetBitContext *gb, int reference_position)
Definition: aacdec.c:808
AACDEC_FLAGS
#define AACDEC_FLAGS
Definition: aacdec.c:2537
AVFrame::extended_data
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:496
ChannelElement
channel element - generic struct for SCE/CPE/CCE/LFE
Definition: aacdec.h:290
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:171
AOT_ER_AAC_ELD
@ AOT_ER_AAC_ELD
N Error Resilient Enhanced Low Delay.
Definition: mpeg4audio.h:110
assign_pair
static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t(*layout_map)[3], int offset, uint64_t left, uint64_t right, int pos, uint64_t *layout)
Definition: aacdec.c:222
NOISE_PRE_BITS
#define NOISE_PRE_BITS
length of preamble
Definition: aac.h:100
FF_DEBUG_STARTCODE
#define FF_DEBUG_STARTCODE
Definition: avcodec.h:1394
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
AV_CH_FRONT_LEFT
#define AV_CH_FRONT_LEFT
Definition: channel_layout.h:175
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
LongTermPrediction::lag
int16_t lag
Definition: aacdec.h:120
ff_aac_decoder
const FFCodec ff_aac_decoder
MPEG4AudioConfig::chan_config
int chan_config
Definition: mpeg4audio.h:33
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
TemporalNoiseShaping::order
int order[8][4]
Definition: aacdec.h:190
TYPE_SCE
@ TYPE_SCE
Definition: aac.h:44
decode_ics_info
static int decode_ics_info(AACDecContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
Decode Individual Channel Stream info; reference: table 4.6.
Definition: aacdec.c:1333
len
int len
Definition: vorbis_enc_data.h:426
filt
static const int8_t filt[NUMTAPS *2]
Definition: af_earwax.c:40
che_configure
static av_cold int che_configure(AACDecContext *ac, enum ChannelPosition che_pos, int type, int id, int *channels)
Check for the channel element in the current channel position configuration.
Definition: aacdec.c:142
AACDecContext::oc
OutputConfiguration oc[2]
Definition: aacdec.h:558
MPEG4AudioConfig::ext_sample_rate
int ext_sample_rate
Definition: mpeg4audio.h:37
IndividualChannelStream::tns_max_bands
int tns_max_bands
Definition: aacdec.h:174
TemporalNoiseShaping::length
int length[8][4]
Definition: aacdec.h:188
AACDecDSP::imdct_and_windowing_eld
void(* imdct_and_windowing_eld)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:471
AACUSACConfig::nb_elems
int nb_elems
Definition: aacdec.h:388
AACADTSHeaderInfo::sample_rate
uint32_t sample_rate
Definition: adts_header.h:36
avcodec.h
ff_swb_offset_120
const uint16_t *const ff_swb_offset_120[]
Definition: aactab.c:1950
AAC_CHANNEL_LFE
@ AAC_CHANNEL_LFE
Definition: aac.h:85
version.h
AOT_ER_BSAC
@ AOT_ER_BSAC
N Error Resilient Bit-Sliced Arithmetic Coding.
Definition: mpeg4audio.h:93
DynamicRangeControl::pce_instance_tag
int pce_instance_tag
Indicates with which program the DRC info is associated.
Definition: aacdec.h:411
decode_ltp
static void decode_ltp(AACDecContext *ac, LongTermPrediction *ltp, GetBitContext *gb, uint8_t max_sfb)
Decode Long Term Prediction data; reference: table 4.xx.
Definition: aacdec.c:1315
ret
ret
Definition: filter_design.txt:187
AV_PKT_DATA_JP_DUALMONO
@ AV_PKT_DATA_JP_DUALMONO
An AV_PKT_DATA_JP_DUALMONO side data packet indicates that the packet may contain "dual mono" audio s...
Definition: packet.h:163
elem_to_channel::aac_position
uint8_t aac_position
Definition: aacdec.c:219
ff_aac_num_swb_1024
const uint8_t ff_aac_num_swb_1024[]
Definition: aactab.c:149
FFSWAP
#define FFSWAP(type, a, b)
Definition: macros.h:52
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:81
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:486
AVCodecContext::strict_std_compliance
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
Definition: avcodec.h:1369
align_get_bits
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:560
pos
unsigned int pos
Definition: spdifenc.c:414
count_paired_channels
static int count_paired_channels(uint8_t(*layout_map)[3], int tags, int pos, int current)
Definition: aacdec.c:260
TemporalNoiseShaping::coef
float coef[8][4][TNS_MAX_ORDER]
Definition: aacenc.h:101
CHANNEL_ORDER_DEFAULT
@ CHANNEL_ORDER_DEFAULT
Definition: aacdec.h:62
ChannelCoupling::ch_select
int ch_select[8]
[0] shared list of gains; [1] list of gains for right channel; [2] list of gains for left channel; [3...
Definition: aacdec.h:202
id
enum AVCodecID id
Definition: dts2pts.c:550
left
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
Definition: snow.txt:386
MPEG4AudioConfig::object_type
int object_type
Definition: mpeg4audio.h:30
SingleChannelElement::tns
TemporalNoiseShaping tns
Definition: aacdec.h:214
U
#define U(x)
Definition: vpx_arith.h:37
overread_err
#define overread_err
Definition: aacdec.c:116
aacdec.h
imdct_and_window
static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype, int wtype, float *in, float *prev, int ch)
Definition: twinvq.c:329
AACDecProc::sbr_decode_extension
int(* sbr_decode_extension)(AACDecContext *ac, ChannelElement *che, GetBitContext *gb, int crc, int cnt, int id_aac, int fl960)
Definition: aacdec.h:435
AACDecContext
main AAC decoding context
Definition: aacdec.h:479
AACADTSHeaderInfo::crc_absent
uint8_t crc_absent
Definition: adts_header.h:39
AV_CHAN_NONE
@ AV_CHAN_NONE
Invalid channel index.
Definition: channel_layout.h:49
init_dsp
static av_cold int init_dsp(AVCodecContext *avctx)
Definition: aacdec.c:1178
EXT_SBR_DATA_CRC
@ EXT_SBR_DATA_CRC
Definition: aac.h:60
AVCodecContext
main external API structure.
Definition: avcodec.h:439
EXT_SBR_DATA
@ EXT_SBR_DATA
Definition: aac.h:59
LongTermPrediction
Long Term Prediction.
Definition: aacdec.h:118
AV_PROFILE_AAC_HE_V2
#define AV_PROFILE_AAC_HE_V2
Definition: defs.h:73
AACDecContext::avctx
struct AVCodecContext * avctx
Definition: aacdec.h:481
MPEG4AudioConfig::ps
int ps
-1 implicit, 1 presence
Definition: mpeg4audio.h:40
aacdec_latm.h
NOISE_OFFSET
#define NOISE_OFFSET
subtracted from global gain, used as offset for the preamble
Definition: aac.h:101
aacdec_tab.h
av_refstruct_replace
void av_refstruct_replace(void *dstp, const void *src)
Ensure *dstp refers to the same object as src.
Definition: refstruct.c:160
mode
mode
Definition: ebur128.h:83
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:259
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1630
TemporalNoiseShaping
Temporal Noise Shaping.
Definition: aacdec.h:185
copy_oc
static void copy_oc(OutputConfiguration *dst, OutputConfiguration *src)
Definition: aacdec.c:431
ff_mpeg4audio_channels
const uint8_t ff_mpeg4audio_channels[15]
Definition: mpeg4audio.c:59
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
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:1593
Q31
#define Q31(x)
Definition: aac_defines.h:111
DynamicRangeControl::band_incr
int band_incr
Number of DRC bands greater than 1 having DRC info.
Definition: aacdec.h:415
AACDecContext::mdct_ltp_fn
av_tx_fn mdct_ltp_fn
Definition: aacdec.h:532
ff_aac_usac_reset_state
int ff_aac_usac_reset_state(AACDecContext *ac, OutputConfiguration *oc)
Definition: aacdec_usac.c:295
decode_gain_control
static void decode_gain_control(SingleChannelElement *sce, GetBitContext *gb)
Definition: aacdec.c:1665
AVCodecContext::debug
int debug
debug
Definition: avcodec.h:1386
AV_CH_FRONT_RIGHT
#define AV_CH_FRONT_RIGHT
Definition: channel_layout.h:176
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:399
TYPE_CCE
@ TYPE_CCE
Definition: aac.h:46
apply_channel_coupling
static void apply_channel_coupling(AACDecContext *ac, ChannelElement *cc, enum RawDataBlockType type, int elem_id, enum CouplingPoint coupling_point, void(*apply_coupling_method)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
channel coupling transformation interface
Definition: aacdec.c:2005
AACUSACConfig::elems
AACUsacElemConfig elems[MAX_ELEM_ID]
Definition: aacdec.h:387
mem.h
OutputConfiguration::ch_layout
AVChannelLayout ch_layout
Definition: aacdec.h:402
ff_aacdec_common_init_once
av_cold void ff_aacdec_common_init_once(void)
Definition: aacdec_tab.c:781
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:37
adts_header.h
w
uint8_t w
Definition: llvidencdsp.c:39
MPEG4AudioConfig::frame_length_short
int frame_length_short
Definition: mpeg4audio.h:41
AV_PROFILE_AAC_HE
#define AV_PROFILE_AAC_HE
Definition: defs.h:72
ff_aac_channel_map
const int16_t ff_aac_channel_map[3][4][6]
Definition: aacdec_tab.c:75
DynamicRangeControl::dyn_rng_sgn
int dyn_rng_sgn[17]
DRC sign information; 0 - positive, 1 - negative.
Definition: aacdec.h:412
AVPacket
This structure stores compressed data.
Definition: packet.h:572
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:466
ff_vlc_scalefactors
VLCElem ff_vlc_scalefactors[352]
Definition: aacdec_tab.c:111
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
ChannelCoupling
coupling parameters
Definition: aacdec.h:197
EXT_DATA_ELEMENT
@ EXT_DATA_ELEMENT
Definition: aac.h:57
aac_defines.h
AVERROR_BUG
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
Definition: error.h:52
IndividualChannelStream::max_sfb
uint8_t max_sfb
number of scalefactor bands per group
Definition: aacdec.h:164
decode_channel_map
static void decode_channel_map(uint8_t layout_map[][3], enum ChannelPosition type, GetBitContext *gb, int n)
Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit.
Definition: aacdec.c:778
Pulse
Definition: aac.h:103
AAC_CHANNEL_CC
@ AAC_CHANNEL_CC
Definition: aac.h:86
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
OFF
#define OFF(field)
Definition: aacdec.c:2538
AACDecContext::mdct512
AVTXContext * mdct512
Definition: aacdec.h:518
DynamicRangeControl::interpolation_scheme
int interpolation_scheme
Indicates the interpolation scheme used in the SBR QMF domain.
Definition: aacdec.h:416
AFTER_IMDCT
@ AFTER_IMDCT
Definition: aacdec.h:72
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
IndividualChannelStream::ltp
LongTermPrediction ltp
Definition: aacdec.h:170
IndividualChannelStream::group_len
uint8_t group_len[8]
Definition: aacdec.h:169
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition: opt.h:299
AACUsacElemConfig::pl_buf
uint8_t * pl_buf
Definition: aacdec.h:378
decode_band_types
static int decode_band_types(AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb)
Decode band types (section_data payload); reference: table 4.46.
Definition: aacdec.c:1460
decode_pce
static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac, uint8_t(*layout_map)[3], GetBitContext *gb, int byte_align_ref)
Decode program configuration element; reference: table 4.2.
Definition: aacdec.c:820
AOT_AAC_LC
@ AOT_AAC_LC
Y Low Complexity.
Definition: mpeg4audio.h:74
TemporalNoiseShaping::n_filt
int n_filt[8]
Definition: aacdec.h:187
AOT_AAC_LTP
@ AOT_AAC_LTP
Y Long Term Prediction.
Definition: mpeg4audio.h:76
CODEC_CH_LAYOUTS_ARRAY
#define CODEC_CH_LAYOUTS_ARRAY(array)
Definition: codec_internal.h:381
OC_TRIAL_FRAME
@ OC_TRIAL_FRAME
Output configuration under trial specified by a frame header.
Definition: aacdec.h:56
src
#define src
Definition: vp8dsp.c:248
Q30
#define Q30(x)
Definition: aac_defines.h:110
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
AACDecProc::sbr_ctx_close
void(* sbr_ctx_close)(ChannelElement *che)
Definition: aacdec.h:439
AACADTSHeaderInfo
Definition: adts_header.h:35
IndividualChannelStream::predictor_reset_group
int predictor_reset_group
Definition: aacdec.h:177
tx.h
AACDecContext::mdct120_fn
av_tx_fn mdct120_fn
Definition: aacdec.h:525
MPEG4AudioConfig::sample_rate
int sample_rate
Definition: mpeg4audio.h:32
AACDecContext::mdct128_fn
av_tx_fn mdct128_fn
Definition: aacdec.h:526