]> git.sesse.net Git - ffmpeg/blob - libavcodec/aac.c
fddcefcf22fe0909299f6acfed0d411b40102767
[ffmpeg] / libavcodec / aac.c
1 /*
2  * AAC decoder
3  * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org )
4  * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com )
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file libavcodec/aac.c
25  * AAC decoder
26  * @author Oded Shimon  ( ods15 ods15 dyndns org )
27  * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
28  */
29
30 /*
31  * supported tools
32  *
33  * Support?             Name
34  * N (code in SoC repo) gain control
35  * Y                    block switching
36  * Y                    window shapes - standard
37  * N                    window shapes - Low Delay
38  * Y                    filterbank - standard
39  * N (code in SoC repo) filterbank - Scalable Sample Rate
40  * Y                    Temporal Noise Shaping
41  * N (code in SoC repo) Long Term Prediction
42  * Y                    intensity stereo
43  * Y                    channel coupling
44  * Y                    frequency domain prediction
45  * Y                    Perceptual Noise Substitution
46  * Y                    Mid/Side stereo
47  * N                    Scalable Inverse AAC Quantization
48  * N                    Frequency Selective Switch
49  * N                    upsampling filter
50  * Y                    quantization & coding - AAC
51  * N                    quantization & coding - TwinVQ
52  * N                    quantization & coding - BSAC
53  * N                    AAC Error Resilience tools
54  * N                    Error Resilience payload syntax
55  * N                    Error Protection tool
56  * N                    CELP
57  * N                    Silence Compression
58  * N                    HVXC
59  * N                    HVXC 4kbits/s VR
60  * N                    Structured Audio tools
61  * N                    Structured Audio Sample Bank Format
62  * N                    MIDI
63  * N                    Harmonic and Individual Lines plus Noise
64  * N                    Text-To-Speech Interface
65  * N (in progress)      Spectral Band Replication
66  * Y (not in this code) Layer-1
67  * Y (not in this code) Layer-2
68  * Y (not in this code) Layer-3
69  * N                    SinuSoidal Coding (Transient, Sinusoid, Noise)
70  * N (planned)          Parametric Stereo
71  * N                    Direct Stream Transfer
72  *
73  * Note: - HE AAC v1 comprises LC AAC with Spectral Band Replication.
74  *       - HE AAC v2 comprises LC AAC with Spectral Band Replication and
75            Parametric Stereo.
76  */
77
78
79 #include "avcodec.h"
80 #include "internal.h"
81 #include "get_bits.h"
82 #include "dsputil.h"
83 #include "lpc.h"
84
85 #include "aac.h"
86 #include "aactab.h"
87 #include "aacdectab.h"
88 #include "mpeg4audio.h"
89 #include "aac_parser.h"
90
91 #include <assert.h>
92 #include <errno.h>
93 #include <math.h>
94 #include <string.h>
95
96 union float754 {
97     float f;
98     uint32_t i;
99 };
100
101 static VLC vlc_scalefactors;
102 static VLC vlc_spectral[11];
103
104 static uint32_t cbrt_tab[1<<13];
105
106 static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
107 {
108     if (ac->tag_che_map[type][elem_id]) {
109         return ac->tag_che_map[type][elem_id];
110     }
111     if (ac->tags_mapped >= tags_per_config[ac->m4ac.chan_config]) {
112         return NULL;
113     }
114     switch (ac->m4ac.chan_config) {
115     case 7:
116         if (ac->tags_mapped == 3 && type == TYPE_CPE) {
117             ac->tags_mapped++;
118             return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2];
119         }
120     case 6:
121         /* Some streams incorrectly code 5.1 audio as SCE[0] CPE[0] CPE[1] SCE[1]
122            instead of SCE[0] CPE[0] CPE[0] LFE[0]. If we seem to have
123            encountered such a stream, transfer the LFE[0] element to SCE[1] */
124         if (ac->tags_mapped == tags_per_config[ac->m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
125             ac->tags_mapped++;
126             return ac->tag_che_map[type][elem_id] = ac->che[TYPE_LFE][0];
127         }
128     case 5:
129         if (ac->tags_mapped == 2 && type == TYPE_CPE) {
130             ac->tags_mapped++;
131             return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][1];
132         }
133     case 4:
134         if (ac->tags_mapped == 2 && ac->m4ac.chan_config == 4 && type == TYPE_SCE) {
135             ac->tags_mapped++;
136             return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
137         }
138     case 3:
139     case 2:
140         if (ac->tags_mapped == (ac->m4ac.chan_config != 2) && type == TYPE_CPE) {
141             ac->tags_mapped++;
142             return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][0];
143         } else if (ac->m4ac.chan_config == 2) {
144             return NULL;
145         }
146     case 1:
147         if (!ac->tags_mapped && type == TYPE_SCE) {
148             ac->tags_mapped++;
149             return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][0];
150         }
151     default:
152         return NULL;
153     }
154 }
155
156 /**
157  * Check for the channel element in the current channel position configuration.
158  * If it exists, make sure the appropriate element is allocated and map the
159  * channel order to match the internal FFmpeg channel layout.
160  *
161  * @param   che_pos current channel position configuration
162  * @param   type channel element type
163  * @param   id channel element id
164  * @param   channels count of the number of channels in the configuration
165  *
166  * @return  Returns error status. 0 - OK, !0 - error
167  */
168 static int che_configure(AACContext *ac,
169                          enum ChannelPosition che_pos[4][MAX_ELEM_ID],
170                          int type, int id,
171                          int *channels)
172 {
173     if (che_pos[type][id]) {
174         if (!ac->che[type][id] && !(ac->che[type][id] = av_mallocz(sizeof(ChannelElement))))
175             return AVERROR(ENOMEM);
176         if (type != TYPE_CCE) {
177             ac->output_data[(*channels)++] = ac->che[type][id]->ch[0].ret;
178             if (type == TYPE_CPE) {
179                 ac->output_data[(*channels)++] = ac->che[type][id]->ch[1].ret;
180             }
181         }
182     } else
183         av_freep(&ac->che[type][id]);
184     return 0;
185 }
186
187 /**
188  * Configure output channel order based on the current program configuration element.
189  *
190  * @param   che_pos current channel position configuration
191  * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
192  *
193  * @return  Returns error status. 0 - OK, !0 - error
194  */
195 static int output_configure(AACContext *ac,
196                             enum ChannelPosition che_pos[4][MAX_ELEM_ID],
197                             enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
198                             int channel_config, enum OCStatus oc_type)
199 {
200     AVCodecContext *avctx = ac->avccontext;
201     int i, type, channels = 0, ret;
202
203     memcpy(che_pos, new_che_pos, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
204
205     if (channel_config) {
206         for (i = 0; i < tags_per_config[channel_config]; i++) {
207             if ((ret = che_configure(ac, che_pos,
208                                      aac_channel_layout_map[channel_config - 1][i][0],
209                                      aac_channel_layout_map[channel_config - 1][i][1],
210                                      &channels)))
211                 return ret;
212         }
213
214         memset(ac->tag_che_map, 0,       4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
215         ac->tags_mapped = 0;
216
217         avctx->channel_layout = aac_channel_layout[channel_config - 1];
218     } else {
219         /* Allocate or free elements depending on if they are in the
220          * current program configuration.
221          *
222          * Set up default 1:1 output mapping.
223          *
224          * For a 5.1 stream the output order will be:
225          *    [ Center ] [ Front Left ] [ Front Right ] [ LFE ] [ Surround Left ] [ Surround Right ]
226          */
227
228         for (i = 0; i < MAX_ELEM_ID; i++) {
229             for (type = 0; type < 4; type++) {
230                 if ((ret = che_configure(ac, che_pos, type, i, &channels)))
231                     return ret;
232             }
233         }
234
235         memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
236         ac->tags_mapped = 4 * MAX_ELEM_ID;
237
238         avctx->channel_layout = 0;
239     }
240
241     avctx->channels = channels;
242
243     ac->output_configured = oc_type;
244
245     return 0;
246 }
247
248 /**
249  * Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit.
250  *
251  * @param cpe_map Stereo (Channel Pair Element) map, NULL if stereo bit is not present.
252  * @param sce_map mono (Single Channel Element) map
253  * @param type speaker type/position for these channels
254  */
255 static void decode_channel_map(enum ChannelPosition *cpe_map,
256                                enum ChannelPosition *sce_map,
257                                enum ChannelPosition type,
258                                GetBitContext *gb, int n)
259 {
260     while (n--) {
261         enum ChannelPosition *map = cpe_map && get_bits1(gb) ? cpe_map : sce_map; // stereo or mono map
262         map[get_bits(gb, 4)] = type;
263     }
264 }
265
266 /**
267  * Decode program configuration element; reference: table 4.2.
268  *
269  * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
270  *
271  * @return  Returns error status. 0 - OK, !0 - error
272  */
273 static int decode_pce(AACContext *ac, enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
274                       GetBitContext *gb)
275 {
276     int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling_index;
277
278     skip_bits(gb, 2);  // object_type
279
280     sampling_index = get_bits(gb, 4);
281     if (ac->m4ac.sampling_index != sampling_index)
282         av_log(ac->avccontext, AV_LOG_WARNING, "Sample rate index in program config element does not match the sample rate index configured by the container.\n");
283
284     num_front       = get_bits(gb, 4);
285     num_side        = get_bits(gb, 4);
286     num_back        = get_bits(gb, 4);
287     num_lfe         = get_bits(gb, 2);
288     num_assoc_data  = get_bits(gb, 3);
289     num_cc          = get_bits(gb, 4);
290
291     if (get_bits1(gb))
292         skip_bits(gb, 4); // mono_mixdown_tag
293     if (get_bits1(gb))
294         skip_bits(gb, 4); // stereo_mixdown_tag
295
296     if (get_bits1(gb))
297         skip_bits(gb, 3); // mixdown_coeff_index and pseudo_surround
298
299     decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_FRONT, gb, num_front);
300     decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_SIDE,  gb, num_side );
301     decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_BACK,  gb, num_back );
302     decode_channel_map(NULL,                  new_che_pos[TYPE_LFE], AAC_CHANNEL_LFE,   gb, num_lfe  );
303
304     skip_bits_long(gb, 4 * num_assoc_data);
305
306     decode_channel_map(new_che_pos[TYPE_CCE], new_che_pos[TYPE_CCE], AAC_CHANNEL_CC,    gb, num_cc   );
307
308     align_get_bits(gb);
309
310     /* comment field, first byte is length */
311     skip_bits_long(gb, 8 * get_bits(gb, 8));
312     return 0;
313 }
314
315 /**
316  * Set up channel positions based on a default channel configuration
317  * as specified in table 1.17.
318  *
319  * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
320  *
321  * @return  Returns error status. 0 - OK, !0 - error
322  */
323 static int set_default_channel_config(AACContext *ac,
324                                       enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
325                                       int channel_config)
326 {
327     if (channel_config < 1 || channel_config > 7) {
328         av_log(ac->avccontext, AV_LOG_ERROR, "invalid default channel configuration (%d)\n",
329                channel_config);
330         return -1;
331     }
332
333     /* default channel configurations:
334      *
335      * 1ch : front center (mono)
336      * 2ch : L + R (stereo)
337      * 3ch : front center + L + R
338      * 4ch : front center + L + R + back center
339      * 5ch : front center + L + R + back stereo
340      * 6ch : front center + L + R + back stereo + LFE
341      * 7ch : front center + L + R + outer front left + outer front right + back stereo + LFE
342      */
343
344     if (channel_config != 2)
345         new_che_pos[TYPE_SCE][0] = AAC_CHANNEL_FRONT; // front center (or mono)
346     if (channel_config > 1)
347         new_che_pos[TYPE_CPE][0] = AAC_CHANNEL_FRONT; // L + R (or stereo)
348     if (channel_config == 4)
349         new_che_pos[TYPE_SCE][1] = AAC_CHANNEL_BACK;  // back center
350     if (channel_config > 4)
351         new_che_pos[TYPE_CPE][(channel_config == 7) + 1]
352         = AAC_CHANNEL_BACK;  // back stereo
353     if (channel_config > 5)
354         new_che_pos[TYPE_LFE][0] = AAC_CHANNEL_LFE;   // LFE
355     if (channel_config == 7)
356         new_che_pos[TYPE_CPE][1] = AAC_CHANNEL_FRONT; // outer front left + outer front right
357
358     return 0;
359 }
360
361 /**
362  * Decode GA "General Audio" specific configuration; reference: table 4.1.
363  *
364  * @return  Returns error status. 0 - OK, !0 - error
365  */
366 static int decode_ga_specific_config(AACContext *ac, GetBitContext *gb,
367                                      int channel_config)
368 {
369     enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
370     int extension_flag, ret;
371
372     if (get_bits1(gb)) { // frameLengthFlag
373         av_log_missing_feature(ac->avccontext, "960/120 MDCT window is", 1);
374         return -1;
375     }
376
377     if (get_bits1(gb))       // dependsOnCoreCoder
378         skip_bits(gb, 14);   // coreCoderDelay
379     extension_flag = get_bits1(gb);
380
381     if (ac->m4ac.object_type == AOT_AAC_SCALABLE ||
382         ac->m4ac.object_type == AOT_ER_AAC_SCALABLE)
383         skip_bits(gb, 3);     // layerNr
384
385     memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
386     if (channel_config == 0) {
387         skip_bits(gb, 4);  // element_instance_tag
388         if ((ret = decode_pce(ac, new_che_pos, gb)))
389             return ret;
390     } else {
391         if ((ret = set_default_channel_config(ac, new_che_pos, channel_config)))
392             return ret;
393     }
394     if ((ret = output_configure(ac, ac->che_pos, new_che_pos, channel_config, OC_GLOBAL_HDR)))
395         return ret;
396
397     if (extension_flag) {
398         switch (ac->m4ac.object_type) {
399         case AOT_ER_BSAC:
400             skip_bits(gb, 5);    // numOfSubFrame
401             skip_bits(gb, 11);   // layer_length
402             break;
403         case AOT_ER_AAC_LC:
404         case AOT_ER_AAC_LTP:
405         case AOT_ER_AAC_SCALABLE:
406         case AOT_ER_AAC_LD:
407             skip_bits(gb, 3);  /* aacSectionDataResilienceFlag
408                                     * aacScalefactorDataResilienceFlag
409                                     * aacSpectralDataResilienceFlag
410                                     */
411             break;
412         }
413         skip_bits1(gb);    // extensionFlag3 (TBD in version 3)
414     }
415     return 0;
416 }
417
418 /**
419  * Decode audio specific configuration; reference: table 1.13.
420  *
421  * @param   data        pointer to AVCodecContext extradata
422  * @param   data_size   size of AVCCodecContext extradata
423  *
424  * @return  Returns error status. 0 - OK, !0 - error
425  */
426 static int decode_audio_specific_config(AACContext *ac, void *data,
427                                         int data_size)
428 {
429     GetBitContext gb;
430     int i;
431
432     init_get_bits(&gb, data, data_size * 8);
433
434     if ((i = ff_mpeg4audio_get_config(&ac->m4ac, data, data_size)) < 0)
435         return -1;
436     if (ac->m4ac.sampling_index > 12) {
437         av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
438         return -1;
439     }
440
441     skip_bits_long(&gb, i);
442
443     switch (ac->m4ac.object_type) {
444     case AOT_AAC_MAIN:
445     case AOT_AAC_LC:
446         if (decode_ga_specific_config(ac, &gb, ac->m4ac.chan_config))
447             return -1;
448         break;
449     default:
450         av_log(ac->avccontext, AV_LOG_ERROR, "Audio object type %s%d is not supported.\n",
451                ac->m4ac.sbr == 1? "SBR+" : "", ac->m4ac.object_type);
452         return -1;
453     }
454     return 0;
455 }
456
457 /**
458  * linear congruential pseudorandom number generator
459  *
460  * @param   previous_val    pointer to the current state of the generator
461  *
462  * @return  Returns a 32-bit pseudorandom integer
463  */
464 static av_always_inline int lcg_random(int previous_val)
465 {
466     return previous_val * 1664525 + 1013904223;
467 }
468
469 static void reset_predict_state(PredictorState *ps)
470 {
471     ps->r0   = 0.0f;
472     ps->r1   = 0.0f;
473     ps->cor0 = 0.0f;
474     ps->cor1 = 0.0f;
475     ps->var0 = 1.0f;
476     ps->var1 = 1.0f;
477 }
478
479 static void reset_all_predictors(PredictorState *ps)
480 {
481     int i;
482     for (i = 0; i < MAX_PREDICTORS; i++)
483         reset_predict_state(&ps[i]);
484 }
485
486 static void reset_predictor_group(PredictorState *ps, int group_num)
487 {
488     int i;
489     for (i = group_num - 1; i < MAX_PREDICTORS; i += 30)
490         reset_predict_state(&ps[i]);
491 }
492
493 static av_cold int aac_decode_init(AVCodecContext *avccontext)
494 {
495     AACContext *ac = avccontext->priv_data;
496     int i;
497
498     ac->avccontext = avccontext;
499
500     if (avccontext->extradata_size > 0) {
501         if (decode_audio_specific_config(ac, avccontext->extradata, avccontext->extradata_size))
502             return -1;
503         avccontext->sample_rate = ac->m4ac.sample_rate;
504     } else if (avccontext->channels > 0) {
505         ac->m4ac.sample_rate = avccontext->sample_rate;
506     }
507
508     avccontext->sample_fmt = SAMPLE_FMT_S16;
509     avccontext->frame_size = 1024;
510
511     AAC_INIT_VLC_STATIC( 0, 144);
512     AAC_INIT_VLC_STATIC( 1, 114);
513     AAC_INIT_VLC_STATIC( 2, 188);
514     AAC_INIT_VLC_STATIC( 3, 180);
515     AAC_INIT_VLC_STATIC( 4, 172);
516     AAC_INIT_VLC_STATIC( 5, 140);
517     AAC_INIT_VLC_STATIC( 6, 168);
518     AAC_INIT_VLC_STATIC( 7, 114);
519     AAC_INIT_VLC_STATIC( 8, 262);
520     AAC_INIT_VLC_STATIC( 9, 248);
521     AAC_INIT_VLC_STATIC(10, 384);
522
523     dsputil_init(&ac->dsp, avccontext);
524
525     ac->random_state = 0x1f2e3d4c;
526
527     // -1024 - Compensate wrong IMDCT method.
528     // 32768 - Required to scale values to the correct range for the bias method
529     //         for float to int16 conversion.
530
531     if (ac->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
532         ac->add_bias  = 385.0f;
533         ac->sf_scale  = 1. / (-1024. * 32768.);
534         ac->sf_offset = 0;
535     } else {
536         ac->add_bias  = 0.0f;
537         ac->sf_scale  = 1. / -1024.;
538         ac->sf_offset = 60;
539     }
540
541 #if !CONFIG_HARDCODED_TABLES
542     for (i = 0; i < 428; i++)
543         ff_aac_pow2sf_tab[i] = pow(2, (i - 200) / 4.);
544 #endif /* CONFIG_HARDCODED_TABLES */
545
546     INIT_VLC_STATIC(&vlc_scalefactors,7,FF_ARRAY_ELEMS(ff_aac_scalefactor_code),
547                     ff_aac_scalefactor_bits, sizeof(ff_aac_scalefactor_bits[0]), sizeof(ff_aac_scalefactor_bits[0]),
548                     ff_aac_scalefactor_code, sizeof(ff_aac_scalefactor_code[0]), sizeof(ff_aac_scalefactor_code[0]),
549                     352);
550
551     ff_mdct_init(&ac->mdct, 11, 1, 1.0);
552     ff_mdct_init(&ac->mdct_small, 8, 1, 1.0);
553     // window initialization
554     ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
555     ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
556     ff_init_ff_sine_windows(10);
557     ff_init_ff_sine_windows( 7);
558
559     if (!cbrt_tab[(1<<13) - 1]) {
560         for (i = 0; i < 1<<13; i++) {
561             union float754 f;
562             f.f = cbrtf(i) * i;
563             cbrt_tab[i] = f.i;
564         }
565     }
566
567     return 0;
568 }
569
570 /**
571  * Skip data_stream_element; reference: table 4.10.
572  */
573 static void skip_data_stream_element(GetBitContext *gb)
574 {
575     int byte_align = get_bits1(gb);
576     int count = get_bits(gb, 8);
577     if (count == 255)
578         count += get_bits(gb, 8);
579     if (byte_align)
580         align_get_bits(gb);
581     skip_bits_long(gb, 8 * count);
582 }
583
584 static int decode_prediction(AACContext *ac, IndividualChannelStream *ics,
585                              GetBitContext *gb)
586 {
587     int sfb;
588     if (get_bits1(gb)) {
589         ics->predictor_reset_group = get_bits(gb, 5);
590         if (ics->predictor_reset_group == 0 || ics->predictor_reset_group > 30) {
591             av_log(ac->avccontext, AV_LOG_ERROR, "Invalid Predictor Reset Group.\n");
592             return -1;
593         }
594     }
595     for (sfb = 0; sfb < FFMIN(ics->max_sfb, ff_aac_pred_sfb_max[ac->m4ac.sampling_index]); sfb++) {
596         ics->prediction_used[sfb] = get_bits1(gb);
597     }
598     return 0;
599 }
600
601 /**
602  * Decode Individual Channel Stream info; reference: table 4.6.
603  *
604  * @param   common_window   Channels have independent [0], or shared [1], Individual Channel Stream information.
605  */
606 static int decode_ics_info(AACContext *ac, IndividualChannelStream *ics,
607                            GetBitContext *gb, int common_window)
608 {
609     if (get_bits1(gb)) {
610         av_log(ac->avccontext, AV_LOG_ERROR, "Reserved bit set.\n");
611         memset(ics, 0, sizeof(IndividualChannelStream));
612         return -1;
613     }
614     ics->window_sequence[1] = ics->window_sequence[0];
615     ics->window_sequence[0] = get_bits(gb, 2);
616     ics->use_kb_window[1]   = ics->use_kb_window[0];
617     ics->use_kb_window[0]   = get_bits1(gb);
618     ics->num_window_groups  = 1;
619     ics->group_len[0]       = 1;
620     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
621         int i;
622         ics->max_sfb = get_bits(gb, 4);
623         for (i = 0; i < 7; i++) {
624             if (get_bits1(gb)) {
625                 ics->group_len[ics->num_window_groups - 1]++;
626             } else {
627                 ics->num_window_groups++;
628                 ics->group_len[ics->num_window_groups - 1] = 1;
629             }
630         }
631         ics->num_windows       = 8;
632         ics->swb_offset        =    ff_swb_offset_128[ac->m4ac.sampling_index];
633         ics->num_swb           =   ff_aac_num_swb_128[ac->m4ac.sampling_index];
634         ics->tns_max_bands     = ff_tns_max_bands_128[ac->m4ac.sampling_index];
635         ics->predictor_present = 0;
636     } else {
637         ics->max_sfb               = get_bits(gb, 6);
638         ics->num_windows           = 1;
639         ics->swb_offset            =    ff_swb_offset_1024[ac->m4ac.sampling_index];
640         ics->num_swb               =   ff_aac_num_swb_1024[ac->m4ac.sampling_index];
641         ics->tns_max_bands         = ff_tns_max_bands_1024[ac->m4ac.sampling_index];
642         ics->predictor_present     = get_bits1(gb);
643         ics->predictor_reset_group = 0;
644         if (ics->predictor_present) {
645             if (ac->m4ac.object_type == AOT_AAC_MAIN) {
646                 if (decode_prediction(ac, ics, gb)) {
647                     memset(ics, 0, sizeof(IndividualChannelStream));
648                     return -1;
649                 }
650             } else if (ac->m4ac.object_type == AOT_AAC_LC) {
651                 av_log(ac->avccontext, AV_LOG_ERROR, "Prediction is not allowed in AAC-LC.\n");
652                 memset(ics, 0, sizeof(IndividualChannelStream));
653                 return -1;
654             } else {
655                 av_log_missing_feature(ac->avccontext, "Predictor bit set but LTP is", 1);
656                 memset(ics, 0, sizeof(IndividualChannelStream));
657                 return -1;
658             }
659         }
660     }
661
662     if (ics->max_sfb > ics->num_swb) {
663         av_log(ac->avccontext, AV_LOG_ERROR,
664                "Number of scalefactor bands in group (%d) exceeds limit (%d).\n",
665                ics->max_sfb, ics->num_swb);
666         memset(ics, 0, sizeof(IndividualChannelStream));
667         return -1;
668     }
669
670     return 0;
671 }
672
673 /**
674  * Decode band types (section_data payload); reference: table 4.46.
675  *
676  * @param   band_type           array of the used band type
677  * @param   band_type_run_end   array of the last scalefactor band of a band type run
678  *
679  * @return  Returns error status. 0 - OK, !0 - error
680  */
681 static int decode_band_types(AACContext *ac, enum BandType band_type[120],
682                              int band_type_run_end[120], GetBitContext *gb,
683                              IndividualChannelStream *ics)
684 {
685     int g, idx = 0;
686     const int bits = (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) ? 3 : 5;
687     for (g = 0; g < ics->num_window_groups; g++) {
688         int k = 0;
689         while (k < ics->max_sfb) {
690             uint8_t sect_end = k;
691             int sect_len_incr;
692             int sect_band_type = get_bits(gb, 4);
693             if (sect_band_type == 12) {
694                 av_log(ac->avccontext, AV_LOG_ERROR, "invalid band type\n");
695                 return -1;
696             }
697             while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1)
698                 sect_end += sect_len_incr;
699             sect_end += sect_len_incr;
700             if (sect_end > ics->max_sfb) {
701                 av_log(ac->avccontext, AV_LOG_ERROR,
702                        "Number of bands (%d) exceeds limit (%d).\n",
703                        sect_end, ics->max_sfb);
704                 return -1;
705             }
706             for (; k < sect_end; k++) {
707                 band_type        [idx]   = sect_band_type;
708                 band_type_run_end[idx++] = sect_end;
709             }
710         }
711     }
712     return 0;
713 }
714
715 /**
716  * Decode scalefactors; reference: table 4.47.
717  *
718  * @param   global_gain         first scalefactor value as scalefactors are differentially coded
719  * @param   band_type           array of the used band type
720  * @param   band_type_run_end   array of the last scalefactor band of a band type run
721  * @param   sf                  array of scalefactors or intensity stereo positions
722  *
723  * @return  Returns error status. 0 - OK, !0 - error
724  */
725 static int decode_scalefactors(AACContext *ac, float sf[120], GetBitContext *gb,
726                                unsigned int global_gain,
727                                IndividualChannelStream *ics,
728                                enum BandType band_type[120],
729                                int band_type_run_end[120])
730 {
731     const int sf_offset = ac->sf_offset + (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE ? 12 : 0);
732     int g, i, idx = 0;
733     int offset[3] = { global_gain, global_gain - 90, 100 };
734     int noise_flag = 1;
735     static const char *sf_str[3] = { "Global gain", "Noise gain", "Intensity stereo position" };
736     for (g = 0; g < ics->num_window_groups; g++) {
737         for (i = 0; i < ics->max_sfb;) {
738             int run_end = band_type_run_end[idx];
739             if (band_type[idx] == ZERO_BT) {
740                 for (; i < run_end; i++, idx++)
741                     sf[idx] = 0.;
742             } else if ((band_type[idx] == INTENSITY_BT) || (band_type[idx] == INTENSITY_BT2)) {
743                 for (; i < run_end; i++, idx++) {
744                     offset[2] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
745                     if (offset[2] > 255U) {
746                         av_log(ac->avccontext, AV_LOG_ERROR,
747                                "%s (%d) out of range.\n", sf_str[2], offset[2]);
748                         return -1;
749                     }
750                     sf[idx] = ff_aac_pow2sf_tab[-offset[2] + 300];
751                 }
752             } else if (band_type[idx] == NOISE_BT) {
753                 for (; i < run_end; i++, idx++) {
754                     if (noise_flag-- > 0)
755                         offset[1] += get_bits(gb, 9) - 256;
756                     else
757                         offset[1] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
758                     if (offset[1] > 255U) {
759                         av_log(ac->avccontext, AV_LOG_ERROR,
760                                "%s (%d) out of range.\n", sf_str[1], offset[1]);
761                         return -1;
762                     }
763                     sf[idx] = -ff_aac_pow2sf_tab[offset[1] + sf_offset + 100];
764                 }
765             } else {
766                 for (; i < run_end; i++, idx++) {
767                     offset[0] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
768                     if (offset[0] > 255U) {
769                         av_log(ac->avccontext, AV_LOG_ERROR,
770                                "%s (%d) out of range.\n", sf_str[0], offset[0]);
771                         return -1;
772                     }
773                     sf[idx] = -ff_aac_pow2sf_tab[ offset[0] + sf_offset];
774                 }
775             }
776         }
777     }
778     return 0;
779 }
780
781 /**
782  * Decode pulse data; reference: table 4.7.
783  */
784 static int decode_pulses(Pulse *pulse, GetBitContext *gb,
785                          const uint16_t *swb_offset, int num_swb)
786 {
787     int i, pulse_swb;
788     pulse->num_pulse = get_bits(gb, 2) + 1;
789     pulse_swb        = get_bits(gb, 6);
790     if (pulse_swb >= num_swb)
791         return -1;
792     pulse->pos[0]    = swb_offset[pulse_swb];
793     pulse->pos[0]   += get_bits(gb, 5);
794     if (pulse->pos[0] > 1023)
795         return -1;
796     pulse->amp[0]    = get_bits(gb, 4);
797     for (i = 1; i < pulse->num_pulse; i++) {
798         pulse->pos[i] = get_bits(gb, 5) + pulse->pos[i - 1];
799         if (pulse->pos[i] > 1023)
800             return -1;
801         pulse->amp[i] = get_bits(gb, 4);
802     }
803     return 0;
804 }
805
806 /**
807  * Decode Temporal Noise Shaping data; reference: table 4.48.
808  *
809  * @return  Returns error status. 0 - OK, !0 - error
810  */
811 static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns,
812                       GetBitContext *gb, const IndividualChannelStream *ics)
813 {
814     int w, filt, i, coef_len, coef_res, coef_compress;
815     const int is8 = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE;
816     const int tns_max_order = is8 ? 7 : ac->m4ac.object_type == AOT_AAC_MAIN ? 20 : 12;
817     for (w = 0; w < ics->num_windows; w++) {
818         if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) {
819             coef_res = get_bits1(gb);
820
821             for (filt = 0; filt < tns->n_filt[w]; filt++) {
822                 int tmp2_idx;
823                 tns->length[w][filt] = get_bits(gb, 6 - 2 * is8);
824
825                 if ((tns->order[w][filt] = get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
826                     av_log(ac->avccontext, AV_LOG_ERROR, "TNS filter order %d is greater than maximum %d.",
827                            tns->order[w][filt], tns_max_order);
828                     tns->order[w][filt] = 0;
829                     return -1;
830                 }
831                 if (tns->order[w][filt]) {
832                     tns->direction[w][filt] = get_bits1(gb);
833                     coef_compress = get_bits1(gb);
834                     coef_len = coef_res + 3 - coef_compress;
835                     tmp2_idx = 2 * coef_compress + coef_res;
836
837                     for (i = 0; i < tns->order[w][filt]; i++)
838                         tns->coef[w][filt][i] = tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)];
839                 }
840             }
841         }
842     }
843     return 0;
844 }
845
846 /**
847  * Decode Mid/Side data; reference: table 4.54.
848  *
849  * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
850  *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
851  *                      [3] reserved for scalable AAC
852  */
853 static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb,
854                                    int ms_present)
855 {
856     int idx;
857     if (ms_present == 1) {
858         for (idx = 0; idx < cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb; idx++)
859             cpe->ms_mask[idx] = get_bits1(gb);
860     } else if (ms_present == 2) {
861         memset(cpe->ms_mask, 1, cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb * sizeof(cpe->ms_mask[0]));
862     }
863 }
864
865 static inline float *VMUL2(float *dst, const float *v, unsigned idx,
866                            const float *scale)
867 {
868     float s = *scale;
869     *dst++ = v[idx    & 15] * s;
870     *dst++ = v[idx>>4 & 15] * s;
871     return dst;
872 }
873
874 static inline float *VMUL4(float *dst, const float *v, unsigned idx,
875                            const float *scale)
876 {
877     float s = *scale;
878     *dst++ = v[idx    & 3] * s;
879     *dst++ = v[idx>>2 & 3] * s;
880     *dst++ = v[idx>>4 & 3] * s;
881     *dst++ = v[idx>>6 & 3] * s;
882     return dst;
883 }
884
885 static inline float *VMUL2S(float *dst, const float *v, unsigned idx,
886                             unsigned sign, const float *scale)
887 {
888     union float754 s0, s1;
889
890     s0.f = s1.f = *scale;
891     s0.i ^= sign >> 1 << 31;
892     s1.i ^= sign      << 31;
893
894     *dst++ = v[idx    & 15] * s0.f;
895     *dst++ = v[idx>>4 & 15] * s1.f;
896
897     return dst;
898 }
899
900 static inline float *VMUL4S(float *dst, const float *v, unsigned idx,
901                             unsigned sign, const float *scale)
902 {
903     unsigned nz = idx >> 12;
904     union float754 s = { .f = *scale };
905     union float754 t;
906
907     t.i = s.i ^ (sign & 1<<31);
908     *dst++ = v[idx    & 3] * t.f;
909
910     sign <<= nz & 1; nz >>= 1;
911     t.i = s.i ^ (sign & 1<<31);
912     *dst++ = v[idx>>2 & 3] * t.f;
913
914     sign <<= nz & 1; nz >>= 1;
915     t.i = s.i ^ (sign & 1<<31);
916     *dst++ = v[idx>>4 & 3] * t.f;
917
918     sign <<= nz & 1; nz >>= 1;
919     t.i = s.i ^ (sign & 1<<31);
920     *dst++ = v[idx>>6 & 3] * t.f;
921
922     return dst;
923 }
924
925 /**
926  * Decode spectral data; reference: table 4.50.
927  * Dequantize and scale spectral data; reference: 4.6.3.3.
928  *
929  * @param   coef            array of dequantized, scaled spectral data
930  * @param   sf              array of scalefactors or intensity stereo positions
931  * @param   pulse_present   set if pulses are present
932  * @param   pulse           pointer to pulse data struct
933  * @param   band_type       array of the used band type
934  *
935  * @return  Returns error status. 0 - OK, !0 - error
936  */
937 static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
938                                        GetBitContext *gb, const float sf[120],
939                                        int pulse_present, const Pulse *pulse,
940                                        const IndividualChannelStream *ics,
941                                        enum BandType band_type[120])
942 {
943     int i, k, g, idx = 0;
944     const int c = 1024 / ics->num_windows;
945     const uint16_t *offsets = ics->swb_offset;
946     float *coef_base = coef;
947     int err_idx;
948
949     for (g = 0; g < ics->num_windows; g++)
950         memset(coef + g * 128 + offsets[ics->max_sfb], 0, sizeof(float) * (c - offsets[ics->max_sfb]));
951
952     for (g = 0; g < ics->num_window_groups; g++) {
953         unsigned g_len = ics->group_len[g];
954
955         for (i = 0; i < ics->max_sfb; i++, idx++) {
956             const unsigned cbt_m1 = band_type[idx] - 1;
957             float *cfo = coef + offsets[i];
958             int off_len = offsets[i + 1] - offsets[i];
959             int group;
960
961             if (cbt_m1 >= INTENSITY_BT2 - 1) {
962                 for (group = 0; group < g_len; group++, cfo+=128) {
963                     memset(cfo, 0, off_len * sizeof(float));
964                 }
965             } else if (cbt_m1 == NOISE_BT - 1) {
966                 for (group = 0; group < g_len; group++, cfo+=128) {
967                     float scale;
968                     float band_energy;
969
970                     for (k = 0; k < off_len; k++) {
971                         ac->random_state  = lcg_random(ac->random_state);
972                         cfo[k] = ac->random_state;
973                     }
974
975                     band_energy = ac->dsp.scalarproduct_float(cfo, cfo, off_len);
976                     scale = sf[idx] / sqrtf(band_energy);
977                     ac->dsp.vector_fmul_scalar(cfo, cfo, scale, off_len);
978                 }
979             } else {
980                 const float *vq = ff_aac_codebook_vector_vals[cbt_m1];
981                 const uint16_t *cb_vector_idx = ff_aac_codebook_vector_idx[cbt_m1];
982                 VLC_TYPE (*vlc_tab)[2] = vlc_spectral[cbt_m1].table;
983                 const int cb_size = ff_aac_spectral_sizes[cbt_m1];
984
985                 for (group = 0; group < g_len; group++, cfo+=128) {
986                     float *cf = cfo;
987                     uint32_t *icf = (uint32_t *) cf;
988                     int len = off_len;
989
990                     switch (cbt_m1 >> 1) {
991                     case 0:
992                         do {
993                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
994                             unsigned cb_idx;
995
996                             if (index >= cb_size) {
997                                 err_idx = index;
998                                 goto err_cb_overflow;
999                             }
1000
1001                             cb_idx = cb_vector_idx[index];
1002                             cf = VMUL4(cf, vq, cb_idx, sf + idx);
1003                         } while (len -= 4);
1004                         break;
1005                     case 1:
1006                         do {
1007                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
1008                             unsigned nnz;
1009                             unsigned cb_idx;
1010                             uint32_t bits;
1011
1012                             if (index >= cb_size) {
1013                                 err_idx = index;
1014                                 goto err_cb_overflow;
1015                             }
1016
1017                             cb_idx = cb_vector_idx[index];
1018                             nnz = cb_idx >> 8 & 15;
1019                             bits = get_bits(gb, nnz) << (32-nnz);
1020                             cf = VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1021                         } while (len -= 4);
1022                         break;
1023                     case 2:
1024                         do {
1025                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
1026                             unsigned cb_idx;
1027
1028                             if (index >= cb_size) {
1029                                 err_idx = index;
1030                                 goto err_cb_overflow;
1031                             }
1032
1033                             cb_idx = cb_vector_idx[index];
1034                             cf = VMUL2(cf, vq, cb_idx, sf + idx);
1035                         } while (len -= 2);
1036                         break;
1037                     case 3:
1038                     case 4:
1039                         do {
1040                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
1041                             unsigned nnz;
1042                             unsigned cb_idx;
1043                             unsigned sign;
1044
1045                             if (index >= cb_size) {
1046                                 err_idx = index;
1047                                 goto err_cb_overflow;
1048                             }
1049
1050                             cb_idx = cb_vector_idx[index];
1051                             nnz = cb_idx >> 8 & 15;
1052                             sign = get_bits(gb, nnz) << (cb_idx >> 12);
1053                             cf = VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1054                         } while (len -= 2);
1055                         break;
1056                     default:
1057                         do {
1058                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
1059                             unsigned nzt, nnz;
1060                             unsigned cb_idx;
1061                             uint32_t bits;
1062                             int j;
1063
1064                             if (!index) {
1065                                 *icf++ = 0;
1066                                 *icf++ = 0;
1067                                 continue;
1068                             }
1069
1070                             if (index >= cb_size) {
1071                                 err_idx = index;
1072                                 goto err_cb_overflow;
1073                             }
1074
1075                             cb_idx = cb_vector_idx[index];
1076                             nnz = cb_idx >> 12;
1077                             nzt = cb_idx >> 8;
1078                             bits = get_bits(gb, nnz) << (32-nnz);
1079
1080                             for (j = 0; j < 2; j++) {
1081                                 if (nzt & 1<<j) {
1082                                     int n = 4;
1083                                     /* The total length of escape_sequence must be < 22 bits according
1084                                        to the specification (i.e. max is 111111110xxxxxxxxxxxx). */
1085                                     while (get_bits1(gb) && n < 13) n++;
1086                                     if (n == 13) {
1087                                         av_log(ac->avccontext, AV_LOG_ERROR, "error in spectral data, ESC overflow\n");
1088                                         return -1;
1089                                     }
1090                                     n = (1 << n) + get_bits(gb, n);
1091                                     *icf++ = cbrt_tab[n] | (bits & 1<<31);
1092                                     bits <<= 1;
1093                                 } else {
1094                                     unsigned v = ((const uint32_t*)vq)[cb_idx & 15];
1095                                     *icf++ = (bits & 1<<31) | v;
1096                                     bits <<= !!v;
1097                                 }
1098                                 cb_idx >>= 4;
1099                             }
1100                         } while (len -= 2);
1101
1102                         ac->dsp.vector_fmul_scalar(cfo, cfo, sf[idx], off_len);
1103                     }
1104                 }
1105             }
1106         }
1107         coef += g_len << 7;
1108     }
1109
1110     if (pulse_present) {
1111         idx = 0;
1112         for (i = 0; i < pulse->num_pulse; i++) {
1113             float co = coef_base[ pulse->pos[i] ];
1114             while (offsets[idx + 1] <= pulse->pos[i])
1115                 idx++;
1116             if (band_type[idx] != NOISE_BT && sf[idx]) {
1117                 float ico = -pulse->amp[i];
1118                 if (co) {
1119                     co /= sf[idx];
1120                     ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
1121                 }
1122                 coef_base[ pulse->pos[i] ] = cbrtf(fabsf(ico)) * ico * sf[idx];
1123             }
1124         }
1125     }
1126     return 0;
1127
1128 err_cb_overflow:
1129     av_log(ac->avccontext, AV_LOG_ERROR,
1130            "Read beyond end of ff_aac_codebook_vectors[%d][]. index %d >= %d\n",
1131            band_type[idx], err_idx, ff_aac_spectral_sizes[band_type[idx]]);
1132     return -1;
1133 }
1134
1135 static av_always_inline float flt16_round(float pf)
1136 {
1137     union float754 tmp;
1138     tmp.f = pf;
1139     tmp.i = (tmp.i + 0x00008000U) & 0xFFFF0000U;
1140     return tmp.f;
1141 }
1142
1143 static av_always_inline float flt16_even(float pf)
1144 {
1145     union float754 tmp;
1146     tmp.f = pf;
1147     tmp.i = (tmp.i + 0x00007FFFU + (tmp.i & 0x00010000U >> 16)) & 0xFFFF0000U;
1148     return tmp.f;
1149 }
1150
1151 static av_always_inline float flt16_trunc(float pf)
1152 {
1153     union float754 pun;
1154     pun.f = pf;
1155     pun.i &= 0xFFFF0000U;
1156     return pun.f;
1157 }
1158
1159 static void predict(AACContext *ac, PredictorState *ps, float *coef,
1160                     int output_enable)
1161 {
1162     const float a     = 0.953125; // 61.0 / 64
1163     const float alpha = 0.90625;  // 29.0 / 32
1164     float e0, e1;
1165     float pv;
1166     float k1, k2;
1167
1168     k1 = ps->var0 > 1 ? ps->cor0 * flt16_even(a / ps->var0) : 0;
1169     k2 = ps->var1 > 1 ? ps->cor1 * flt16_even(a / ps->var1) : 0;
1170
1171     pv = flt16_round(k1 * ps->r0 + k2 * ps->r1);
1172     if (output_enable)
1173         *coef += pv * ac->sf_scale;
1174
1175     e0 = *coef / ac->sf_scale;
1176     e1 = e0 - k1 * ps->r0;
1177
1178     ps->cor1 = flt16_trunc(alpha * ps->cor1 + ps->r1 * e1);
1179     ps->var1 = flt16_trunc(alpha * ps->var1 + 0.5 * (ps->r1 * ps->r1 + e1 * e1));
1180     ps->cor0 = flt16_trunc(alpha * ps->cor0 + ps->r0 * e0);
1181     ps->var0 = flt16_trunc(alpha * ps->var0 + 0.5 * (ps->r0 * ps->r0 + e0 * e0));
1182
1183     ps->r1 = flt16_trunc(a * (ps->r0 - k1 * e0));
1184     ps->r0 = flt16_trunc(a * e0);
1185 }
1186
1187 /**
1188  * Apply AAC-Main style frequency domain prediction.
1189  */
1190 static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
1191 {
1192     int sfb, k;
1193
1194     if (!sce->ics.predictor_initialized) {
1195         reset_all_predictors(sce->predictor_state);
1196         sce->ics.predictor_initialized = 1;
1197     }
1198
1199     if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
1200         for (sfb = 0; sfb < ff_aac_pred_sfb_max[ac->m4ac.sampling_index]; sfb++) {
1201             for (k = sce->ics.swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
1202                 predict(ac, &sce->predictor_state[k], &sce->coeffs[k],
1203                         sce->ics.predictor_present && sce->ics.prediction_used[sfb]);
1204             }
1205         }
1206         if (sce->ics.predictor_reset_group)
1207             reset_predictor_group(sce->predictor_state, sce->ics.predictor_reset_group);
1208     } else
1209         reset_all_predictors(sce->predictor_state);
1210 }
1211
1212 /**
1213  * Decode an individual_channel_stream payload; reference: table 4.44.
1214  *
1215  * @param   common_window   Channels have independent [0], or shared [1], Individual Channel Stream information.
1216  * @param   scale_flag      scalable [1] or non-scalable [0] AAC (Unused until scalable AAC is implemented.)
1217  *
1218  * @return  Returns error status. 0 - OK, !0 - error
1219  */
1220 static int decode_ics(AACContext *ac, SingleChannelElement *sce,
1221                       GetBitContext *gb, int common_window, int scale_flag)
1222 {
1223     Pulse pulse;
1224     TemporalNoiseShaping    *tns = &sce->tns;
1225     IndividualChannelStream *ics = &sce->ics;
1226     float *out = sce->coeffs;
1227     int global_gain, pulse_present = 0;
1228
1229     /* This assignment is to silence a GCC warning about the variable being used
1230      * uninitialized when in fact it always is.
1231      */
1232     pulse.num_pulse = 0;
1233
1234     global_gain = get_bits(gb, 8);
1235
1236     if (!common_window && !scale_flag) {
1237         if (decode_ics_info(ac, ics, gb, 0) < 0)
1238             return -1;
1239     }
1240
1241     if (decode_band_types(ac, sce->band_type, sce->band_type_run_end, gb, ics) < 0)
1242         return -1;
1243     if (decode_scalefactors(ac, sce->sf, gb, global_gain, ics, sce->band_type, sce->band_type_run_end) < 0)
1244         return -1;
1245
1246     pulse_present = 0;
1247     if (!scale_flag) {
1248         if ((pulse_present = get_bits1(gb))) {
1249             if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1250                 av_log(ac->avccontext, AV_LOG_ERROR, "Pulse tool not allowed in eight short sequence.\n");
1251                 return -1;
1252             }
1253             if (decode_pulses(&pulse, gb, ics->swb_offset, ics->num_swb)) {
1254                 av_log(ac->avccontext, AV_LOG_ERROR, "Pulse data corrupt or invalid.\n");
1255                 return -1;
1256             }
1257         }
1258         if ((tns->present = get_bits1(gb)) && decode_tns(ac, tns, gb, ics))
1259             return -1;
1260         if (get_bits1(gb)) {
1261             av_log_missing_feature(ac->avccontext, "SSR", 1);
1262             return -1;
1263         }
1264     }
1265
1266     if (decode_spectrum_and_dequant(ac, out, gb, sce->sf, pulse_present, &pulse, ics, sce->band_type) < 0)
1267         return -1;
1268
1269     if (ac->m4ac.object_type == AOT_AAC_MAIN && !common_window)
1270         apply_prediction(ac, sce);
1271
1272     return 0;
1273 }
1274
1275 /**
1276  * Mid/Side stereo decoding; reference: 4.6.8.1.3.
1277  */
1278 static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
1279 {
1280     const IndividualChannelStream *ics = &cpe->ch[0].ics;
1281     float *ch0 = cpe->ch[0].coeffs;
1282     float *ch1 = cpe->ch[1].coeffs;
1283     int g, i, group, idx = 0;
1284     const uint16_t *offsets = ics->swb_offset;
1285     for (g = 0; g < ics->num_window_groups; g++) {
1286         for (i = 0; i < ics->max_sfb; i++, idx++) {
1287             if (cpe->ms_mask[idx] &&
1288                     cpe->ch[0].band_type[idx] < NOISE_BT && cpe->ch[1].band_type[idx] < NOISE_BT) {
1289                 for (group = 0; group < ics->group_len[g]; group++) {
1290                     ac->dsp.butterflies_float(ch0 + group * 128 + offsets[i],
1291                                               ch1 + group * 128 + offsets[i],
1292                                               offsets[i+1] - offsets[i]);
1293                 }
1294             }
1295         }
1296         ch0 += ics->group_len[g] * 128;
1297         ch1 += ics->group_len[g] * 128;
1298     }
1299 }
1300
1301 /**
1302  * intensity stereo decoding; reference: 4.6.8.2.3
1303  *
1304  * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
1305  *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
1306  *                      [3] reserved for scalable AAC
1307  */
1308 static void apply_intensity_stereo(ChannelElement *cpe, int ms_present)
1309 {
1310     const IndividualChannelStream *ics = &cpe->ch[1].ics;
1311     SingleChannelElement         *sce1 = &cpe->ch[1];
1312     float *coef0 = cpe->ch[0].coeffs, *coef1 = cpe->ch[1].coeffs;
1313     const uint16_t *offsets = ics->swb_offset;
1314     int g, group, i, k, idx = 0;
1315     int c;
1316     float scale;
1317     for (g = 0; g < ics->num_window_groups; g++) {
1318         for (i = 0; i < ics->max_sfb;) {
1319             if (sce1->band_type[idx] == INTENSITY_BT || sce1->band_type[idx] == INTENSITY_BT2) {
1320                 const int bt_run_end = sce1->band_type_run_end[idx];
1321                 for (; i < bt_run_end; i++, idx++) {
1322                     c = -1 + 2 * (sce1->band_type[idx] - 14);
1323                     if (ms_present)
1324                         c *= 1 - 2 * cpe->ms_mask[idx];
1325                     scale = c * sce1->sf[idx];
1326                     for (group = 0; group < ics->group_len[g]; group++)
1327                         for (k = offsets[i]; k < offsets[i + 1]; k++)
1328                             coef1[group * 128 + k] = scale * coef0[group * 128 + k];
1329                 }
1330             } else {
1331                 int bt_run_end = sce1->band_type_run_end[idx];
1332                 idx += bt_run_end - i;
1333                 i    = bt_run_end;
1334             }
1335         }
1336         coef0 += ics->group_len[g] * 128;
1337         coef1 += ics->group_len[g] * 128;
1338     }
1339 }
1340
1341 /**
1342  * Decode a channel_pair_element; reference: table 4.4.
1343  *
1344  * @param   elem_id Identifies the instance of a syntax element.
1345  *
1346  * @return  Returns error status. 0 - OK, !0 - error
1347  */
1348 static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
1349 {
1350     int i, ret, common_window, ms_present = 0;
1351
1352     common_window = get_bits1(gb);
1353     if (common_window) {
1354         if (decode_ics_info(ac, &cpe->ch[0].ics, gb, 1))
1355             return -1;
1356         i = cpe->ch[1].ics.use_kb_window[0];
1357         cpe->ch[1].ics = cpe->ch[0].ics;
1358         cpe->ch[1].ics.use_kb_window[1] = i;
1359         ms_present = get_bits(gb, 2);
1360         if (ms_present == 3) {
1361             av_log(ac->avccontext, AV_LOG_ERROR, "ms_present = 3 is reserved.\n");
1362             return -1;
1363         } else if (ms_present)
1364             decode_mid_side_stereo(cpe, gb, ms_present);
1365     }
1366     if ((ret = decode_ics(ac, &cpe->ch[0], gb, common_window, 0)))
1367         return ret;
1368     if ((ret = decode_ics(ac, &cpe->ch[1], gb, common_window, 0)))
1369         return ret;
1370
1371     if (common_window) {
1372         if (ms_present)
1373             apply_mid_side_stereo(ac, cpe);
1374         if (ac->m4ac.object_type == AOT_AAC_MAIN) {
1375             apply_prediction(ac, &cpe->ch[0]);
1376             apply_prediction(ac, &cpe->ch[1]);
1377         }
1378     }
1379
1380     apply_intensity_stereo(cpe, ms_present);
1381     return 0;
1382 }
1383
1384 /**
1385  * Decode coupling_channel_element; reference: table 4.8.
1386  *
1387  * @param   elem_id Identifies the instance of a syntax element.
1388  *
1389  * @return  Returns error status. 0 - OK, !0 - error
1390  */
1391 static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
1392 {
1393     int num_gain = 0;
1394     int c, g, sfb, ret;
1395     int sign;
1396     float scale;
1397     SingleChannelElement *sce = &che->ch[0];
1398     ChannelCoupling     *coup = &che->coup;
1399
1400     coup->coupling_point = 2 * get_bits1(gb);
1401     coup->num_coupled = get_bits(gb, 3);
1402     for (c = 0; c <= coup->num_coupled; c++) {
1403         num_gain++;
1404         coup->type[c] = get_bits1(gb) ? TYPE_CPE : TYPE_SCE;
1405         coup->id_select[c] = get_bits(gb, 4);
1406         if (coup->type[c] == TYPE_CPE) {
1407             coup->ch_select[c] = get_bits(gb, 2);
1408             if (coup->ch_select[c] == 3)
1409                 num_gain++;
1410         } else
1411             coup->ch_select[c] = 2;
1412     }
1413     coup->coupling_point += get_bits1(gb) || (coup->coupling_point >> 1);
1414
1415     sign  = get_bits(gb, 1);
1416     scale = pow(2., pow(2., (int)get_bits(gb, 2) - 3));
1417
1418     if ((ret = decode_ics(ac, sce, gb, 0, 0)))
1419         return ret;
1420
1421     for (c = 0; c < num_gain; c++) {
1422         int idx  = 0;
1423         int cge  = 1;
1424         int gain = 0;
1425         float gain_cache = 1.;
1426         if (c) {
1427             cge = coup->coupling_point == AFTER_IMDCT ? 1 : get_bits1(gb);
1428             gain = cge ? get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60: 0;
1429             gain_cache = pow(scale, -gain);
1430         }
1431         if (coup->coupling_point == AFTER_IMDCT) {
1432             coup->gain[c][0] = gain_cache;
1433         } else {
1434             for (g = 0; g < sce->ics.num_window_groups; g++) {
1435                 for (sfb = 0; sfb < sce->ics.max_sfb; sfb++, idx++) {
1436                     if (sce->band_type[idx] != ZERO_BT) {
1437                         if (!cge) {
1438                             int t = get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
1439                             if (t) {
1440                                 int s = 1;
1441                                 t = gain += t;
1442                                 if (sign) {
1443                                     s  -= 2 * (t & 0x1);
1444                                     t >>= 1;
1445                                 }
1446                                 gain_cache = pow(scale, -t) * s;
1447                             }
1448                         }
1449                         coup->gain[c][idx] = gain_cache;
1450                     }
1451                 }
1452             }
1453         }
1454     }
1455     return 0;
1456 }
1457
1458 /**
1459  * Decode Spectral Band Replication extension data; reference: table 4.55.
1460  *
1461  * @param   crc flag indicating the presence of CRC checksum
1462  * @param   cnt length of TYPE_FIL syntactic element in bytes
1463  *
1464  * @return  Returns number of bytes consumed from the TYPE_FIL element.
1465  */
1466 static int decode_sbr_extension(AACContext *ac, GetBitContext *gb,
1467                                 int crc, int cnt)
1468 {
1469     // TODO : sbr_extension implementation
1470     av_log_missing_feature(ac->avccontext, "SBR", 0);
1471     skip_bits_long(gb, 8 * cnt - 4); // -4 due to reading extension type
1472     return cnt;
1473 }
1474
1475 /**
1476  * Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
1477  *
1478  * @return  Returns number of bytes consumed.
1479  */
1480 static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc,
1481                                          GetBitContext *gb)
1482 {
1483     int i;
1484     int num_excl_chan = 0;
1485
1486     do {
1487         for (i = 0; i < 7; i++)
1488             che_drc->exclude_mask[num_excl_chan++] = get_bits1(gb);
1489     } while (num_excl_chan < MAX_CHANNELS - 7 && get_bits1(gb));
1490
1491     return num_excl_chan / 7;
1492 }
1493
1494 /**
1495  * Decode dynamic range information; reference: table 4.52.
1496  *
1497  * @param   cnt length of TYPE_FIL syntactic element in bytes
1498  *
1499  * @return  Returns number of bytes consumed.
1500  */
1501 static int decode_dynamic_range(DynamicRangeControl *che_drc,
1502                                 GetBitContext *gb, int cnt)
1503 {
1504     int n             = 1;
1505     int drc_num_bands = 1;
1506     int i;
1507
1508     /* pce_tag_present? */
1509     if (get_bits1(gb)) {
1510         che_drc->pce_instance_tag  = get_bits(gb, 4);
1511         skip_bits(gb, 4); // tag_reserved_bits
1512         n++;
1513     }
1514
1515     /* excluded_chns_present? */
1516     if (get_bits1(gb)) {
1517         n += decode_drc_channel_exclusions(che_drc, gb);
1518     }
1519
1520     /* drc_bands_present? */
1521     if (get_bits1(gb)) {
1522         che_drc->band_incr            = get_bits(gb, 4);
1523         che_drc->interpolation_scheme = get_bits(gb, 4);
1524         n++;
1525         drc_num_bands += che_drc->band_incr;
1526         for (i = 0; i < drc_num_bands; i++) {
1527             che_drc->band_top[i] = get_bits(gb, 8);
1528             n++;
1529         }
1530     }
1531
1532     /* prog_ref_level_present? */
1533     if (get_bits1(gb)) {
1534         che_drc->prog_ref_level = get_bits(gb, 7);
1535         skip_bits1(gb); // prog_ref_level_reserved_bits
1536         n++;
1537     }
1538
1539     for (i = 0; i < drc_num_bands; i++) {
1540         che_drc->dyn_rng_sgn[i] = get_bits1(gb);
1541         che_drc->dyn_rng_ctl[i] = get_bits(gb, 7);
1542         n++;
1543     }
1544
1545     return n;
1546 }
1547
1548 /**
1549  * Decode extension data (incomplete); reference: table 4.51.
1550  *
1551  * @param   cnt length of TYPE_FIL syntactic element in bytes
1552  *
1553  * @return Returns number of bytes consumed
1554  */
1555 static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt)
1556 {
1557     int crc_flag = 0;
1558     int res = cnt;
1559     switch (get_bits(gb, 4)) { // extension type
1560     case EXT_SBR_DATA_CRC:
1561         crc_flag++;
1562     case EXT_SBR_DATA:
1563         res = decode_sbr_extension(ac, gb, crc_flag, cnt);
1564         break;
1565     case EXT_DYNAMIC_RANGE:
1566         res = decode_dynamic_range(&ac->che_drc, gb, cnt);
1567         break;
1568     case EXT_FILL:
1569     case EXT_FILL_DATA:
1570     case EXT_DATA_ELEMENT:
1571     default:
1572         skip_bits_long(gb, 8 * cnt - 4);
1573         break;
1574     };
1575     return res;
1576 }
1577
1578 /**
1579  * Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4.6.9.3.
1580  *
1581  * @param   decode  1 if tool is used normally, 0 if tool is used in LTP.
1582  * @param   coef    spectral coefficients
1583  */
1584 static void apply_tns(float coef[1024], TemporalNoiseShaping *tns,
1585                       IndividualChannelStream *ics, int decode)
1586 {
1587     const int mmm = FFMIN(ics->tns_max_bands, ics->max_sfb);
1588     int w, filt, m, i;
1589     int bottom, top, order, start, end, size, inc;
1590     float lpc[TNS_MAX_ORDER];
1591
1592     for (w = 0; w < ics->num_windows; w++) {
1593         bottom = ics->num_swb;
1594         for (filt = 0; filt < tns->n_filt[w]; filt++) {
1595             top    = bottom;
1596             bottom = FFMAX(0, top - tns->length[w][filt]);
1597             order  = tns->order[w][filt];
1598             if (order == 0)
1599                 continue;
1600
1601             // tns_decode_coef
1602             compute_lpc_coefs(tns->coef[w][filt], order, lpc, 0, 0, 0);
1603
1604             start = ics->swb_offset[FFMIN(bottom, mmm)];
1605             end   = ics->swb_offset[FFMIN(   top, mmm)];
1606             if ((size = end - start) <= 0)
1607                 continue;
1608             if (tns->direction[w][filt]) {
1609                 inc = -1;
1610                 start = end - 1;
1611             } else {
1612                 inc = 1;
1613             }
1614             start += w * 128;
1615
1616             // ar filter
1617             for (m = 0; m < size; m++, start += inc)
1618                 for (i = 1; i <= FFMIN(m, order); i++)
1619                     coef[start] -= coef[start - i * inc] * lpc[i - 1];
1620         }
1621     }
1622 }
1623
1624 /**
1625  * Conduct IMDCT and windowing.
1626  */
1627 static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
1628 {
1629     IndividualChannelStream *ics = &sce->ics;
1630     float *in    = sce->coeffs;
1631     float *out   = sce->ret;
1632     float *saved = sce->saved;
1633     const float *swindow      = ics->use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
1634     const float *lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
1635     const float *swindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
1636     float *buf  = ac->buf_mdct;
1637     float *temp = ac->temp;
1638     int i;
1639
1640     // imdct
1641     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1642         if (ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE)
1643             av_log(ac->avccontext, AV_LOG_WARNING,
1644                    "Transition from an ONLY_LONG or LONG_STOP to an EIGHT_SHORT sequence detected. "
1645                    "If you heard an audible artifact, please submit the sample to the FFmpeg developers.\n");
1646         for (i = 0; i < 1024; i += 128)
1647             ff_imdct_half(&ac->mdct_small, buf + i, in + i);
1648     } else
1649         ff_imdct_half(&ac->mdct, buf, in);
1650
1651     /* window overlapping
1652      * NOTE: To simplify the overlapping code, all 'meaningless' short to long
1653      * and long to short transitions are considered to be short to short
1654      * transitions. This leaves just two cases (long to long and short to short)
1655      * with a little special sauce for EIGHT_SHORT_SEQUENCE.
1656      */
1657     if ((ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE) &&
1658             (ics->window_sequence[0] == ONLY_LONG_SEQUENCE || ics->window_sequence[0] == LONG_START_SEQUENCE)) {
1659         ac->dsp.vector_fmul_window(    out,               saved,            buf,         lwindow_prev, ac->add_bias, 512);
1660     } else {
1661         for (i = 0; i < 448; i++)
1662             out[i] = saved[i] + ac->add_bias;
1663
1664         if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1665             ac->dsp.vector_fmul_window(out + 448 + 0*128, saved + 448,      buf + 0*128, swindow_prev, ac->add_bias, 64);
1666             ac->dsp.vector_fmul_window(out + 448 + 1*128, buf + 0*128 + 64, buf + 1*128, swindow,      ac->add_bias, 64);
1667             ac->dsp.vector_fmul_window(out + 448 + 2*128, buf + 1*128 + 64, buf + 2*128, swindow,      ac->add_bias, 64);
1668             ac->dsp.vector_fmul_window(out + 448 + 3*128, buf + 2*128 + 64, buf + 3*128, swindow,      ac->add_bias, 64);
1669             ac->dsp.vector_fmul_window(temp,              buf + 3*128 + 64, buf + 4*128, swindow,      ac->add_bias, 64);
1670             memcpy(                    out + 448 + 4*128, temp, 64 * sizeof(float));
1671         } else {
1672             ac->dsp.vector_fmul_window(out + 448,         saved + 448,      buf,         swindow_prev, ac->add_bias, 64);
1673             for (i = 576; i < 1024; i++)
1674                 out[i] = buf[i-512] + ac->add_bias;
1675         }
1676     }
1677
1678     // buffer update
1679     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1680         for (i = 0; i < 64; i++)
1681             saved[i] = temp[64 + i] - ac->add_bias;
1682         ac->dsp.vector_fmul_window(saved + 64,  buf + 4*128 + 64, buf + 5*128, swindow, 0, 64);
1683         ac->dsp.vector_fmul_window(saved + 192, buf + 5*128 + 64, buf + 6*128, swindow, 0, 64);
1684         ac->dsp.vector_fmul_window(saved + 320, buf + 6*128 + 64, buf + 7*128, swindow, 0, 64);
1685         memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1686     } else if (ics->window_sequence[0] == LONG_START_SEQUENCE) {
1687         memcpy(                    saved,       buf + 512,        448 * sizeof(float));
1688         memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1689     } else { // LONG_STOP or ONLY_LONG
1690         memcpy(                    saved,       buf + 512,        512 * sizeof(float));
1691     }
1692 }
1693
1694 /**
1695  * Apply dependent channel coupling (applied before IMDCT).
1696  *
1697  * @param   index   index into coupling gain array
1698  */
1699 static void apply_dependent_coupling(AACContext *ac,
1700                                      SingleChannelElement *target,
1701                                      ChannelElement *cce, int index)
1702 {
1703     IndividualChannelStream *ics = &cce->ch[0].ics;
1704     const uint16_t *offsets = ics->swb_offset;
1705     float *dest = target->coeffs;
1706     const float *src = cce->ch[0].coeffs;
1707     int g, i, group, k, idx = 0;
1708     if (ac->m4ac.object_type == AOT_AAC_LTP) {
1709         av_log(ac->avccontext, AV_LOG_ERROR,
1710                "Dependent coupling is not supported together with LTP\n");
1711         return;
1712     }
1713     for (g = 0; g < ics->num_window_groups; g++) {
1714         for (i = 0; i < ics->max_sfb; i++, idx++) {
1715             if (cce->ch[0].band_type[idx] != ZERO_BT) {
1716                 const float gain = cce->coup.gain[index][idx];
1717                 for (group = 0; group < ics->group_len[g]; group++) {
1718                     for (k = offsets[i]; k < offsets[i + 1]; k++) {
1719                         // XXX dsputil-ize
1720                         dest[group * 128 + k] += gain * src[group * 128 + k];
1721                     }
1722                 }
1723             }
1724         }
1725         dest += ics->group_len[g] * 128;
1726         src  += ics->group_len[g] * 128;
1727     }
1728 }
1729
1730 /**
1731  * Apply independent channel coupling (applied after IMDCT).
1732  *
1733  * @param   index   index into coupling gain array
1734  */
1735 static void apply_independent_coupling(AACContext *ac,
1736                                        SingleChannelElement *target,
1737                                        ChannelElement *cce, int index)
1738 {
1739     int i;
1740     const float gain = cce->coup.gain[index][0];
1741     const float bias = ac->add_bias;
1742     const float *src = cce->ch[0].ret;
1743     float *dest = target->ret;
1744
1745     for (i = 0; i < 1024; i++)
1746         dest[i] += gain * (src[i] - bias);
1747 }
1748
1749 /**
1750  * channel coupling transformation interface
1751  *
1752  * @param   index   index into coupling gain array
1753  * @param   apply_coupling_method   pointer to (in)dependent coupling function
1754  */
1755 static void apply_channel_coupling(AACContext *ac, ChannelElement *cc,
1756                                    enum RawDataBlockType type, int elem_id,
1757                                    enum CouplingPoint coupling_point,
1758                                    void (*apply_coupling_method)(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
1759 {
1760     int i, c;
1761
1762     for (i = 0; i < MAX_ELEM_ID; i++) {
1763         ChannelElement *cce = ac->che[TYPE_CCE][i];
1764         int index = 0;
1765
1766         if (cce && cce->coup.coupling_point == coupling_point) {
1767             ChannelCoupling *coup = &cce->coup;
1768
1769             for (c = 0; c <= coup->num_coupled; c++) {
1770                 if (coup->type[c] == type && coup->id_select[c] == elem_id) {
1771                     if (coup->ch_select[c] != 1) {
1772                         apply_coupling_method(ac, &cc->ch[0], cce, index);
1773                         if (coup->ch_select[c] != 0)
1774                             index++;
1775                     }
1776                     if (coup->ch_select[c] != 2)
1777                         apply_coupling_method(ac, &cc->ch[1], cce, index++);
1778                 } else
1779                     index += 1 + (coup->ch_select[c] == 3);
1780             }
1781         }
1782     }
1783 }
1784
1785 /**
1786  * Convert spectral data to float samples, applying all supported tools as appropriate.
1787  */
1788 static void spectral_to_sample(AACContext *ac)
1789 {
1790     int i, type;
1791     for (type = 3; type >= 0; type--) {
1792         for (i = 0; i < MAX_ELEM_ID; i++) {
1793             ChannelElement *che = ac->che[type][i];
1794             if (che) {
1795                 if (type <= TYPE_CPE)
1796                     apply_channel_coupling(ac, che, type, i, BEFORE_TNS, apply_dependent_coupling);
1797                 if (che->ch[0].tns.present)
1798                     apply_tns(che->ch[0].coeffs, &che->ch[0].tns, &che->ch[0].ics, 1);
1799                 if (che->ch[1].tns.present)
1800                     apply_tns(che->ch[1].coeffs, &che->ch[1].tns, &che->ch[1].ics, 1);
1801                 if (type <= TYPE_CPE)
1802                     apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMDCT, apply_dependent_coupling);
1803                 if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT)
1804                     imdct_and_windowing(ac, &che->ch[0]);
1805                 if (type == TYPE_CPE)
1806                     imdct_and_windowing(ac, &che->ch[1]);
1807                 if (type <= TYPE_CCE)
1808                     apply_channel_coupling(ac, che, type, i, AFTER_IMDCT, apply_independent_coupling);
1809             }
1810         }
1811     }
1812 }
1813
1814 static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
1815 {
1816     int size;
1817     AACADTSHeaderInfo hdr_info;
1818
1819     size = ff_aac_parse_header(gb, &hdr_info);
1820     if (size > 0) {
1821         if (ac->output_configured != OC_LOCKED && hdr_info.chan_config) {
1822             enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
1823             memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1824             ac->m4ac.chan_config = hdr_info.chan_config;
1825             if (set_default_channel_config(ac, new_che_pos, hdr_info.chan_config))
1826                 return -7;
1827             if (output_configure(ac, ac->che_pos, new_che_pos, hdr_info.chan_config, OC_TRIAL_FRAME))
1828                 return -7;
1829         } else if (ac->output_configured != OC_LOCKED) {
1830             ac->output_configured = OC_NONE;
1831         }
1832         if (ac->output_configured != OC_LOCKED)
1833             ac->m4ac.sbr = -1;
1834         ac->m4ac.sample_rate     = hdr_info.sample_rate;
1835         ac->m4ac.sampling_index  = hdr_info.sampling_index;
1836         ac->m4ac.object_type     = hdr_info.object_type;
1837         if (!ac->avccontext->sample_rate)
1838             ac->avccontext->sample_rate = hdr_info.sample_rate;
1839         if (hdr_info.num_aac_frames == 1) {
1840             if (!hdr_info.crc_absent)
1841                 skip_bits(gb, 16);
1842         } else {
1843             av_log_missing_feature(ac->avccontext, "More than one AAC RDB per ADTS frame is", 0);
1844             return -1;
1845         }
1846     }
1847     return size;
1848 }
1849
1850 static int aac_decode_frame(AVCodecContext *avccontext, void *data,
1851                             int *data_size, AVPacket *avpkt)
1852 {
1853     const uint8_t *buf = avpkt->data;
1854     int buf_size = avpkt->size;
1855     AACContext *ac = avccontext->priv_data;
1856     ChannelElement *che = NULL;
1857     GetBitContext gb;
1858     enum RawDataBlockType elem_type;
1859     int err, elem_id, data_size_tmp;
1860
1861     init_get_bits(&gb, buf, buf_size * 8);
1862
1863     if (show_bits(&gb, 12) == 0xfff) {
1864         if (parse_adts_frame_header(ac, &gb) < 0) {
1865             av_log(avccontext, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
1866             return -1;
1867         }
1868         if (ac->m4ac.sampling_index > 12) {
1869             av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
1870             return -1;
1871         }
1872     }
1873
1874     // parse
1875     while ((elem_type = get_bits(&gb, 3)) != TYPE_END) {
1876         elem_id = get_bits(&gb, 4);
1877
1878         if (elem_type < TYPE_DSE && !(che=get_che(ac, elem_type, elem_id))) {
1879             av_log(ac->avccontext, AV_LOG_ERROR, "channel element %d.%d is not allocated\n", elem_type, elem_id);
1880             return -1;
1881         }
1882
1883         switch (elem_type) {
1884
1885         case TYPE_SCE:
1886             err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1887             break;
1888
1889         case TYPE_CPE:
1890             err = decode_cpe(ac, &gb, che);
1891             break;
1892
1893         case TYPE_CCE:
1894             err = decode_cce(ac, &gb, che);
1895             break;
1896
1897         case TYPE_LFE:
1898             err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1899             break;
1900
1901         case TYPE_DSE:
1902             skip_data_stream_element(&gb);
1903             err = 0;
1904             break;
1905
1906         case TYPE_PCE: {
1907             enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
1908             memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1909             if ((err = decode_pce(ac, new_che_pos, &gb)))
1910                 break;
1911             if (ac->output_configured > OC_TRIAL_PCE)
1912                 av_log(avccontext, AV_LOG_ERROR,
1913                        "Not evaluating a further program_config_element as this construct is dubious at best.\n");
1914             else
1915                 err = output_configure(ac, ac->che_pos, new_che_pos, 0, OC_TRIAL_PCE);
1916             break;
1917         }
1918
1919         case TYPE_FIL:
1920             if (elem_id == 15)
1921                 elem_id += get_bits(&gb, 8) - 1;
1922             while (elem_id > 0)
1923                 elem_id -= decode_extension_payload(ac, &gb, elem_id);
1924             err = 0; /* FIXME */
1925             break;
1926
1927         default:
1928             err = -1; /* should not happen, but keeps compiler happy */
1929             break;
1930         }
1931
1932         if (err)
1933             return err;
1934     }
1935
1936     spectral_to_sample(ac);
1937
1938     if (!ac->is_saved) {
1939         ac->is_saved = 1;
1940         *data_size = 0;
1941         return buf_size;
1942     }
1943
1944     data_size_tmp = 1024 * avccontext->channels * sizeof(int16_t);
1945     if (*data_size < data_size_tmp) {
1946         av_log(avccontext, AV_LOG_ERROR,
1947                "Output buffer too small (%d) or trying to output too many samples (%d) for this frame.\n",
1948                *data_size, data_size_tmp);
1949         return -1;
1950     }
1951     *data_size = data_size_tmp;
1952
1953     ac->dsp.float_to_int16_interleave(data, (const float **)ac->output_data, 1024, avccontext->channels);
1954
1955     if (ac->output_configured)
1956         ac->output_configured = OC_LOCKED;
1957
1958     return buf_size;
1959 }
1960
1961 static av_cold int aac_decode_close(AVCodecContext *avccontext)
1962 {
1963     AACContext *ac = avccontext->priv_data;
1964     int i, type;
1965
1966     for (i = 0; i < MAX_ELEM_ID; i++) {
1967         for (type = 0; type < 4; type++)
1968             av_freep(&ac->che[type][i]);
1969     }
1970
1971     ff_mdct_end(&ac->mdct);
1972     ff_mdct_end(&ac->mdct_small);
1973     return 0;
1974 }
1975
1976 AVCodec aac_decoder = {
1977     "aac",
1978     CODEC_TYPE_AUDIO,
1979     CODEC_ID_AAC,
1980     sizeof(AACContext),
1981     aac_decode_init,
1982     NULL,
1983     aac_decode_close,
1984     aac_decode_frame,
1985     .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
1986     .sample_fmts = (const enum SampleFormat[]) {
1987         SAMPLE_FMT_S16,SAMPLE_FMT_NONE
1988     },
1989     .channel_layouts = aac_channel_layout,
1990 };