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  ac->proc.sbr_ctx_close(ac->che[type][id]);
168  }
169  av_freep(&ac->che[type][id]);
170  memset(ac->output_element, 0, sizeof(ac->output_element));
171  }
172  return 0;
173 }
174 
176 {
177  AACDecContext *ac = avctx->priv_data;
178  int type, id, ch, ret;
179 
180  /* set channel pointers to internal buffers by default */
181  for (type = 0; type < 4; type++) {
182  for (id = 0; id < MAX_ELEM_ID; id++) {
183  ChannelElement *che = ac->che[type][id];
184  if (che) {
185  che->ch[0].output = che->ch[0].ret_buf;
186  che->ch[1].output = che->ch[1].ret_buf;
187  }
188  }
189  }
190 
191  /* get output buffer */
192  av_frame_unref(ac->frame);
193  if (!avctx->ch_layout.nb_channels)
194  return 1;
195 
196  ac->frame->nb_samples = 2048;
197  if ((ret = ff_get_buffer(avctx, ac->frame, 0)) < 0)
198  return ret;
199 
200  /* map output channel pointers to AVFrame data */
201  for (ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
202  if (ac->output_element[ch])
203  ac->output_element[ch]->output = (void *)ac->frame->extended_data[ch];
204  }
205 
206  return 0;
207 }
208 
210  uint64_t av_position;
211  uint8_t syn_ele;
212  uint8_t elem_id;
213  uint8_t aac_position;
214 };
215 
216 static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
217  uint8_t (*layout_map)[3], int offset, uint64_t left,
218  uint64_t right, int pos, uint64_t *layout)
219 {
220  if (layout_map[offset][0] == TYPE_CPE) {
221  e2c_vec[offset] = (struct elem_to_channel) {
222  .av_position = left | right,
223  .syn_ele = TYPE_CPE,
224  .elem_id = layout_map[offset][1],
225  .aac_position = pos
226  };
227  if (e2c_vec[offset].av_position != UINT64_MAX)
228  *layout |= e2c_vec[offset].av_position;
229 
230  return 1;
231  } else {
232  e2c_vec[offset] = (struct elem_to_channel) {
233  .av_position = left,
234  .syn_ele = TYPE_SCE,
235  .elem_id = layout_map[offset][1],
236  .aac_position = pos
237  };
238  e2c_vec[offset + 1] = (struct elem_to_channel) {
239  .av_position = right,
240  .syn_ele = TYPE_SCE,
241  .elem_id = layout_map[offset + 1][1],
242  .aac_position = pos
243  };
244  if (left != UINT64_MAX)
245  *layout |= left;
246 
247  if (right != UINT64_MAX)
248  *layout |= right;
249 
250  return 2;
251  }
252 }
253 
254 static int count_paired_channels(uint8_t (*layout_map)[3], int tags, int pos,
255  int current)
256 {
257  int num_pos_channels = 0;
258  int first_cpe = 0;
259  int sce_parity = 0;
260  int i;
261  for (i = current; i < tags; i++) {
262  if (layout_map[i][2] != pos)
263  break;
264  if (layout_map[i][0] == TYPE_CPE) {
265  if (sce_parity) {
266  if (pos == AAC_CHANNEL_FRONT && !first_cpe) {
267  sce_parity = 0;
268  } else {
269  return -1;
270  }
271  }
272  num_pos_channels += 2;
273  first_cpe = 1;
274  } else {
275  num_pos_channels++;
276  sce_parity ^= (pos != AAC_CHANNEL_LFE);
277  }
278  }
279  if (sce_parity &&
280  (pos == AAC_CHANNEL_FRONT && first_cpe))
281  return -1;
282 
283  return num_pos_channels;
284 }
285 
286 static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t (*layout_map)[3],
287  uint64_t *layout, int tags, int layer, int pos, int *current)
288 {
289  int i = *current, j = 0;
290  int nb_channels = count_paired_channels(layout_map, tags, pos, i);
291 
292  if (nb_channels < 0 || nb_channels > 5)
293  return 0;
294 
295  if (pos == AAC_CHANNEL_LFE) {
296  while (nb_channels) {
297  if (ff_aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE)
298  return -1;
299  e2c_vec[i] = (struct elem_to_channel) {
300  .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][j],
301  .syn_ele = layout_map[i][0],
302  .elem_id = layout_map[i][1],
303  .aac_position = pos
304  };
305  *layout |= e2c_vec[i].av_position;
306  i++;
307  j++;
308  nb_channels--;
309  }
310  *current = i;
311 
312  return 0;
313  }
314 
315  while (nb_channels & 1) {
316  if (ff_aac_channel_map[layer][pos - 1][0] == AV_CHAN_NONE)
317  return -1;
318  if (ff_aac_channel_map[layer][pos - 1][0] == AV_CHAN_UNUSED)
319  break;
320  e2c_vec[i] = (struct elem_to_channel) {
321  .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][0],
322  .syn_ele = layout_map[i][0],
323  .elem_id = layout_map[i][1],
324  .aac_position = pos
325  };
326  *layout |= e2c_vec[i].av_position;
327  i++;
328  nb_channels--;
329  }
330 
331  j = (pos != AAC_CHANNEL_SIDE) && nb_channels <= 3 ? 3 : 1;
332  while (nb_channels >= 2) {
333  if (ff_aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE ||
334  ff_aac_channel_map[layer][pos - 1][j+1] == AV_CHAN_NONE)
335  return -1;
336  i += assign_pair(e2c_vec, layout_map, i,
337  1ULL << ff_aac_channel_map[layer][pos - 1][j],
338  1ULL << ff_aac_channel_map[layer][pos - 1][j+1],
339  pos, layout);
340  j += 2;
341  nb_channels -= 2;
342  }
343  while (nb_channels & 1) {
344  if (ff_aac_channel_map[layer][pos - 1][5] == AV_CHAN_NONE)
345  return -1;
346  e2c_vec[i] = (struct elem_to_channel) {
347  .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][5],
348  .syn_ele = layout_map[i][0],
349  .elem_id = layout_map[i][1],
350  .aac_position = pos
351  };
352  *layout |= e2c_vec[i].av_position;
353  i++;
354  nb_channels--;
355  }
356  if (nb_channels)
357  return -1;
358 
359  *current = i;
360 
361  return 0;
362 }
363 
364 static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
365 {
366  int i, n, total_non_cc_elements;
367  struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } };
368  uint64_t layout = 0;
369 
370  if (FF_ARRAY_ELEMS(e2c_vec) < tags)
371  return 0;
372 
373  for (n = 0, i = 0; n < 3 && i < tags; n++) {
374  int ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_FRONT, &i);
375  if (ret < 0)
376  return 0;
377  ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_SIDE, &i);
378  if (ret < 0)
379  return 0;
380  ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_BACK, &i);
381  if (ret < 0)
382  return 0;
383  ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_LFE, &i);
384  if (ret < 0)
385  return 0;
386  }
387 
388  total_non_cc_elements = n = i;
389 
390  if (layout == AV_CH_LAYOUT_22POINT2) {
391  // For 22.2 reorder the result as needed
392  FFSWAP(struct elem_to_channel, e2c_vec[2], e2c_vec[0]); // FL & FR first (final), FC third
393  FFSWAP(struct elem_to_channel, e2c_vec[2], e2c_vec[1]); // FC second (final), FLc & FRc third
394  FFSWAP(struct elem_to_channel, e2c_vec[6], e2c_vec[2]); // LFE1 third (final), FLc & FRc seventh
395  FFSWAP(struct elem_to_channel, e2c_vec[4], e2c_vec[3]); // BL & BR fourth (final), SiL & SiR fifth
396  FFSWAP(struct elem_to_channel, e2c_vec[6], e2c_vec[4]); // FLc & FRc fifth (final), SiL & SiR seventh
397  FFSWAP(struct elem_to_channel, e2c_vec[7], e2c_vec[6]); // LFE2 seventh (final), SiL & SiR eight (final)
398  FFSWAP(struct elem_to_channel, e2c_vec[9], e2c_vec[8]); // TpFL & TpFR ninth (final), TFC tenth (final)
399  FFSWAP(struct elem_to_channel, e2c_vec[11], e2c_vec[10]); // TC eleventh (final), TpSiL & TpSiR twelfth
400  FFSWAP(struct elem_to_channel, e2c_vec[12], e2c_vec[11]); // TpBL & TpBR twelfth (final), TpSiL & TpSiR thirteenth (final)
401  } else {
402  // For everything else, utilize the AV channel position define as a
403  // stable sort.
404  do {
405  int next_n = 0;
406  for (i = 1; i < n; i++)
407  if (e2c_vec[i - 1].av_position > e2c_vec[i].av_position) {
408  FFSWAP(struct elem_to_channel, e2c_vec[i - 1], e2c_vec[i]);
409  next_n = i;
410  }
411  n = next_n;
412  } while (n > 0);
413 
414  }
415 
416  for (i = 0; i < total_non_cc_elements; i++) {
417  layout_map[i][0] = e2c_vec[i].syn_ele;
418  layout_map[i][1] = e2c_vec[i].elem_id;
419  layout_map[i][2] = e2c_vec[i].aac_position;
420  }
421 
422  return layout;
423 }
424 
426 {
427  int i;
428 
429  for (i = 0; i < src->usac.nb_elems; i++) {
430  AACUsacElemConfig *src_e = &src->usac.elems[i];
431  AACUsacElemConfig *dst_e = &dst->usac.elems[i];
432  /* dst_e->ext.pl_buf is guaranteed to be set to src_e->ext.pl_buf
433  * upon this function's return */
434  av_refstruct_replace(&dst_e->ext.pl_buf, src_e->ext.pl_buf);
435  }
436 
437  /* Unref all additional buffers to close leaks */
438  for (; i < dst->usac.nb_elems; i++)
439  av_refstruct_unref(&dst->usac.elems[i].ext.pl_buf);
440 
441  /* Set all other properties */
442  *dst = *src;
443 }
444 
445 /**
446  * Save current output configuration if and only if it has been locked.
447  */
449 {
450  int pushed = 0;
451 
452  if (ac->oc[1].status == OC_LOCKED || ac->oc[0].status == OC_NONE) {
453  copy_oc(&ac->oc[0], &ac->oc[1]);
454  pushed = 1;
455  }
456  ac->oc[1].status = OC_NONE;
457  return pushed;
458 }
459 
460 /**
461  * Restore the previous output configuration if and only if the current
462  * configuration is unlocked.
463  */
465 {
466  if (ac->oc[1].status != OC_LOCKED && ac->oc[0].status != OC_NONE) {
467  copy_oc(&ac->oc[1], &ac->oc[0]);
468 
469  ac->avctx->ch_layout = ac->oc[1].ch_layout;
471  ac->oc[1].status, 0);
472  }
473 }
474 
475 /**
476  * Configure output channel order based on the current program
477  * configuration element.
478  *
479  * @return Returns error status. 0 - OK, !0 - error
480  */
482  uint8_t layout_map[MAX_ELEM_ID * 4][3], int tags,
483  enum OCStatus oc_type, int get_new_frame)
484 {
485  AVCodecContext *avctx = ac->avctx;
486  int i, channels = 0, ret;
487  uint64_t layout = 0;
488  uint8_t id_map[TYPE_END][MAX_ELEM_ID] = {{ 0 }};
489  uint8_t type_counts[TYPE_END] = { 0 };
490 
491  if (get_new_frame && !ac->frame)
492  return AVERROR_INVALIDDATA;
493 
494  if (ac->oc[1].layout_map != layout_map) {
495  memcpy(ac->oc[1].layout_map, layout_map, tags * sizeof(layout_map[0]));
496  ac->oc[1].layout_map_tags = tags;
497  }
498  for (i = 0; i < tags; i++) {
499  int type = layout_map[i][0];
500  int id = layout_map[i][1];
501  id_map[type][id] = type_counts[type]++;
502  if (id_map[type][id] >= MAX_ELEM_ID) {
503  avpriv_request_sample(ac->avctx, "Too large remapped id");
504  return AVERROR_PATCHWELCOME;
505  }
506  }
507  // Try to sniff a reasonable channel order, otherwise output the
508  // channels in the order the PCE declared them.
510  layout = sniff_channel_order(layout_map, tags);
511  for (i = 0; i < tags; i++) {
512  int type = layout_map[i][0];
513  int id = layout_map[i][1];
514  int iid = id_map[type][id];
515  int position = layout_map[i][2];
516  // Allocate or free elements depending on if they are in the
517  // current program configuration.
518  ret = che_configure(ac, position, type, iid, &channels);
519  if (ret < 0)
520  return ret;
521  ac->tag_che_map[type][id] = ac->che[type][iid];
522  }
523  if (ac->oc[1].m4ac.ps == 1 && channels == 2) {
524  if (layout == AV_CH_FRONT_CENTER) {
526  } else {
527  layout = 0;
528  }
529  }
530 
532  if (layout)
534  else {
536  ac->oc[1].ch_layout.nb_channels = channels;
537  }
538 
539  av_channel_layout_copy(&avctx->ch_layout, &ac->oc[1].ch_layout);
540  ac->oc[1].status = oc_type;
541 
542  if (get_new_frame) {
543  if ((ret = frame_configure_elements(ac->avctx)) < 0)
544  return ret;
545  }
546 
547  return 0;
548 }
549 
550 static av_cold void flush(AVCodecContext *avctx)
551 {
552  AACDecContext *ac= avctx->priv_data;
553  int type, i, j;
554 
555  for (type = 3; type >= 0; type--) {
556  for (i = 0; i < MAX_ELEM_ID; i++) {
557  ChannelElement *che = ac->che[type][i];
558  if (che) {
559  for (j = 0; j <= 1; j++) {
560  memset(che->ch[j].saved, 0, sizeof(che->ch[j].saved));
561  }
562  }
563  }
564  }
565 
566 #if CONFIG_AAC_DECODER
567  ff_aac_usac_reset_state(ac, &ac->oc[1]);
568 #endif
569 }
570 
571 /**
572  * Set up channel positions based on a default channel configuration
573  * as specified in table 1.17.
574  *
575  * @return Returns error status. 0 - OK, !0 - error
576  */
578  uint8_t (*layout_map)[3],
579  int *tags,
580  int channel_config)
581 {
582  if (channel_config < 1 || (channel_config > 7 && channel_config < 11) ||
583  channel_config > 14) {
584  av_log(avctx, AV_LOG_ERROR,
585  "invalid default channel configuration (%d)\n",
586  channel_config);
587  return AVERROR_INVALIDDATA;
588  }
589  *tags = ff_tags_per_config[channel_config];
590  memcpy(layout_map, ff_aac_channel_layout_map[channel_config - 1],
591  *tags * sizeof(*layout_map));
592 
593  /*
594  * AAC specification has 7.1(wide) as a default layout for 8-channel streams.
595  * However, at least Nero AAC encoder encodes 7.1 streams using the default
596  * channel config 7, mapping the side channels of the original audio stream
597  * to the second AAC_CHANNEL_FRONT pair in the AAC stream. Similarly, e.g. FAAD
598  * decodes the second AAC_CHANNEL_FRONT pair as side channels, therefore decoding
599  * the incorrect streams as if they were correct (and as the encoder intended).
600  *
601  * As actual intended 7.1(wide) streams are very rare, default to assuming a
602  * 7.1 layout was intended.
603  */
604  if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) {
605  layout_map[2][2] = AAC_CHANNEL_BACK;
606 
607  if (!ac || !ac->warned_71_wide++) {
608  av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout"
609  " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
610  " according to the specification instead.\n", FF_COMPLIANCE_STRICT);
611  }
612  }
613 
614  return 0;
615 }
616 
618 {
619  /* For PCE based channel configurations map the channels solely based
620  * on tags. */
621  if (!ac->oc[1].m4ac.chan_config) {
622  return ac->tag_che_map[type][elem_id];
623  }
624  // Allow single CPE stereo files to be signalled with mono configuration.
625  if (!ac->tags_mapped && type == TYPE_CPE &&
626  ac->oc[1].m4ac.chan_config == 1) {
627  uint8_t layout_map[MAX_ELEM_ID*4][3];
628  int layout_map_tags;
630 
631  av_log(ac->avctx, AV_LOG_DEBUG, "mono with CPE\n");
632 
633  if (ff_aac_set_default_channel_config(ac, ac->avctx, layout_map,
634  &layout_map_tags, 2) < 0)
635  return NULL;
636  if (ff_aac_output_configure(ac, layout_map, layout_map_tags,
637  OC_TRIAL_FRAME, 1) < 0)
638  return NULL;
639 
640  ac->oc[1].m4ac.chan_config = 2;
641  ac->oc[1].m4ac.ps = 0;
642  }
643  // And vice-versa
644  if (!ac->tags_mapped && type == TYPE_SCE &&
645  ac->oc[1].m4ac.chan_config == 2) {
646  uint8_t layout_map[MAX_ELEM_ID * 4][3];
647  int layout_map_tags;
649 
650  av_log(ac->avctx, AV_LOG_DEBUG, "stereo with SCE\n");
651 
652  layout_map_tags = 2;
653  layout_map[0][0] = layout_map[1][0] = TYPE_SCE;
654  layout_map[0][2] = layout_map[1][2] = AAC_CHANNEL_FRONT;
655  layout_map[0][1] = 0;
656  layout_map[1][1] = 1;
657  if (ff_aac_output_configure(ac, layout_map, layout_map_tags,
658  OC_TRIAL_FRAME, 1) < 0)
659  return NULL;
660 
661  if (ac->oc[1].m4ac.sbr)
662  ac->oc[1].m4ac.ps = -1;
663  }
664  /* For indexed channel configurations map the channels solely based
665  * on position. */
666  switch (ac->oc[1].m4ac.chan_config) {
667  case 14:
668  if (ac->tags_mapped > 2 && ((type == TYPE_CPE && elem_id < 3) ||
669  (type == TYPE_LFE && elem_id < 1))) {
670  ac->tags_mapped++;
671  return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id];
672  }
673  case 13:
674  if (ac->tags_mapped > 3 && ((type == TYPE_CPE && elem_id < 8) ||
675  (type == TYPE_SCE && elem_id < 6) ||
676  (type == TYPE_LFE && elem_id < 2))) {
677  ac->tags_mapped++;
678  return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id];
679  }
680  case 12:
681  case 7:
682  if (ac->tags_mapped == 3 && type == TYPE_CPE) {
683  ac->tags_mapped++;
684  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2];
685  }
686  case 11:
687  if (ac->tags_mapped == 3 && type == TYPE_SCE) {
688  ac->tags_mapped++;
689  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
690  }
691  case 6:
692  /* Some streams incorrectly code 5.1 audio as
693  * SCE[0] CPE[0] CPE[1] SCE[1]
694  * instead of
695  * SCE[0] CPE[0] CPE[1] LFE[0].
696  * If we seem to have encountered such a stream, transfer
697  * the LFE[0] element to the SCE[1]'s mapping */
698  if (ac->tags_mapped == ff_tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
699  if (!ac->warned_remapping_once && (type != TYPE_LFE || elem_id != 0)) {
701  "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n",
702  type == TYPE_SCE ? "SCE" : "LFE", elem_id);
703  ac->warned_remapping_once++;
704  }
705  ac->tags_mapped++;
706  return ac->tag_che_map[type][elem_id] = ac->che[TYPE_LFE][0];
707  }
708  case 5:
709  if (ac->tags_mapped == 2 && type == TYPE_CPE) {
710  ac->tags_mapped++;
711  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][1];
712  }
713  case 4:
714  /* Some streams incorrectly code 4.0 audio as
715  * SCE[0] CPE[0] LFE[0]
716  * instead of
717  * SCE[0] CPE[0] SCE[1].
718  * If we seem to have encountered such a stream, transfer
719  * the SCE[1] element to the LFE[0]'s mapping */
720  if (ac->tags_mapped == ff_tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
721  if (!ac->warned_remapping_once && (type != TYPE_SCE || elem_id != 1)) {
723  "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n",
724  type == TYPE_SCE ? "SCE" : "LFE", elem_id);
725  ac->warned_remapping_once++;
726  }
727  ac->tags_mapped++;
728  return ac->tag_che_map[type][elem_id] = ac->che[TYPE_SCE][1];
729  }
730  if (ac->tags_mapped == 2 &&
731  ac->oc[1].m4ac.chan_config == 4 &&
732  type == TYPE_SCE) {
733  ac->tags_mapped++;
734  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
735  }
736  case 3:
737  case 2:
738  if (ac->tags_mapped == (ac->oc[1].m4ac.chan_config != 2) &&
739  type == TYPE_CPE) {
740  ac->tags_mapped++;
741  return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][0];
742  } else if (ac->tags_mapped == 1 && ac->oc[1].m4ac.chan_config == 2 &&
743  type == TYPE_SCE) {
744  ac->tags_mapped++;
745  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
746  }
747  case 1:
748  if (!ac->tags_mapped && type == TYPE_SCE) {
749  ac->tags_mapped++;
750  return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][0];
751  }
752  default:
753  return NULL;
754  }
755 }
756 
757 /**
758  * Decode an array of 4 bit element IDs, optionally interleaved with a
759  * stereo/mono switching bit.
760  *
761  * @param type speaker type/position for these channels
762  */
763 static void decode_channel_map(uint8_t layout_map[][3],
764  enum ChannelPosition type,
765  GetBitContext *gb, int n)
766 {
767  while (n--) {
769  switch (type) {
770  case AAC_CHANNEL_FRONT:
771  case AAC_CHANNEL_BACK:
772  case AAC_CHANNEL_SIDE:
773  syn_ele = get_bits1(gb);
774  break;
775  case AAC_CHANNEL_CC:
776  skip_bits1(gb);
777  syn_ele = TYPE_CCE;
778  break;
779  case AAC_CHANNEL_LFE:
780  syn_ele = TYPE_LFE;
781  break;
782  default:
783  // AAC_CHANNEL_OFF has no channel map
784  av_assert0(0);
785  }
786  layout_map[0][0] = syn_ele;
787  layout_map[0][1] = get_bits(gb, 4);
788  layout_map[0][2] = type;
789  layout_map++;
790  }
791 }
792 
793 static inline void relative_align_get_bits(GetBitContext *gb,
794  int reference_position) {
795  int n = (reference_position - get_bits_count(gb) & 7);
796  if (n)
797  skip_bits(gb, n);
798 }
799 
800 /**
801  * Decode program configuration element; reference: table 4.2.
802  *
803  * @return Returns error status. 0 - OK, !0 - error
804  */
805 static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac,
806  uint8_t (*layout_map)[3],
807  GetBitContext *gb, int byte_align_ref)
808 {
809  int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
810  int sampling_index;
811  int comment_len;
812  int tags;
813 
814  skip_bits(gb, 2); // object_type
815 
816  sampling_index = get_bits(gb, 4);
817  if (m4ac->sampling_index != sampling_index)
818  av_log(avctx, AV_LOG_WARNING,
819  "Sample rate index in program config element does not "
820  "match the sample rate index configured by the container.\n");
821 
822  num_front = get_bits(gb, 4);
823  num_side = get_bits(gb, 4);
824  num_back = get_bits(gb, 4);
825  num_lfe = get_bits(gb, 2);
826  num_assoc_data = get_bits(gb, 3);
827  num_cc = get_bits(gb, 4);
828 
829  if (get_bits1(gb))
830  skip_bits(gb, 4); // mono_mixdown_tag
831  if (get_bits1(gb))
832  skip_bits(gb, 4); // stereo_mixdown_tag
833 
834  if (get_bits1(gb))
835  skip_bits(gb, 3); // mixdown_coeff_index and pseudo_surround
836 
837  if (get_bits_left(gb) < 5 * (num_front + num_side + num_back + num_cc) + 4 *(num_lfe + num_assoc_data + num_cc)) {
838  av_log(avctx, AV_LOG_ERROR, "decode_pce: " overread_err);
839  return -1;
840  }
841  decode_channel_map(layout_map , AAC_CHANNEL_FRONT, gb, num_front);
842  tags = num_front;
843  decode_channel_map(layout_map + tags, AAC_CHANNEL_SIDE, gb, num_side);
844  tags += num_side;
845  decode_channel_map(layout_map + tags, AAC_CHANNEL_BACK, gb, num_back);
846  tags += num_back;
847  decode_channel_map(layout_map + tags, AAC_CHANNEL_LFE, gb, num_lfe);
848  tags += num_lfe;
849 
850  skip_bits_long(gb, 4 * num_assoc_data);
851 
852  decode_channel_map(layout_map + tags, AAC_CHANNEL_CC, gb, num_cc);
853  tags += num_cc;
854 
855  relative_align_get_bits(gb, byte_align_ref);
856 
857  /* comment field, first byte is length */
858  comment_len = get_bits(gb, 8) * 8;
859  if (get_bits_left(gb) < comment_len) {
860  av_log(avctx, AV_LOG_ERROR, "decode_pce: " overread_err);
861  return AVERROR_INVALIDDATA;
862  }
863  skip_bits_long(gb, comment_len);
864  return tags;
865 }
866 
867 /**
868  * Decode GA "General Audio" specific configuration; reference: table 4.1.
869  *
870  * @param ac pointer to AACDecContext, may be null
871  * @param avctx pointer to AVCCodecContext, used for logging
872  *
873  * @return Returns error status. 0 - OK, !0 - error
874  */
876  GetBitContext *gb,
877  int get_bit_alignment,
878  MPEG4AudioConfig *m4ac,
879  int channel_config)
880 {
881  int extension_flag, ret, ep_config, res_flags;
882  uint8_t layout_map[MAX_ELEM_ID*4][3];
883  int tags = 0;
884 
885  m4ac->frame_length_short = get_bits1(gb);
886  if (m4ac->frame_length_short && m4ac->sbr == 1) {
887  avpriv_report_missing_feature(avctx, "SBR with 960 frame length");
888  if (ac) ac->warned_960_sbr = 1;
889  m4ac->sbr = 0;
890  m4ac->ps = 0;
891  }
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.frame_length_short) {
1948  if (!ac->warned_960_sbr)
1950  "SBR with 960 frame length");
1951  ac->warned_960_sbr = 1;
1952  skip_bits_long(gb, 8 * cnt - 4);
1953  return res;
1954  } else if (!ac->oc[1].m4ac.sbr) {
1955  av_log(ac->avctx, AV_LOG_ERROR, "SBR signaled to be not-present but was found in the bitstream.\n");
1956  skip_bits_long(gb, 8 * cnt - 4);
1957  return res;
1958  } else if (ac->oc[1].m4ac.sbr == -1 && ac->oc[1].status == OC_LOCKED) {
1959  av_log(ac->avctx, AV_LOG_ERROR, "Implicit SBR was found with a first occurrence after the first frame.\n");
1960  skip_bits_long(gb, 8 * cnt - 4);
1961  return res;
1962  } else if (ac->oc[1].m4ac.ps == -1 && ac->oc[1].status < OC_LOCKED &&
1963  ac->avctx->ch_layout.nb_channels == 1) {
1964  ac->oc[1].m4ac.sbr = 1;
1965  ac->oc[1].m4ac.ps = 1;
1968  ac->oc[1].status, 1);
1969  } else {
1970  ac->oc[1].m4ac.sbr = 1;
1972  }
1973 
1974  ac->proc.sbr_decode_extension(ac, che, gb, crc_flag, cnt, elem_type);
1975 
1976  if (ac->oc[1].m4ac.ps == 1 && !ac->warned_he_aac_mono) {
1977  av_log(ac->avctx, AV_LOG_VERBOSE, "Treating HE-AAC mono as stereo.\n");
1978  ac->warned_he_aac_mono = 1;
1979  }
1980  break;
1981  case EXT_DYNAMIC_RANGE:
1982  res = decode_dynamic_range(&ac->che_drc, gb);
1983  break;
1984  case EXT_FILL:
1985  decode_fill(ac, gb, 8 * cnt - 4);
1986  break;
1987  case EXT_FILL_DATA:
1988  case EXT_DATA_ELEMENT:
1989  default:
1990  skip_bits_long(gb, 8 * cnt - 4);
1991  break;
1992  };
1993  return res;
1994 }
1995 
1996 /**
1997  * channel coupling transformation interface
1998  *
1999  * @param apply_coupling_method pointer to (in)dependent coupling function
2000  */
2002  enum RawDataBlockType type, int elem_id,
2003  enum CouplingPoint coupling_point,
2004  void (*apply_coupling_method)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
2005 {
2006  int i, c;
2007 
2008  for (i = 0; i < MAX_ELEM_ID; i++) {
2009  ChannelElement *cce = ac->che[TYPE_CCE][i];
2010  int index = 0;
2011 
2012  if (cce && cce->coup.coupling_point == coupling_point) {
2013  ChannelCoupling *coup = &cce->coup;
2014 
2015  for (c = 0; c <= coup->num_coupled; c++) {
2016  if (coup->type[c] == type && coup->id_select[c] == elem_id) {
2017  if (coup->ch_select[c] != 1) {
2018  apply_coupling_method(ac, &cc->ch[0], cce, index);
2019  if (coup->ch_select[c] != 0)
2020  index++;
2021  }
2022  if (coup->ch_select[c] != 2)
2023  apply_coupling_method(ac, &cc->ch[1], cce, index++);
2024  } else
2025  index += 1 + (coup->ch_select[c] == 3);
2026  }
2027  }
2028  }
2029 }
2030 
2031 /**
2032  * Convert spectral data to samples, applying all supported tools as appropriate.
2033  */
2035 {
2036  int i, type;
2038  switch (ac->oc[1].m4ac.object_type) {
2039  case AOT_ER_AAC_LD:
2041  break;
2042  case AOT_ER_AAC_ELD:
2044  break;
2045  default:
2046  if (ac->oc[1].m4ac.frame_length_short)
2048  else
2050  }
2051  for (type = 3; type >= 0; type--) {
2052  for (i = 0; i < MAX_ELEM_ID; i++) {
2053  ChannelElement *che = ac->che[type][i];
2054  if (che && che->present) {
2055  if (type <= TYPE_CPE)
2057  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP) {
2058  if (che->ch[0].ics.predictor_present) {
2059  if (che->ch[0].ics.ltp.present)
2060  ac->dsp.apply_ltp(ac, &che->ch[0]);
2061  if (che->ch[1].ics.ltp.present && type == TYPE_CPE)
2062  ac->dsp.apply_ltp(ac, &che->ch[1]);
2063  }
2064  }
2065  if (che->ch[0].tns.present)
2066  ac->dsp.apply_tns(che->ch[0].coeffs,
2067  &che->ch[0].tns, &che->ch[0].ics, 1);
2068  if (che->ch[1].tns.present)
2069  ac->dsp.apply_tns(che->ch[1].coeffs,
2070  &che->ch[1].tns, &che->ch[1].ics, 1);
2071  if (type <= TYPE_CPE)
2073  if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT) {
2074  imdct_and_window(ac, &che->ch[0]);
2075  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP)
2076  ac->dsp.update_ltp(ac, &che->ch[0]);
2077  if (type == TYPE_CPE) {
2078  imdct_and_window(ac, &che->ch[1]);
2079  if (ac->oc[1].m4ac.object_type == AOT_AAC_LTP)
2080  ac->dsp.update_ltp(ac, &che->ch[1]);
2081  }
2082  if (ac->oc[1].m4ac.sbr > 0) {
2083  ac->proc.sbr_apply(ac, che, type,
2084  che->ch[0].output,
2085  che->ch[1].output);
2086  }
2087  }
2088  if (type <= TYPE_CCE)
2090  ac->dsp.clip_output(ac, che, type, samples);
2091  che->present = 0;
2092  } else if (che) {
2093  av_log(ac->avctx, AV_LOG_VERBOSE, "ChannelElement %d.%d missing \n", type, i);
2094  }
2095  }
2096  }
2097 }
2098 
2100 {
2101  int size;
2102  AACADTSHeaderInfo hdr_info;
2103  uint8_t layout_map[MAX_ELEM_ID*4][3];
2104  int layout_map_tags, ret;
2105 
2106  size = ff_adts_header_parse(gb, &hdr_info);
2107  if (size > 0) {
2108  if (!ac->warned_num_aac_frames && hdr_info.num_aac_frames != 1) {
2109  // This is 2 for "VLB " audio in NSV files.
2110  // See samples/nsv/vlb_audio.
2112  "More than one AAC RDB per ADTS frame");
2113  ac->warned_num_aac_frames = 1;
2114  }
2116  if (hdr_info.chan_config) {
2117  ac->oc[1].m4ac.chan_config = hdr_info.chan_config;
2119  layout_map,
2120  &layout_map_tags,
2121  hdr_info.chan_config)) < 0)
2122  return ret;
2123  if ((ret = ff_aac_output_configure(ac, layout_map, layout_map_tags,
2124  FFMAX(ac->oc[1].status,
2125  OC_TRIAL_FRAME), 0)) < 0)
2126  return ret;
2127  } else {
2128  ac->oc[1].m4ac.chan_config = 0;
2129  /**
2130  * dual mono frames in Japanese DTV can have chan_config 0
2131  * WITHOUT specifying PCE.
2132  * thus, set dual mono as default.
2133  */
2134  if (ac->dmono_mode && ac->oc[0].status == OC_NONE) {
2135  layout_map_tags = 2;
2136  layout_map[0][0] = layout_map[1][0] = TYPE_SCE;
2137  layout_map[0][2] = layout_map[1][2] = AAC_CHANNEL_FRONT;
2138  layout_map[0][1] = 0;
2139  layout_map[1][1] = 1;
2140  if (ff_aac_output_configure(ac, layout_map, layout_map_tags,
2141  OC_TRIAL_FRAME, 0))
2142  return -7;
2143  }
2144  }
2145  ac->oc[1].m4ac.sample_rate = hdr_info.sample_rate;
2146  ac->oc[1].m4ac.sampling_index = hdr_info.sampling_index;
2147  ac->oc[1].m4ac.object_type = hdr_info.object_type;
2148  ac->oc[1].m4ac.frame_length_short = 0;
2149  if (ac->oc[0].status != OC_LOCKED ||
2150  ac->oc[0].m4ac.chan_config != hdr_info.chan_config ||
2151  ac->oc[0].m4ac.sample_rate != hdr_info.sample_rate) {
2152  ac->oc[1].m4ac.sbr = -1;
2153  ac->oc[1].m4ac.ps = -1;
2154  }
2155  if (!hdr_info.crc_absent)
2156  skip_bits(gb, 16);
2157  }
2158  return size;
2159 }
2160 
2162  int *got_frame_ptr, GetBitContext *gb)
2163 {
2164  AACDecContext *ac = avctx->priv_data;
2165  const MPEG4AudioConfig *const m4ac = &ac->oc[1].m4ac;
2166  ChannelElement *che;
2167  int err, i;
2168  int samples = m4ac->frame_length_short ? 960 : 1024;
2169  int chan_config = m4ac->chan_config;
2170  int aot = m4ac->object_type;
2171 
2172  if (aot == AOT_ER_AAC_LD || aot == AOT_ER_AAC_ELD)
2173  samples >>= 1;
2174 
2175  ac->frame = frame;
2176 
2177  if ((err = frame_configure_elements(avctx)) < 0)
2178  return err;
2179 
2180  // The AV_PROFILE_AAC_* defines are all object_type - 1
2181  // This may lead to an undefined profile being signaled
2182  ac->avctx->profile = aot - 1;
2183 
2184  ac->tags_mapped = 0;
2185 
2186  if (chan_config < 0 || (chan_config >= 8 && chan_config < 11) || chan_config >= 13) {
2187  avpriv_request_sample(avctx, "Unknown ER channel configuration %d",
2188  chan_config);
2189  return AVERROR_INVALIDDATA;
2190  }
2191  for (i = 0; i < ff_tags_per_config[chan_config]; i++) {
2192  const int elem_type = ff_aac_channel_layout_map[chan_config-1][i][0];
2193  const int elem_id = ff_aac_channel_layout_map[chan_config-1][i][1];
2194  if (!(che=ff_aac_get_che(ac, elem_type, elem_id))) {
2195  av_log(ac->avctx, AV_LOG_ERROR,
2196  "channel element %d.%d is not allocated\n",
2197  elem_type, elem_id);
2198  return AVERROR_INVALIDDATA;
2199  }
2200  che->present = 1;
2201  if (aot != AOT_ER_AAC_ELD)
2202  skip_bits(gb, 4);
2203  switch (elem_type) {
2204  case TYPE_SCE:
2205  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2206  break;
2207  case TYPE_CPE:
2208  err = decode_cpe(ac, gb, che);
2209  break;
2210  case TYPE_LFE:
2211  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2212  break;
2213  }
2214  if (err < 0)
2215  return err;
2216  }
2217 
2219 
2220  if (!ac->frame->data[0] && samples) {
2221  av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
2222  return AVERROR_INVALIDDATA;
2223  }
2224 
2225  ac->frame->nb_samples = samples;
2226  ac->frame->sample_rate = avctx->sample_rate;
2227  ac->frame->flags |= AV_FRAME_FLAG_KEY;
2228  *got_frame_ptr = 1;
2229 
2230  skip_bits_long(gb, get_bits_left(gb));
2231  return 0;
2232 }
2233 
2235  GetBitContext *gb, int *got_frame_ptr)
2236 {
2237  int err;
2238  int is_dmono;
2239  int elem_id;
2240  enum RawDataBlockType elem_type, che_prev_type = TYPE_END;
2241  uint8_t che_presence[4][MAX_ELEM_ID] = {{0}};
2242  ChannelElement *che = NULL, *che_prev = NULL;
2243  int samples = 0, multiplier, audio_found = 0, pce_found = 0, sce_count = 0;
2244  AVFrame *frame = ac->frame;
2245 
2246  int payload_alignment = get_bits_count(gb);
2247  // parse
2248  while ((elem_type = get_bits(gb, 3)) != TYPE_END) {
2249  elem_id = get_bits(gb, 4);
2250 
2251  if (avctx->debug & FF_DEBUG_STARTCODE)
2252  av_log(avctx, AV_LOG_DEBUG, "Elem type:%x id:%x\n", elem_type, elem_id);
2253 
2254  if (!avctx->ch_layout.nb_channels && elem_type != TYPE_PCE)
2255  return AVERROR_INVALIDDATA;
2256 
2257  if (elem_type < TYPE_DSE) {
2258  if (che_presence[elem_type][elem_id]) {
2259  int error = che_presence[elem_type][elem_id] > 1;
2260  av_log(ac->avctx, error ? AV_LOG_ERROR : AV_LOG_DEBUG, "channel element %d.%d duplicate\n",
2261  elem_type, elem_id);
2262  if (error)
2263  return AVERROR_INVALIDDATA;
2264  }
2265  che_presence[elem_type][elem_id]++;
2266 
2267  if (!(che=ff_aac_get_che(ac, elem_type, elem_id))) {
2268  av_log(ac->avctx, AV_LOG_ERROR, "channel element %d.%d is not allocated\n",
2269  elem_type, elem_id);
2270  return AVERROR_INVALIDDATA;
2271  }
2272  samples = ac->oc[1].m4ac.frame_length_short ? 960 : 1024;
2273  che->present = 1;
2274  }
2275 
2276  switch (elem_type) {
2277 
2278  case TYPE_SCE:
2279  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2280  audio_found = 1;
2281  sce_count++;
2282  break;
2283 
2284  case TYPE_CPE:
2285  err = decode_cpe(ac, gb, che);
2286  audio_found = 1;
2287  break;
2288 
2289  case TYPE_CCE:
2290  err = ac->proc.decode_cce(ac, gb, che);
2291  break;
2292 
2293  case TYPE_LFE:
2294  err = ff_aac_decode_ics(ac, &che->ch[0], gb, 0, 0);
2295  audio_found = 1;
2296  break;
2297 
2298  case TYPE_DSE:
2299  err = skip_data_stream_element(ac, gb);
2300  break;
2301 
2302  case TYPE_PCE: {
2303  uint8_t layout_map[MAX_ELEM_ID*4][3] = {{0}};
2304  int tags;
2305 
2306  int pushed = push_output_configuration(ac);
2307  if (pce_found && !pushed)
2308  return AVERROR_INVALIDDATA;
2309 
2310  tags = decode_pce(avctx, &ac->oc[1].m4ac, layout_map, gb,
2311  payload_alignment);
2312  if (tags < 0) {
2313  err = tags;
2314  break;
2315  }
2316  if (pce_found) {
2317  av_log(avctx, AV_LOG_ERROR,
2318  "Not evaluating a further program_config_element as this construct is dubious at best.\n");
2320  } else {
2321  err = ff_aac_output_configure(ac, layout_map, tags, OC_TRIAL_PCE, 1);
2322  if (!err)
2323  ac->oc[1].m4ac.chan_config = 0;
2324  pce_found = 1;
2325  }
2326  break;
2327  }
2328 
2329  case TYPE_FIL:
2330  if (elem_id == 15)
2331  elem_id += get_bits(gb, 8) - 1;
2332  if (get_bits_left(gb) < 8 * elem_id) {
2333  av_log(avctx, AV_LOG_ERROR, "TYPE_FIL: "overread_err);
2334  return AVERROR_INVALIDDATA;
2335  }
2336  err = 0;
2337  while (elem_id > 0) {
2338  int ret = decode_extension_payload(ac, gb, elem_id, che_prev, che_prev_type);
2339  if (ret < 0) {
2340  err = ret;
2341  break;
2342  }
2343  elem_id -= ret;
2344  }
2345  break;
2346 
2347  default:
2348  err = AVERROR_BUG; /* should not happen, but keeps compiler happy */
2349  break;
2350  }
2351 
2352  if (elem_type < TYPE_DSE) {
2353  che_prev = che;
2354  che_prev_type = elem_type;
2355  }
2356 
2357  if (err)
2358  return err;
2359 
2360  if (get_bits_left(gb) < 3) {
2361  av_log(avctx, AV_LOG_ERROR, overread_err);
2362  return AVERROR_INVALIDDATA;
2363  }
2364  }
2365 
2366  if (!avctx->ch_layout.nb_channels)
2367  return 0;
2368 
2369  multiplier = (ac->oc[1].m4ac.sbr == 1) ? ac->oc[1].m4ac.ext_sample_rate > ac->oc[1].m4ac.sample_rate : 0;
2370  samples <<= multiplier;
2371 
2373 
2374  if (ac->oc[1].status && audio_found) {
2375  avctx->sample_rate = ac->oc[1].m4ac.sample_rate << multiplier;
2376  avctx->frame_size = samples;
2377  ac->oc[1].status = OC_LOCKED;
2378  }
2379 
2380  if (!ac->frame->data[0] && samples) {
2381  av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
2382  return AVERROR_INVALIDDATA;
2383  }
2384 
2385  if (samples) {
2386  ac->frame->nb_samples = samples;
2387  ac->frame->sample_rate = avctx->sample_rate;
2388  ac->frame->flags |= AV_FRAME_FLAG_KEY;
2389  *got_frame_ptr = 1;
2390  } else {
2391  av_frame_unref(ac->frame);
2392  *got_frame_ptr = 0;
2393  }
2394 
2395  /* for dual-mono audio (SCE + SCE) */
2396  is_dmono = ac->dmono_mode && sce_count == 2 &&
2399  if (is_dmono) {
2400  if (ac->dmono_mode == 1)
2401  frame->data[1] = frame->data[0];
2402  else if (ac->dmono_mode == 2)
2403  frame->data[0] = frame->data[1];
2404  }
2405 
2406  return 0;
2407 }
2408 
2410  int *got_frame_ptr, GetBitContext *gb,
2411  const AVPacket *avpkt)
2412 {
2413  int err;
2414  AACDecContext *ac = avctx->priv_data;
2415 
2416  ac->frame = frame;
2417  *got_frame_ptr = 0;
2418 
2419  // USAC can't be packed into ADTS due to field size limitations.
2420  if (show_bits(gb, 12) == 0xfff && ac->oc[1].m4ac.object_type != AOT_USAC) {
2421  if ((err = parse_adts_frame_header(ac, gb)) < 0) {
2422  av_log(avctx, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
2423  goto fail;
2424  }
2425  if (ac->oc[1].m4ac.sampling_index > 12) {
2426  av_log(ac->avctx, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->oc[1].m4ac.sampling_index);
2427  err = AVERROR_INVALIDDATA;
2428  goto fail;
2429  }
2430  }
2431 
2432  if ((err = frame_configure_elements(avctx)) < 0)
2433  goto fail;
2434 
2435  // The AV_PROFILE_AAC_* defines are all object_type - 1
2436  // This may lead to an undefined profile being signaled
2437  ac->avctx->profile = ac->oc[1].m4ac.object_type - 1;
2438 
2439  ac->tags_mapped = 0;
2440 
2441  if (ac->oc[1].m4ac.object_type == AOT_USAC) {
2442  if (ac->is_fixed) {
2444  "AAC USAC fixed-point decoding");
2445  return AVERROR_PATCHWELCOME;
2446  }
2447 #if CONFIG_AAC_DECODER
2448  err = ff_aac_usac_decode_frame(avctx, ac, gb, got_frame_ptr);
2449  if (err < 0)
2450  goto fail;
2451 #endif
2452  } else {
2453  err = decode_frame_ga(avctx, ac, gb, got_frame_ptr);
2454  if (err < 0)
2455  goto fail;
2456  }
2457 
2458  return err;
2459 
2460 fail:
2462  return err;
2463 }
2464 
2466  int *got_frame_ptr, AVPacket *avpkt)
2467 {
2468  AACDecContext *ac = avctx->priv_data;
2469  const uint8_t *buf = avpkt->data;
2470  int buf_size = avpkt->size;
2471  GetBitContext gb;
2472  int buf_consumed;
2473  int buf_offset;
2474  int err;
2475  size_t new_extradata_size;
2476  const uint8_t *new_extradata = av_packet_get_side_data(avpkt,
2478  &new_extradata_size);
2479  size_t jp_dualmono_size;
2480  const uint8_t *jp_dualmono = av_packet_get_side_data(avpkt,
2482  &jp_dualmono_size);
2483 
2484  if (new_extradata) {
2485  /* discard previous configuration */
2486  ac->oc[1].status = OC_NONE;
2487  err = decode_audio_specific_config(ac, ac->avctx, &ac->oc[1],
2488  new_extradata,
2489  new_extradata_size * 8LL, 1);
2490  if (err < 0) {
2491  return err;
2492  }
2493  }
2494 
2495  ac->dmono_mode = 0;
2496  if (jp_dualmono && jp_dualmono_size > 0)
2497  ac->dmono_mode = 1 + *jp_dualmono;
2498  if (ac->force_dmono_mode >= 0)
2499  ac->dmono_mode = ac->force_dmono_mode;
2500 
2501  if (INT_MAX / 8 <= buf_size)
2502  return AVERROR_INVALIDDATA;
2503 
2504  if ((err = init_get_bits8(&gb, buf, buf_size)) < 0)
2505  return err;
2506 
2507  switch (ac->oc[1].m4ac.object_type) {
2508  case AOT_ER_AAC_LC:
2509  case AOT_ER_AAC_LTP:
2510  case AOT_ER_AAC_LD:
2511  case AOT_ER_AAC_ELD:
2512  err = aac_decode_er_frame(avctx, frame, got_frame_ptr, &gb);
2513  break;
2514  default:
2515  err = aac_decode_frame_int(avctx, frame, got_frame_ptr, &gb, avpkt);
2516  }
2517  if (err < 0)
2518  return err;
2519 
2520  buf_consumed = (get_bits_count(&gb) + 7) >> 3;
2521  for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
2522  if (buf[buf_offset])
2523  break;
2524 
2525  return buf_size > buf_offset ? buf_consumed : buf_size;
2526 }
2527 
2528 #if CONFIG_AAC_LATM_DECODER
2529 #include "aacdec_latm.h"
2530 #endif
2531 
2532 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
2533 #define OFF(field) offsetof(AACDecContext, field)
2534 static const AVOption options[] = {
2535  /**
2536  * AVOptions for Japanese DTV specific extensions (ADTS only)
2537  */
2538  {"dual_mono_mode", "Select the channel to decode for dual mono",
2539  OFF(force_dmono_mode), AV_OPT_TYPE_INT, {.i64=-1}, -1, 2,
2540  AACDEC_FLAGS, .unit = "dual_mono_mode"},
2541 
2542  {"auto", "autoselection", 0, AV_OPT_TYPE_CONST, {.i64=-1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2543  {"main", "Select Main/Left channel", 0, AV_OPT_TYPE_CONST, {.i64= 1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2544  {"sub" , "Select Sub/Right channel", 0, AV_OPT_TYPE_CONST, {.i64= 2}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2545  {"both", "Select both channels", 0, AV_OPT_TYPE_CONST, {.i64= 0}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
2546 
2547  { "channel_order", "Order in which the channels are to be exported",
2548  OFF(output_channel_order), AV_OPT_TYPE_INT,
2549  { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, AACDEC_FLAGS, .unit = "channel_order" },
2550  { "default", "normal libavcodec channel order", 0, AV_OPT_TYPE_CONST,
2551  { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
2552  { "coded", "order in which the channels are coded in the bitstream",
2553  0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
2554 
2555  {NULL},
2556 };
2557 
2558 static const AVClass decoder_class = {
2559  .class_name = "AAC decoder",
2560  .item_name = av_default_item_name,
2561  .option = options,
2562  .version = LIBAVUTIL_VERSION_INT,
2563 };
2564 
2565 #if CONFIG_AAC_DECODER
2566 const FFCodec ff_aac_decoder = {
2567  .p.name = "aac",
2568  CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
2569  .p.type = AVMEDIA_TYPE_AUDIO,
2570  .p.id = AV_CODEC_ID_AAC,
2571  .p.priv_class = &decoder_class,
2572  .priv_data_size = sizeof(AACDecContext),
2574  .close = decode_close,
2577  .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
2578  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2580  .flush = flush,
2581  .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
2582 };
2583 #endif
2584 
2585 #if CONFIG_AAC_FIXED_DECODER
2586 const FFCodec ff_aac_fixed_decoder = {
2587  .p.name = "aac_fixed",
2588  CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
2589  .p.type = AVMEDIA_TYPE_AUDIO,
2590  .p.id = AV_CODEC_ID_AAC,
2591  .p.priv_class = &decoder_class,
2592  .priv_data_size = sizeof(AACDecContext),
2594  .close = decode_close,
2597  .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
2598  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2600  .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
2601  .flush = flush,
2602 };
2603 #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:199
CouplingPoint
CouplingPoint
The point during decoding at which channel coupling is applied.
Definition: aacdec.h:68
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:1051
AAC_CHANNEL_BACK
@ AAC_CHANNEL_BACK
Definition: aac.h:80
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:2234
AACDecProc::decode_spectrum_and_dequant
int(* decode_spectrum_and_dequant)(AACDecContext *ac, GetBitContext *gb, const Pulse *pulse, SingleChannelElement *sce)
Definition: aacdec.h:396
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:276
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
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:464
AACDecContext::mdct960_fn
av_tx_fn mdct960_fn
Definition: aacdec.h:499
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:70
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:42
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:689
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:418
AACUSACConfig
Definition: aacdec.h:351
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:286
TYPE_FIL
@ TYPE_FIL
Definition: aac.h:46
EXT_FILL
@ EXT_FILL
Definition: aac.h:51
AV_CHANNEL_LAYOUT_STEREO
#define AV_CHANNEL_LAYOUT_STEREO
Definition: channel_layout.h:395
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1024
AACDecContext::mdct1024_fn
av_tx_fn mdct1024_fn
Definition: aacdec.h:500
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:532
AACDecContext::mdct96
AVTXContext * mdct96
Definition: aacdec.h:483
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:335
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:403
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1398
Pulse::num_pulse
int num_pulse
Definition: aac.h:100
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:250
AACDecContext::mdct768
AVTXContext * mdct768
Definition: aacdec.h:488
OC_TRIAL_PCE
@ OC_TRIAL_PCE
Output configuration under trial specified by an inband PCE.
Definition: aacdec.h:54
aacsbr.h
mode
Definition: swscale.c:56
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:427
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:2409
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
w
uint8_t w
Definition: llviddspenc.c:38
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:558
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:489
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:45
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:185
FFCodec
Definition: codec_internal.h:127
parse_adts_frame_header
static int parse_adts_frame_header(AACDecContext *ac, GetBitContext *gb)
Definition: aacdec.c:2099
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:465
LongTermPrediction::used
int8_t used[MAX_LTP_LONG_SFB]
Definition: aacdec.h:121
AACDecDSP::apply_tns
void(* apply_tns)(void *_coef_param, TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
Definition: aacdec.h:421
AVFrame::flags
int flags
Frame flags, a combination of AV_FRAME_FLAGS.
Definition: frame.h:671
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:467
AACDecContext::proc
AACDecProc proc
Definition: aacdec.h:453
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:497
AACDecDSP::apply_prediction
void(* apply_prediction)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:427
ChannelElement::ch
SingleChannelElement ch[2]
Definition: aacdec.h:266
ff_aac_sample_rate_idx
static int ff_aac_sample_rate_idx(int rate)
Definition: aac.h:106
EXT_DYNAMIC_RANGE
@ EXT_DYNAMIC_RANGE
Definition: aac.h:54
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:512
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:261
FF_DEBUG_PICT_INFO
#define FF_DEBUG_PICT_INFO
Definition: avcodec.h:1375
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:448
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:522
MPEG4AudioConfig
Definition: mpeg4audio.h:29
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:379
DynamicRangeControl
Dynamic Range Control - decoded from the bitstream but not processed further.
Definition: aacdec.h:379
IndividualChannelStream::num_swb
int num_swb
number of scalefactor window bands
Definition: aacdec.h:171
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:135
options
static const AVOption options[]
Definition: aacdec.c:2534
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:333
ChannelCoupling::coupling_point
enum CouplingPoint coupling_point
The point during decoding at which coupling is applied.
Definition: aacdec.h:197
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:521
AACDecContext::warned_960_sbr
int warned_960_sbr
Definition: aacdec.h:529
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
AACDecContext::mdct480
AVTXContext * mdct480
Definition: aacdec.h:486
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:1039
macros.h
fail
#define fail()
Definition: checkasm.h:204
ChannelElement::coup
ChannelCoupling coup
Definition: aacdec.h:268
ChannelCoupling::id_select
int id_select[8]
element id
Definition: aacdec.h:200
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:530
TYPE_CPE
@ TYPE_CPE
Definition: aac.h:41
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:466
Pulse::amp
int amp[4]
Definition: aac.h:103
Pulse::pos
int pos[4]
Definition: aac.h:102
AACDecProc::sbr_apply
void(* sbr_apply)(AACDecContext *ac, ChannelElement *che, int id_aac, void *L, void *R)
Definition: aacdec.h:406
OutputConfiguration::status
enum OCStatus status
Definition: aacdec.h:372
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
IndividualChannelStream::prediction_used
uint8_t prediction_used[41]
Definition: aacdec.h:177
AACDecContext::che_drc
DynamicRangeControl che_drc
Definition: aacdec.h:458
MAX_LTP_LONG_SFB
#define MAX_LTP_LONG_SFB
Definition: aac.h:37
refstruct.h
SingleChannelElement::ics
IndividualChannelStream ics
Definition: aacdec.h:211
AACDecContext::mdct480_fn
av_tx_fn mdct480_fn
Definition: aacdec.h:496
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:297
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
AACUsacElemConfig::ext
struct AACUsacElemConfig::@26 ext
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:67
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
AACDecDSP::dequant_scalefactors
void(* dequant_scalefactors)(SingleChannelElement *sce)
Definition: aacdec.h:415
av_cold
#define av_cold
Definition: attributes.h:100
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:539
DynamicRangeControl::exclude_mask
int exclude_mask[MAX_CHANNELS]
Channels to be excluded from DRC processing.
Definition: aacdec.h:383
AV_FRAME_FLAG_KEY
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition: frame.h:642
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:56
AACDecContext::mdct_ltp
AVTXContext * mdct_ltp
Definition: aacdec.h:491
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:515
NOISE_BT
@ NOISE_BT
Spectral data are scaled white noise not coded in the bitstream.
Definition: aac.h:71
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:346
AACDecDSP::apply_mid_side_stereo
void(* apply_mid_side_stereo)(AACDecContext *ac, ChannelElement *cpe)
Definition: aacdec.h:417
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:198
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:62
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:188
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:72
bits
uint8_t bits
Definition: vp3data.h:128
AACDecProc::decode_cce
int(* decode_cce)(AACDecContext *ac, GetBitContext *gb, ChannelElement *che)
Definition: aacdec.h:401
TYPE_DSE
@ TYPE_DSE
Definition: aac.h:44
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:41
elem_to_channel::av_position
uint64_t av_position
Definition: aacdec.c:210
ff_aac_get_che
ChannelElement * ff_aac_get_che(AACDecContext *ac, int type, int elem_id)
Definition: aacdec.c:617
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
flush
static av_cold void flush(AVCodecContext *avctx)
Definition: aacdec.c:550
ChannelPosition
ChannelPosition
Definition: aac.h:76
AACDecDSP::imdct_and_windowing_ld
void(* imdct_and_windowing_ld)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:439
channels
channels
Definition: aptx.h:31
decode.h
limits.h
LongTermPrediction::present
int8_t present
Definition: aacdec.h:118
IndividualChannelStream
Individual Channel Stream.
Definition: aacdec.h:162
AACDecContext::che
ChannelElement * che[4][MAX_ELEM_ID]
Definition: aacdec.h:464
SCALE_DIFF_ZERO
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference
Definition: aac.h:91
NOISE_PRE
#define NOISE_PRE
preamble for NOISE_BT, put in bitstream with the first noise band
Definition: aac.h:95
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:331
AACDecContext::fdsp
AVFloatDSPContext * fdsp
Definition: aacdec.h:504
ff_aac_usac_decode_frame
int ff_aac_usac_decode_frame(AVCodecContext *avctx, AACDecContext *ac, GetBitContext *gb, int *got_frame_ptr)
Definition: aacdec_usac.c:1663
AACDecContext::warned_num_aac_frames
int warned_num_aac_frames
Definition: aacdec.h:528
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:73
elem_to_channel::syn_ele
uint8_t syn_ele
Definition: aacdec.c:211
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:493
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:2034
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
AACDecProc::sbr_decode_extension
int(* sbr_decode_extension)(AACDecContext *ac, ChannelElement *che, GetBitContext *gb, int crc, int cnt, int id_aac)
Definition: aacdec.h:404
IndividualChannelStream::use_kb_window
uint8_t use_kb_window[2]
If set, use Kaiser-Bessel window, otherwise use a sine window.
Definition: aacdec.h:165
ff_aac_num_swb_128
const uint8_t ff_aac_num_swb_128[]
Definition: aactab.c:169
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:466
IndividualChannelStream::num_window_groups
int num_window_groups
Definition: aacdec.h:166
AAC_CHANNEL_SIDE
@ AAC_CHANNEL_SIDE
Definition: aac.h:79
BEFORE_TNS
@ BEFORE_TNS
Definition: aacdec.h:69
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:241
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:386
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:264
options
Definition: swscale.c:43
aac.h
aactab.h
IndividualChannelStream::predictor_present
int predictor_present
Definition: aacdec.h:174
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:386
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:78
sniff_channel_order
static uint64_t sniff_channel_order(uint8_t(*layout_map)[3], int tags)
Definition: aacdec.c:364
aac_decode_er_frame
static int aac_decode_er_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, GetBitContext *gb)
Definition: aacdec.c:2161
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:646
AAC_CHANNEL_OFF
@ AAC_CHANNEL_OFF
Definition: aac.h:77
AACDecContext::mdct120
AVTXContext * mdct120
Definition: aacdec.h:484
OC_LOCKED
@ OC_LOCKED
Output configuration locked in place.
Definition: aacdec.h:57
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:167
aac_decode_frame
static int aac_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Definition: aacdec.c:2465
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:370
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:461
OutputConfiguration::layout_map
uint8_t layout_map[MAX_ELEM_ID *4][3]
Definition: aacdec.h:369
ff_dlog
#define ff_dlog(a,...)
Definition: tableprint_vlc.h:28
AACDecDSP::update_ltp
void(* update_ltp)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:425
AACDecDSP::apply_independent_coupling
void(* apply_independent_coupling)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Definition: aacdec.h:432
frame_configure_elements
static int frame_configure_elements(AVCodecContext *avctx)
Definition: aacdec.c:175
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:164
AACDecContext::dsp
AACDecDSP dsp
Definition: aacdec.h:452
AACDecDSP::clip_output
void(* clip_output)(AACDecContext *ac, ChannelElement *che, int type, int samples)
Definition: aacdec.h:442
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1720
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:368
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:53
AACDecDSP::apply_dependent_coupling
void(* apply_dependent_coupling)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Definition: aacdec.h:429
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:559
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:60
TYPE_END
@ TYPE_END
Definition: aac.h:47
AACDecContext::mdct1024
AVTXContext * mdct1024
Definition: aacdec.h:490
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
AVFrame::sample_rate
int sample_rate
Sample rate of the audio data.
Definition: frame.h:590
AACDecDSP::imdct_and_windowing
void(* imdct_and_windowing)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:436
ChannelElement::max_sfb_ste
uint8_t max_sfb_ste
(USAC) Maximum of both max_sfb values
Definition: aacdec.h:263
OCStatus
OCStatus
Output configuration status.
Definition: aacdec.h:52
size
int size
Definition: twinvq_data.h:10344
SingleChannelElement::sfo
int sfo[128]
scalefactor offsets
Definition: aacdec.h:215
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:387
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:513
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:525
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:367
elem_to_channel::elem_id
uint8_t elem_id
Definition: aacdec.c:212
ff_tns_max_bands_480
const uint8_t ff_tns_max_bands_480[]
Definition: aactab.c:1986
elem_to_channel
Definition: aacdec.c:209
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:2558
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:411
AACADTSHeaderInfo::object_type
uint8_t object_type
Definition: adts_header.h:40
CODEC_SAMPLEFMTS
#define CODEC_SAMPLEFMTS(...)
Definition: codec_internal.h:385
SingleChannelElement::band_type
enum BandType band_type[128]
band types
Definition: aacdec.h:214
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:485
DynamicRangeControl::dyn_rng_ctl
int dyn_rng_ctl[17]
DRC magnitude information.
Definition: aacdec.h:382
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:875
AACDecDSP::apply_ltp
void(* apply_ltp)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:424
SingleChannelElement::output
float * output
PCM output.
Definition: aacdec.h:227
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:52
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:498
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:438
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:62
AVFrame::nb_samples
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:507
RawDataBlockType
RawDataBlockType
Definition: aac.h:39
log.h
SingleChannelElement
Single Channel Element - used for both SCE and LFE elements.
Definition: aacdec.h:210
AACDecContext::is_fixed
int is_fixed
Definition: aacdec.h:534
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
IndividualChannelStream::num_windows
int num_windows
Definition: aacdec.h:172
OutputConfiguration::usac
AACUSACConfig usac
Definition: aacdec.h:373
AACDecContext::warned_gain_control
int warned_gain_control
Definition: aacdec.h:531
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:514
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:369
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:253
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:448
AACDecContext::random_state
int random_state
Definition: aacdec.h:506
relative_align_get_bits
static void relative_align_get_bits(GetBitContext *gb, int reference_position)
Definition: aacdec.c:793
AACDEC_FLAGS
#define AACDEC_FLAGS
Definition: aacdec.c:2532
AVFrame::extended_data
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:488
ChannelElement
channel element - generic struct for SCE/CPE/CCE/LFE
Definition: aacdec.h:260
IndividualChannelStream::swb_offset
const uint16_t * swb_offset
table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular wind...
Definition: aacdec.h:170
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:216
NOISE_PRE_BITS
#define NOISE_PRE_BITS
length of preamble
Definition: aac.h:96
FF_DEBUG_STARTCODE
#define FF_DEBUG_STARTCODE
Definition: avcodec.h:1382
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:43
av_frame_unref
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:496
LongTermPrediction::lag
int16_t lag
Definition: aacdec.h:119
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:189
TYPE_SCE
@ TYPE_SCE
Definition: aac.h:40
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:527
MPEG4AudioConfig::ext_sample_rate
int ext_sample_rate
Definition: mpeg4audio.h:37
IndividualChannelStream::tns_max_bands
int tns_max_bands
Definition: aacdec.h:173
TemporalNoiseShaping::length
int length[8][4]
Definition: aacdec.h:187
AACDecDSP::imdct_and_windowing_eld
void(* imdct_and_windowing_eld)(AACDecContext *ac, SingleChannelElement *sce)
Definition: aacdec.h:440
AACUSACConfig::nb_elems
int nb_elems
Definition: aacdec.h:357
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:81
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:380
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:213
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:455
AVCodecContext::strict_std_compliance
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
Definition: avcodec.h:1357
align_get_bits
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:555
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:254
TemporalNoiseShaping::coef
float coef[8][4][TNS_MAX_ORDER]
Definition: aacenc.h:101
CHANNEL_ORDER_DEFAULT
@ CHANNEL_ORDER_DEFAULT
Definition: aacdec.h:61
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:201
id
enum AVCodecID id
Definition: dts2pts.c:367
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:213
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
AACDecContext
main AAC decoding context
Definition: aacdec.h:448
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:56
AVCodecContext
main external API structure.
Definition: avcodec.h:431
EXT_SBR_DATA
@ EXT_SBR_DATA
Definition: aac.h:55
LongTermPrediction
Long Term Prediction.
Definition: aacdec.h:117
AV_PROFILE_AAC_HE_V2
#define AV_PROFILE_AAC_HE_V2
Definition: defs.h:73
AACDecContext::avctx
struct AVCodecContext * avctx
Definition: aacdec.h:450
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:97
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:1618
TemporalNoiseShaping
Temporal Noise Shaping.
Definition: aacdec.h:184
copy_oc
static void copy_oc(OutputConfiguration *dst, OutputConfiguration *src)
Definition: aacdec.c:425
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:384
AACDecContext::mdct_ltp_fn
av_tx_fn mdct_ltp_fn
Definition: aacdec.h:501
ff_aac_usac_reset_state
int ff_aac_usac_reset_state(AACDecContext *ac, OutputConfiguration *oc)
Definition: aacdec_usac.c:276
decode_gain_control
static void decode_gain_control(SingleChannelElement *sce, GetBitContext *gb)
Definition: aacdec.c:1656
AVCodecContext::debug
int debug
debug
Definition: avcodec.h:1374
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:368
TYPE_CCE
@ TYPE_CCE
Definition: aac.h:42
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:2001
AACUSACConfig::elems
AACUsacElemConfig elems[MAX_ELEM_ID]
Definition: aacdec.h:356
mem.h
OutputConfiguration::ch_layout
AVChannelLayout ch_layout
Definition: aacdec.h:371
ff_aacdec_common_init_once
av_cold void ff_aacdec_common_init_once(void)
Definition: aacdec_tab.c:304
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:37
adts_header.h
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:381
AVPacket
This structure stores compressed data.
Definition: packet.h:535
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:458
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:196
EXT_DATA_ELEMENT
@ EXT_DATA_ELEMENT
Definition: aac.h:53
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:163
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:763
Pulse
Definition: aac.h:99
AAC_CHANNEL_CC
@ AAC_CHANNEL_CC
Definition: aac.h:82
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:2533
AACDecContext::mdct512
AVTXContext * mdct512
Definition: aacdec.h:487
DynamicRangeControl::interpolation_scheme
int interpolation_scheme
Indicates the interpolation scheme used in the SBR QMF domain.
Definition: aacdec.h:385
AFTER_IMDCT
@ AFTER_IMDCT
Definition: aacdec.h:71
ff_aac_set_default_channel_config
int ff_aac_set_default_channel_config(AACDecContext *ac, AVCodecContext *avctx, uint8_t(*layout_map)[3], int *tags, int channel_config)
Set up channel positions based on a default channel configuration as specified in table 1....
Definition: aacdec.c:577
IndividualChannelStream::ltp
LongTermPrediction ltp
Definition: aacdec.h:169
IndividualChannelStream::group_len
uint8_t group_len[8]
Definition: aacdec.h:168
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:347
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:805
AOT_AAC_LC
@ AOT_AAC_LC
Y Low Complexity.
Definition: mpeg4audio.h:74
TemporalNoiseShaping::n_filt
int n_filt[8]
Definition: aacdec.h:186
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:380
OC_TRIAL_FRAME
@ OC_TRIAL_FRAME
Output configuration under trial specified by a frame header.
Definition: aacdec.h:55
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:481
AACDecProc::sbr_ctx_close
void(* sbr_ctx_close)(ChannelElement *che)
Definition: aacdec.h:408
AACADTSHeaderInfo
Definition: adts_header.h:35
IndividualChannelStream::predictor_reset_group
int predictor_reset_group
Definition: aacdec.h:176
tx.h
AACDecContext::mdct120_fn
av_tx_fn mdct120_fn
Definition: aacdec.h:494
MPEG4AudioConfig::sample_rate
int sample_rate
Definition: mpeg4audio.h:32
AACDecContext::mdct128_fn
av_tx_fn mdct128_fn
Definition: aacdec.h:495