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