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  }
679  case 13:
680  if (ac->tags_mapped > 3 && ((type == TYPE_CPE && elem_id < 8) ||
681  (type == TYPE_SCE && elem_id < 6) ||
682  (type == TYPE_LFE && elem_id < 2))) {
683  ac->tags_mapped++;
684  return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id];
685  }
686  case 12:
687  case 7:
688  if (ac->tags_mapped == 3 && type == TYPE_CPE) {
689  ac->tags_mapped++;
690  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2];
691  }
692  case 11:
693  if (ac->tags_mapped == 3 && type == TYPE_SCE) {
694  ac->tags_mapped++;
695  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
696  }
697  case 6:
698  /* Some streams incorrectly code 5.1 audio as
699  * SCE[0] CPE[0] CPE[1] SCE[1]
700  * instead of
701  * SCE[0] CPE[0] CPE[1] LFE[0].
702  * If we seem to have encountered such a stream, transfer
703  * the LFE[0] element to the SCE[1]'s mapping */
704  if (ac->tags_mapped == ff_tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
705  if (!ac->warned_remapping_once && (type != TYPE_LFE || elem_id != 0)) {
707  "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n",
708  type == TYPE_SCE ? "SCE" : "LFE", elem_id);
709  ac->warned_remapping_once++;
710  }
711  ac->tags_mapped++;
712  return ac->tag_che_map[type][elem_id] = ac->che[TYPE_LFE][0];
713  }
714  case 5:
715  if (ac->tags_mapped == 2 && type == TYPE_CPE) {
716  ac->tags_mapped++;
717  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][1];
718  }
719  case 4:
720  /* Some streams incorrectly code 4.0 audio as
721  * SCE[0] CPE[0] LFE[0]
722  * instead of
723  * SCE[0] CPE[0] SCE[1].
724  * If we seem to have encountered such a stream, transfer
725  * the SCE[1] element to the LFE[0]'s mapping */
726  if (ac->tags_mapped == ff_tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
727  if (!ac->warned_remapping_once && (type != TYPE_SCE || elem_id != 1)) {
729  "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n",
730  type == TYPE_SCE ? "SCE" : "LFE", elem_id);
731  ac->warned_remapping_once++;
732  }
733  ac->tags_mapped++;
734  return ac->tag_che_map[type][elem_id] = ac->che[TYPE_SCE][1];
735  }
736  if (ac->tags_mapped == 2 &&
737  ac->oc[1].m4ac.chan_config == 4 &&
738  type == TYPE_SCE) {
739  ac->tags_mapped++;
740  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
741  }
742  case 3:
743  case 2:
744  if (ac->tags_mapped == (ac->oc[1].m4ac.chan_config != 2) &&
745  type == TYPE_CPE) {
746  ac->tags_mapped++;
747  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][0];
748  } else if (ac->tags_mapped == 1 && ac->oc[1].m4ac.chan_config == 2 &&
749  type == TYPE_SCE) {
750  ac->tags_mapped++;
751  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
752  }
753  case 1:
754  if (!ac->tags_mapped && type == TYPE_SCE) {
755  ac->tags_mapped++;
756  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][0];
757  }
758  default:
759  return NULL;
760  }
761 }
762 
763 /**
764  * Decode an array of 4 bit element IDs, optionally interleaved with a
765  * stereo/mono switching bit.
766  *
767  * @param type speaker type/position for these channels
768  */
769 static void decode_channel_map(uint8_t layout_map[][3],
770  enum ChannelPosition type,
771  GetBitContext *gb, int n)
772 {
773  while (n--) {
775  switch (type) {
776  case AAC_CHANNEL_FRONT:
777  case AAC_CHANNEL_BACK:
778  case AAC_CHANNEL_SIDE:
779  syn_ele = get_bits1(gb);
780  break;
781  case AAC_CHANNEL_CC:
782  skip_bits1(gb);
783  syn_ele = TYPE_CCE;
784  break;
785  case AAC_CHANNEL_LFE:
786  syn_ele = TYPE_LFE;
787  break;
788  default:
789  // AAC_CHANNEL_OFF has no channel map
790  av_assert0(0);
791  }
792  layout_map[0][0] = syn_ele;
793  layout_map[0][1] = get_bits(gb, 4);
794  layout_map[0][2] = type;
795  layout_map++;
796  }
797 }
798 
799 static inline void relative_align_get_bits(GetBitContext *gb,
800  int reference_position) {
801  int n = (reference_position - get_bits_count(gb) & 7);
802  if (n)
803  skip_bits(gb, n);
804 }
805 
806 /**
807  * Decode program configuration element; reference: table 4.2.
808  *
809  * @return Returns error status. 0 - OK, !0 - error
810  */
811 static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac,
812  uint8_t (*layout_map)[3],
813  GetBitContext *gb, int byte_align_ref)
814 {
815  int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
816  int sampling_index;
817  int comment_len;
818  int tags;
819 
820  skip_bits(gb, 2); // object_type
821 
822  sampling_index = get_bits(gb, 4);
823  if (m4ac->sampling_index != sampling_index)
824  av_log(avctx, AV_LOG_WARNING,
825  "Sample rate index in program config element does not "
826  "match the sample rate index configured by the container.\n");
827 
828  num_front = get_bits(gb, 4);
829  num_side = get_bits(gb, 4);
830  num_back = get_bits(gb, 4);
831  num_lfe = get_bits(gb, 2);
832  num_assoc_data = get_bits(gb, 3);
833  num_cc = get_bits(gb, 4);
834 
835  if (get_bits1(gb))
836  skip_bits(gb, 4); // mono_mixdown_tag
837  if (get_bits1(gb))
838  skip_bits(gb, 4); // stereo_mixdown_tag
839 
840  if (get_bits1(gb))
841  skip_bits(gb, 3); // mixdown_coeff_index and pseudo_surround
842 
843  if (get_bits_left(gb) < 5 * (num_front + num_side + num_back + num_cc) + 4 *(num_lfe + num_assoc_data + num_cc)) {
844  av_log(avctx, AV_LOG_ERROR, "decode_pce: " overread_err);
845  return -1;
846  }
847  decode_channel_map(layout_map , AAC_CHANNEL_FRONT, gb, num_front);
848  tags = num_front;
849  decode_channel_map(layout_map + tags, AAC_CHANNEL_SIDE, gb, num_side);
850  tags += num_side;
851  decode_channel_map(layout_map + tags, AAC_CHANNEL_BACK, gb, num_back);
852  tags += num_back;
853  decode_channel_map(layout_map + tags, AAC_CHANNEL_LFE, gb, num_lfe);
854  tags += num_lfe;
855 
856  skip_bits_long(gb, 4 * num_assoc_data);
857 
858  decode_channel_map(layout_map + tags, AAC_CHANNEL_CC, gb, num_cc);
859  tags += num_cc;
860 
861  relative_align_get_bits(gb, byte_align_ref);
862 
863  /* comment field, first byte is length */
864  comment_len = get_bits(gb, 8) * 8;
865  if (get_bits_left(gb) < comment_len) {
866  av_log(avctx, AV_LOG_ERROR, "decode_pce: " overread_err);
867  return AVERROR_INVALIDDATA;
868  }
869  skip_bits_long(gb, comment_len);
870  return tags;
871 }
872 
873 /**
874  * Decode GA "General Audio" specific configuration; reference: table 4.1.
875  *
876  * @param ac pointer to AACDecContext, may be null
877  * @param avctx pointer to AVCCodecContext, used for logging
878  *
879  * @return Returns error status. 0 - OK, !0 - error
880  */
882  GetBitContext *gb,
883  int get_bit_alignment,
884  MPEG4AudioConfig *m4ac,
885  int channel_config)
886 {
887  int extension_flag, ret, ep_config, res_flags;
888  uint8_t layout_map[MAX_ELEM_ID*4][3];
889  int tags = 0;
890 
891  m4ac->frame_length_short = get_bits1(gb);
892 
893  if (get_bits1(gb)) // dependsOnCoreCoder
894  skip_bits(gb, 14); // coreCoderDelay
895  extension_flag = get_bits1(gb);
896 
897  if (m4ac->object_type == AOT_AAC_SCALABLE ||
899  skip_bits(gb, 3); // layerNr
900 
901  if (channel_config == 0) {
902  skip_bits(gb, 4); // element_instance_tag
903  tags = decode_pce(avctx, m4ac, layout_map, gb, get_bit_alignment);
904  if (tags < 0)
905  return tags;
906  } else {
907  if ((ret = ff_aac_set_default_channel_config(ac, avctx, layout_map,
908  &tags, channel_config)))
909  return ret;
910  }
911 
912  if (count_channels(layout_map, tags) > 1) {
913  m4ac->ps = 0;
914  } else if (m4ac->sbr == 1 && m4ac->ps == -1)
915  m4ac->ps = 1;
916 
917  if (ac && (ret = ff_aac_output_configure(ac, layout_map, tags, OC_GLOBAL_HDR, 0)))
918  return ret;
919 
920  if (extension_flag) {
921  switch (m4ac->object_type) {
922  case AOT_ER_BSAC:
923  skip_bits(gb, 5); // numOfSubFrame
924  skip_bits(gb, 11); // layer_length
925  break;
926  case AOT_ER_AAC_LC:
927  case AOT_ER_AAC_LTP:
928  case AOT_ER_AAC_SCALABLE:
929  case AOT_ER_AAC_LD:
930  res_flags = get_bits(gb, 3);
931  if (res_flags) {
933  "AAC data resilience (flags %x)",
934  res_flags);
935  return AVERROR_PATCHWELCOME;
936  }
937  break;
938  }
939  skip_bits1(gb); // extensionFlag3 (TBD in version 3)
940  }
941  switch (m4ac->object_type) {
942  case AOT_ER_AAC_LC:
943  case AOT_ER_AAC_LTP:
944  case AOT_ER_AAC_SCALABLE:
945  case AOT_ER_AAC_LD:
946  ep_config = get_bits(gb, 2);
947  if (ep_config) {
949  "epConfig %d", ep_config);
950  return AVERROR_PATCHWELCOME;
951  }
952  }
953  return 0;
954 }
955 
957  GetBitContext *gb,
958  MPEG4AudioConfig *m4ac,
959  int channel_config)
960 {
961  int ret, ep_config, res_flags;
962  uint8_t layout_map[MAX_ELEM_ID*4][3];
963  int tags = 0;
964  const int ELDEXT_TERM = 0;
965 
966  m4ac->ps = 0;
967  m4ac->sbr = 0;
968  m4ac->frame_length_short = get_bits1(gb);
969 
970  res_flags = get_bits(gb, 3);
971  if (res_flags) {
973  "AAC data resilience (flags %x)",
974  res_flags);
975  return AVERROR_PATCHWELCOME;
976  }
977 
978  if (get_bits1(gb)) { // ldSbrPresentFlag
980  "Low Delay SBR");
981  return AVERROR_PATCHWELCOME;
982  }
983 
984  while (get_bits(gb, 4) != ELDEXT_TERM) {
985  int len = get_bits(gb, 4);
986  if (len == 15)
987  len += get_bits(gb, 8);
988  if (len == 15 + 255)
989  len += get_bits(gb, 16);
990  if (get_bits_left(gb) < len * 8 + 4) {
992  return AVERROR_INVALIDDATA;
993  }
994  skip_bits_long(gb, 8 * len);
995  }
996 
997  if ((ret = ff_aac_set_default_channel_config(ac, avctx, layout_map,
998  &tags, channel_config)))
999  return ret;
1000 
1001  if (ac && (ret = ff_aac_output_configure(ac, layout_map, tags, OC_GLOBAL_HDR, 0)))
1002  return ret;
1003 
1004  ep_config = get_bits(gb, 2);
1005  if (ep_config) {
1007  "epConfig %d", ep_config);
1008  return AVERROR_PATCHWELCOME;
1009  }
1010  return 0;
1011 }
1012 
1013 /**
1014  * Decode audio specific configuration; reference: table 1.13.
1015  *
1016  * @param ac pointer to AACDecContext, may be null
1017  * @param avctx pointer to AVCCodecContext, used for logging
1018  * @param m4ac pointer to MPEG4AudioConfig, used for parsing
1019  * @param gb buffer holding an audio specific config
1020  * @param get_bit_alignment relative alignment for byte align operations
1021  * @param sync_extension look for an appended sync extension
1022  *
1023  * @return Returns error status or number of consumed bits. <0 - error
1024  */
1026  AVCodecContext *avctx,
1027  OutputConfiguration *oc,
1028  GetBitContext *gb,
1029  int get_bit_alignment,
1030  int sync_extension)
1031 {
1032  int i, ret;
1033  GetBitContext gbc = *gb;
1034  MPEG4AudioConfig *m4ac = &oc->m4ac;
1035  MPEG4AudioConfig m4ac_bak = *m4ac;
1036 
1037  if ((i = ff_mpeg4audio_get_config_gb(m4ac, &gbc, sync_extension, avctx)) < 0) {
1038  *m4ac = m4ac_bak;
1039  return AVERROR_INVALIDDATA;
1040  }
1041 
1042  if (m4ac->sampling_index > 12) {
1043  av_log(avctx, AV_LOG_ERROR,
1044  "invalid sampling rate index %d\n",
1045  m4ac->sampling_index);
1046  *m4ac = m4ac_bak;
1047  return AVERROR_INVALIDDATA;
1048  }
1049  if (m4ac->object_type == AOT_ER_AAC_LD &&
1050  (m4ac->sampling_index < 3 || m4ac->sampling_index > 7)) {
1051  av_log(avctx, AV_LOG_ERROR,
1052  "invalid low delay sampling rate index %d\n",
1053  m4ac->sampling_index);
1054  *m4ac = m4ac_bak;
1055  return AVERROR_INVALIDDATA;
1056  }
1057 
1058  skip_bits_long(gb, i);
1059 
1060  switch (m4ac->object_type) {
1061  case AOT_AAC_MAIN:
1062  case AOT_AAC_LC:
1063  case AOT_AAC_SSR:
1064  case AOT_AAC_LTP:
1065  case AOT_ER_AAC_LC:
1066  case AOT_ER_AAC_LD:
1067  if ((ret = decode_ga_specific_config(ac, avctx, gb, get_bit_alignment,
1068  &oc->m4ac, m4ac->chan_config)) < 0)
1069  return ret;
1070  break;
1071  case AOT_ER_AAC_ELD:
1072  if ((ret = decode_eld_specific_config(ac, avctx, gb,
1073  &oc->m4ac, m4ac->chan_config)) < 0)
1074  return ret;
1075  break;
1076 #if CONFIG_AAC_DECODER
1077  case AOT_USAC:
1078  if ((ret = ff_aac_usac_config_decode(ac, avctx, gb,
1079  oc, m4ac->chan_config)) < 0)
1080  return ret;
1081  break;
1082 #endif
1083  default:
1085  "Audio object type %s%d",
1086  m4ac->sbr == 1 ? "SBR+" : "",
1087  m4ac->object_type);
1088  return AVERROR(ENOSYS);
1089  }
1090 
1091  ff_dlog(avctx,
1092  "AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
1093  m4ac->object_type, m4ac->chan_config, m4ac->sampling_index,
1094  m4ac->sample_rate, m4ac->sbr,
1095  m4ac->ps);
1096 
1097  return get_bits_count(gb);
1098 }
1099 
1101  AVCodecContext *avctx,
1102  OutputConfiguration *oc,
1103  const uint8_t *data, int64_t bit_size,
1104  int sync_extension)
1105 {
1106  int i, ret;
1107  GetBitContext gb;
1108 
1109  if (bit_size < 0 || bit_size > INT_MAX) {
1110  av_log(avctx, AV_LOG_ERROR, "Audio specific config size is invalid\n");
1111  return AVERROR_INVALIDDATA;
1112  }
1113 
1114  ff_dlog(avctx, "audio specific config size %d\n", (int)bit_size >> 3);
1115  for (i = 0; i < bit_size >> 3; i++)
1116  ff_dlog(avctx, "%02x ", data[i]);
1117  ff_dlog(avctx, "\n");
1118 
1119  if ((ret = init_get_bits(&gb, data, bit_size)) < 0)
1120  return ret;
1121 
1122  return decode_audio_specific_config_gb(ac, avctx, oc, &gb, 0,
1123  sync_extension);
1124 }
1125 
1127 {
1128  AACDecContext *ac = avctx->priv_data;
1129 
1130  for (int i = 0; i < 2; i++) {
1131  OutputConfiguration *oc = &ac->oc[i];
1132  AACUSACConfig *usac = &oc->usac;
1133  for (int j = 0; j < usac->nb_elems; j++) {
1134  AACUsacElemConfig *ec = &usac->elems[j];
1136  }
1137 
1139  }
1140 
1141  for (int type = 0; type < FF_ARRAY_ELEMS(ac->che); type++) {
1142  for (int i = 0; i < MAX_ELEM_ID; i++) {
1143  if (ac->che[type][i]) {
1144  ac->proc.sbr_ctx_close(ac->che[type][i]);
1145  av_freep(&ac->che[type][i]);
1146  }
1147  }
1148  }
1149 
1150  av_tx_uninit(&ac->mdct96);
1151  av_tx_uninit(&ac->mdct120);
1152  av_tx_uninit(&ac->mdct128);
1153  av_tx_uninit(&ac->mdct480);
1154  av_tx_uninit(&ac->mdct512);
1155  av_tx_uninit(&ac->mdct768);
1156  av_tx_uninit(&ac->mdct960);
1157  av_tx_uninit(&ac->mdct1024);
1158  av_tx_uninit(&ac->mdct_ltp);
1159 
1160  // Compiler will optimize this branch away.
1161  if (ac->is_fixed)
1162  av_freep(&ac->RENAME_FIXED(fdsp));
1163  else
1164  av_freep(&ac->fdsp);
1165 
1166  return 0;
1167 }
1168 
1169 static av_cold int init_dsp(AVCodecContext *avctx)
1170 {
1171  AACDecContext *ac = avctx->priv_data;
1172  int is_fixed = ac->is_fixed, ret;
1173  float scale_fixed, scale_float;
1174  const float *const scalep = is_fixed ? &scale_fixed : &scale_float;
1175  enum AVTXType tx_type = is_fixed ? AV_TX_INT32_MDCT : AV_TX_FLOAT_MDCT;
1176 
1177 #define MDCT_INIT(s, fn, len, sval) \
1178  scale_fixed = (sval) * 128.0f; \
1179  scale_float = (sval) / 32768.0f; \
1180  ret = av_tx_init(&s, &fn, tx_type, 1, len, scalep, 0); \
1181  if (ret < 0) \
1182  return ret
1183 
1184  MDCT_INIT(ac->mdct96, ac->mdct96_fn, 96, 1.0/96);
1185  MDCT_INIT(ac->mdct120, ac->mdct120_fn, 120, 1.0/120);
1186  MDCT_INIT(ac->mdct128, ac->mdct128_fn, 128, 1.0/128);
1187  MDCT_INIT(ac->mdct480, ac->mdct480_fn, 480, 1.0/480);
1188  MDCT_INIT(ac->mdct512, ac->mdct512_fn, 512, 1.0/512);
1189  MDCT_INIT(ac->mdct768, ac->mdct768_fn, 768, 1.0/768);
1190  MDCT_INIT(ac->mdct960, ac->mdct960_fn, 960, 1.0/960);
1191  MDCT_INIT(ac->mdct1024, ac->mdct1024_fn, 1024, 1.0/1024);
1192 #undef MDCT_INIT
1193 
1194  /* LTP forward MDCT */
1195  scale_fixed = -1.0;
1196  scale_float = -32786.0*2 + 36;
1197  ret = av_tx_init(&ac->mdct_ltp, &ac->mdct_ltp_fn, tx_type, 0, 1024, scalep, 0);
1198  if (ret < 0)
1199  return ret;
1200 
1201  return 0;
1202 }
1203 
1205 {
1206  AACDecContext *ac = avctx->priv_data;
1207  int ret;
1208 
1209  if (avctx->sample_rate > 96000)
1210  return AVERROR_INVALIDDATA;
1211 
1213 
1214  ac->avctx = avctx;
1215  ac->oc[1].m4ac.sample_rate = avctx->sample_rate;
1216 
1217  if (avctx->extradata_size > 0) {
1218  if ((ret = decode_audio_specific_config(ac, ac->avctx, &ac->oc[1],
1219  avctx->extradata,
1220  avctx->extradata_size * 8LL,
1221  1)) < 0)
1222  return ret;
1223  } else {
1224  int sr, i;
1225  uint8_t layout_map[MAX_ELEM_ID*4][3];
1226  int layout_map_tags;
1227 
1228  sr = ff_aac_sample_rate_idx(avctx->sample_rate);
1229  ac->oc[1].m4ac.sampling_index = sr;
1230  ac->oc[1].m4ac.channels = avctx->ch_layout.nb_channels;
1231  ac->oc[1].m4ac.sbr = -1;
1232  ac->oc[1].m4ac.ps = -1;
1233 
1234  for (i = 0; i < FF_ARRAY_ELEMS(ff_mpeg4audio_channels); i++)
1236  break;
1238  i = 0;
1239  }
1240  ac->oc[1].m4ac.chan_config = i;
1241 
1242  if (ac->oc[1].m4ac.chan_config) {
1243  int ret = ff_aac_set_default_channel_config(ac, avctx, layout_map,
1244  &layout_map_tags,
1245  ac->oc[1].m4ac.chan_config);
1246  if (!ret)
1247  ff_aac_output_configure(ac, layout_map, layout_map_tags,
1248  OC_GLOBAL_HDR, 0);
1249  else if (avctx->err_recognition & AV_EF_EXPLODE)
1250  return AVERROR_INVALIDDATA;
1251  }
1252  }
1253 
1254  if (avctx->ch_layout.nb_channels > MAX_CHANNELS) {
1255  av_log(avctx, AV_LOG_ERROR, "Too many channels\n");
1256  return AVERROR_INVALIDDATA;
1257  }
1258 
1259  ac->random_state = 0x1f2e3d4c;
1260 
1261  return init_dsp(avctx);
1262 }
1263 
1264 /**
1265  * Skip data_stream_element; reference: table 4.10.
1266  */
1268 {
1269  int byte_align = get_bits1(gb);
1270  int count = get_bits(gb, 8);
1271  if (count == 255)
1272  count += get_bits(gb, 8);
1273  if (byte_align)
1274  align_get_bits(gb);
1275 
1276  if (get_bits_left(gb) < 8 * count) {
1277  av_log(ac->avctx, AV_LOG_ERROR, "skip_data_stream_element: "overread_err);
1278  return AVERROR_INVALIDDATA;
1279  }
1280  skip_bits_long(gb, 8 * count);
1281  return 0;
1282 }
1283 
1285  GetBitContext *gb)
1286 {
1287  int sfb;
1288  if (get_bits1(gb)) {
1289  ics->predictor_reset_group = get_bits(gb, 5);
1290  if (ics->predictor_reset_group == 0 ||
1291  ics->predictor_reset_group > 30) {
1292  av_log(ac->avctx, AV_LOG_ERROR,
1293  "Invalid Predictor Reset Group.\n");
1294  return AVERROR_INVALIDDATA;
1295  }
1296  }
1297  for (sfb = 0; sfb < FFMIN(ics->max_sfb, ff_aac_pred_sfb_max[ac->oc[1].m4ac.sampling_index]); sfb++) {
1298  ics->prediction_used[sfb] = get_bits1(gb);
1299  }
1300  return 0;
1301 }
1302 
1303 /**
1304  * Decode Long Term Prediction data; reference: table 4.xx.
1305  */
1307  GetBitContext *gb, uint8_t max_sfb)
1308 {
1309  int sfb;
1310 
1311  ltp->lag = get_bits(gb, 11);
1312  if (CONFIG_AAC_FIXED_DECODER && ac->is_fixed)
1313  ltp->coef_fixed = Q30(ff_ltp_coef[get_bits(gb, 3)]);
1314  else if (CONFIG_AAC_DECODER)
1315  ltp->coef = ff_ltp_coef[get_bits(gb, 3)];
1316 
1317  for (sfb = 0; sfb < FFMIN(max_sfb, MAX_LTP_LONG_SFB); sfb++)
1318  ltp->used[sfb] = get_bits1(gb);
1319 }
1320 
1321 /**
1322  * Decode Individual Channel Stream info; reference: table 4.6.
1323  */
1325  GetBitContext *gb)
1326 {
1327  const MPEG4AudioConfig *const m4ac = &ac->oc[1].m4ac;
1328  const int aot = m4ac->object_type;
1329  const int sampling_index = m4ac->sampling_index;
1330  int ret_fail = AVERROR_INVALIDDATA;
1331 
1332  if (aot != AOT_ER_AAC_ELD) {
1333  if (get_bits1(gb)) {
1334  av_log(ac->avctx, AV_LOG_ERROR, "Reserved bit set.\n");
1336  return AVERROR_INVALIDDATA;
1337  }
1338  ics->window_sequence[1] = ics->window_sequence[0];
1339  ics->window_sequence[0] = get_bits(gb, 2);
1340  if (aot == AOT_ER_AAC_LD &&
1341  ics->window_sequence[0] != ONLY_LONG_SEQUENCE) {
1342  av_log(ac->avctx, AV_LOG_ERROR,
1343  "AAC LD is only defined for ONLY_LONG_SEQUENCE but "
1344  "window sequence %d found.\n", ics->window_sequence[0]);
1346  return AVERROR_INVALIDDATA;
1347  }
1348  ics->use_kb_window[1] = ics->use_kb_window[0];
1349  ics->use_kb_window[0] = get_bits1(gb);
1350  }
1352  ics->num_window_groups = 1;
1353  ics->group_len[0] = 1;
1354  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1355  int i;
1356  ics->max_sfb = get_bits(gb, 4);
1357  for (i = 0; i < 7; i++) {
1358  if (get_bits1(gb)) {
1359  ics->group_len[ics->num_window_groups - 1]++;
1360  } else {
1361  ics->num_window_groups++;
1362  ics->group_len[ics->num_window_groups - 1] = 1;
1363  }
1364  }
1365  ics->num_windows = 8;
1366  if (m4ac->frame_length_short) {
1367  ics->swb_offset = ff_swb_offset_120[sampling_index];
1368  ics->num_swb = ff_aac_num_swb_120[sampling_index];
1369  } else {
1370  ics->swb_offset = ff_swb_offset_128[sampling_index];
1371  ics->num_swb = ff_aac_num_swb_128[sampling_index];
1372  }
1373  ics->tns_max_bands = ff_tns_max_bands_128[sampling_index];
1374  ics->predictor_present = 0;
1375  } else {
1376  ics->max_sfb = get_bits(gb, 6);
1377  ics->num_windows = 1;
1378  if (aot == AOT_ER_AAC_LD || aot == AOT_ER_AAC_ELD) {
1379  if (m4ac->frame_length_short) {
1380  ics->swb_offset = ff_swb_offset_480[sampling_index];
1381  ics->num_swb = ff_aac_num_swb_480[sampling_index];
1382  ics->tns_max_bands = ff_tns_max_bands_480[sampling_index];
1383  } else {
1384  ics->swb_offset = ff_swb_offset_512[sampling_index];
1385  ics->num_swb = ff_aac_num_swb_512[sampling_index];
1386  ics->tns_max_bands = ff_tns_max_bands_512[sampling_index];
1387  }
1388  if (!ics->num_swb || !ics->swb_offset) {
1389  ret_fail = AVERROR_BUG;
1390  goto fail;
1391  }
1392  } else {
1393  if (m4ac->frame_length_short) {
1394  ics->num_swb = ff_aac_num_swb_960[sampling_index];
1395  ics->swb_offset = ff_swb_offset_960[sampling_index];
1396  } else {
1397  ics->num_swb = ff_aac_num_swb_1024[sampling_index];
1398  ics->swb_offset = ff_swb_offset_1024[sampling_index];
1399  }
1400  ics->tns_max_bands = ff_tns_max_bands_1024[sampling_index];
1401  }
1402  if (aot != AOT_ER_AAC_ELD) {
1403  ics->predictor_present = get_bits1(gb);
1404  ics->predictor_reset_group = 0;
1405  }
1406  if (ics->predictor_present) {
1407  if (aot == AOT_AAC_MAIN) {
1408  if (decode_prediction(ac, ics, gb)) {
1409  goto fail;
1410  }
1411  } else if (aot == AOT_AAC_LC ||
1412  aot == AOT_ER_AAC_LC) {
1413  av_log(ac->avctx, AV_LOG_ERROR,
1414  "Prediction is not allowed in AAC-LC.\n");
1415  goto fail;
1416  } else {
1417  if (aot == AOT_ER_AAC_LD) {
1418  av_log(ac->avctx, AV_LOG_ERROR,
1419  "LTP in ER AAC LD not yet implemented.\n");
1420  ret_fail = AVERROR_PATCHWELCOME;
1421  goto fail;
1422  }
1423  if ((ics->ltp.present = get_bits(gb, 1)))
1424  decode_ltp(ac, &ics->ltp, gb, ics->max_sfb);
1425  }
1426  }
1427  }
1428 
1429  if (ics->max_sfb > ics->num_swb) {
1430  av_log(ac->avctx, AV_LOG_ERROR,
1431  "Number of scalefactor bands in group (%d) "
1432  "exceeds limit (%d).\n",
1433  ics->max_sfb, ics->num_swb);
1434  goto fail;
1435  }
1436 
1437  return 0;
1438 fail:
1439  ics->max_sfb = 0;
1440  return ret_fail;
1441 }
1442 
1443 /**
1444  * Decode band types (section_data payload); reference: table 4.46.
1445  *
1446  * @param band_type array of the used band type
1447  * @param band_type_run_end array of the last scalefactor band of a band type run
1448  *
1449  * @return Returns error status. 0 - OK, !0 - error
1450  */
1452  GetBitContext *gb)
1453 {
1454  IndividualChannelStream *ics = &sce->ics;
1455  const int bits = (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) ? 3 : 5;
1456 
1457  for (int g = 0; g < ics->num_window_groups; g++) {
1458  int k = 0;
1459  while (k < ics->max_sfb) {
1460  uint8_t sect_end = k;
1461  int sect_len_incr;
1462  int sect_band_type = get_bits(gb, 4);
1463  if (sect_band_type == 12) {
1464  av_log(ac->avctx, AV_LOG_ERROR, "invalid band type\n");
1465  return AVERROR_INVALIDDATA;
1466  }
1467  do {
1468  sect_len_incr = get_bits(gb, bits);
1469  sect_end += sect_len_incr;
1470  if (get_bits_left(gb) < 0) {
1471  av_log(ac->avctx, AV_LOG_ERROR, "decode_band_types: "overread_err);
1472  return AVERROR_INVALIDDATA;
1473  }
1474  if (sect_end > ics->max_sfb) {
1475  av_log(ac->avctx, AV_LOG_ERROR,
1476  "Number of bands (%d) exceeds limit (%d).\n",
1477  sect_end, ics->max_sfb);
1478  return AVERROR_INVALIDDATA;
1479  }
1480  } while (sect_len_incr == (1 << bits) - 1);
1481  for (; k < sect_end; k++)
1482  sce->band_type[g*ics->max_sfb + k] = sect_band_type;
1483  }
1484  }
1485  return 0;
1486 }
1487 
1488 /**
1489  * Decode scalefactors; reference: table 4.47.
1490  *
1491  * @param global_gain first scalefactor value as scalefactors are differentially coded
1492  * @param band_type array of the used band type
1493  * @param band_type_run_end array of the last scalefactor band of a band type run
1494  * @param sf array of scalefactors or intensity stereo positions
1495  *
1496  * @return Returns error status. 0 - OK, !0 - error
1497  */
1499  GetBitContext *gb, unsigned int global_gain)
1500 {
1501  IndividualChannelStream *ics = &sce->ics;
1502  int offset[3] = { global_gain, global_gain - NOISE_OFFSET, 0 };
1503  int clipped_offset;
1504  int noise_flag = 1;
1505 
1506  for (int g = 0; g < ics->num_window_groups; g++) {
1507  for (int sfb = 0; sfb < ics->max_sfb; sfb++) {
1508  switch (sce->band_type[g*ics->max_sfb + sfb]) {
1509  case ZERO_BT:
1510  sce->sfo[g*ics->max_sfb + sfb] = 0;
1511  break;
1512  case INTENSITY_BT: /* fallthrough */
1513  case INTENSITY_BT2:
1515  clipped_offset = av_clip(offset[2], -155, 100);
1516  if (offset[2] != clipped_offset) {
1518  "If you heard an audible artifact, there may be a bug in the decoder. "
1519  "Clipped intensity stereo position (%d -> %d)",
1520  offset[2], clipped_offset);
1521  }
1522  sce->sfo[g*ics->max_sfb + sfb] = clipped_offset - 100;
1523  break;
1524  case NOISE_BT:
1525  if (noise_flag-- > 0)
1526  offset[1] += get_bits(gb, NOISE_PRE_BITS) - NOISE_PRE;
1527  else
1529  clipped_offset = av_clip(offset[1], -100, 155);
1530  if (offset[1] != clipped_offset) {
1532  "If you heard an audible artifact, there may be a bug in the decoder. "
1533  "Clipped noise gain (%d -> %d)",
1534  offset[1], clipped_offset);
1535  }
1536  sce->sfo[g*ics->max_sfb + sfb] = clipped_offset;
1537  break;
1538  default:
1540  if (offset[0] > 255U) {
1541  av_log(ac->avctx, AV_LOG_ERROR,
1542  "Scalefactor (%d) out of range.\n", offset[0]);
1543  return AVERROR_INVALIDDATA;
1544  }
1545  sce->sfo[g*ics->max_sfb + sfb] = offset[0] - 100;
1546  break;
1547  }
1548  }
1549  }
1550 
1551  return 0;
1552 }
1553 
1554 /**
1555  * Decode pulse data; reference: table 4.7.
1556  */
1557 static int decode_pulses(Pulse *pulse, GetBitContext *gb,
1558  const uint16_t *swb_offset, int num_swb)
1559 {
1560  int i, pulse_swb;
1561  pulse->num_pulse = get_bits(gb, 2) + 1;
1562  pulse_swb = get_bits(gb, 6);
1563  if (pulse_swb >= num_swb)
1564  return -1;
1565  pulse->pos[0] = swb_offset[pulse_swb];
1566  pulse->pos[0] += get_bits(gb, 5);
1567  if (pulse->pos[0] >= swb_offset[num_swb])
1568  return -1;
1569  pulse->amp[0] = get_bits(gb, 4);
1570  for (i = 1; i < pulse->num_pulse; i++) {
1571  pulse->pos[i] = get_bits(gb, 5) + pulse->pos[i - 1];
1572  if (pulse->pos[i] >= swb_offset[num_swb])
1573  return -1;
1574  pulse->amp[i] = get_bits(gb, 4);
1575  }
1576  return 0;
1577 }
1578 
1579 /**
1580  * Decode Temporal Noise Shaping data; reference: table 4.48.
1581  *
1582  * @return Returns error status. 0 - OK, !0 - error
1583  */
1585  GetBitContext *gb, const IndividualChannelStream *ics)
1586 {
1587  int tns_max_order = INT32_MAX;
1588  const int is_usac = ac->oc[1].m4ac.object_type == AOT_USAC;
1589  int w, filt, i, coef_len, coef_res, coef_compress;
1590  const int is8 = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE;
1591 
1592  /* USAC doesn't seem to have a limit */
1593  if (!is_usac)
1594  tns_max_order = is8 ? 7 : ac->oc[1].m4ac.object_type == AOT_AAC_MAIN ? 20 : 12;
1595 
1596  for (w = 0; w < ics->num_windows; w++) {
1597  if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) {
1598  coef_res = get_bits1(gb);
1599 
1600  for (filt = 0; filt < tns->n_filt[w]; filt++) {
1601  int tmp2_idx;
1602  tns->length[w][filt] = get_bits(gb, 6 - 2 * is8);
1603 
1604  if (is_usac)
1605  tns->order[w][filt] = get_bits(gb, 4 - is8);
1606  else
1607  tns->order[w][filt] = get_bits(gb, 5 - (2 * is8));
1608 
1609  if (tns->order[w][filt] > tns_max_order) {
1610  av_log(ac->avctx, AV_LOG_ERROR,
1611  "TNS filter order %d is greater than maximum %d.\n",
1612  tns->order[w][filt], tns_max_order);
1613  tns->order[w][filt] = 0;
1614  return AVERROR_INVALIDDATA;
1615  }
1616  if (tns->order[w][filt]) {
1617  tns->direction[w][filt] = get_bits1(gb);
1618  coef_compress = get_bits1(gb);
1619  coef_len = coef_res + 3 - coef_compress;
1620  tmp2_idx = 2 * coef_compress + coef_res;
1621 
1622  for (i = 0; i < tns->order[w][filt]; i++) {
1623  if (CONFIG_AAC_FIXED_DECODER && ac->is_fixed)
1624  tns->coef_fixed[w][filt][i] = Q31(ff_tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)]);
1625  else if (CONFIG_AAC_DECODER)
1626  tns->coef[w][filt][i] = ff_tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)];
1627  }
1628  }
1629  }
1630  }
1631  }
1632  return 0;
1633 }
1634 
1635 /**
1636  * Decode Mid/Side data; reference: table 4.54.
1637  *
1638  * @param ms_present Indicates mid/side stereo presence. [0] mask is all 0s;
1639  * [1] mask is decoded from bitstream; [2] mask is all 1s;
1640  * [3] reserved for scalable AAC
1641  */
1643  int ms_present)
1644 {
1645  int idx;
1646  int max_idx = cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb;
1647  cpe->max_sfb_ste = cpe->ch[0].ics.max_sfb;
1648  if (ms_present == 1) {
1649  for (idx = 0; idx < max_idx; idx++)
1650  cpe->ms_mask[idx] = get_bits1(gb);
1651  } else if (ms_present == 2) {
1652  memset(cpe->ms_mask, 1, max_idx * sizeof(cpe->ms_mask[0]));
1653  }
1654 }
1655 
1657 {
1658  // wd_num, wd_test, aloc_size
1659  static const uint8_t gain_mode[4][3] = {
1660  {1, 0, 5}, // ONLY_LONG_SEQUENCE = 0,
1661  {2, 1, 2}, // LONG_START_SEQUENCE,
1662  {8, 0, 2}, // EIGHT_SHORT_SEQUENCE,
1663  {2, 1, 5}, // LONG_STOP_SEQUENCE
1664  };
1665 
1666  const int mode = sce->ics.window_sequence[0];
1667  uint8_t bd, wd, ad;
1668 
1669  // FIXME: Store the gain control data on |sce| and do something with it.
1670  uint8_t max_band = get_bits(gb, 2);
1671  for (bd = 0; bd < max_band; bd++) {
1672  for (wd = 0; wd < gain_mode[mode][0]; wd++) {
1673  uint8_t adjust_num = get_bits(gb, 3);
1674  for (ad = 0; ad < adjust_num; ad++) {
1675  skip_bits(gb, 4 + ((wd == 0 && gain_mode[mode][1])
1676  ? 4
1677  : gain_mode[mode][2]));
1678  }
1679  }
1680  }
1681 }
1682 
1683 /**
1684  * Decode an individual_channel_stream payload; reference: table 4.44.
1685  *
1686  * @param common_window Channels have independent [0], or shared [1], Individual Channel Stream information.
1687  * @param scale_flag scalable [1] or non-scalable [0] AAC (Unused until scalable AAC is implemented.)
1688  *
1689  * @return Returns error status. 0 - OK, !0 - error
1690  */
1692  GetBitContext *gb, int common_window, int scale_flag)
1693 {
1694  Pulse pulse;
1695  TemporalNoiseShaping *tns = &sce->tns;
1696  IndividualChannelStream *ics = &sce->ics;
1697  int global_gain, eld_syntax, er_syntax, pulse_present = 0;
1698  int ret;
1699 
1700  eld_syntax = ac->oc[1].m4ac.object_type == AOT_ER_AAC_ELD;
1701  er_syntax = ac->oc[1].m4ac.object_type == AOT_ER_AAC_LC ||
1702  ac->oc[1].m4ac.object_type == AOT_ER_AAC_LTP ||
1703  ac->oc[1].m4ac.object_type == AOT_ER_AAC_LD ||
1704  ac->oc[1].m4ac.object_type == AOT_ER_AAC_ELD;
1705 
1706  /* This assignment is to silence a GCC warning about the variable being used
1707  * uninitialized when in fact it always is.
1708  */
1709  pulse.num_pulse = 0;
1710 
1711  global_gain = get_bits(gb, 8);
1712 
1713  if (!common_window && !scale_flag) {
1714  ret = decode_ics_info(ac, ics, gb);
1715  if (ret < 0)
1716  goto fail;
1717  }
1718 
1719  if ((ret = decode_band_types(ac, sce, gb)) < 0)
1720  goto fail;
1721  if ((ret = decode_scalefactors(ac, sce, gb, global_gain)) < 0)
1722  goto fail;
1723 
1724  ac->dsp.dequant_scalefactors(sce);
1725 
1726  pulse_present = 0;
1727  if (!scale_flag) {
1728  if (!eld_syntax && (pulse_present = get_bits1(gb))) {
1729  if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1730  av_log(ac->avctx, AV_LOG_ERROR,
1731  "Pulse tool not allowed in eight short sequence.\n");
1733  goto fail;
1734  }
1735  if (decode_pulses(&pulse, gb, ics->swb_offset, ics->num_swb)) {
1736  av_log(ac->avctx, AV_LOG_ERROR,
1737  "Pulse data corrupt or invalid.\n");
1739  goto fail;
1740  }
1741  }
1742  tns->present = get_bits1(gb);
1743  if (tns->present && !er_syntax) {
1744  ret = ff_aac_decode_tns(ac, tns, gb, ics);
1745  if (ret < 0)
1746  goto fail;
1747  }
1748  if (!eld_syntax && get_bits1(gb)) {
1749  decode_gain_control(sce, gb);
1750  if (!ac->warned_gain_control) {
1751  avpriv_report_missing_feature(ac->avctx, "Gain control");
1752  ac->warned_gain_control = 1;
1753  }
1754  }
1755  // I see no textual basis in the spec for this occurring after SSR gain
1756  // control, but this is what both reference and real implementations do
1757  if (tns->present && er_syntax) {
1758  ret = ff_aac_decode_tns(ac, tns, gb, ics);
1759  if (ret < 0)
1760  goto fail;
1761  }
1762  }
1763 
1764  ret = ac->proc.decode_spectrum_and_dequant(ac, gb,
1765  pulse_present ? &pulse : NULL,
1766  sce);
1767  if (ret < 0)
1768  goto fail;
1769 
1770  if (ac->oc[1].m4ac.object_type == AOT_AAC_MAIN && !common_window)
1771  ac->dsp.apply_prediction(ac, sce);
1772 
1773  return 0;
1774 fail:
1775  memset(sce->sfo, 0, sizeof(sce->sfo));
1776  tns->present = 0;
1777  return ret;
1778 }
1779 
1780 /**
1781  * Decode a channel_pair_element; reference: table 4.4.
1782  *
1783  * @return Returns error status. 0 - OK, !0 - error
1784  */
1786 {
1787  int i, ret, common_window, ms_present = 0;
1788  int eld_syntax = ac->oc[1].m4ac.object_type == AOT_ER_AAC_ELD;
1789 
1790  common_window = eld_syntax || get_bits1(gb);
1791  if (common_window) {
1792  if (decode_ics_info(ac, &cpe->ch[0].ics, gb))
1793  return AVERROR_INVALIDDATA;
1794  i = cpe->ch[1].ics.use_kb_window[0];
1795  cpe->ch[1].ics = cpe->ch[0].ics;
1796  cpe->ch[1].ics.use_kb_window[1] = i;
1797  if (cpe->ch[1].ics.predictor_present &&
1798  (ac->oc[1].m4ac.object_type != AOT_AAC_MAIN))
1799  if ((cpe->ch[1].ics.ltp.present = get_bits(gb, 1)))
1800  decode_ltp(ac, &cpe->ch[1].ics.ltp, gb, cpe->ch[1].ics.max_sfb);
1801  ms_present = get_bits(gb, 2);
1802  if (ms_present == 3) {
1803  av_log(ac->avctx, AV_LOG_ERROR, "ms_present = 3 is reserved.\n");
1804  return AVERROR_INVALIDDATA;
1805  } else if (ms_present)
1806  decode_mid_side_stereo(cpe, gb, ms_present);
1807  }
1808  if ((ret = ff_aac_decode_ics(ac, &cpe->ch[0], gb, common_window, 0)))
1809  return ret;
1810  if ((ret = ff_aac_decode_ics(ac, &cpe->ch[1], gb, common_window, 0)))
1811  return ret;
1812 
1813  if (common_window) {
1814  if (ms_present)
1815  ac->dsp.apply_mid_side_stereo(ac, cpe);
1816  if (ac->oc[1].m4ac.object_type == AOT_AAC_MAIN) {
1817  ac->dsp.apply_prediction(ac, &cpe->ch[0]);
1818  ac->dsp.apply_prediction(ac, &cpe->ch[1]);
1819  }
1820  }
1821 
1822  ac->dsp.apply_intensity_stereo(ac, cpe, ms_present);
1823  return 0;
1824 }
1825 
1826 /**
1827  * Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
1828  *
1829  * @return Returns number of bytes consumed.
1830  */
1832  GetBitContext *gb)
1833 {
1834  int i;
1835  int num_excl_chan = 0;
1836 
1837  do {
1838  for (i = 0; i < 7; i++)
1839  che_drc->exclude_mask[num_excl_chan++] = get_bits1(gb);
1840  } while (num_excl_chan < MAX_CHANNELS - 7 && get_bits1(gb));
1841 
1842  return num_excl_chan / 7;
1843 }
1844 
1845 /**
1846  * Decode dynamic range information; reference: table 4.52.
1847  *
1848  * @return Returns number of bytes consumed.
1849  */
1851  GetBitContext *gb)
1852 {
1853  int n = 1;
1854  int drc_num_bands = 1;
1855  int i;
1856 
1857  /* pce_tag_present? */
1858  if (get_bits1(gb)) {
1859  che_drc->pce_instance_tag = get_bits(gb, 4);
1860  skip_bits(gb, 4); // tag_reserved_bits
1861  n++;
1862  }
1863 
1864  /* excluded_chns_present? */
1865  if (get_bits1(gb)) {
1866  n += decode_drc_channel_exclusions(che_drc, gb);
1867  }
1868 
1869  /* drc_bands_present? */
1870  if (get_bits1(gb)) {
1871  che_drc->band_incr = get_bits(gb, 4);
1872  che_drc->interpolation_scheme = get_bits(gb, 4);
1873  n++;
1874  drc_num_bands += che_drc->band_incr;
1875  for (i = 0; i < drc_num_bands; i++) {
1876  che_drc->band_top[i] = get_bits(gb, 8);
1877  n++;
1878  }
1879  }
1880 
1881  /* prog_ref_level_present? */
1882  if (get_bits1(gb)) {
1883  che_drc->prog_ref_level = get_bits(gb, 7);
1884  skip_bits1(gb); // prog_ref_level_reserved_bits
1885  n++;
1886  }
1887 
1888  for (i = 0; i < drc_num_bands; i++) {
1889  che_drc->dyn_rng_sgn[i] = get_bits1(gb);
1890  che_drc->dyn_rng_ctl[i] = get_bits(gb, 7);
1891  n++;
1892  }
1893 
1894  return n;
1895 }
1896 
1897 static int decode_fill(AACDecContext *ac, GetBitContext *gb, int len) {
1898  uint8_t buf[256];
1899  int i, major, minor;
1900 
1901  if (len < 13+7*8)
1902  goto unknown;
1903 
1904  get_bits(gb, 13); len -= 13;
1905 
1906  for(i=0; i+1<sizeof(buf) && len>=8; i++, len-=8)
1907  buf[i] = get_bits(gb, 8);
1908 
1909  buf[i] = 0;
1910  if (ac->avctx->debug & FF_DEBUG_PICT_INFO)
1911  av_log(ac->avctx, AV_LOG_DEBUG, "FILL:%s\n", buf);
1912 
1913  if (sscanf(buf, "libfaac %d.%d", &major, &minor) == 2){
1914  ac->avctx->internal->skip_samples = 1024;
1915  }
1916 
1917 unknown:
1918  skip_bits_long(gb, len);
1919 
1920  return 0;
1921 }
1922 
1923 /**
1924  * Decode extension data (incomplete); reference: table 4.51.
1925  *
1926  * @param cnt length of TYPE_FIL syntactic element in bytes
1927  *
1928  * @return Returns number of bytes consumed
1929  */
1931  ChannelElement *che, enum RawDataBlockType elem_type)
1932 {
1933  int crc_flag = 0;
1934  int res = cnt;
1935  int type = get_bits(gb, 4);
1936 
1937  if (ac->avctx->debug & FF_DEBUG_STARTCODE)
1938  av_log(ac->avctx, AV_LOG_DEBUG, "extension type: %d len:%d\n", type, cnt);
1939 
1940  switch (type) { // extension type
1941  case EXT_SBR_DATA_CRC:
1942  crc_flag++;
1943  case EXT_SBR_DATA:
1944  if (!che) {
1945  av_log(ac->avctx, AV_LOG_ERROR, "SBR was found before the first channel element.\n");
1946  return res;
1947  } else if (!ac->oc[1].m4ac.sbr) {
1948  av_log(ac->avctx, AV_LOG_ERROR, "SBR signaled to be not-present but was found in the bitstream.\n");
1949  skip_bits_long(gb, 8 * cnt - 4);
1950  return res;
1951  } else if (ac->oc[1].m4ac.sbr == -1 && ac->oc[1].status == OC_LOCKED) {
1952  av_log(ac->avctx, AV_LOG_ERROR, "Implicit SBR was found with a first occurrence after the first frame.\n");
1953  skip_bits_long(gb, 8 * cnt - 4);
1954  return res;
1955  } else if (ac->oc[1].m4ac.ps == -1 && ac->oc[1].status < OC_LOCKED &&
1956  ac->avctx->ch_layout.nb_channels == 1) {
1957  ac->oc[1].m4ac.sbr = 1;
1958  ac->oc[1].m4ac.ps = 1;
1961  ac->oc[1].status, 1);
1962  } else {
1963  ac->oc[1].m4ac.sbr = 1;
1965  }
1966 
1967  ac->proc.sbr_decode_extension(ac, che, gb, crc_flag, cnt, elem_type,
1968  ac->oc[1].m4ac.frame_length_short);
1969 
1970  if (ac->oc[1].m4ac.ps == 1 && !ac->warned_he_aac_mono) {
1971  av_log(ac->avctx, AV_LOG_VERBOSE, "Treating HE-AAC mono as stereo.\n");
1972  ac->warned_he_aac_mono = 1;
1973  }
1974  break;
1975  case EXT_DYNAMIC_RANGE:
1976  res = decode_dynamic_range(&ac->che_drc, gb);
1977  break;
1978  case EXT_FILL:
1979  decode_fill(ac, gb, 8 * cnt - 4);
1980  break;
1981  case EXT_FILL_DATA:
1982  case EXT_DATA_ELEMENT:
1983  default:
1984  skip_bits_long(gb, 8 * cnt - 4);
1985  break;
1986  };
1987  return res;
1988 }
1989 
1990 /**
1991  * channel coupling transformation interface
1992  *
1993  * @param apply_coupling_method pointer to (in)dependent coupling function
1994  */
1996  enum RawDataBlockType type, int elem_id,
1997  enum CouplingPoint coupling_point,
1998  void (*apply_coupling_method)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
1999 {
2000  int i, c;
2001 
2002  for (i = 0; i < MAX_ELEM_ID; i++) {
2003  ChannelElement *cce = ac->che[TYPE_CCE][i];
2004  int index = 0;
2005 
2006  if (cce && cce->coup.coupling_point == coupling_point) {
2007  ChannelCoupling *coup = &cce->coup;
2008 
2009  for (c = 0; c <= coup->num_coupled; c++) {
2010  if (coup->type[c] == type && coup->id_select[c] == elem_id) {
2011  if (coup->ch_select[c] != 1) {
2012  apply_coupling_method(ac, &cc->ch[0], cce, index);
2013  if (coup->ch_select[c] != 0)
2014  index++;
2015  }
2016  if (coup->ch_select[c] != 2)
2017  apply_coupling_method(ac, &cc->ch[1], cce, index++);
2018  } else
2019  index += 1 + (coup->ch_select[c] == 3);
2020  }
2021  }
2022  }
2023 }
2024 
2025 /**
2026  * Convert spectral data to samples, applying all supported tools as appropriate.
2027  */
2029 {
2030  int i, type;
2032  switch (ac->oc[1].m4ac.object_type) {
2033  case AOT_ER_AAC_LD:
2035  break;
2036  case AOT_ER_AAC_ELD:
2038  break;
2039  default:
2040  if (ac->oc[1].m4ac.frame_length_short)
2042  else
2044  }
2045  for (type = 3; type >= 0; type--) {
2046  for (i = 0; i < MAX_ELEM_ID; i++) {
2047  ChannelElement *che = ac->che[type][i];
2048  if (che && che->present) {
2049  if (type <= TYPE_CPE)
2051  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP) {
2052  if (che->ch[0].ics.predictor_present) {
2053  if (che->ch[0].ics.ltp.present)
2054  ac->dsp.apply_ltp(ac, &che->ch[0]);
2055  if (che->ch[1].ics.ltp.present && type == TYPE_CPE)
2056  ac->dsp.apply_ltp(ac, &che->ch[1]);
2057  }
2058  }
2059  if (che->ch[0].tns.present)
2060  ac->dsp.apply_tns(che->ch[0].coeffs,
2061  &che->ch[0].tns, &che->ch[0].ics, 1);
2062  if (che->ch[1].tns.present)
2063  ac->dsp.apply_tns(che->ch[1].coeffs,
2064  &che->ch[1].tns, &che->ch[1].ics, 1);
2065  if (type <= TYPE_CPE)
2067  if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT) {
2068  imdct_and_window(ac, &che->ch[0]);
2069  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP)
2070  ac->dsp.update_ltp(ac, &che->ch[0]);
2071  if (type == TYPE_CPE) {
2072  imdct_and_window(ac, &che->ch[1]);
2073  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP)
2074  ac->dsp.update_ltp(ac, &che->ch[1]);
2075  }
2076  if (ac->oc[1].m4ac.sbr > 0) {
2077  ac->proc.sbr_apply(ac, che, type,
2078  ac->oc[1].m4ac.frame_length_short,
2079  che->ch[0].output,
2080  che->ch[1].output);
2081  }
2082  }
2083  if (type <= TYPE_CCE)
2085  ac->dsp.clip_output(ac, che, type, samples);
2086  che->present = 0;
2087  } else if (che) {
2088  av_log(ac->avctx, AV_LOG_VERBOSE, "ChannelElement %d.%d missing \n", type, i);
2089  }
2090  }
2091  }
2092 }
2093 
2095 {
2096  int size;
2097  AACADTSHeaderInfo hdr_info;
2098  uint8_t layout_map[MAX_ELEM_ID*4][3];
2099  int layout_map_tags, ret;
2100 
2101  size = ff_adts_header_parse(gb, &hdr_info);
2102  if (size > 0) {
2103  if (!ac->warned_num_aac_frames && hdr_info.num_aac_frames != 1) {
2104  // This is 2 for "VLB " audio in NSV files.
2105  // See samples/nsv/vlb_audio.
2107  "More than one AAC RDB per ADTS frame");
2108  ac->warned_num_aac_frames = 1;
2109  }
2111  if (hdr_info.chan_config) {
2112  ac->oc[1].m4ac.chan_config = hdr_info.chan_config;
2114  layout_map,
2115  &layout_map_tags,
2116  hdr_info.chan_config)) < 0)
2117  return ret;
2118  if ((ret = ff_aac_output_configure(ac, layout_map, layout_map_tags,
2119  FFMAX(ac->oc[1].status,
2120  OC_TRIAL_FRAME), 0)) < 0)
2121  return ret;
2122  } else {
2123  ac->oc[1].m4ac.chan_config = 0;
2124  /**
2125  * dual mono frames in Japanese DTV can have chan_config 0
2126  * WITHOUT specifying PCE.
2127  * thus, set dual mono as default.
2128  */
2129  if (ac->dmono_mode && ac->oc[0].status == OC_NONE) {
2130  layout_map_tags = 2;
2131  layout_map[0][0] = layout_map[1][0] = TYPE_SCE;
2132  layout_map[0][2] = layout_map[1][2] = AAC_CHANNEL_FRONT;
2133  layout_map[0][1] = 0;
2134  layout_map[1][1] = 1;
2135  if (ff_aac_output_configure(ac, layout_map, layout_map_tags,
2136  OC_TRIAL_FRAME, 0))
2137  return -7;
2138  }
2139  }
2140  ac->oc[1].m4ac.sample_rate = hdr_info.sample_rate;
2141  ac->oc[1].m4ac.sampling_index = hdr_info.sampling_index;
2142  ac->oc[1].m4ac.object_type = hdr_info.object_type;
2143  ac->oc[1].m4ac.frame_length_short = 0;
2144  if (ac->oc[0].status != OC_LOCKED ||
2145  ac->oc[0].m4ac.chan_config != hdr_info.chan_config ||
2146  ac->oc[0].m4ac.sample_rate != hdr_info.sample_rate) {
2147  ac->oc[1].m4ac.sbr = -1;
2148  ac->oc[1].m4ac.ps = -1;
2149  }
2150  if (!hdr_info.crc_absent)
2151  skip_bits(gb, 16);
2152  }
2153  return size;
2154 }
2155 
2157  int *got_frame_ptr, GetBitContext *gb)
2158 {
2159  AACDecContext *ac = avctx->priv_data;
2160  const MPEG4AudioConfig *const m4ac = &ac->oc[1].m4ac;
2161  ChannelElement *che;
2162  int err, i;
2163  int samples = m4ac->frame_length_short ? 960 : 1024;
2164  int chan_config = m4ac->chan_config;
2165  int aot = m4ac->object_type;
2166 
2167  if (aot == AOT_ER_AAC_LD || aot == AOT_ER_AAC_ELD)
2168  samples >>= 1;
2169 
2170  ac->frame = frame;
2171 
2172  if ((err = frame_configure_elements(avctx)) < 0)
2173  return err;
2174 
2175  // The AV_PROFILE_AAC_* defines are all object_type - 1
2176  // This may lead to an undefined profile being signaled
2177  ac->avctx->profile = aot - 1;
2178 
2179  ac->tags_mapped = 0;
2180 
2181  if (chan_config < 0 || (chan_config >= 8 && chan_config < 11) || chan_config >= 13) {
2182  avpriv_request_sample(avctx, "Unknown ER channel configuration %d",
2183  chan_config);
2184  return AVERROR_INVALIDDATA;
2185  }
2186  for (i = 0; i < ff_tags_per_config[chan_config]; i++) {
2187  const int elem_type = ff_aac_channel_layout_map[chan_config-1][i][0];
2188  const int elem_id = ff_aac_channel_layout_map[chan_config-1][i][1];
2189  if (!(che=ff_aac_get_che(ac, elem_type, elem_id))) {
2190  av_log(ac->avctx, AV_LOG_ERROR,
2191  "channel element %d.%d is not allocated\n",
2192  elem_type, elem_id);
2193  return AVERROR_INVALIDDATA;
2194  }
2195  che->present = 1;
2196  if (aot != AOT_ER_AAC_ELD)
2197  skip_bits(gb, 4);
2198  switch (elem_type) {
2199  case TYPE_SCE:
2200  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2201  break;
2202  case TYPE_CPE:
2203  err = decode_cpe(ac, gb, che);
2204  break;
2205  case TYPE_LFE:
2206  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2207  break;
2208  }
2209  if (err < 0)
2210  return err;
2211  }
2212 
2214 
2215  if (!ac->frame->data[0] && samples) {
2216  av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
2217  return AVERROR_INVALIDDATA;
2218  }
2219 
2220  ac->frame->nb_samples = samples;
2221  ac->frame->sample_rate = avctx->sample_rate;
2222  ac->frame->flags |= AV_FRAME_FLAG_KEY;
2223  *got_frame_ptr = 1;
2224 
2225  skip_bits_long(gb, get_bits_left(gb));
2226  return 0;
2227 }
2228 
2230  GetBitContext *gb, int *got_frame_ptr)
2231 {
2232  int err;
2233  int is_dmono;
2234  int elem_id;
2235  enum RawDataBlockType elem_type, che_prev_type = TYPE_END;
2236  uint8_t che_presence[4][MAX_ELEM_ID] = {{0}};
2237  ChannelElement *che = NULL, *che_prev = NULL;
2238  int samples = 0, multiplier, audio_found = 0, pce_found = 0, sce_count = 0;
2239  AVFrame *frame = ac->frame;
2240 
2241  int payload_alignment = get_bits_count(gb);
2242  // parse
2243  while ((elem_type = get_bits(gb, 3)) != TYPE_END) {
2244  elem_id = get_bits(gb, 4);
2245 
2246  if (avctx->debug & FF_DEBUG_STARTCODE)
2247  av_log(avctx, AV_LOG_DEBUG, "Elem type:%x id:%x\n", elem_type, elem_id);
2248 
2249  if (!avctx->ch_layout.nb_channels && elem_type != TYPE_PCE)
2250  return AVERROR_INVALIDDATA;
2251 
2252  if (elem_type < TYPE_DSE) {
2253  if (che_presence[elem_type][elem_id]) {
2254  int error = che_presence[elem_type][elem_id] > 1;
2255  av_log(ac->avctx, error ? AV_LOG_ERROR : AV_LOG_DEBUG, "channel element %d.%d duplicate\n",
2256  elem_type, elem_id);
2257  if (error)
2258  return AVERROR_INVALIDDATA;
2259  }
2260  che_presence[elem_type][elem_id]++;
2261 
2262  if (!(che=ff_aac_get_che(ac, elem_type, elem_id))) {
2263  av_log(ac->avctx, AV_LOG_ERROR, "channel element %d.%d is not allocated\n",
2264  elem_type, elem_id);
2265  return AVERROR_INVALIDDATA;
2266  }
2267  samples = ac->oc[1].m4ac.frame_length_short ? 960 : 1024;
2268  che->present = 1;
2269  }
2270 
2271  switch (elem_type) {
2272 
2273  case TYPE_SCE:
2274  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2275  audio_found = 1;
2276  sce_count++;
2277  break;
2278 
2279  case TYPE_CPE:
2280  err = decode_cpe(ac, gb, che);
2281  audio_found = 1;
2282  break;
2283 
2284  case TYPE_CCE:
2285  err = ac->proc.decode_cce(ac, gb, che);
2286  break;
2287 
2288  case TYPE_LFE:
2289  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2290  audio_found = 1;
2291  break;
2292 
2293  case TYPE_DSE:
2294  err = skip_data_stream_element(ac, gb);
2295  break;
2296 
2297  case TYPE_PCE: {
2298  uint8_t layout_map[MAX_ELEM_ID*4][3] = {{0}};
2299  int tags;
2300 
2301  int pushed = push_output_configuration(ac);
2302  if (pce_found && !pushed)
2303  return AVERROR_INVALIDDATA;
2304 
2305  tags = decode_pce(avctx, &ac->oc[1].m4ac, layout_map, gb,
2306  payload_alignment);
2307  if (tags < 0) {
2308  err = tags;
2309  break;
2310  }
2311  if (pce_found) {
2312  av_log(avctx, AV_LOG_ERROR,
2313  "Not evaluating a further program_config_element as this construct is dubious at best.\n");
2315  } else {
2316  err = ff_aac_output_configure(ac, layout_map, tags, OC_TRIAL_PCE, 1);
2317  if (!err)
2318  ac->oc[1].m4ac.chan_config = 0;
2319  pce_found = 1;
2320  }
2321  break;
2322  }
2323 
2324  case TYPE_FIL:
2325  if (elem_id == 15)
2326  elem_id += get_bits(gb, 8) - 1;
2327  if (get_bits_left(gb) < 8 * elem_id) {
2328  av_log(avctx, AV_LOG_ERROR, "TYPE_FIL: "overread_err);
2329  return AVERROR_INVALIDDATA;
2330  }
2331  err = 0;
2332  while (elem_id > 0) {
2333  int ret = decode_extension_payload(ac, gb, elem_id, che_prev, che_prev_type);
2334  if (ret < 0) {
2335  err = ret;
2336  break;
2337  }
2338  elem_id -= ret;
2339  }
2340  break;
2341 
2342  default:
2343  err = AVERROR_BUG; /* should not happen, but keeps compiler happy */
2344  break;
2345  }
2346 
2347  if (elem_type < TYPE_DSE) {
2348  che_prev = che;
2349  che_prev_type = elem_type;
2350  }
2351 
2352  if (err)
2353  return err;
2354 
2355  if (get_bits_left(gb) < 3) {
2356  av_log(avctx, AV_LOG_ERROR, overread_err);
2357  return AVERROR_INVALIDDATA;
2358  }
2359  }
2360 
2361  if (!avctx->ch_layout.nb_channels)
2362  return 0;
2363 
2364  multiplier = (ac->oc[1].m4ac.sbr == 1) ? ac->oc[1].m4ac.ext_sample_rate > ac->oc[1].m4ac.sample_rate : 0;
2365  samples <<= multiplier;
2366 
2368 
2369  if (ac->oc[1].status && audio_found) {
2370  avctx->sample_rate = ac->oc[1].m4ac.sample_rate << multiplier;
2371  avctx->frame_size = samples;
2372  ac->oc[1].status = OC_LOCKED;
2373  }
2374 
2375  if (!ac->frame->data[0] && samples) {
2376  av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
2377  return AVERROR_INVALIDDATA;
2378  }
2379 
2380  if (samples) {
2381  ac->frame->nb_samples = samples;
2382  ac->frame->sample_rate = avctx->sample_rate;
2383  ac->frame->flags |= AV_FRAME_FLAG_KEY;
2384  *got_frame_ptr = 1;
2385  } else {
2386  av_frame_unref(ac->frame);
2387  *got_frame_ptr = 0;
2388  }
2389 
2390  /* for dual-mono audio (SCE + SCE) */
2391  is_dmono = ac->dmono_mode && sce_count == 2 &&
2394  if (is_dmono) {
2395  if (ac->dmono_mode == 1)
2396  frame->data[1] = frame->data[0];
2397  else if (ac->dmono_mode == 2)
2398  frame->data[0] = frame->data[1];
2399  }
2400 
2401  return 0;
2402 }
2403 
2405  int *got_frame_ptr, GetBitContext *gb,
2406  const AVPacket *avpkt)
2407 {
2408  int err;
2409  AACDecContext *ac = avctx->priv_data;
2410 
2411  ac->frame = frame;
2412  *got_frame_ptr = 0;
2413 
2414  // USAC can't be packed into ADTS due to field size limitations.
2415  if (show_bits(gb, 12) == 0xfff && ac->oc[1].m4ac.object_type != AOT_USAC) {
2416  if ((err = parse_adts_frame_header(ac, gb)) < 0) {
2417  av_log(avctx, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
2418  goto fail;
2419  }
2420  if (ac->oc[1].m4ac.sampling_index > 12) {
2421  av_log(ac->avctx, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->oc[1].m4ac.sampling_index);
2422  err = AVERROR_INVALIDDATA;
2423  goto fail;
2424  }
2425  }
2426 
2427  if ((err = frame_configure_elements(avctx)) < 0)
2428  goto fail;
2429 
2430  // The AV_PROFILE_AAC_* defines are all object_type - 1
2431  // This may lead to an undefined profile being signaled
2432  ac->avctx->profile = ac->oc[1].m4ac.object_type - 1;
2433 
2434  ac->tags_mapped = 0;
2435 
2436  if (ac->oc[1].m4ac.object_type == AOT_USAC) {
2437  if (ac->is_fixed) {
2439  "AAC USAC fixed-point decoding");
2440  return AVERROR_PATCHWELCOME;
2441  }
2442 #if CONFIG_AAC_DECODER
2443  err = ff_aac_usac_decode_frame(avctx, ac, gb, got_frame_ptr);
2444  if (err < 0)
2445  goto fail;
2446 #endif
2447  } else {
2448  err = decode_frame_ga(avctx, ac, gb, got_frame_ptr);
2449  if (err < 0)
2450  goto fail;
2451  }
2452 
2453  return err;
2454 
2455 fail:
2457  return err;
2458 }
2459 
2461  int *got_frame_ptr, AVPacket *avpkt)
2462 {
2463  AACDecContext *ac = avctx->priv_data;
2464  const uint8_t *buf = avpkt->data;
2465  int buf_size = avpkt->size;
2466  GetBitContext gb;
2467  int buf_consumed;
2468  int buf_offset;
2469  int err;
2470  size_t new_extradata_size;
2471  const uint8_t *new_extradata = av_packet_get_side_data(avpkt,
2473  &new_extradata_size);
2474  size_t jp_dualmono_size;
2475  const uint8_t *jp_dualmono = av_packet_get_side_data(avpkt,
2477  &jp_dualmono_size);
2478 
2479  if (new_extradata) {
2480  /* discard previous configuration */
2481  ac->oc[1].status = OC_NONE;
2482  err = decode_audio_specific_config(ac, ac->avctx, &ac->oc[1],
2483  new_extradata,
2484  new_extradata_size * 8LL, 1);
2485  if (err < 0) {
2486  return err;
2487  }
2488  }
2489 
2490  ac->dmono_mode = 0;
2491  if (jp_dualmono && jp_dualmono_size > 0)
2492  ac->dmono_mode = 1 + *jp_dualmono;
2493  if (ac->force_dmono_mode >= 0)
2494  ac->dmono_mode = ac->force_dmono_mode;
2495 
2496  if (INT_MAX / 8 <= buf_size)
2497  return AVERROR_INVALIDDATA;
2498 
2499  if ((err = init_get_bits8(&gb, buf, buf_size)) < 0)
2500  return err;
2501 
2502  switch (ac->oc[1].m4ac.object_type) {
2503  case AOT_ER_AAC_LC:
2504  case AOT_ER_AAC_LTP:
2505  case AOT_ER_AAC_LD:
2506  case AOT_ER_AAC_ELD:
2507  err = aac_decode_er_frame(avctx, frame, got_frame_ptr, &gb);
2508  break;
2509  default:
2510  err = aac_decode_frame_int(avctx, frame, got_frame_ptr, &gb, avpkt);
2511  }
2512  if (err < 0)
2513  return err;
2514 
2515  buf_consumed = (get_bits_count(&gb) + 7) >> 3;
2516  for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
2517  if (buf[buf_offset])
2518  break;
2519 
2520  return buf_size > buf_offset ? buf_consumed : buf_size;
2521 }
2522 
2523 #if CONFIG_AAC_LATM_DECODER
2524 #include "aacdec_latm.h"
2525 #endif
2526 
2527 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
2528 #define OFF(field) offsetof(AACDecContext, field)
2529 static const AVOption options[] = {
2530  /**
2531  * AVOptions for Japanese DTV specific extensions (ADTS only)
2532  */
2533  {"dual_mono_mode", "Select the channel to decode for dual mono",
2534  OFF(force_dmono_mode), AV_OPT_TYPE_INT, {.i64=-1}, -1, 2,
2535  AACDEC_FLAGS, .unit = "dual_mono_mode"},
2536 
2537  {"auto", "autoselection", 0, AV_OPT_TYPE_CONST, {.i64=-1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2538  {"main", "Select Main/Left channel", 0, AV_OPT_TYPE_CONST, {.i64= 1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2539  {"sub" , "Select Sub/Right channel", 0, AV_OPT_TYPE_CONST, {.i64= 2}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2540  {"both", "Select both channels", 0, AV_OPT_TYPE_CONST, {.i64= 0}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2541 
2542  { "channel_order", "Order in which the channels are to be exported",
2543  OFF(output_channel_order), AV_OPT_TYPE_INT,
2544  { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, AACDEC_FLAGS, .unit = "channel_order" },
2545  { "default", "normal libavcodec channel order", 0, AV_OPT_TYPE_CONST,
2546  { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
2547  { "coded", "order in which the channels are coded in the bitstream",
2548  0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
2549 
2550  {NULL},
2551 };
2552 
2553 static const AVClass decoder_class = {
2554  .class_name = "AAC decoder",
2555  .item_name = av_default_item_name,
2556  .option = options,
2557  .version = LIBAVUTIL_VERSION_INT,
2558 };
2559 
2560 #if CONFIG_AAC_DECODER
2561 const FFCodec ff_aac_decoder = {
2562  .p.name = "aac",
2563  CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
2564  .p.type = AVMEDIA_TYPE_AUDIO,
2565  .p.id = AV_CODEC_ID_AAC,
2566  .p.priv_class = &decoder_class,
2567  .priv_data_size = sizeof(AACDecContext),
2569  .close = decode_close,
2572  .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
2573  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2575  .flush = flush,
2576  .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
2577 };
2578 #endif
2579 
2580 #if CONFIG_AAC_FIXED_DECODER
2581 const FFCodec ff_aac_fixed_decoder = {
2582  .p.name = "aac_fixed",
2583  CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
2584  .p.type = AVMEDIA_TYPE_AUDIO,
2585  .p.id = AV_CODEC_ID_AAC,
2586  .p.priv_class = &decoder_class,
2587  .priv_data_size = sizeof(AACDecContext),
2589  .close = decode_close,
2592  .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
2593  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2595  .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
2596  .flush = flush,
2597 };
2598 #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:1126
decode_frame_ga
static int decode_frame_ga(AVCodecContext *avctx, AACDecContext *ac, GetBitContext *gb, int *got_frame_ptr)
Definition: aacdec.c:2229
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:1498
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:1100
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:434
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:2404
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:1831
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:2094
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:678
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:1691
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:455
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:2529
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:1785
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:1557
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:1897
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:111
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:649
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:1204
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:252
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
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:1930
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:2028
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:2156
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:1642
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:2460
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:550
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:1267
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:597
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:1850
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:2553
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:881
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:956
av_channel_layout_compare
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
Definition: channel_layout.c:809
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:1284
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:1025
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:514
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:799
AACDEC_FLAGS
#define AACDEC_FLAGS
Definition: aacdec.c:2527
AVFrame::extended_data
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:495
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:1324
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:1306
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:549
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:1169
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:442
MPEG4AudioConfig::sbr
int sbr
-1 implicit, 1 presence
Definition: mpeg4audio.h:34
samples
Filter the word “frame” indicates either a video frame or a group of audio samples
Definition: filter_design.txt:8
ff_aac_decode_tns
int ff_aac_decode_tns(AACDecContext *ac, TemporalNoiseShaping *tns, GetBitContext *gb, const IndividualChannelStream *ics)
Decode Temporal Noise Shaping data; reference: table 4.48.
Definition: aacdec.c:1584
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:1656
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:449
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:1995
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:769
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:2528
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:1451
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:811
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