]> git.sesse.net Git - ffmpeg/blob - libavcodec/aac.c
AAC: Unswitch loop over window groups in decode_spectrum_and_dequant()
[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                 switch (cbt_m1 >> 1) {
986                 case 0:
987                     for (group = 0; group < g_len; group++, cfo+=128) {
988                         float *cf = cfo;
989                         int len = off_len;
990
991                         do {
992                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
993                             unsigned cb_idx;
994
995                             if (index >= cb_size) {
996                                 err_idx = index;
997                                 goto err_cb_overflow;
998                             }
999
1000                             cb_idx = cb_vector_idx[index];
1001                             cf = VMUL4(cf, vq, cb_idx, sf + idx);
1002                         } while (len -= 4);
1003                     }
1004                     break;
1005
1006                 case 1:
1007                     for (group = 0; group < g_len; group++, cfo+=128) {
1008                         float *cf = cfo;
1009                         int len = off_len;
1010
1011                         do {
1012                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
1013                             unsigned nnz;
1014                             unsigned cb_idx;
1015                             uint32_t bits;
1016
1017                             if (index >= cb_size) {
1018                                 err_idx = index;
1019                                 goto err_cb_overflow;
1020                             }
1021
1022                             cb_idx = cb_vector_idx[index];
1023                             nnz = cb_idx >> 8 & 15;
1024                             bits = get_bits(gb, nnz) << (32-nnz);
1025                             cf = VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1026                         } while (len -= 4);
1027                     }
1028                     break;
1029
1030                 case 2:
1031                     for (group = 0; group < g_len; group++, cfo+=128) {
1032                         float *cf = cfo;
1033                         int len = off_len;
1034
1035                         do {
1036                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
1037                             unsigned cb_idx;
1038
1039                             if (index >= cb_size) {
1040                                 err_idx = index;
1041                                 goto err_cb_overflow;
1042                             }
1043
1044                             cb_idx = cb_vector_idx[index];
1045                             cf = VMUL2(cf, vq, cb_idx, sf + idx);
1046                         } while (len -= 2);
1047                     }
1048                     break;
1049
1050                 case 3:
1051                 case 4:
1052                     for (group = 0; group < g_len; group++, cfo+=128) {
1053                         float *cf = cfo;
1054                         int len = off_len;
1055
1056                         do {
1057                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
1058                             unsigned nnz;
1059                             unsigned cb_idx;
1060                             unsigned sign;
1061
1062                             if (index >= cb_size) {
1063                                 err_idx = index;
1064                                 goto err_cb_overflow;
1065                             }
1066
1067                             cb_idx = cb_vector_idx[index];
1068                             nnz = cb_idx >> 8 & 15;
1069                             sign = get_bits(gb, nnz) << (cb_idx >> 12);
1070                             cf = VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1071                         } while (len -= 2);
1072                     }
1073                     break;
1074
1075                 default:
1076                     for (group = 0; group < g_len; group++, cfo+=128) {
1077                         float *cf = cfo;
1078                         uint32_t *icf = (uint32_t *) cf;
1079                         int len = off_len;
1080
1081                         do {
1082                             const int index = get_vlc2(gb, vlc_tab, 6, 3);
1083                             unsigned nzt, nnz;
1084                             unsigned cb_idx;
1085                             uint32_t bits;
1086                             int j;
1087
1088                             if (!index) {
1089                                 *icf++ = 0;
1090                                 *icf++ = 0;
1091                                 continue;
1092                             }
1093
1094                             if (index >= cb_size) {
1095                                 err_idx = index;
1096                                 goto err_cb_overflow;
1097                             }
1098
1099                             cb_idx = cb_vector_idx[index];
1100                             nnz = cb_idx >> 12;
1101                             nzt = cb_idx >> 8;
1102                             bits = get_bits(gb, nnz) << (32-nnz);
1103
1104                             for (j = 0; j < 2; j++) {
1105                                 if (nzt & 1<<j) {
1106                                     int n = 4;
1107                                     /* The total length of escape_sequence must be < 22 bits according
1108                                        to the specification (i.e. max is 111111110xxxxxxxxxxxx). */
1109                                     while (get_bits1(gb) && n < 13) n++;
1110                                     if (n == 13) {
1111                                         av_log(ac->avccontext, AV_LOG_ERROR, "error in spectral data, ESC overflow\n");
1112                                         return -1;
1113                                     }
1114                                     n = (1 << n) + get_bits(gb, n);
1115                                     *icf++ = cbrt_tab[n] | (bits & 1<<31);
1116                                     bits <<= 1;
1117                                 } else {
1118                                     unsigned v = ((const uint32_t*)vq)[cb_idx & 15];
1119                                     *icf++ = (bits & 1<<31) | v;
1120                                     bits <<= !!v;
1121                                 }
1122                                 cb_idx >>= 4;
1123                             }
1124                         } while (len -= 2);
1125
1126                         ac->dsp.vector_fmul_scalar(cfo, cfo, sf[idx], off_len);
1127                     }
1128                 }
1129             }
1130         }
1131         coef += g_len << 7;
1132     }
1133
1134     if (pulse_present) {
1135         idx = 0;
1136         for (i = 0; i < pulse->num_pulse; i++) {
1137             float co = coef_base[ pulse->pos[i] ];
1138             while (offsets[idx + 1] <= pulse->pos[i])
1139                 idx++;
1140             if (band_type[idx] != NOISE_BT && sf[idx]) {
1141                 float ico = -pulse->amp[i];
1142                 if (co) {
1143                     co /= sf[idx];
1144                     ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
1145                 }
1146                 coef_base[ pulse->pos[i] ] = cbrtf(fabsf(ico)) * ico * sf[idx];
1147             }
1148         }
1149     }
1150     return 0;
1151
1152 err_cb_overflow:
1153     av_log(ac->avccontext, AV_LOG_ERROR,
1154            "Read beyond end of ff_aac_codebook_vectors[%d][]. index %d >= %d\n",
1155            band_type[idx], err_idx, ff_aac_spectral_sizes[band_type[idx]]);
1156     return -1;
1157 }
1158
1159 static av_always_inline float flt16_round(float pf)
1160 {
1161     union float754 tmp;
1162     tmp.f = pf;
1163     tmp.i = (tmp.i + 0x00008000U) & 0xFFFF0000U;
1164     return tmp.f;
1165 }
1166
1167 static av_always_inline float flt16_even(float pf)
1168 {
1169     union float754 tmp;
1170     tmp.f = pf;
1171     tmp.i = (tmp.i + 0x00007FFFU + (tmp.i & 0x00010000U >> 16)) & 0xFFFF0000U;
1172     return tmp.f;
1173 }
1174
1175 static av_always_inline float flt16_trunc(float pf)
1176 {
1177     union float754 pun;
1178     pun.f = pf;
1179     pun.i &= 0xFFFF0000U;
1180     return pun.f;
1181 }
1182
1183 static void predict(AACContext *ac, PredictorState *ps, float *coef,
1184                     int output_enable)
1185 {
1186     const float a     = 0.953125; // 61.0 / 64
1187     const float alpha = 0.90625;  // 29.0 / 32
1188     float e0, e1;
1189     float pv;
1190     float k1, k2;
1191
1192     k1 = ps->var0 > 1 ? ps->cor0 * flt16_even(a / ps->var0) : 0;
1193     k2 = ps->var1 > 1 ? ps->cor1 * flt16_even(a / ps->var1) : 0;
1194
1195     pv = flt16_round(k1 * ps->r0 + k2 * ps->r1);
1196     if (output_enable)
1197         *coef += pv * ac->sf_scale;
1198
1199     e0 = *coef / ac->sf_scale;
1200     e1 = e0 - k1 * ps->r0;
1201
1202     ps->cor1 = flt16_trunc(alpha * ps->cor1 + ps->r1 * e1);
1203     ps->var1 = flt16_trunc(alpha * ps->var1 + 0.5 * (ps->r1 * ps->r1 + e1 * e1));
1204     ps->cor0 = flt16_trunc(alpha * ps->cor0 + ps->r0 * e0);
1205     ps->var0 = flt16_trunc(alpha * ps->var0 + 0.5 * (ps->r0 * ps->r0 + e0 * e0));
1206
1207     ps->r1 = flt16_trunc(a * (ps->r0 - k1 * e0));
1208     ps->r0 = flt16_trunc(a * e0);
1209 }
1210
1211 /**
1212  * Apply AAC-Main style frequency domain prediction.
1213  */
1214 static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
1215 {
1216     int sfb, k;
1217
1218     if (!sce->ics.predictor_initialized) {
1219         reset_all_predictors(sce->predictor_state);
1220         sce->ics.predictor_initialized = 1;
1221     }
1222
1223     if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
1224         for (sfb = 0; sfb < ff_aac_pred_sfb_max[ac->m4ac.sampling_index]; sfb++) {
1225             for (k = sce->ics.swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
1226                 predict(ac, &sce->predictor_state[k], &sce->coeffs[k],
1227                         sce->ics.predictor_present && sce->ics.prediction_used[sfb]);
1228             }
1229         }
1230         if (sce->ics.predictor_reset_group)
1231             reset_predictor_group(sce->predictor_state, sce->ics.predictor_reset_group);
1232     } else
1233         reset_all_predictors(sce->predictor_state);
1234 }
1235
1236 /**
1237  * Decode an individual_channel_stream payload; reference: table 4.44.
1238  *
1239  * @param   common_window   Channels have independent [0], or shared [1], Individual Channel Stream information.
1240  * @param   scale_flag      scalable [1] or non-scalable [0] AAC (Unused until scalable AAC is implemented.)
1241  *
1242  * @return  Returns error status. 0 - OK, !0 - error
1243  */
1244 static int decode_ics(AACContext *ac, SingleChannelElement *sce,
1245                       GetBitContext *gb, int common_window, int scale_flag)
1246 {
1247     Pulse pulse;
1248     TemporalNoiseShaping    *tns = &sce->tns;
1249     IndividualChannelStream *ics = &sce->ics;
1250     float *out = sce->coeffs;
1251     int global_gain, pulse_present = 0;
1252
1253     /* This assignment is to silence a GCC warning about the variable being used
1254      * uninitialized when in fact it always is.
1255      */
1256     pulse.num_pulse = 0;
1257
1258     global_gain = get_bits(gb, 8);
1259
1260     if (!common_window && !scale_flag) {
1261         if (decode_ics_info(ac, ics, gb, 0) < 0)
1262             return -1;
1263     }
1264
1265     if (decode_band_types(ac, sce->band_type, sce->band_type_run_end, gb, ics) < 0)
1266         return -1;
1267     if (decode_scalefactors(ac, sce->sf, gb, global_gain, ics, sce->band_type, sce->band_type_run_end) < 0)
1268         return -1;
1269
1270     pulse_present = 0;
1271     if (!scale_flag) {
1272         if ((pulse_present = get_bits1(gb))) {
1273             if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1274                 av_log(ac->avccontext, AV_LOG_ERROR, "Pulse tool not allowed in eight short sequence.\n");
1275                 return -1;
1276             }
1277             if (decode_pulses(&pulse, gb, ics->swb_offset, ics->num_swb)) {
1278                 av_log(ac->avccontext, AV_LOG_ERROR, "Pulse data corrupt or invalid.\n");
1279                 return -1;
1280             }
1281         }
1282         if ((tns->present = get_bits1(gb)) && decode_tns(ac, tns, gb, ics))
1283             return -1;
1284         if (get_bits1(gb)) {
1285             av_log_missing_feature(ac->avccontext, "SSR", 1);
1286             return -1;
1287         }
1288     }
1289
1290     if (decode_spectrum_and_dequant(ac, out, gb, sce->sf, pulse_present, &pulse, ics, sce->band_type) < 0)
1291         return -1;
1292
1293     if (ac->m4ac.object_type == AOT_AAC_MAIN && !common_window)
1294         apply_prediction(ac, sce);
1295
1296     return 0;
1297 }
1298
1299 /**
1300  * Mid/Side stereo decoding; reference: 4.6.8.1.3.
1301  */
1302 static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
1303 {
1304     const IndividualChannelStream *ics = &cpe->ch[0].ics;
1305     float *ch0 = cpe->ch[0].coeffs;
1306     float *ch1 = cpe->ch[1].coeffs;
1307     int g, i, group, idx = 0;
1308     const uint16_t *offsets = ics->swb_offset;
1309     for (g = 0; g < ics->num_window_groups; g++) {
1310         for (i = 0; i < ics->max_sfb; i++, idx++) {
1311             if (cpe->ms_mask[idx] &&
1312                     cpe->ch[0].band_type[idx] < NOISE_BT && cpe->ch[1].band_type[idx] < NOISE_BT) {
1313                 for (group = 0; group < ics->group_len[g]; group++) {
1314                     ac->dsp.butterflies_float(ch0 + group * 128 + offsets[i],
1315                                               ch1 + group * 128 + offsets[i],
1316                                               offsets[i+1] - offsets[i]);
1317                 }
1318             }
1319         }
1320         ch0 += ics->group_len[g] * 128;
1321         ch1 += ics->group_len[g] * 128;
1322     }
1323 }
1324
1325 /**
1326  * intensity stereo decoding; reference: 4.6.8.2.3
1327  *
1328  * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
1329  *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
1330  *                      [3] reserved for scalable AAC
1331  */
1332 static void apply_intensity_stereo(ChannelElement *cpe, int ms_present)
1333 {
1334     const IndividualChannelStream *ics = &cpe->ch[1].ics;
1335     SingleChannelElement         *sce1 = &cpe->ch[1];
1336     float *coef0 = cpe->ch[0].coeffs, *coef1 = cpe->ch[1].coeffs;
1337     const uint16_t *offsets = ics->swb_offset;
1338     int g, group, i, k, idx = 0;
1339     int c;
1340     float scale;
1341     for (g = 0; g < ics->num_window_groups; g++) {
1342         for (i = 0; i < ics->max_sfb;) {
1343             if (sce1->band_type[idx] == INTENSITY_BT || sce1->band_type[idx] == INTENSITY_BT2) {
1344                 const int bt_run_end = sce1->band_type_run_end[idx];
1345                 for (; i < bt_run_end; i++, idx++) {
1346                     c = -1 + 2 * (sce1->band_type[idx] - 14);
1347                     if (ms_present)
1348                         c *= 1 - 2 * cpe->ms_mask[idx];
1349                     scale = c * sce1->sf[idx];
1350                     for (group = 0; group < ics->group_len[g]; group++)
1351                         for (k = offsets[i]; k < offsets[i + 1]; k++)
1352                             coef1[group * 128 + k] = scale * coef0[group * 128 + k];
1353                 }
1354             } else {
1355                 int bt_run_end = sce1->band_type_run_end[idx];
1356                 idx += bt_run_end - i;
1357                 i    = bt_run_end;
1358             }
1359         }
1360         coef0 += ics->group_len[g] * 128;
1361         coef1 += ics->group_len[g] * 128;
1362     }
1363 }
1364
1365 /**
1366  * Decode a channel_pair_element; reference: table 4.4.
1367  *
1368  * @param   elem_id Identifies the instance of a syntax element.
1369  *
1370  * @return  Returns error status. 0 - OK, !0 - error
1371  */
1372 static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
1373 {
1374     int i, ret, common_window, ms_present = 0;
1375
1376     common_window = get_bits1(gb);
1377     if (common_window) {
1378         if (decode_ics_info(ac, &cpe->ch[0].ics, gb, 1))
1379             return -1;
1380         i = cpe->ch[1].ics.use_kb_window[0];
1381         cpe->ch[1].ics = cpe->ch[0].ics;
1382         cpe->ch[1].ics.use_kb_window[1] = i;
1383         ms_present = get_bits(gb, 2);
1384         if (ms_present == 3) {
1385             av_log(ac->avccontext, AV_LOG_ERROR, "ms_present = 3 is reserved.\n");
1386             return -1;
1387         } else if (ms_present)
1388             decode_mid_side_stereo(cpe, gb, ms_present);
1389     }
1390     if ((ret = decode_ics(ac, &cpe->ch[0], gb, common_window, 0)))
1391         return ret;
1392     if ((ret = decode_ics(ac, &cpe->ch[1], gb, common_window, 0)))
1393         return ret;
1394
1395     if (common_window) {
1396         if (ms_present)
1397             apply_mid_side_stereo(ac, cpe);
1398         if (ac->m4ac.object_type == AOT_AAC_MAIN) {
1399             apply_prediction(ac, &cpe->ch[0]);
1400             apply_prediction(ac, &cpe->ch[1]);
1401         }
1402     }
1403
1404     apply_intensity_stereo(cpe, ms_present);
1405     return 0;
1406 }
1407
1408 /**
1409  * Decode coupling_channel_element; reference: table 4.8.
1410  *
1411  * @param   elem_id Identifies the instance of a syntax element.
1412  *
1413  * @return  Returns error status. 0 - OK, !0 - error
1414  */
1415 static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
1416 {
1417     int num_gain = 0;
1418     int c, g, sfb, ret;
1419     int sign;
1420     float scale;
1421     SingleChannelElement *sce = &che->ch[0];
1422     ChannelCoupling     *coup = &che->coup;
1423
1424     coup->coupling_point = 2 * get_bits1(gb);
1425     coup->num_coupled = get_bits(gb, 3);
1426     for (c = 0; c <= coup->num_coupled; c++) {
1427         num_gain++;
1428         coup->type[c] = get_bits1(gb) ? TYPE_CPE : TYPE_SCE;
1429         coup->id_select[c] = get_bits(gb, 4);
1430         if (coup->type[c] == TYPE_CPE) {
1431             coup->ch_select[c] = get_bits(gb, 2);
1432             if (coup->ch_select[c] == 3)
1433                 num_gain++;
1434         } else
1435             coup->ch_select[c] = 2;
1436     }
1437     coup->coupling_point += get_bits1(gb) || (coup->coupling_point >> 1);
1438
1439     sign  = get_bits(gb, 1);
1440     scale = pow(2., pow(2., (int)get_bits(gb, 2) - 3));
1441
1442     if ((ret = decode_ics(ac, sce, gb, 0, 0)))
1443         return ret;
1444
1445     for (c = 0; c < num_gain; c++) {
1446         int idx  = 0;
1447         int cge  = 1;
1448         int gain = 0;
1449         float gain_cache = 1.;
1450         if (c) {
1451             cge = coup->coupling_point == AFTER_IMDCT ? 1 : get_bits1(gb);
1452             gain = cge ? get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60: 0;
1453             gain_cache = pow(scale, -gain);
1454         }
1455         if (coup->coupling_point == AFTER_IMDCT) {
1456             coup->gain[c][0] = gain_cache;
1457         } else {
1458             for (g = 0; g < sce->ics.num_window_groups; g++) {
1459                 for (sfb = 0; sfb < sce->ics.max_sfb; sfb++, idx++) {
1460                     if (sce->band_type[idx] != ZERO_BT) {
1461                         if (!cge) {
1462                             int t = get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
1463                             if (t) {
1464                                 int s = 1;
1465                                 t = gain += t;
1466                                 if (sign) {
1467                                     s  -= 2 * (t & 0x1);
1468                                     t >>= 1;
1469                                 }
1470                                 gain_cache = pow(scale, -t) * s;
1471                             }
1472                         }
1473                         coup->gain[c][idx] = gain_cache;
1474                     }
1475                 }
1476             }
1477         }
1478     }
1479     return 0;
1480 }
1481
1482 /**
1483  * Decode Spectral Band Replication extension data; reference: table 4.55.
1484  *
1485  * @param   crc flag indicating the presence of CRC checksum
1486  * @param   cnt length of TYPE_FIL syntactic element in bytes
1487  *
1488  * @return  Returns number of bytes consumed from the TYPE_FIL element.
1489  */
1490 static int decode_sbr_extension(AACContext *ac, GetBitContext *gb,
1491                                 int crc, int cnt)
1492 {
1493     // TODO : sbr_extension implementation
1494     av_log_missing_feature(ac->avccontext, "SBR", 0);
1495     skip_bits_long(gb, 8 * cnt - 4); // -4 due to reading extension type
1496     return cnt;
1497 }
1498
1499 /**
1500  * Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
1501  *
1502  * @return  Returns number of bytes consumed.
1503  */
1504 static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc,
1505                                          GetBitContext *gb)
1506 {
1507     int i;
1508     int num_excl_chan = 0;
1509
1510     do {
1511         for (i = 0; i < 7; i++)
1512             che_drc->exclude_mask[num_excl_chan++] = get_bits1(gb);
1513     } while (num_excl_chan < MAX_CHANNELS - 7 && get_bits1(gb));
1514
1515     return num_excl_chan / 7;
1516 }
1517
1518 /**
1519  * Decode dynamic range information; reference: table 4.52.
1520  *
1521  * @param   cnt length of TYPE_FIL syntactic element in bytes
1522  *
1523  * @return  Returns number of bytes consumed.
1524  */
1525 static int decode_dynamic_range(DynamicRangeControl *che_drc,
1526                                 GetBitContext *gb, int cnt)
1527 {
1528     int n             = 1;
1529     int drc_num_bands = 1;
1530     int i;
1531
1532     /* pce_tag_present? */
1533     if (get_bits1(gb)) {
1534         che_drc->pce_instance_tag  = get_bits(gb, 4);
1535         skip_bits(gb, 4); // tag_reserved_bits
1536         n++;
1537     }
1538
1539     /* excluded_chns_present? */
1540     if (get_bits1(gb)) {
1541         n += decode_drc_channel_exclusions(che_drc, gb);
1542     }
1543
1544     /* drc_bands_present? */
1545     if (get_bits1(gb)) {
1546         che_drc->band_incr            = get_bits(gb, 4);
1547         che_drc->interpolation_scheme = get_bits(gb, 4);
1548         n++;
1549         drc_num_bands += che_drc->band_incr;
1550         for (i = 0; i < drc_num_bands; i++) {
1551             che_drc->band_top[i] = get_bits(gb, 8);
1552             n++;
1553         }
1554     }
1555
1556     /* prog_ref_level_present? */
1557     if (get_bits1(gb)) {
1558         che_drc->prog_ref_level = get_bits(gb, 7);
1559         skip_bits1(gb); // prog_ref_level_reserved_bits
1560         n++;
1561     }
1562
1563     for (i = 0; i < drc_num_bands; i++) {
1564         che_drc->dyn_rng_sgn[i] = get_bits1(gb);
1565         che_drc->dyn_rng_ctl[i] = get_bits(gb, 7);
1566         n++;
1567     }
1568
1569     return n;
1570 }
1571
1572 /**
1573  * Decode extension data (incomplete); reference: table 4.51.
1574  *
1575  * @param   cnt length of TYPE_FIL syntactic element in bytes
1576  *
1577  * @return Returns number of bytes consumed
1578  */
1579 static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt)
1580 {
1581     int crc_flag = 0;
1582     int res = cnt;
1583     switch (get_bits(gb, 4)) { // extension type
1584     case EXT_SBR_DATA_CRC:
1585         crc_flag++;
1586     case EXT_SBR_DATA:
1587         res = decode_sbr_extension(ac, gb, crc_flag, cnt);
1588         break;
1589     case EXT_DYNAMIC_RANGE:
1590         res = decode_dynamic_range(&ac->che_drc, gb, cnt);
1591         break;
1592     case EXT_FILL:
1593     case EXT_FILL_DATA:
1594     case EXT_DATA_ELEMENT:
1595     default:
1596         skip_bits_long(gb, 8 * cnt - 4);
1597         break;
1598     };
1599     return res;
1600 }
1601
1602 /**
1603  * Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4.6.9.3.
1604  *
1605  * @param   decode  1 if tool is used normally, 0 if tool is used in LTP.
1606  * @param   coef    spectral coefficients
1607  */
1608 static void apply_tns(float coef[1024], TemporalNoiseShaping *tns,
1609                       IndividualChannelStream *ics, int decode)
1610 {
1611     const int mmm = FFMIN(ics->tns_max_bands, ics->max_sfb);
1612     int w, filt, m, i;
1613     int bottom, top, order, start, end, size, inc;
1614     float lpc[TNS_MAX_ORDER];
1615
1616     for (w = 0; w < ics->num_windows; w++) {
1617         bottom = ics->num_swb;
1618         for (filt = 0; filt < tns->n_filt[w]; filt++) {
1619             top    = bottom;
1620             bottom = FFMAX(0, top - tns->length[w][filt]);
1621             order  = tns->order[w][filt];
1622             if (order == 0)
1623                 continue;
1624
1625             // tns_decode_coef
1626             compute_lpc_coefs(tns->coef[w][filt], order, lpc, 0, 0, 0);
1627
1628             start = ics->swb_offset[FFMIN(bottom, mmm)];
1629             end   = ics->swb_offset[FFMIN(   top, mmm)];
1630             if ((size = end - start) <= 0)
1631                 continue;
1632             if (tns->direction[w][filt]) {
1633                 inc = -1;
1634                 start = end - 1;
1635             } else {
1636                 inc = 1;
1637             }
1638             start += w * 128;
1639
1640             // ar filter
1641             for (m = 0; m < size; m++, start += inc)
1642                 for (i = 1; i <= FFMIN(m, order); i++)
1643                     coef[start] -= coef[start - i * inc] * lpc[i - 1];
1644         }
1645     }
1646 }
1647
1648 /**
1649  * Conduct IMDCT and windowing.
1650  */
1651 static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
1652 {
1653     IndividualChannelStream *ics = &sce->ics;
1654     float *in    = sce->coeffs;
1655     float *out   = sce->ret;
1656     float *saved = sce->saved;
1657     const float *swindow      = ics->use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
1658     const float *lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
1659     const float *swindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
1660     float *buf  = ac->buf_mdct;
1661     float *temp = ac->temp;
1662     int i;
1663
1664     // imdct
1665     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1666         if (ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE)
1667             av_log(ac->avccontext, AV_LOG_WARNING,
1668                    "Transition from an ONLY_LONG or LONG_STOP to an EIGHT_SHORT sequence detected. "
1669                    "If you heard an audible artifact, please submit the sample to the FFmpeg developers.\n");
1670         for (i = 0; i < 1024; i += 128)
1671             ff_imdct_half(&ac->mdct_small, buf + i, in + i);
1672     } else
1673         ff_imdct_half(&ac->mdct, buf, in);
1674
1675     /* window overlapping
1676      * NOTE: To simplify the overlapping code, all 'meaningless' short to long
1677      * and long to short transitions are considered to be short to short
1678      * transitions. This leaves just two cases (long to long and short to short)
1679      * with a little special sauce for EIGHT_SHORT_SEQUENCE.
1680      */
1681     if ((ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE) &&
1682             (ics->window_sequence[0] == ONLY_LONG_SEQUENCE || ics->window_sequence[0] == LONG_START_SEQUENCE)) {
1683         ac->dsp.vector_fmul_window(    out,               saved,            buf,         lwindow_prev, ac->add_bias, 512);
1684     } else {
1685         for (i = 0; i < 448; i++)
1686             out[i] = saved[i] + ac->add_bias;
1687
1688         if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1689             ac->dsp.vector_fmul_window(out + 448 + 0*128, saved + 448,      buf + 0*128, swindow_prev, ac->add_bias, 64);
1690             ac->dsp.vector_fmul_window(out + 448 + 1*128, buf + 0*128 + 64, buf + 1*128, swindow,      ac->add_bias, 64);
1691             ac->dsp.vector_fmul_window(out + 448 + 2*128, buf + 1*128 + 64, buf + 2*128, swindow,      ac->add_bias, 64);
1692             ac->dsp.vector_fmul_window(out + 448 + 3*128, buf + 2*128 + 64, buf + 3*128, swindow,      ac->add_bias, 64);
1693             ac->dsp.vector_fmul_window(temp,              buf + 3*128 + 64, buf + 4*128, swindow,      ac->add_bias, 64);
1694             memcpy(                    out + 448 + 4*128, temp, 64 * sizeof(float));
1695         } else {
1696             ac->dsp.vector_fmul_window(out + 448,         saved + 448,      buf,         swindow_prev, ac->add_bias, 64);
1697             for (i = 576; i < 1024; i++)
1698                 out[i] = buf[i-512] + ac->add_bias;
1699         }
1700     }
1701
1702     // buffer update
1703     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1704         for (i = 0; i < 64; i++)
1705             saved[i] = temp[64 + i] - ac->add_bias;
1706         ac->dsp.vector_fmul_window(saved + 64,  buf + 4*128 + 64, buf + 5*128, swindow, 0, 64);
1707         ac->dsp.vector_fmul_window(saved + 192, buf + 5*128 + 64, buf + 6*128, swindow, 0, 64);
1708         ac->dsp.vector_fmul_window(saved + 320, buf + 6*128 + 64, buf + 7*128, swindow, 0, 64);
1709         memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1710     } else if (ics->window_sequence[0] == LONG_START_SEQUENCE) {
1711         memcpy(                    saved,       buf + 512,        448 * sizeof(float));
1712         memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1713     } else { // LONG_STOP or ONLY_LONG
1714         memcpy(                    saved,       buf + 512,        512 * sizeof(float));
1715     }
1716 }
1717
1718 /**
1719  * Apply dependent channel coupling (applied before IMDCT).
1720  *
1721  * @param   index   index into coupling gain array
1722  */
1723 static void apply_dependent_coupling(AACContext *ac,
1724                                      SingleChannelElement *target,
1725                                      ChannelElement *cce, int index)
1726 {
1727     IndividualChannelStream *ics = &cce->ch[0].ics;
1728     const uint16_t *offsets = ics->swb_offset;
1729     float *dest = target->coeffs;
1730     const float *src = cce->ch[0].coeffs;
1731     int g, i, group, k, idx = 0;
1732     if (ac->m4ac.object_type == AOT_AAC_LTP) {
1733         av_log(ac->avccontext, AV_LOG_ERROR,
1734                "Dependent coupling is not supported together with LTP\n");
1735         return;
1736     }
1737     for (g = 0; g < ics->num_window_groups; g++) {
1738         for (i = 0; i < ics->max_sfb; i++, idx++) {
1739             if (cce->ch[0].band_type[idx] != ZERO_BT) {
1740                 const float gain = cce->coup.gain[index][idx];
1741                 for (group = 0; group < ics->group_len[g]; group++) {
1742                     for (k = offsets[i]; k < offsets[i + 1]; k++) {
1743                         // XXX dsputil-ize
1744                         dest[group * 128 + k] += gain * src[group * 128 + k];
1745                     }
1746                 }
1747             }
1748         }
1749         dest += ics->group_len[g] * 128;
1750         src  += ics->group_len[g] * 128;
1751     }
1752 }
1753
1754 /**
1755  * Apply independent channel coupling (applied after IMDCT).
1756  *
1757  * @param   index   index into coupling gain array
1758  */
1759 static void apply_independent_coupling(AACContext *ac,
1760                                        SingleChannelElement *target,
1761                                        ChannelElement *cce, int index)
1762 {
1763     int i;
1764     const float gain = cce->coup.gain[index][0];
1765     const float bias = ac->add_bias;
1766     const float *src = cce->ch[0].ret;
1767     float *dest = target->ret;
1768
1769     for (i = 0; i < 1024; i++)
1770         dest[i] += gain * (src[i] - bias);
1771 }
1772
1773 /**
1774  * channel coupling transformation interface
1775  *
1776  * @param   index   index into coupling gain array
1777  * @param   apply_coupling_method   pointer to (in)dependent coupling function
1778  */
1779 static void apply_channel_coupling(AACContext *ac, ChannelElement *cc,
1780                                    enum RawDataBlockType type, int elem_id,
1781                                    enum CouplingPoint coupling_point,
1782                                    void (*apply_coupling_method)(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
1783 {
1784     int i, c;
1785
1786     for (i = 0; i < MAX_ELEM_ID; i++) {
1787         ChannelElement *cce = ac->che[TYPE_CCE][i];
1788         int index = 0;
1789
1790         if (cce && cce->coup.coupling_point == coupling_point) {
1791             ChannelCoupling *coup = &cce->coup;
1792
1793             for (c = 0; c <= coup->num_coupled; c++) {
1794                 if (coup->type[c] == type && coup->id_select[c] == elem_id) {
1795                     if (coup->ch_select[c] != 1) {
1796                         apply_coupling_method(ac, &cc->ch[0], cce, index);
1797                         if (coup->ch_select[c] != 0)
1798                             index++;
1799                     }
1800                     if (coup->ch_select[c] != 2)
1801                         apply_coupling_method(ac, &cc->ch[1], cce, index++);
1802                 } else
1803                     index += 1 + (coup->ch_select[c] == 3);
1804             }
1805         }
1806     }
1807 }
1808
1809 /**
1810  * Convert spectral data to float samples, applying all supported tools as appropriate.
1811  */
1812 static void spectral_to_sample(AACContext *ac)
1813 {
1814     int i, type;
1815     for (type = 3; type >= 0; type--) {
1816         for (i = 0; i < MAX_ELEM_ID; i++) {
1817             ChannelElement *che = ac->che[type][i];
1818             if (che) {
1819                 if (type <= TYPE_CPE)
1820                     apply_channel_coupling(ac, che, type, i, BEFORE_TNS, apply_dependent_coupling);
1821                 if (che->ch[0].tns.present)
1822                     apply_tns(che->ch[0].coeffs, &che->ch[0].tns, &che->ch[0].ics, 1);
1823                 if (che->ch[1].tns.present)
1824                     apply_tns(che->ch[1].coeffs, &che->ch[1].tns, &che->ch[1].ics, 1);
1825                 if (type <= TYPE_CPE)
1826                     apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMDCT, apply_dependent_coupling);
1827                 if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT)
1828                     imdct_and_windowing(ac, &che->ch[0]);
1829                 if (type == TYPE_CPE)
1830                     imdct_and_windowing(ac, &che->ch[1]);
1831                 if (type <= TYPE_CCE)
1832                     apply_channel_coupling(ac, che, type, i, AFTER_IMDCT, apply_independent_coupling);
1833             }
1834         }
1835     }
1836 }
1837
1838 static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
1839 {
1840     int size;
1841     AACADTSHeaderInfo hdr_info;
1842
1843     size = ff_aac_parse_header(gb, &hdr_info);
1844     if (size > 0) {
1845         if (ac->output_configured != OC_LOCKED && hdr_info.chan_config) {
1846             enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
1847             memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1848             ac->m4ac.chan_config = hdr_info.chan_config;
1849             if (set_default_channel_config(ac, new_che_pos, hdr_info.chan_config))
1850                 return -7;
1851             if (output_configure(ac, ac->che_pos, new_che_pos, hdr_info.chan_config, OC_TRIAL_FRAME))
1852                 return -7;
1853         } else if (ac->output_configured != OC_LOCKED) {
1854             ac->output_configured = OC_NONE;
1855         }
1856         if (ac->output_configured != OC_LOCKED)
1857             ac->m4ac.sbr = -1;
1858         ac->m4ac.sample_rate     = hdr_info.sample_rate;
1859         ac->m4ac.sampling_index  = hdr_info.sampling_index;
1860         ac->m4ac.object_type     = hdr_info.object_type;
1861         if (!ac->avccontext->sample_rate)
1862             ac->avccontext->sample_rate = hdr_info.sample_rate;
1863         if (hdr_info.num_aac_frames == 1) {
1864             if (!hdr_info.crc_absent)
1865                 skip_bits(gb, 16);
1866         } else {
1867             av_log_missing_feature(ac->avccontext, "More than one AAC RDB per ADTS frame is", 0);
1868             return -1;
1869         }
1870     }
1871     return size;
1872 }
1873
1874 static int aac_decode_frame(AVCodecContext *avccontext, void *data,
1875                             int *data_size, AVPacket *avpkt)
1876 {
1877     const uint8_t *buf = avpkt->data;
1878     int buf_size = avpkt->size;
1879     AACContext *ac = avccontext->priv_data;
1880     ChannelElement *che = NULL;
1881     GetBitContext gb;
1882     enum RawDataBlockType elem_type;
1883     int err, elem_id, data_size_tmp;
1884
1885     init_get_bits(&gb, buf, buf_size * 8);
1886
1887     if (show_bits(&gb, 12) == 0xfff) {
1888         if (parse_adts_frame_header(ac, &gb) < 0) {
1889             av_log(avccontext, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
1890             return -1;
1891         }
1892         if (ac->m4ac.sampling_index > 12) {
1893             av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
1894             return -1;
1895         }
1896     }
1897
1898     // parse
1899     while ((elem_type = get_bits(&gb, 3)) != TYPE_END) {
1900         elem_id = get_bits(&gb, 4);
1901
1902         if (elem_type < TYPE_DSE && !(che=get_che(ac, elem_type, elem_id))) {
1903             av_log(ac->avccontext, AV_LOG_ERROR, "channel element %d.%d is not allocated\n", elem_type, elem_id);
1904             return -1;
1905         }
1906
1907         switch (elem_type) {
1908
1909         case TYPE_SCE:
1910             err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1911             break;
1912
1913         case TYPE_CPE:
1914             err = decode_cpe(ac, &gb, che);
1915             break;
1916
1917         case TYPE_CCE:
1918             err = decode_cce(ac, &gb, che);
1919             break;
1920
1921         case TYPE_LFE:
1922             err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1923             break;
1924
1925         case TYPE_DSE:
1926             skip_data_stream_element(&gb);
1927             err = 0;
1928             break;
1929
1930         case TYPE_PCE: {
1931             enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
1932             memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1933             if ((err = decode_pce(ac, new_che_pos, &gb)))
1934                 break;
1935             if (ac->output_configured > OC_TRIAL_PCE)
1936                 av_log(avccontext, AV_LOG_ERROR,
1937                        "Not evaluating a further program_config_element as this construct is dubious at best.\n");
1938             else
1939                 err = output_configure(ac, ac->che_pos, new_che_pos, 0, OC_TRIAL_PCE);
1940             break;
1941         }
1942
1943         case TYPE_FIL:
1944             if (elem_id == 15)
1945                 elem_id += get_bits(&gb, 8) - 1;
1946             while (elem_id > 0)
1947                 elem_id -= decode_extension_payload(ac, &gb, elem_id);
1948             err = 0; /* FIXME */
1949             break;
1950
1951         default:
1952             err = -1; /* should not happen, but keeps compiler happy */
1953             break;
1954         }
1955
1956         if (err)
1957             return err;
1958     }
1959
1960     spectral_to_sample(ac);
1961
1962     if (!ac->is_saved) {
1963         ac->is_saved = 1;
1964         *data_size = 0;
1965         return buf_size;
1966     }
1967
1968     data_size_tmp = 1024 * avccontext->channels * sizeof(int16_t);
1969     if (*data_size < data_size_tmp) {
1970         av_log(avccontext, AV_LOG_ERROR,
1971                "Output buffer too small (%d) or trying to output too many samples (%d) for this frame.\n",
1972                *data_size, data_size_tmp);
1973         return -1;
1974     }
1975     *data_size = data_size_tmp;
1976
1977     ac->dsp.float_to_int16_interleave(data, (const float **)ac->output_data, 1024, avccontext->channels);
1978
1979     if (ac->output_configured)
1980         ac->output_configured = OC_LOCKED;
1981
1982     return buf_size;
1983 }
1984
1985 static av_cold int aac_decode_close(AVCodecContext *avccontext)
1986 {
1987     AACContext *ac = avccontext->priv_data;
1988     int i, type;
1989
1990     for (i = 0; i < MAX_ELEM_ID; i++) {
1991         for (type = 0; type < 4; type++)
1992             av_freep(&ac->che[type][i]);
1993     }
1994
1995     ff_mdct_end(&ac->mdct);
1996     ff_mdct_end(&ac->mdct_small);
1997     return 0;
1998 }
1999
2000 AVCodec aac_decoder = {
2001     "aac",
2002     CODEC_TYPE_AUDIO,
2003     CODEC_ID_AAC,
2004     sizeof(AACContext),
2005     aac_decode_init,
2006     NULL,
2007     aac_decode_close,
2008     aac_decode_frame,
2009     .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
2010     .sample_fmts = (const enum SampleFormat[]) {
2011         SAMPLE_FMT_S16,SAMPLE_FMT_NONE
2012     },
2013     .channel_layouts = aac_channel_layout,
2014 };