]> git.sesse.net Git - ffmpeg/blob - libavcodec/aacdec.c
aac_latm: remove unneeded check for zero-size packet.
[ffmpeg] / libavcodec / aacdec.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  * AAC LATM decoder
7  * Copyright (c) 2008-2010 Paul Kendall <paul@kcbbs.gen.nz>
8  * Copyright (c) 2010      Janne Grunau <janne-ffmpeg@jannau.net>
9  *
10  * This file is part of Libav.
11  *
12  * Libav is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU Lesser General Public
14  * License as published by the Free Software Foundation; either
15  * version 2.1 of the License, or (at your option) any later version.
16  *
17  * Libav is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20  * Lesser General Public License for more details.
21  *
22  * You should have received a copy of the GNU Lesser General Public
23  * License along with Libav; if not, write to the Free Software
24  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25  */
26
27 /**
28  * @file
29  * AAC decoder
30  * @author Oded Shimon  ( ods15 ods15 dyndns org )
31  * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
32  */
33
34 /*
35  * supported tools
36  *
37  * Support?             Name
38  * N (code in SoC repo) gain control
39  * Y                    block switching
40  * Y                    window shapes - standard
41  * N                    window shapes - Low Delay
42  * Y                    filterbank - standard
43  * N (code in SoC repo) filterbank - Scalable Sample Rate
44  * Y                    Temporal Noise Shaping
45  * Y                    Long Term Prediction
46  * Y                    intensity stereo
47  * Y                    channel coupling
48  * Y                    frequency domain prediction
49  * Y                    Perceptual Noise Substitution
50  * Y                    Mid/Side stereo
51  * N                    Scalable Inverse AAC Quantization
52  * N                    Frequency Selective Switch
53  * N                    upsampling filter
54  * Y                    quantization & coding - AAC
55  * N                    quantization & coding - TwinVQ
56  * N                    quantization & coding - BSAC
57  * N                    AAC Error Resilience tools
58  * N                    Error Resilience payload syntax
59  * N                    Error Protection tool
60  * N                    CELP
61  * N                    Silence Compression
62  * N                    HVXC
63  * N                    HVXC 4kbits/s VR
64  * N                    Structured Audio tools
65  * N                    Structured Audio Sample Bank Format
66  * N                    MIDI
67  * N                    Harmonic and Individual Lines plus Noise
68  * N                    Text-To-Speech Interface
69  * Y                    Spectral Band Replication
70  * Y (not in this code) Layer-1
71  * Y (not in this code) Layer-2
72  * Y (not in this code) Layer-3
73  * N                    SinuSoidal Coding (Transient, Sinusoid, Noise)
74  * Y                    Parametric Stereo
75  * N                    Direct Stream Transfer
76  *
77  * Note: - HE AAC v1 comprises LC AAC with Spectral Band Replication.
78  *       - HE AAC v2 comprises LC AAC with Spectral Band Replication and
79            Parametric Stereo.
80  */
81
82
83 #include "avcodec.h"
84 #include "internal.h"
85 #include "get_bits.h"
86 #include "dsputil.h"
87 #include "fft.h"
88 #include "fmtconvert.h"
89 #include "lpc.h"
90 #include "kbdwin.h"
91 #include "sinewin.h"
92
93 #include "aac.h"
94 #include "aactab.h"
95 #include "aacdectab.h"
96 #include "cbrt_tablegen.h"
97 #include "sbr.h"
98 #include "aacsbr.h"
99 #include "mpeg4audio.h"
100 #include "aacadtsdec.h"
101
102 #include <assert.h>
103 #include <errno.h>
104 #include <math.h>
105 #include <string.h>
106
107 #if ARCH_ARM
108 #   include "arm/aac.h"
109 #endif
110
111 union float754 {
112     float f;
113     uint32_t i;
114 };
115
116 static VLC vlc_scalefactors;
117 static VLC vlc_spectral[11];
118
119 static const char overread_err[] = "Input buffer exhausted before END element found\n";
120
121 static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
122 {
123     // For PCE based channel configurations map the channels solely based on tags.
124     if (!ac->m4ac.chan_config) {
125         return ac->tag_che_map[type][elem_id];
126     }
127     // For indexed channel configurations map the channels solely based on position.
128     switch (ac->m4ac.chan_config) {
129     case 7:
130         if (ac->tags_mapped == 3 && type == TYPE_CPE) {
131             ac->tags_mapped++;
132             return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2];
133         }
134     case 6:
135         /* Some streams incorrectly code 5.1 audio as SCE[0] CPE[0] CPE[1] SCE[1]
136            instead of SCE[0] CPE[0] CPE[1] LFE[0]. If we seem to have
137            encountered such a stream, transfer the LFE[0] element to the SCE[1]'s mapping */
138         if (ac->tags_mapped == tags_per_config[ac->m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
139             ac->tags_mapped++;
140             return ac->tag_che_map[type][elem_id] = ac->che[TYPE_LFE][0];
141         }
142     case 5:
143         if (ac->tags_mapped == 2 && type == TYPE_CPE) {
144             ac->tags_mapped++;
145             return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][1];
146         }
147     case 4:
148         if (ac->tags_mapped == 2 && ac->m4ac.chan_config == 4 && type == TYPE_SCE) {
149             ac->tags_mapped++;
150             return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
151         }
152     case 3:
153     case 2:
154         if (ac->tags_mapped == (ac->m4ac.chan_config != 2) && type == TYPE_CPE) {
155             ac->tags_mapped++;
156             return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][0];
157         } else if (ac->m4ac.chan_config == 2) {
158             return NULL;
159         }
160     case 1:
161         if (!ac->tags_mapped && type == TYPE_SCE) {
162             ac->tags_mapped++;
163             return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][0];
164         }
165     default:
166         return NULL;
167     }
168 }
169
170 /**
171  * Check for the channel element in the current channel position configuration.
172  * If it exists, make sure the appropriate element is allocated and map the
173  * channel order to match the internal Libav channel layout.
174  *
175  * @param   che_pos current channel position configuration
176  * @param   type channel element type
177  * @param   id channel element id
178  * @param   channels count of the number of channels in the configuration
179  *
180  * @return  Returns error status. 0 - OK, !0 - error
181  */
182 static av_cold int che_configure(AACContext *ac,
183                                  enum ChannelPosition che_pos[4][MAX_ELEM_ID],
184                                  int type, int id, int *channels)
185 {
186     if (che_pos[type][id]) {
187         if (!ac->che[type][id]) {
188             if (!(ac->che[type][id] = av_mallocz(sizeof(ChannelElement))))
189                 return AVERROR(ENOMEM);
190             ff_aac_sbr_ctx_init(ac, &ac->che[type][id]->sbr);
191         }
192         if (type != TYPE_CCE) {
193             ac->output_data[(*channels)++] = ac->che[type][id]->ch[0].ret;
194             if (type == TYPE_CPE ||
195                 (type == TYPE_SCE && ac->m4ac.ps == 1)) {
196                 ac->output_data[(*channels)++] = ac->che[type][id]->ch[1].ret;
197             }
198         }
199     } else {
200         if (ac->che[type][id])
201             ff_aac_sbr_ctx_close(&ac->che[type][id]->sbr);
202         av_freep(&ac->che[type][id]);
203     }
204     return 0;
205 }
206
207 /**
208  * Configure output channel order based on the current program configuration element.
209  *
210  * @param   che_pos current channel position configuration
211  * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
212  *
213  * @return  Returns error status. 0 - OK, !0 - error
214  */
215 static av_cold int output_configure(AACContext *ac,
216                                     enum ChannelPosition che_pos[4][MAX_ELEM_ID],
217                                     enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
218                                     int channel_config, enum OCStatus oc_type)
219 {
220     AVCodecContext *avctx = ac->avctx;
221     int i, type, channels = 0, ret;
222
223     if (new_che_pos != che_pos)
224     memcpy(che_pos, new_che_pos, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
225
226     if (channel_config) {
227         for (i = 0; i < tags_per_config[channel_config]; i++) {
228             if ((ret = che_configure(ac, che_pos,
229                                      aac_channel_layout_map[channel_config - 1][i][0],
230                                      aac_channel_layout_map[channel_config - 1][i][1],
231                                      &channels)))
232                 return ret;
233         }
234
235         memset(ac->tag_che_map, 0, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
236
237         avctx->channel_layout = aac_channel_layout[channel_config - 1];
238     } else {
239         /* Allocate or free elements depending on if they are in the
240          * current program configuration.
241          *
242          * Set up default 1:1 output mapping.
243          *
244          * For a 5.1 stream the output order will be:
245          *    [ Center ] [ Front Left ] [ Front Right ] [ LFE ] [ Surround Left ] [ Surround Right ]
246          */
247
248         for (i = 0; i < MAX_ELEM_ID; i++) {
249             for (type = 0; type < 4; type++) {
250                 if ((ret = che_configure(ac, che_pos, type, i, &channels)))
251                     return ret;
252             }
253         }
254
255         memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
256
257         avctx->channel_layout = 0;
258     }
259
260     avctx->channels = channels;
261
262     ac->output_configured = oc_type;
263
264     return 0;
265 }
266
267 /**
268  * Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit.
269  *
270  * @param cpe_map Stereo (Channel Pair Element) map, NULL if stereo bit is not present.
271  * @param sce_map mono (Single Channel Element) map
272  * @param type speaker type/position for these channels
273  */
274 static void decode_channel_map(enum ChannelPosition *cpe_map,
275                                enum ChannelPosition *sce_map,
276                                enum ChannelPosition type,
277                                GetBitContext *gb, int n)
278 {
279     while (n--) {
280         enum ChannelPosition *map = cpe_map && get_bits1(gb) ? cpe_map : sce_map; // stereo or mono map
281         map[get_bits(gb, 4)] = type;
282     }
283 }
284
285 /**
286  * Decode program configuration element; reference: table 4.2.
287  *
288  * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
289  *
290  * @return  Returns error status. 0 - OK, !0 - error
291  */
292 static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac,
293                       enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
294                       GetBitContext *gb)
295 {
296     int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling_index;
297     int comment_len;
298
299     skip_bits(gb, 2);  // object_type
300
301     sampling_index = get_bits(gb, 4);
302     if (m4ac->sampling_index != sampling_index)
303         av_log(avctx, AV_LOG_WARNING, "Sample rate index in program config element does not match the sample rate index configured by the container.\n");
304
305     num_front       = get_bits(gb, 4);
306     num_side        = get_bits(gb, 4);
307     num_back        = get_bits(gb, 4);
308     num_lfe         = get_bits(gb, 2);
309     num_assoc_data  = get_bits(gb, 3);
310     num_cc          = get_bits(gb, 4);
311
312     if (get_bits1(gb))
313         skip_bits(gb, 4); // mono_mixdown_tag
314     if (get_bits1(gb))
315         skip_bits(gb, 4); // stereo_mixdown_tag
316
317     if (get_bits1(gb))
318         skip_bits(gb, 3); // mixdown_coeff_index and pseudo_surround
319
320     decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_FRONT, gb, num_front);
321     decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_SIDE,  gb, num_side );
322     decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_BACK,  gb, num_back );
323     decode_channel_map(NULL,                  new_che_pos[TYPE_LFE], AAC_CHANNEL_LFE,   gb, num_lfe  );
324
325     skip_bits_long(gb, 4 * num_assoc_data);
326
327     decode_channel_map(new_che_pos[TYPE_CCE], new_che_pos[TYPE_CCE], AAC_CHANNEL_CC,    gb, num_cc   );
328
329     align_get_bits(gb);
330
331     /* comment field, first byte is length */
332     comment_len = get_bits(gb, 8) * 8;
333     if (get_bits_left(gb) < comment_len) {
334         av_log(avctx, AV_LOG_ERROR, overread_err);
335         return -1;
336     }
337     skip_bits_long(gb, comment_len);
338     return 0;
339 }
340
341 /**
342  * Set up channel positions based on a default channel configuration
343  * as specified in table 1.17.
344  *
345  * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
346  *
347  * @return  Returns error status. 0 - OK, !0 - error
348  */
349 static av_cold int set_default_channel_config(AVCodecContext *avctx,
350                                               enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
351                                               int channel_config)
352 {
353     if (channel_config < 1 || channel_config > 7) {
354         av_log(avctx, AV_LOG_ERROR, "invalid default channel configuration (%d)\n",
355                channel_config);
356         return -1;
357     }
358
359     /* default channel configurations:
360      *
361      * 1ch : front center (mono)
362      * 2ch : L + R (stereo)
363      * 3ch : front center + L + R
364      * 4ch : front center + L + R + back center
365      * 5ch : front center + L + R + back stereo
366      * 6ch : front center + L + R + back stereo + LFE
367      * 7ch : front center + L + R + outer front left + outer front right + back stereo + LFE
368      */
369
370     if (channel_config != 2)
371         new_che_pos[TYPE_SCE][0] = AAC_CHANNEL_FRONT; // front center (or mono)
372     if (channel_config > 1)
373         new_che_pos[TYPE_CPE][0] = AAC_CHANNEL_FRONT; // L + R (or stereo)
374     if (channel_config == 4)
375         new_che_pos[TYPE_SCE][1] = AAC_CHANNEL_BACK;  // back center
376     if (channel_config > 4)
377         new_che_pos[TYPE_CPE][(channel_config == 7) + 1]
378         = AAC_CHANNEL_BACK;  // back stereo
379     if (channel_config > 5)
380         new_che_pos[TYPE_LFE][0] = AAC_CHANNEL_LFE;   // LFE
381     if (channel_config == 7)
382         new_che_pos[TYPE_CPE][1] = AAC_CHANNEL_FRONT; // outer front left + outer front right
383
384     return 0;
385 }
386
387 /**
388  * Decode GA "General Audio" specific configuration; reference: table 4.1.
389  *
390  * @param   ac          pointer to AACContext, may be null
391  * @param   avctx       pointer to AVCCodecContext, used for logging
392  *
393  * @return  Returns error status. 0 - OK, !0 - error
394  */
395 static int decode_ga_specific_config(AACContext *ac, AVCodecContext *avctx,
396                                      GetBitContext *gb,
397                                      MPEG4AudioConfig *m4ac,
398                                      int channel_config)
399 {
400     enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
401     int extension_flag, ret;
402
403     if (get_bits1(gb)) { // frameLengthFlag
404         av_log_missing_feature(avctx, "960/120 MDCT window is", 1);
405         return -1;
406     }
407
408     if (get_bits1(gb))       // dependsOnCoreCoder
409         skip_bits(gb, 14);   // coreCoderDelay
410     extension_flag = get_bits1(gb);
411
412     if (m4ac->object_type == AOT_AAC_SCALABLE ||
413         m4ac->object_type == AOT_ER_AAC_SCALABLE)
414         skip_bits(gb, 3);     // layerNr
415
416     memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
417     if (channel_config == 0) {
418         skip_bits(gb, 4);  // element_instance_tag
419         if ((ret = decode_pce(avctx, m4ac, new_che_pos, gb)))
420             return ret;
421     } else {
422         if ((ret = set_default_channel_config(avctx, new_che_pos, channel_config)))
423             return ret;
424     }
425     if (ac && (ret = output_configure(ac, ac->che_pos, new_che_pos, channel_config, OC_GLOBAL_HDR)))
426         return ret;
427
428     if (extension_flag) {
429         switch (m4ac->object_type) {
430         case AOT_ER_BSAC:
431             skip_bits(gb, 5);    // numOfSubFrame
432             skip_bits(gb, 11);   // layer_length
433             break;
434         case AOT_ER_AAC_LC:
435         case AOT_ER_AAC_LTP:
436         case AOT_ER_AAC_SCALABLE:
437         case AOT_ER_AAC_LD:
438             skip_bits(gb, 3);  /* aacSectionDataResilienceFlag
439                                     * aacScalefactorDataResilienceFlag
440                                     * aacSpectralDataResilienceFlag
441                                     */
442             break;
443         }
444         skip_bits1(gb);    // extensionFlag3 (TBD in version 3)
445     }
446     return 0;
447 }
448
449 /**
450  * Decode audio specific configuration; reference: table 1.13.
451  *
452  * @param   ac          pointer to AACContext, may be null
453  * @param   avctx       pointer to AVCCodecContext, used for logging
454  * @param   m4ac        pointer to MPEG4AudioConfig, used for parsing
455  * @param   data        pointer to AVCodecContext extradata
456  * @param   data_size   size of AVCCodecContext extradata
457  *
458  * @return  Returns error status or number of consumed bits. <0 - error
459  */
460 static int decode_audio_specific_config(AACContext *ac,
461                                         AVCodecContext *avctx,
462                                         MPEG4AudioConfig *m4ac,
463                                         const uint8_t *data, int data_size)
464 {
465     GetBitContext gb;
466     int i;
467
468     av_dlog(avctx, "extradata size %d\n", avctx->extradata_size);
469     for (i = 0; i < avctx->extradata_size; i++)
470          av_dlog(avctx, "%02x ", avctx->extradata[i]);
471     av_dlog(avctx, "\n");
472
473     init_get_bits(&gb, data, data_size * 8);
474
475     if ((i = avpriv_mpeg4audio_get_config(m4ac, data, data_size)) < 0)
476         return -1;
477     if (m4ac->sampling_index > 12) {
478         av_log(avctx, AV_LOG_ERROR, "invalid sampling rate index %d\n", m4ac->sampling_index);
479         return -1;
480     }
481     if (m4ac->sbr == 1 && m4ac->ps == -1)
482         m4ac->ps = 1;
483
484     skip_bits_long(&gb, i);
485
486     switch (m4ac->object_type) {
487     case AOT_AAC_MAIN:
488     case AOT_AAC_LC:
489     case AOT_AAC_LTP:
490         if (decode_ga_specific_config(ac, avctx, &gb, m4ac, m4ac->chan_config))
491             return -1;
492         break;
493     default:
494         av_log(avctx, AV_LOG_ERROR, "Audio object type %s%d is not supported.\n",
495                m4ac->sbr == 1? "SBR+" : "", m4ac->object_type);
496         return -1;
497     }
498
499     av_dlog(avctx, "AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
500             m4ac->object_type, m4ac->chan_config, m4ac->sampling_index,
501             m4ac->sample_rate, m4ac->sbr, m4ac->ps);
502
503     return get_bits_count(&gb);
504 }
505
506 /**
507  * linear congruential pseudorandom number generator
508  *
509  * @param   previous_val    pointer to the current state of the generator
510  *
511  * @return  Returns a 32-bit pseudorandom integer
512  */
513 static av_always_inline int lcg_random(int previous_val)
514 {
515     return previous_val * 1664525 + 1013904223;
516 }
517
518 static av_always_inline void reset_predict_state(PredictorState *ps)
519 {
520     ps->r0   = 0.0f;
521     ps->r1   = 0.0f;
522     ps->cor0 = 0.0f;
523     ps->cor1 = 0.0f;
524     ps->var0 = 1.0f;
525     ps->var1 = 1.0f;
526 }
527
528 static void reset_all_predictors(PredictorState *ps)
529 {
530     int i;
531     for (i = 0; i < MAX_PREDICTORS; i++)
532         reset_predict_state(&ps[i]);
533 }
534
535 static int sample_rate_idx (int rate)
536 {
537          if (92017 <= rate) return 0;
538     else if (75132 <= rate) return 1;
539     else if (55426 <= rate) return 2;
540     else if (46009 <= rate) return 3;
541     else if (37566 <= rate) return 4;
542     else if (27713 <= rate) return 5;
543     else if (23004 <= rate) return 6;
544     else if (18783 <= rate) return 7;
545     else if (13856 <= rate) return 8;
546     else if (11502 <= rate) return 9;
547     else if (9391  <= rate) return 10;
548     else                    return 11;
549 }
550
551 static void reset_predictor_group(PredictorState *ps, int group_num)
552 {
553     int i;
554     for (i = group_num - 1; i < MAX_PREDICTORS; i += 30)
555         reset_predict_state(&ps[i]);
556 }
557
558 #define AAC_INIT_VLC_STATIC(num, size) \
559     INIT_VLC_STATIC(&vlc_spectral[num], 8, ff_aac_spectral_sizes[num], \
560          ff_aac_spectral_bits[num], sizeof( ff_aac_spectral_bits[num][0]), sizeof( ff_aac_spectral_bits[num][0]), \
561         ff_aac_spectral_codes[num], sizeof(ff_aac_spectral_codes[num][0]), sizeof(ff_aac_spectral_codes[num][0]), \
562         size);
563
564 static av_cold int aac_decode_init(AVCodecContext *avctx)
565 {
566     AACContext *ac = avctx->priv_data;
567     float output_scale_factor;
568
569     ac->avctx = avctx;
570     ac->m4ac.sample_rate = avctx->sample_rate;
571
572     if (avctx->extradata_size > 0) {
573         if (decode_audio_specific_config(ac, ac->avctx, &ac->m4ac,
574                                          avctx->extradata,
575                                          avctx->extradata_size) < 0)
576             return -1;
577     } else {
578         int sr, i;
579         enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
580
581         sr = sample_rate_idx(avctx->sample_rate);
582         ac->m4ac.sampling_index = sr;
583         ac->m4ac.channels = avctx->channels;
584         ac->m4ac.sbr = -1;
585         ac->m4ac.ps = -1;
586
587         for (i = 0; i < FF_ARRAY_ELEMS(ff_mpeg4audio_channels); i++)
588             if (ff_mpeg4audio_channels[i] == avctx->channels)
589                 break;
590         if (i == FF_ARRAY_ELEMS(ff_mpeg4audio_channels)) {
591             i = 0;
592         }
593         ac->m4ac.chan_config = i;
594
595         if (ac->m4ac.chan_config) {
596             int ret = set_default_channel_config(avctx, new_che_pos, ac->m4ac.chan_config);
597             if (!ret)
598                 output_configure(ac, ac->che_pos, new_che_pos, ac->m4ac.chan_config, OC_GLOBAL_HDR);
599             else if (avctx->err_recognition & AV_EF_EXPLODE)
600                 return AVERROR_INVALIDDATA;
601         }
602     }
603
604     if (avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT) {
605         avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
606         output_scale_factor = 1.0 / 32768.0;
607     } else {
608         avctx->sample_fmt = AV_SAMPLE_FMT_S16;
609         output_scale_factor = 1.0;
610     }
611
612     AAC_INIT_VLC_STATIC( 0, 304);
613     AAC_INIT_VLC_STATIC( 1, 270);
614     AAC_INIT_VLC_STATIC( 2, 550);
615     AAC_INIT_VLC_STATIC( 3, 300);
616     AAC_INIT_VLC_STATIC( 4, 328);
617     AAC_INIT_VLC_STATIC( 5, 294);
618     AAC_INIT_VLC_STATIC( 6, 306);
619     AAC_INIT_VLC_STATIC( 7, 268);
620     AAC_INIT_VLC_STATIC( 8, 510);
621     AAC_INIT_VLC_STATIC( 9, 366);
622     AAC_INIT_VLC_STATIC(10, 462);
623
624     ff_aac_sbr_init();
625
626     dsputil_init(&ac->dsp, avctx);
627     ff_fmt_convert_init(&ac->fmt_conv, avctx);
628
629     ac->random_state = 0x1f2e3d4c;
630
631     ff_aac_tableinit();
632
633     INIT_VLC_STATIC(&vlc_scalefactors,7,FF_ARRAY_ELEMS(ff_aac_scalefactor_code),
634                     ff_aac_scalefactor_bits, sizeof(ff_aac_scalefactor_bits[0]), sizeof(ff_aac_scalefactor_bits[0]),
635                     ff_aac_scalefactor_code, sizeof(ff_aac_scalefactor_code[0]), sizeof(ff_aac_scalefactor_code[0]),
636                     352);
637
638     ff_mdct_init(&ac->mdct,       11, 1, output_scale_factor/1024.0);
639     ff_mdct_init(&ac->mdct_small,  8, 1, output_scale_factor/128.0);
640     ff_mdct_init(&ac->mdct_ltp,   11, 0, -2.0/output_scale_factor);
641     // window initialization
642     ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
643     ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
644     ff_init_ff_sine_windows(10);
645     ff_init_ff_sine_windows( 7);
646
647     cbrt_tableinit();
648
649     return 0;
650 }
651
652 /**
653  * Skip data_stream_element; reference: table 4.10.
654  */
655 static int skip_data_stream_element(AACContext *ac, GetBitContext *gb)
656 {
657     int byte_align = get_bits1(gb);
658     int count = get_bits(gb, 8);
659     if (count == 255)
660         count += get_bits(gb, 8);
661     if (byte_align)
662         align_get_bits(gb);
663
664     if (get_bits_left(gb) < 8 * count) {
665         av_log(ac->avctx, AV_LOG_ERROR, overread_err);
666         return -1;
667     }
668     skip_bits_long(gb, 8 * count);
669     return 0;
670 }
671
672 static int decode_prediction(AACContext *ac, IndividualChannelStream *ics,
673                              GetBitContext *gb)
674 {
675     int sfb;
676     if (get_bits1(gb)) {
677         ics->predictor_reset_group = get_bits(gb, 5);
678         if (ics->predictor_reset_group == 0 || ics->predictor_reset_group > 30) {
679             av_log(ac->avctx, AV_LOG_ERROR, "Invalid Predictor Reset Group.\n");
680             return -1;
681         }
682     }
683     for (sfb = 0; sfb < FFMIN(ics->max_sfb, ff_aac_pred_sfb_max[ac->m4ac.sampling_index]); sfb++) {
684         ics->prediction_used[sfb] = get_bits1(gb);
685     }
686     return 0;
687 }
688
689 /**
690  * Decode Long Term Prediction data; reference: table 4.xx.
691  */
692 static void decode_ltp(AACContext *ac, LongTermPrediction *ltp,
693                        GetBitContext *gb, uint8_t max_sfb)
694 {
695     int sfb;
696
697     ltp->lag  = get_bits(gb, 11);
698     ltp->coef = ltp_coef[get_bits(gb, 3)];
699     for (sfb = 0; sfb < FFMIN(max_sfb, MAX_LTP_LONG_SFB); sfb++)
700         ltp->used[sfb] = get_bits1(gb);
701 }
702
703 /**
704  * Decode Individual Channel Stream info; reference: table 4.6.
705  *
706  * @param   common_window   Channels have independent [0], or shared [1], Individual Channel Stream information.
707  */
708 static int decode_ics_info(AACContext *ac, IndividualChannelStream *ics,
709                            GetBitContext *gb, int common_window)
710 {
711     if (get_bits1(gb)) {
712         av_log(ac->avctx, AV_LOG_ERROR, "Reserved bit set.\n");
713         memset(ics, 0, sizeof(IndividualChannelStream));
714         return -1;
715     }
716     ics->window_sequence[1] = ics->window_sequence[0];
717     ics->window_sequence[0] = get_bits(gb, 2);
718     ics->use_kb_window[1]   = ics->use_kb_window[0];
719     ics->use_kb_window[0]   = get_bits1(gb);
720     ics->num_window_groups  = 1;
721     ics->group_len[0]       = 1;
722     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
723         int i;
724         ics->max_sfb = get_bits(gb, 4);
725         for (i = 0; i < 7; i++) {
726             if (get_bits1(gb)) {
727                 ics->group_len[ics->num_window_groups - 1]++;
728             } else {
729                 ics->num_window_groups++;
730                 ics->group_len[ics->num_window_groups - 1] = 1;
731             }
732         }
733         ics->num_windows       = 8;
734         ics->swb_offset        =    ff_swb_offset_128[ac->m4ac.sampling_index];
735         ics->num_swb           =   ff_aac_num_swb_128[ac->m4ac.sampling_index];
736         ics->tns_max_bands     = ff_tns_max_bands_128[ac->m4ac.sampling_index];
737         ics->predictor_present = 0;
738     } else {
739         ics->max_sfb               = get_bits(gb, 6);
740         ics->num_windows           = 1;
741         ics->swb_offset            =    ff_swb_offset_1024[ac->m4ac.sampling_index];
742         ics->num_swb               =   ff_aac_num_swb_1024[ac->m4ac.sampling_index];
743         ics->tns_max_bands         = ff_tns_max_bands_1024[ac->m4ac.sampling_index];
744         ics->predictor_present     = get_bits1(gb);
745         ics->predictor_reset_group = 0;
746         if (ics->predictor_present) {
747             if (ac->m4ac.object_type == AOT_AAC_MAIN) {
748                 if (decode_prediction(ac, ics, gb)) {
749                     memset(ics, 0, sizeof(IndividualChannelStream));
750                     return -1;
751                 }
752             } else if (ac->m4ac.object_type == AOT_AAC_LC) {
753                 av_log(ac->avctx, AV_LOG_ERROR, "Prediction is not allowed in AAC-LC.\n");
754                 memset(ics, 0, sizeof(IndividualChannelStream));
755                 return -1;
756             } else {
757                 if ((ics->ltp.present = get_bits(gb, 1)))
758                     decode_ltp(ac, &ics->ltp, gb, ics->max_sfb);
759             }
760         }
761     }
762
763     if (ics->max_sfb > ics->num_swb) {
764         av_log(ac->avctx, AV_LOG_ERROR,
765                "Number of scalefactor bands in group (%d) exceeds limit (%d).\n",
766                ics->max_sfb, ics->num_swb);
767         memset(ics, 0, sizeof(IndividualChannelStream));
768         return -1;
769     }
770
771     return 0;
772 }
773
774 /**
775  * Decode band types (section_data payload); reference: table 4.46.
776  *
777  * @param   band_type           array of the used band type
778  * @param   band_type_run_end   array of the last scalefactor band of a band type run
779  *
780  * @return  Returns error status. 0 - OK, !0 - error
781  */
782 static int decode_band_types(AACContext *ac, enum BandType band_type[120],
783                              int band_type_run_end[120], GetBitContext *gb,
784                              IndividualChannelStream *ics)
785 {
786     int g, idx = 0;
787     const int bits = (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) ? 3 : 5;
788     for (g = 0; g < ics->num_window_groups; g++) {
789         int k = 0;
790         while (k < ics->max_sfb) {
791             uint8_t sect_end = k;
792             int sect_len_incr;
793             int sect_band_type = get_bits(gb, 4);
794             if (sect_band_type == 12) {
795                 av_log(ac->avctx, AV_LOG_ERROR, "invalid band type\n");
796                 return -1;
797             }
798             while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1)
799                 sect_end += sect_len_incr;
800             sect_end += sect_len_incr;
801             if (get_bits_left(gb) < 0) {
802                 av_log(ac->avctx, AV_LOG_ERROR, overread_err);
803                 return -1;
804             }
805             if (sect_end > ics->max_sfb) {
806                 av_log(ac->avctx, AV_LOG_ERROR,
807                        "Number of bands (%d) exceeds limit (%d).\n",
808                        sect_end, ics->max_sfb);
809                 return -1;
810             }
811             for (; k < sect_end; k++) {
812                 band_type        [idx]   = sect_band_type;
813                 band_type_run_end[idx++] = sect_end;
814             }
815         }
816     }
817     return 0;
818 }
819
820 /**
821  * Decode scalefactors; reference: table 4.47.
822  *
823  * @param   global_gain         first scalefactor value as scalefactors are differentially coded
824  * @param   band_type           array of the used band type
825  * @param   band_type_run_end   array of the last scalefactor band of a band type run
826  * @param   sf                  array of scalefactors or intensity stereo positions
827  *
828  * @return  Returns error status. 0 - OK, !0 - error
829  */
830 static int decode_scalefactors(AACContext *ac, float sf[120], GetBitContext *gb,
831                                unsigned int global_gain,
832                                IndividualChannelStream *ics,
833                                enum BandType band_type[120],
834                                int band_type_run_end[120])
835 {
836     int g, i, idx = 0;
837     int offset[3] = { global_gain, global_gain - 90, 0 };
838     int clipped_offset;
839     int noise_flag = 1;
840     static const char *sf_str[3] = { "Global gain", "Noise gain", "Intensity stereo position" };
841     for (g = 0; g < ics->num_window_groups; g++) {
842         for (i = 0; i < ics->max_sfb;) {
843             int run_end = band_type_run_end[idx];
844             if (band_type[idx] == ZERO_BT) {
845                 for (; i < run_end; i++, idx++)
846                     sf[idx] = 0.;
847             } else if ((band_type[idx] == INTENSITY_BT) || (band_type[idx] == INTENSITY_BT2)) {
848                 for (; i < run_end; i++, idx++) {
849                     offset[2] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
850                     clipped_offset = av_clip(offset[2], -155, 100);
851                     if (offset[2] != clipped_offset) {
852                         av_log_ask_for_sample(ac->avctx, "Intensity stereo "
853                                 "position clipped (%d -> %d).\nIf you heard an "
854                                 "audible artifact, there may be a bug in the "
855                                 "decoder. ", offset[2], clipped_offset);
856                     }
857                     sf[idx] = ff_aac_pow2sf_tab[-clipped_offset + POW_SF2_ZERO];
858                 }
859             } else if (band_type[idx] == NOISE_BT) {
860                 for (; i < run_end; i++, idx++) {
861                     if (noise_flag-- > 0)
862                         offset[1] += get_bits(gb, 9) - 256;
863                     else
864                         offset[1] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
865                     clipped_offset = av_clip(offset[1], -100, 155);
866                     if (offset[1] != clipped_offset) {
867                         av_log_ask_for_sample(ac->avctx, "Noise gain clipped "
868                                 "(%d -> %d).\nIf you heard an audible "
869                                 "artifact, there may be a bug in the decoder. ",
870                                 offset[1], clipped_offset);
871                     }
872                     sf[idx] = -ff_aac_pow2sf_tab[clipped_offset + POW_SF2_ZERO];
873                 }
874             } else {
875                 for (; i < run_end; i++, idx++) {
876                     offset[0] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
877                     if (offset[0] > 255U) {
878                         av_log(ac->avctx, AV_LOG_ERROR,
879                                "%s (%d) out of range.\n", sf_str[0], offset[0]);
880                         return -1;
881                     }
882                     sf[idx] = -ff_aac_pow2sf_tab[offset[0] - 100 + POW_SF2_ZERO];
883                 }
884             }
885         }
886     }
887     return 0;
888 }
889
890 /**
891  * Decode pulse data; reference: table 4.7.
892  */
893 static int decode_pulses(Pulse *pulse, GetBitContext *gb,
894                          const uint16_t *swb_offset, int num_swb)
895 {
896     int i, pulse_swb;
897     pulse->num_pulse = get_bits(gb, 2) + 1;
898     pulse_swb        = get_bits(gb, 6);
899     if (pulse_swb >= num_swb)
900         return -1;
901     pulse->pos[0]    = swb_offset[pulse_swb];
902     pulse->pos[0]   += get_bits(gb, 5);
903     if (pulse->pos[0] > 1023)
904         return -1;
905     pulse->amp[0]    = get_bits(gb, 4);
906     for (i = 1; i < pulse->num_pulse; i++) {
907         pulse->pos[i] = get_bits(gb, 5) + pulse->pos[i - 1];
908         if (pulse->pos[i] > 1023)
909             return -1;
910         pulse->amp[i] = get_bits(gb, 4);
911     }
912     return 0;
913 }
914
915 /**
916  * Decode Temporal Noise Shaping data; reference: table 4.48.
917  *
918  * @return  Returns error status. 0 - OK, !0 - error
919  */
920 static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns,
921                       GetBitContext *gb, const IndividualChannelStream *ics)
922 {
923     int w, filt, i, coef_len, coef_res, coef_compress;
924     const int is8 = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE;
925     const int tns_max_order = is8 ? 7 : ac->m4ac.object_type == AOT_AAC_MAIN ? 20 : 12;
926     for (w = 0; w < ics->num_windows; w++) {
927         if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) {
928             coef_res = get_bits1(gb);
929
930             for (filt = 0; filt < tns->n_filt[w]; filt++) {
931                 int tmp2_idx;
932                 tns->length[w][filt] = get_bits(gb, 6 - 2 * is8);
933
934                 if ((tns->order[w][filt] = get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
935                     av_log(ac->avctx, AV_LOG_ERROR, "TNS filter order %d is greater than maximum %d.\n",
936                            tns->order[w][filt], tns_max_order);
937                     tns->order[w][filt] = 0;
938                     return -1;
939                 }
940                 if (tns->order[w][filt]) {
941                     tns->direction[w][filt] = get_bits1(gb);
942                     coef_compress = get_bits1(gb);
943                     coef_len = coef_res + 3 - coef_compress;
944                     tmp2_idx = 2 * coef_compress + coef_res;
945
946                     for (i = 0; i < tns->order[w][filt]; i++)
947                         tns->coef[w][filt][i] = tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)];
948                 }
949             }
950         }
951     }
952     return 0;
953 }
954
955 /**
956  * Decode Mid/Side data; reference: table 4.54.
957  *
958  * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
959  *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
960  *                      [3] reserved for scalable AAC
961  */
962 static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb,
963                                    int ms_present)
964 {
965     int idx;
966     if (ms_present == 1) {
967         for (idx = 0; idx < cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb; idx++)
968             cpe->ms_mask[idx] = get_bits1(gb);
969     } else if (ms_present == 2) {
970         memset(cpe->ms_mask, 1, cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb * sizeof(cpe->ms_mask[0]));
971     }
972 }
973
974 #ifndef VMUL2
975 static inline float *VMUL2(float *dst, const float *v, unsigned idx,
976                            const float *scale)
977 {
978     float s = *scale;
979     *dst++ = v[idx    & 15] * s;
980     *dst++ = v[idx>>4 & 15] * s;
981     return dst;
982 }
983 #endif
984
985 #ifndef VMUL4
986 static inline float *VMUL4(float *dst, const float *v, unsigned idx,
987                            const float *scale)
988 {
989     float s = *scale;
990     *dst++ = v[idx    & 3] * s;
991     *dst++ = v[idx>>2 & 3] * s;
992     *dst++ = v[idx>>4 & 3] * s;
993     *dst++ = v[idx>>6 & 3] * s;
994     return dst;
995 }
996 #endif
997
998 #ifndef VMUL2S
999 static inline float *VMUL2S(float *dst, const float *v, unsigned idx,
1000                             unsigned sign, const float *scale)
1001 {
1002     union float754 s0, s1;
1003
1004     s0.f = s1.f = *scale;
1005     s0.i ^= sign >> 1 << 31;
1006     s1.i ^= sign      << 31;
1007
1008     *dst++ = v[idx    & 15] * s0.f;
1009     *dst++ = v[idx>>4 & 15] * s1.f;
1010
1011     return dst;
1012 }
1013 #endif
1014
1015 #ifndef VMUL4S
1016 static inline float *VMUL4S(float *dst, const float *v, unsigned idx,
1017                             unsigned sign, const float *scale)
1018 {
1019     unsigned nz = idx >> 12;
1020     union float754 s = { .f = *scale };
1021     union float754 t;
1022
1023     t.i = s.i ^ (sign & 1U<<31);
1024     *dst++ = v[idx    & 3] * t.f;
1025
1026     sign <<= nz & 1; nz >>= 1;
1027     t.i = s.i ^ (sign & 1U<<31);
1028     *dst++ = v[idx>>2 & 3] * t.f;
1029
1030     sign <<= nz & 1; nz >>= 1;
1031     t.i = s.i ^ (sign & 1U<<31);
1032     *dst++ = v[idx>>4 & 3] * t.f;
1033
1034     sign <<= nz & 1; nz >>= 1;
1035     t.i = s.i ^ (sign & 1U<<31);
1036     *dst++ = v[idx>>6 & 3] * t.f;
1037
1038     return dst;
1039 }
1040 #endif
1041
1042 /**
1043  * Decode spectral data; reference: table 4.50.
1044  * Dequantize and scale spectral data; reference: 4.6.3.3.
1045  *
1046  * @param   coef            array of dequantized, scaled spectral data
1047  * @param   sf              array of scalefactors or intensity stereo positions
1048  * @param   pulse_present   set if pulses are present
1049  * @param   pulse           pointer to pulse data struct
1050  * @param   band_type       array of the used band type
1051  *
1052  * @return  Returns error status. 0 - OK, !0 - error
1053  */
1054 static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
1055                                        GetBitContext *gb, const float sf[120],
1056                                        int pulse_present, const Pulse *pulse,
1057                                        const IndividualChannelStream *ics,
1058                                        enum BandType band_type[120])
1059 {
1060     int i, k, g, idx = 0;
1061     const int c = 1024 / ics->num_windows;
1062     const uint16_t *offsets = ics->swb_offset;
1063     float *coef_base = coef;
1064
1065     for (g = 0; g < ics->num_windows; g++)
1066         memset(coef + g * 128 + offsets[ics->max_sfb], 0, sizeof(float) * (c - offsets[ics->max_sfb]));
1067
1068     for (g = 0; g < ics->num_window_groups; g++) {
1069         unsigned g_len = ics->group_len[g];
1070
1071         for (i = 0; i < ics->max_sfb; i++, idx++) {
1072             const unsigned cbt_m1 = band_type[idx] - 1;
1073             float *cfo = coef + offsets[i];
1074             int off_len = offsets[i + 1] - offsets[i];
1075             int group;
1076
1077             if (cbt_m1 >= INTENSITY_BT2 - 1) {
1078                 for (group = 0; group < g_len; group++, cfo+=128) {
1079                     memset(cfo, 0, off_len * sizeof(float));
1080                 }
1081             } else if (cbt_m1 == NOISE_BT - 1) {
1082                 for (group = 0; group < g_len; group++, cfo+=128) {
1083                     float scale;
1084                     float band_energy;
1085
1086                     for (k = 0; k < off_len; k++) {
1087                         ac->random_state  = lcg_random(ac->random_state);
1088                         cfo[k] = ac->random_state;
1089                     }
1090
1091                     band_energy = ac->dsp.scalarproduct_float(cfo, cfo, off_len);
1092                     scale = sf[idx] / sqrtf(band_energy);
1093                     ac->dsp.vector_fmul_scalar(cfo, cfo, scale, off_len);
1094                 }
1095             } else {
1096                 const float *vq = ff_aac_codebook_vector_vals[cbt_m1];
1097                 const uint16_t *cb_vector_idx = ff_aac_codebook_vector_idx[cbt_m1];
1098                 VLC_TYPE (*vlc_tab)[2] = vlc_spectral[cbt_m1].table;
1099                 OPEN_READER(re, gb);
1100
1101                 switch (cbt_m1 >> 1) {
1102                 case 0:
1103                     for (group = 0; group < g_len; group++, cfo+=128) {
1104                         float *cf = cfo;
1105                         int len = off_len;
1106
1107                         do {
1108                             int code;
1109                             unsigned cb_idx;
1110
1111                             UPDATE_CACHE(re, gb);
1112                             GET_VLC(code, re, gb, vlc_tab, 8, 2);
1113                             cb_idx = cb_vector_idx[code];
1114                             cf = VMUL4(cf, vq, cb_idx, sf + idx);
1115                         } while (len -= 4);
1116                     }
1117                     break;
1118
1119                 case 1:
1120                     for (group = 0; group < g_len; group++, cfo+=128) {
1121                         float *cf = cfo;
1122                         int len = off_len;
1123
1124                         do {
1125                             int code;
1126                             unsigned nnz;
1127                             unsigned cb_idx;
1128                             uint32_t bits;
1129
1130                             UPDATE_CACHE(re, gb);
1131                             GET_VLC(code, re, gb, vlc_tab, 8, 2);
1132                             cb_idx = cb_vector_idx[code];
1133                             nnz = cb_idx >> 8 & 15;
1134                             bits = nnz ? GET_CACHE(re, gb) : 0;
1135                             LAST_SKIP_BITS(re, gb, nnz);
1136                             cf = VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1137                         } while (len -= 4);
1138                     }
1139                     break;
1140
1141                 case 2:
1142                     for (group = 0; group < g_len; group++, cfo+=128) {
1143                         float *cf = cfo;
1144                         int len = off_len;
1145
1146                         do {
1147                             int code;
1148                             unsigned cb_idx;
1149
1150                             UPDATE_CACHE(re, gb);
1151                             GET_VLC(code, re, gb, vlc_tab, 8, 2);
1152                             cb_idx = cb_vector_idx[code];
1153                             cf = VMUL2(cf, vq, cb_idx, sf + idx);
1154                         } while (len -= 2);
1155                     }
1156                     break;
1157
1158                 case 3:
1159                 case 4:
1160                     for (group = 0; group < g_len; group++, cfo+=128) {
1161                         float *cf = cfo;
1162                         int len = off_len;
1163
1164                         do {
1165                             int code;
1166                             unsigned nnz;
1167                             unsigned cb_idx;
1168                             unsigned sign;
1169
1170                             UPDATE_CACHE(re, gb);
1171                             GET_VLC(code, re, gb, vlc_tab, 8, 2);
1172                             cb_idx = cb_vector_idx[code];
1173                             nnz = cb_idx >> 8 & 15;
1174                             sign = nnz ? SHOW_UBITS(re, gb, nnz) << (cb_idx >> 12) : 0;
1175                             LAST_SKIP_BITS(re, gb, nnz);
1176                             cf = VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1177                         } while (len -= 2);
1178                     }
1179                     break;
1180
1181                 default:
1182                     for (group = 0; group < g_len; group++, cfo+=128) {
1183                         float *cf = cfo;
1184                         uint32_t *icf = (uint32_t *) cf;
1185                         int len = off_len;
1186
1187                         do {
1188                             int code;
1189                             unsigned nzt, nnz;
1190                             unsigned cb_idx;
1191                             uint32_t bits;
1192                             int j;
1193
1194                             UPDATE_CACHE(re, gb);
1195                             GET_VLC(code, re, gb, vlc_tab, 8, 2);
1196
1197                             if (!code) {
1198                                 *icf++ = 0;
1199                                 *icf++ = 0;
1200                                 continue;
1201                             }
1202
1203                             cb_idx = cb_vector_idx[code];
1204                             nnz = cb_idx >> 12;
1205                             nzt = cb_idx >> 8;
1206                             bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
1207                             LAST_SKIP_BITS(re, gb, nnz);
1208
1209                             for (j = 0; j < 2; j++) {
1210                                 if (nzt & 1<<j) {
1211                                     uint32_t b;
1212                                     int n;
1213                                     /* The total length of escape_sequence must be < 22 bits according
1214                                        to the specification (i.e. max is 111111110xxxxxxxxxxxx). */
1215                                     UPDATE_CACHE(re, gb);
1216                                     b = GET_CACHE(re, gb);
1217                                     b = 31 - av_log2(~b);
1218
1219                                     if (b > 8) {
1220                                         av_log(ac->avctx, AV_LOG_ERROR, "error in spectral data, ESC overflow\n");
1221                                         return -1;
1222                                     }
1223
1224                                     SKIP_BITS(re, gb, b + 1);
1225                                     b += 4;
1226                                     n = (1 << b) + SHOW_UBITS(re, gb, b);
1227                                     LAST_SKIP_BITS(re, gb, b);
1228                                     *icf++ = cbrt_tab[n] | (bits & 1U<<31);
1229                                     bits <<= 1;
1230                                 } else {
1231                                     unsigned v = ((const uint32_t*)vq)[cb_idx & 15];
1232                                     *icf++ = (bits & 1U<<31) | v;
1233                                     bits <<= !!v;
1234                                 }
1235                                 cb_idx >>= 4;
1236                             }
1237                         } while (len -= 2);
1238
1239                         ac->dsp.vector_fmul_scalar(cfo, cfo, sf[idx], off_len);
1240                     }
1241                 }
1242
1243                 CLOSE_READER(re, gb);
1244             }
1245         }
1246         coef += g_len << 7;
1247     }
1248
1249     if (pulse_present) {
1250         idx = 0;
1251         for (i = 0; i < pulse->num_pulse; i++) {
1252             float co = coef_base[ pulse->pos[i] ];
1253             while (offsets[idx + 1] <= pulse->pos[i])
1254                 idx++;
1255             if (band_type[idx] != NOISE_BT && sf[idx]) {
1256                 float ico = -pulse->amp[i];
1257                 if (co) {
1258                     co /= sf[idx];
1259                     ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
1260                 }
1261                 coef_base[ pulse->pos[i] ] = cbrtf(fabsf(ico)) * ico * sf[idx];
1262             }
1263         }
1264     }
1265     return 0;
1266 }
1267
1268 static av_always_inline float flt16_round(float pf)
1269 {
1270     union float754 tmp;
1271     tmp.f = pf;
1272     tmp.i = (tmp.i + 0x00008000U) & 0xFFFF0000U;
1273     return tmp.f;
1274 }
1275
1276 static av_always_inline float flt16_even(float pf)
1277 {
1278     union float754 tmp;
1279     tmp.f = pf;
1280     tmp.i = (tmp.i + 0x00007FFFU + (tmp.i & 0x00010000U >> 16)) & 0xFFFF0000U;
1281     return tmp.f;
1282 }
1283
1284 static av_always_inline float flt16_trunc(float pf)
1285 {
1286     union float754 pun;
1287     pun.f = pf;
1288     pun.i &= 0xFFFF0000U;
1289     return pun.f;
1290 }
1291
1292 static av_always_inline void predict(PredictorState *ps, float *coef,
1293                                      int output_enable)
1294 {
1295     const float a     = 0.953125; // 61.0 / 64
1296     const float alpha = 0.90625;  // 29.0 / 32
1297     float e0, e1;
1298     float pv;
1299     float k1, k2;
1300     float   r0 = ps->r0,     r1 = ps->r1;
1301     float cor0 = ps->cor0, cor1 = ps->cor1;
1302     float var0 = ps->var0, var1 = ps->var1;
1303
1304     k1 = var0 > 1 ? cor0 * flt16_even(a / var0) : 0;
1305     k2 = var1 > 1 ? cor1 * flt16_even(a / var1) : 0;
1306
1307     pv = flt16_round(k1 * r0 + k2 * r1);
1308     if (output_enable)
1309         *coef += pv;
1310
1311     e0 = *coef;
1312     e1 = e0 - k1 * r0;
1313
1314     ps->cor1 = flt16_trunc(alpha * cor1 + r1 * e1);
1315     ps->var1 = flt16_trunc(alpha * var1 + 0.5f * (r1 * r1 + e1 * e1));
1316     ps->cor0 = flt16_trunc(alpha * cor0 + r0 * e0);
1317     ps->var0 = flt16_trunc(alpha * var0 + 0.5f * (r0 * r0 + e0 * e0));
1318
1319     ps->r1 = flt16_trunc(a * (r0 - k1 * e0));
1320     ps->r0 = flt16_trunc(a * e0);
1321 }
1322
1323 /**
1324  * Apply AAC-Main style frequency domain prediction.
1325  */
1326 static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
1327 {
1328     int sfb, k;
1329
1330     if (!sce->ics.predictor_initialized) {
1331         reset_all_predictors(sce->predictor_state);
1332         sce->ics.predictor_initialized = 1;
1333     }
1334
1335     if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
1336         for (sfb = 0; sfb < ff_aac_pred_sfb_max[ac->m4ac.sampling_index]; sfb++) {
1337             for (k = sce->ics.swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
1338                 predict(&sce->predictor_state[k], &sce->coeffs[k],
1339                         sce->ics.predictor_present && sce->ics.prediction_used[sfb]);
1340             }
1341         }
1342         if (sce->ics.predictor_reset_group)
1343             reset_predictor_group(sce->predictor_state, sce->ics.predictor_reset_group);
1344     } else
1345         reset_all_predictors(sce->predictor_state);
1346 }
1347
1348 /**
1349  * Decode an individual_channel_stream payload; reference: table 4.44.
1350  *
1351  * @param   common_window   Channels have independent [0], or shared [1], Individual Channel Stream information.
1352  * @param   scale_flag      scalable [1] or non-scalable [0] AAC (Unused until scalable AAC is implemented.)
1353  *
1354  * @return  Returns error status. 0 - OK, !0 - error
1355  */
1356 static int decode_ics(AACContext *ac, SingleChannelElement *sce,
1357                       GetBitContext *gb, int common_window, int scale_flag)
1358 {
1359     Pulse pulse;
1360     TemporalNoiseShaping    *tns = &sce->tns;
1361     IndividualChannelStream *ics = &sce->ics;
1362     float *out = sce->coeffs;
1363     int global_gain, pulse_present = 0;
1364
1365     /* This assignment is to silence a GCC warning about the variable being used
1366      * uninitialized when in fact it always is.
1367      */
1368     pulse.num_pulse = 0;
1369
1370     global_gain = get_bits(gb, 8);
1371
1372     if (!common_window && !scale_flag) {
1373         if (decode_ics_info(ac, ics, gb, 0) < 0)
1374             return -1;
1375     }
1376
1377     if (decode_band_types(ac, sce->band_type, sce->band_type_run_end, gb, ics) < 0)
1378         return -1;
1379     if (decode_scalefactors(ac, sce->sf, gb, global_gain, ics, sce->band_type, sce->band_type_run_end) < 0)
1380         return -1;
1381
1382     pulse_present = 0;
1383     if (!scale_flag) {
1384         if ((pulse_present = get_bits1(gb))) {
1385             if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1386                 av_log(ac->avctx, AV_LOG_ERROR, "Pulse tool not allowed in eight short sequence.\n");
1387                 return -1;
1388             }
1389             if (decode_pulses(&pulse, gb, ics->swb_offset, ics->num_swb)) {
1390                 av_log(ac->avctx, AV_LOG_ERROR, "Pulse data corrupt or invalid.\n");
1391                 return -1;
1392             }
1393         }
1394         if ((tns->present = get_bits1(gb)) && decode_tns(ac, tns, gb, ics))
1395             return -1;
1396         if (get_bits1(gb)) {
1397             av_log_missing_feature(ac->avctx, "SSR", 1);
1398             return -1;
1399         }
1400     }
1401
1402     if (decode_spectrum_and_dequant(ac, out, gb, sce->sf, pulse_present, &pulse, ics, sce->band_type) < 0)
1403         return -1;
1404
1405     if (ac->m4ac.object_type == AOT_AAC_MAIN && !common_window)
1406         apply_prediction(ac, sce);
1407
1408     return 0;
1409 }
1410
1411 /**
1412  * Mid/Side stereo decoding; reference: 4.6.8.1.3.
1413  */
1414 static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
1415 {
1416     const IndividualChannelStream *ics = &cpe->ch[0].ics;
1417     float *ch0 = cpe->ch[0].coeffs;
1418     float *ch1 = cpe->ch[1].coeffs;
1419     int g, i, group, idx = 0;
1420     const uint16_t *offsets = ics->swb_offset;
1421     for (g = 0; g < ics->num_window_groups; g++) {
1422         for (i = 0; i < ics->max_sfb; i++, idx++) {
1423             if (cpe->ms_mask[idx] &&
1424                     cpe->ch[0].band_type[idx] < NOISE_BT && cpe->ch[1].band_type[idx] < NOISE_BT) {
1425                 for (group = 0; group < ics->group_len[g]; group++) {
1426                     ac->dsp.butterflies_float(ch0 + group * 128 + offsets[i],
1427                                               ch1 + group * 128 + offsets[i],
1428                                               offsets[i+1] - offsets[i]);
1429                 }
1430             }
1431         }
1432         ch0 += ics->group_len[g] * 128;
1433         ch1 += ics->group_len[g] * 128;
1434     }
1435 }
1436
1437 /**
1438  * intensity stereo decoding; reference: 4.6.8.2.3
1439  *
1440  * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
1441  *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
1442  *                      [3] reserved for scalable AAC
1443  */
1444 static void apply_intensity_stereo(AACContext *ac, ChannelElement *cpe, int ms_present)
1445 {
1446     const IndividualChannelStream *ics = &cpe->ch[1].ics;
1447     SingleChannelElement         *sce1 = &cpe->ch[1];
1448     float *coef0 = cpe->ch[0].coeffs, *coef1 = cpe->ch[1].coeffs;
1449     const uint16_t *offsets = ics->swb_offset;
1450     int g, group, i, idx = 0;
1451     int c;
1452     float scale;
1453     for (g = 0; g < ics->num_window_groups; g++) {
1454         for (i = 0; i < ics->max_sfb;) {
1455             if (sce1->band_type[idx] == INTENSITY_BT || sce1->band_type[idx] == INTENSITY_BT2) {
1456                 const int bt_run_end = sce1->band_type_run_end[idx];
1457                 for (; i < bt_run_end; i++, idx++) {
1458                     c = -1 + 2 * (sce1->band_type[idx] - 14);
1459                     if (ms_present)
1460                         c *= 1 - 2 * cpe->ms_mask[idx];
1461                     scale = c * sce1->sf[idx];
1462                     for (group = 0; group < ics->group_len[g]; group++)
1463                         ac->dsp.vector_fmul_scalar(coef1 + group * 128 + offsets[i],
1464                                                    coef0 + group * 128 + offsets[i],
1465                                                    scale,
1466                                                    offsets[i + 1] - offsets[i]);
1467                 }
1468             } else {
1469                 int bt_run_end = sce1->band_type_run_end[idx];
1470                 idx += bt_run_end - i;
1471                 i    = bt_run_end;
1472             }
1473         }
1474         coef0 += ics->group_len[g] * 128;
1475         coef1 += ics->group_len[g] * 128;
1476     }
1477 }
1478
1479 /**
1480  * Decode a channel_pair_element; reference: table 4.4.
1481  *
1482  * @return  Returns error status. 0 - OK, !0 - error
1483  */
1484 static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
1485 {
1486     int i, ret, common_window, ms_present = 0;
1487
1488     common_window = get_bits1(gb);
1489     if (common_window) {
1490         if (decode_ics_info(ac, &cpe->ch[0].ics, gb, 1))
1491             return -1;
1492         i = cpe->ch[1].ics.use_kb_window[0];
1493         cpe->ch[1].ics = cpe->ch[0].ics;
1494         cpe->ch[1].ics.use_kb_window[1] = i;
1495         if (cpe->ch[1].ics.predictor_present && (ac->m4ac.object_type != AOT_AAC_MAIN))
1496             if ((cpe->ch[1].ics.ltp.present = get_bits(gb, 1)))
1497                 decode_ltp(ac, &cpe->ch[1].ics.ltp, gb, cpe->ch[1].ics.max_sfb);
1498         ms_present = get_bits(gb, 2);
1499         if (ms_present == 3) {
1500             av_log(ac->avctx, AV_LOG_ERROR, "ms_present = 3 is reserved.\n");
1501             return -1;
1502         } else if (ms_present)
1503             decode_mid_side_stereo(cpe, gb, ms_present);
1504     }
1505     if ((ret = decode_ics(ac, &cpe->ch[0], gb, common_window, 0)))
1506         return ret;
1507     if ((ret = decode_ics(ac, &cpe->ch[1], gb, common_window, 0)))
1508         return ret;
1509
1510     if (common_window) {
1511         if (ms_present)
1512             apply_mid_side_stereo(ac, cpe);
1513         if (ac->m4ac.object_type == AOT_AAC_MAIN) {
1514             apply_prediction(ac, &cpe->ch[0]);
1515             apply_prediction(ac, &cpe->ch[1]);
1516         }
1517     }
1518
1519     apply_intensity_stereo(ac, cpe, ms_present);
1520     return 0;
1521 }
1522
1523 static const float cce_scale[] = {
1524     1.09050773266525765921, //2^(1/8)
1525     1.18920711500272106672, //2^(1/4)
1526     M_SQRT2,
1527     2,
1528 };
1529
1530 /**
1531  * Decode coupling_channel_element; reference: table 4.8.
1532  *
1533  * @return  Returns error status. 0 - OK, !0 - error
1534  */
1535 static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
1536 {
1537     int num_gain = 0;
1538     int c, g, sfb, ret;
1539     int sign;
1540     float scale;
1541     SingleChannelElement *sce = &che->ch[0];
1542     ChannelCoupling     *coup = &che->coup;
1543
1544     coup->coupling_point = 2 * get_bits1(gb);
1545     coup->num_coupled = get_bits(gb, 3);
1546     for (c = 0; c <= coup->num_coupled; c++) {
1547         num_gain++;
1548         coup->type[c] = get_bits1(gb) ? TYPE_CPE : TYPE_SCE;
1549         coup->id_select[c] = get_bits(gb, 4);
1550         if (coup->type[c] == TYPE_CPE) {
1551             coup->ch_select[c] = get_bits(gb, 2);
1552             if (coup->ch_select[c] == 3)
1553                 num_gain++;
1554         } else
1555             coup->ch_select[c] = 2;
1556     }
1557     coup->coupling_point += get_bits1(gb) || (coup->coupling_point >> 1);
1558
1559     sign  = get_bits(gb, 1);
1560     scale = cce_scale[get_bits(gb, 2)];
1561
1562     if ((ret = decode_ics(ac, sce, gb, 0, 0)))
1563         return ret;
1564
1565     for (c = 0; c < num_gain; c++) {
1566         int idx  = 0;
1567         int cge  = 1;
1568         int gain = 0;
1569         float gain_cache = 1.;
1570         if (c) {
1571             cge = coup->coupling_point == AFTER_IMDCT ? 1 : get_bits1(gb);
1572             gain = cge ? get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60: 0;
1573             gain_cache = powf(scale, -gain);
1574         }
1575         if (coup->coupling_point == AFTER_IMDCT) {
1576             coup->gain[c][0] = gain_cache;
1577         } else {
1578             for (g = 0; g < sce->ics.num_window_groups; g++) {
1579                 for (sfb = 0; sfb < sce->ics.max_sfb; sfb++, idx++) {
1580                     if (sce->band_type[idx] != ZERO_BT) {
1581                         if (!cge) {
1582                             int t = get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
1583                             if (t) {
1584                                 int s = 1;
1585                                 t = gain += t;
1586                                 if (sign) {
1587                                     s  -= 2 * (t & 0x1);
1588                                     t >>= 1;
1589                                 }
1590                                 gain_cache = powf(scale, -t) * s;
1591                             }
1592                         }
1593                         coup->gain[c][idx] = gain_cache;
1594                     }
1595                 }
1596             }
1597         }
1598     }
1599     return 0;
1600 }
1601
1602 /**
1603  * Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
1604  *
1605  * @return  Returns number of bytes consumed.
1606  */
1607 static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc,
1608                                          GetBitContext *gb)
1609 {
1610     int i;
1611     int num_excl_chan = 0;
1612
1613     do {
1614         for (i = 0; i < 7; i++)
1615             che_drc->exclude_mask[num_excl_chan++] = get_bits1(gb);
1616     } while (num_excl_chan < MAX_CHANNELS - 7 && get_bits1(gb));
1617
1618     return num_excl_chan / 7;
1619 }
1620
1621 /**
1622  * Decode dynamic range information; reference: table 4.52.
1623  *
1624  * @param   cnt length of TYPE_FIL syntactic element in bytes
1625  *
1626  * @return  Returns number of bytes consumed.
1627  */
1628 static int decode_dynamic_range(DynamicRangeControl *che_drc,
1629                                 GetBitContext *gb, int cnt)
1630 {
1631     int n             = 1;
1632     int drc_num_bands = 1;
1633     int i;
1634
1635     /* pce_tag_present? */
1636     if (get_bits1(gb)) {
1637         che_drc->pce_instance_tag  = get_bits(gb, 4);
1638         skip_bits(gb, 4); // tag_reserved_bits
1639         n++;
1640     }
1641
1642     /* excluded_chns_present? */
1643     if (get_bits1(gb)) {
1644         n += decode_drc_channel_exclusions(che_drc, gb);
1645     }
1646
1647     /* drc_bands_present? */
1648     if (get_bits1(gb)) {
1649         che_drc->band_incr            = get_bits(gb, 4);
1650         che_drc->interpolation_scheme = get_bits(gb, 4);
1651         n++;
1652         drc_num_bands += che_drc->band_incr;
1653         for (i = 0; i < drc_num_bands; i++) {
1654             che_drc->band_top[i] = get_bits(gb, 8);
1655             n++;
1656         }
1657     }
1658
1659     /* prog_ref_level_present? */
1660     if (get_bits1(gb)) {
1661         che_drc->prog_ref_level = get_bits(gb, 7);
1662         skip_bits1(gb); // prog_ref_level_reserved_bits
1663         n++;
1664     }
1665
1666     for (i = 0; i < drc_num_bands; i++) {
1667         che_drc->dyn_rng_sgn[i] = get_bits1(gb);
1668         che_drc->dyn_rng_ctl[i] = get_bits(gb, 7);
1669         n++;
1670     }
1671
1672     return n;
1673 }
1674
1675 /**
1676  * Decode extension data (incomplete); reference: table 4.51.
1677  *
1678  * @param   cnt length of TYPE_FIL syntactic element in bytes
1679  *
1680  * @return Returns number of bytes consumed
1681  */
1682 static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt,
1683                                     ChannelElement *che, enum RawDataBlockType elem_type)
1684 {
1685     int crc_flag = 0;
1686     int res = cnt;
1687     switch (get_bits(gb, 4)) { // extension type
1688     case EXT_SBR_DATA_CRC:
1689         crc_flag++;
1690     case EXT_SBR_DATA:
1691         if (!che) {
1692             av_log(ac->avctx, AV_LOG_ERROR, "SBR was found before the first channel element.\n");
1693             return res;
1694         } else if (!ac->m4ac.sbr) {
1695             av_log(ac->avctx, AV_LOG_ERROR, "SBR signaled to be not-present but was found in the bitstream.\n");
1696             skip_bits_long(gb, 8 * cnt - 4);
1697             return res;
1698         } else if (ac->m4ac.sbr == -1 && ac->output_configured == OC_LOCKED) {
1699             av_log(ac->avctx, AV_LOG_ERROR, "Implicit SBR was found with a first occurrence after the first frame.\n");
1700             skip_bits_long(gb, 8 * cnt - 4);
1701             return res;
1702         } else if (ac->m4ac.ps == -1 && ac->output_configured < OC_LOCKED && ac->avctx->channels == 1) {
1703             ac->m4ac.sbr = 1;
1704             ac->m4ac.ps = 1;
1705             output_configure(ac, ac->che_pos, ac->che_pos, ac->m4ac.chan_config, ac->output_configured);
1706         } else {
1707             ac->m4ac.sbr = 1;
1708         }
1709         res = ff_decode_sbr_extension(ac, &che->sbr, gb, crc_flag, cnt, elem_type);
1710         break;
1711     case EXT_DYNAMIC_RANGE:
1712         res = decode_dynamic_range(&ac->che_drc, gb, cnt);
1713         break;
1714     case EXT_FILL:
1715     case EXT_FILL_DATA:
1716     case EXT_DATA_ELEMENT:
1717     default:
1718         skip_bits_long(gb, 8 * cnt - 4);
1719         break;
1720     };
1721     return res;
1722 }
1723
1724 /**
1725  * Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4.6.9.3.
1726  *
1727  * @param   decode  1 if tool is used normally, 0 if tool is used in LTP.
1728  * @param   coef    spectral coefficients
1729  */
1730 static void apply_tns(float coef[1024], TemporalNoiseShaping *tns,
1731                       IndividualChannelStream *ics, int decode)
1732 {
1733     const int mmm = FFMIN(ics->tns_max_bands, ics->max_sfb);
1734     int w, filt, m, i;
1735     int bottom, top, order, start, end, size, inc;
1736     float lpc[TNS_MAX_ORDER];
1737     float tmp[TNS_MAX_ORDER];
1738
1739     for (w = 0; w < ics->num_windows; w++) {
1740         bottom = ics->num_swb;
1741         for (filt = 0; filt < tns->n_filt[w]; filt++) {
1742             top    = bottom;
1743             bottom = FFMAX(0, top - tns->length[w][filt]);
1744             order  = tns->order[w][filt];
1745             if (order == 0)
1746                 continue;
1747
1748             // tns_decode_coef
1749             compute_lpc_coefs(tns->coef[w][filt], order, lpc, 0, 0, 0);
1750
1751             start = ics->swb_offset[FFMIN(bottom, mmm)];
1752             end   = ics->swb_offset[FFMIN(   top, mmm)];
1753             if ((size = end - start) <= 0)
1754                 continue;
1755             if (tns->direction[w][filt]) {
1756                 inc = -1;
1757                 start = end - 1;
1758             } else {
1759                 inc = 1;
1760             }
1761             start += w * 128;
1762
1763             if (decode) {
1764                 // ar filter
1765                 for (m = 0; m < size; m++, start += inc)
1766                     for (i = 1; i <= FFMIN(m, order); i++)
1767                         coef[start] -= coef[start - i * inc] * lpc[i - 1];
1768             } else {
1769                 // ma filter
1770                 for (m = 0; m < size; m++, start += inc) {
1771                     tmp[0] = coef[start];
1772                     for (i = 1; i <= FFMIN(m, order); i++)
1773                         coef[start] += tmp[i] * lpc[i - 1];
1774                     for (i = order; i > 0; i--)
1775                         tmp[i] = tmp[i - 1];
1776                 }
1777             }
1778         }
1779     }
1780 }
1781
1782 /**
1783  *  Apply windowing and MDCT to obtain the spectral
1784  *  coefficient from the predicted sample by LTP.
1785  */
1786 static void windowing_and_mdct_ltp(AACContext *ac, float *out,
1787                                    float *in, IndividualChannelStream *ics)
1788 {
1789     const float *lwindow      = ics->use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
1790     const float *swindow      = ics->use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
1791     const float *lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
1792     const float *swindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
1793
1794     if (ics->window_sequence[0] != LONG_STOP_SEQUENCE) {
1795         ac->dsp.vector_fmul(in, in, lwindow_prev, 1024);
1796     } else {
1797         memset(in, 0, 448 * sizeof(float));
1798         ac->dsp.vector_fmul(in + 448, in + 448, swindow_prev, 128);
1799     }
1800     if (ics->window_sequence[0] != LONG_START_SEQUENCE) {
1801         ac->dsp.vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024);
1802     } else {
1803         ac->dsp.vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128);
1804         memset(in + 1024 + 576, 0, 448 * sizeof(float));
1805     }
1806     ac->mdct_ltp.mdct_calc(&ac->mdct_ltp, out, in);
1807 }
1808
1809 /**
1810  * Apply the long term prediction
1811  */
1812 static void apply_ltp(AACContext *ac, SingleChannelElement *sce)
1813 {
1814     const LongTermPrediction *ltp = &sce->ics.ltp;
1815     const uint16_t *offsets = sce->ics.swb_offset;
1816     int i, sfb;
1817
1818     if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
1819         float *predTime = sce->ret;
1820         float *predFreq = ac->buf_mdct;
1821         int16_t num_samples = 2048;
1822
1823         if (ltp->lag < 1024)
1824             num_samples = ltp->lag + 1024;
1825         for (i = 0; i < num_samples; i++)
1826             predTime[i] = sce->ltp_state[i + 2048 - ltp->lag] * ltp->coef;
1827         memset(&predTime[i], 0, (2048 - i) * sizeof(float));
1828
1829         windowing_and_mdct_ltp(ac, predFreq, predTime, &sce->ics);
1830
1831         if (sce->tns.present)
1832             apply_tns(predFreq, &sce->tns, &sce->ics, 0);
1833
1834         for (sfb = 0; sfb < FFMIN(sce->ics.max_sfb, MAX_LTP_LONG_SFB); sfb++)
1835             if (ltp->used[sfb])
1836                 for (i = offsets[sfb]; i < offsets[sfb + 1]; i++)
1837                     sce->coeffs[i] += predFreq[i];
1838     }
1839 }
1840
1841 /**
1842  * Update the LTP buffer for next frame
1843  */
1844 static void update_ltp(AACContext *ac, SingleChannelElement *sce)
1845 {
1846     IndividualChannelStream *ics = &sce->ics;
1847     float *saved     = sce->saved;
1848     float *saved_ltp = sce->coeffs;
1849     const float *lwindow = ics->use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
1850     const float *swindow = ics->use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
1851     int i;
1852
1853     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1854         memcpy(saved_ltp,       saved, 512 * sizeof(float));
1855         memset(saved_ltp + 576, 0,     448 * sizeof(float));
1856         ac->dsp.vector_fmul_reverse(saved_ltp + 448, ac->buf_mdct + 960,     &swindow[64],      64);
1857         for (i = 0; i < 64; i++)
1858             saved_ltp[i + 512] = ac->buf_mdct[1023 - i] * swindow[63 - i];
1859     } else if (ics->window_sequence[0] == LONG_START_SEQUENCE) {
1860         memcpy(saved_ltp,       ac->buf_mdct + 512, 448 * sizeof(float));
1861         memset(saved_ltp + 576, 0,                  448 * sizeof(float));
1862         ac->dsp.vector_fmul_reverse(saved_ltp + 448, ac->buf_mdct + 960,     &swindow[64],      64);
1863         for (i = 0; i < 64; i++)
1864             saved_ltp[i + 512] = ac->buf_mdct[1023 - i] * swindow[63 - i];
1865     } else { // LONG_STOP or ONLY_LONG
1866         ac->dsp.vector_fmul_reverse(saved_ltp,       ac->buf_mdct + 512,     &lwindow[512],     512);
1867         for (i = 0; i < 512; i++)
1868             saved_ltp[i + 512] = ac->buf_mdct[1023 - i] * lwindow[511 - i];
1869     }
1870
1871     memcpy(sce->ltp_state,      sce->ltp_state+1024, 1024 * sizeof(*sce->ltp_state));
1872     memcpy(sce->ltp_state+1024, sce->ret,            1024 * sizeof(*sce->ltp_state));
1873     memcpy(sce->ltp_state+2048, saved_ltp,           1024 * sizeof(*sce->ltp_state));
1874 }
1875
1876 /**
1877  * Conduct IMDCT and windowing.
1878  */
1879 static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
1880 {
1881     IndividualChannelStream *ics = &sce->ics;
1882     float *in    = sce->coeffs;
1883     float *out   = sce->ret;
1884     float *saved = sce->saved;
1885     const float *swindow      = ics->use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
1886     const float *lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
1887     const float *swindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
1888     float *buf  = ac->buf_mdct;
1889     float *temp = ac->temp;
1890     int i;
1891
1892     // imdct
1893     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1894         for (i = 0; i < 1024; i += 128)
1895             ac->mdct_small.imdct_half(&ac->mdct_small, buf + i, in + i);
1896     } else
1897         ac->mdct.imdct_half(&ac->mdct, buf, in);
1898
1899     /* window overlapping
1900      * NOTE: To simplify the overlapping code, all 'meaningless' short to long
1901      * and long to short transitions are considered to be short to short
1902      * transitions. This leaves just two cases (long to long and short to short)
1903      * with a little special sauce for EIGHT_SHORT_SEQUENCE.
1904      */
1905     if ((ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE) &&
1906             (ics->window_sequence[0] == ONLY_LONG_SEQUENCE || ics->window_sequence[0] == LONG_START_SEQUENCE)) {
1907         ac->dsp.vector_fmul_window(    out,               saved,            buf,         lwindow_prev, 512);
1908     } else {
1909         memcpy(                        out,               saved,            448 * sizeof(float));
1910
1911         if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1912             ac->dsp.vector_fmul_window(out + 448 + 0*128, saved + 448,      buf + 0*128, swindow_prev, 64);
1913             ac->dsp.vector_fmul_window(out + 448 + 1*128, buf + 0*128 + 64, buf + 1*128, swindow,      64);
1914             ac->dsp.vector_fmul_window(out + 448 + 2*128, buf + 1*128 + 64, buf + 2*128, swindow,      64);
1915             ac->dsp.vector_fmul_window(out + 448 + 3*128, buf + 2*128 + 64, buf + 3*128, swindow,      64);
1916             ac->dsp.vector_fmul_window(temp,              buf + 3*128 + 64, buf + 4*128, swindow,      64);
1917             memcpy(                    out + 448 + 4*128, temp, 64 * sizeof(float));
1918         } else {
1919             ac->dsp.vector_fmul_window(out + 448,         saved + 448,      buf,         swindow_prev, 64);
1920             memcpy(                    out + 576,         buf + 64,         448 * sizeof(float));
1921         }
1922     }
1923
1924     // buffer update
1925     if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1926         memcpy(                    saved,       temp + 64,         64 * sizeof(float));
1927         ac->dsp.vector_fmul_window(saved + 64,  buf + 4*128 + 64, buf + 5*128, swindow, 64);
1928         ac->dsp.vector_fmul_window(saved + 192, buf + 5*128 + 64, buf + 6*128, swindow, 64);
1929         ac->dsp.vector_fmul_window(saved + 320, buf + 6*128 + 64, buf + 7*128, swindow, 64);
1930         memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1931     } else if (ics->window_sequence[0] == LONG_START_SEQUENCE) {
1932         memcpy(                    saved,       buf + 512,        448 * sizeof(float));
1933         memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1934     } else { // LONG_STOP or ONLY_LONG
1935         memcpy(                    saved,       buf + 512,        512 * sizeof(float));
1936     }
1937 }
1938
1939 /**
1940  * Apply dependent channel coupling (applied before IMDCT).
1941  *
1942  * @param   index   index into coupling gain array
1943  */
1944 static void apply_dependent_coupling(AACContext *ac,
1945                                      SingleChannelElement *target,
1946                                      ChannelElement *cce, int index)
1947 {
1948     IndividualChannelStream *ics = &cce->ch[0].ics;
1949     const uint16_t *offsets = ics->swb_offset;
1950     float *dest = target->coeffs;
1951     const float *src = cce->ch[0].coeffs;
1952     int g, i, group, k, idx = 0;
1953     if (ac->m4ac.object_type == AOT_AAC_LTP) {
1954         av_log(ac->avctx, AV_LOG_ERROR,
1955                "Dependent coupling is not supported together with LTP\n");
1956         return;
1957     }
1958     for (g = 0; g < ics->num_window_groups; g++) {
1959         for (i = 0; i < ics->max_sfb; i++, idx++) {
1960             if (cce->ch[0].band_type[idx] != ZERO_BT) {
1961                 const float gain = cce->coup.gain[index][idx];
1962                 for (group = 0; group < ics->group_len[g]; group++) {
1963                     for (k = offsets[i]; k < offsets[i + 1]; k++) {
1964                         // XXX dsputil-ize
1965                         dest[group * 128 + k] += gain * src[group * 128 + k];
1966                     }
1967                 }
1968             }
1969         }
1970         dest += ics->group_len[g] * 128;
1971         src  += ics->group_len[g] * 128;
1972     }
1973 }
1974
1975 /**
1976  * Apply independent channel coupling (applied after IMDCT).
1977  *
1978  * @param   index   index into coupling gain array
1979  */
1980 static void apply_independent_coupling(AACContext *ac,
1981                                        SingleChannelElement *target,
1982                                        ChannelElement *cce, int index)
1983 {
1984     int i;
1985     const float gain = cce->coup.gain[index][0];
1986     const float *src = cce->ch[0].ret;
1987     float *dest = target->ret;
1988     const int len = 1024 << (ac->m4ac.sbr == 1);
1989
1990     for (i = 0; i < len; i++)
1991         dest[i] += gain * src[i];
1992 }
1993
1994 /**
1995  * channel coupling transformation interface
1996  *
1997  * @param   apply_coupling_method   pointer to (in)dependent coupling function
1998  */
1999 static void apply_channel_coupling(AACContext *ac, ChannelElement *cc,
2000                                    enum RawDataBlockType type, int elem_id,
2001                                    enum CouplingPoint coupling_point,
2002                                    void (*apply_coupling_method)(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
2003 {
2004     int i, c;
2005
2006     for (i = 0; i < MAX_ELEM_ID; i++) {
2007         ChannelElement *cce = ac->che[TYPE_CCE][i];
2008         int index = 0;
2009
2010         if (cce && cce->coup.coupling_point == coupling_point) {
2011             ChannelCoupling *coup = &cce->coup;
2012
2013             for (c = 0; c <= coup->num_coupled; c++) {
2014                 if (coup->type[c] == type && coup->id_select[c] == elem_id) {
2015                     if (coup->ch_select[c] != 1) {
2016                         apply_coupling_method(ac, &cc->ch[0], cce, index);
2017                         if (coup->ch_select[c] != 0)
2018                             index++;
2019                     }
2020                     if (coup->ch_select[c] != 2)
2021                         apply_coupling_method(ac, &cc->ch[1], cce, index++);
2022                 } else
2023                     index += 1 + (coup->ch_select[c] == 3);
2024             }
2025         }
2026     }
2027 }
2028
2029 /**
2030  * Convert spectral data to float samples, applying all supported tools as appropriate.
2031  */
2032 static void spectral_to_sample(AACContext *ac)
2033 {
2034     int i, type;
2035     for (type = 3; type >= 0; type--) {
2036         for (i = 0; i < MAX_ELEM_ID; i++) {
2037             ChannelElement *che = ac->che[type][i];
2038             if (che) {
2039                 if (type <= TYPE_CPE)
2040                     apply_channel_coupling(ac, che, type, i, BEFORE_TNS, apply_dependent_coupling);
2041                 if (ac->m4ac.object_type == AOT_AAC_LTP) {
2042                     if (che->ch[0].ics.predictor_present) {
2043                         if (che->ch[0].ics.ltp.present)
2044                             apply_ltp(ac, &che->ch[0]);
2045                         if (che->ch[1].ics.ltp.present && type == TYPE_CPE)
2046                             apply_ltp(ac, &che->ch[1]);
2047                     }
2048                 }
2049                 if (che->ch[0].tns.present)
2050                     apply_tns(che->ch[0].coeffs, &che->ch[0].tns, &che->ch[0].ics, 1);
2051                 if (che->ch[1].tns.present)
2052                     apply_tns(che->ch[1].coeffs, &che->ch[1].tns, &che->ch[1].ics, 1);
2053                 if (type <= TYPE_CPE)
2054                     apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMDCT, apply_dependent_coupling);
2055                 if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT) {
2056                     imdct_and_windowing(ac, &che->ch[0]);
2057                     if (ac->m4ac.object_type == AOT_AAC_LTP)
2058                         update_ltp(ac, &che->ch[0]);
2059                     if (type == TYPE_CPE) {
2060                         imdct_and_windowing(ac, &che->ch[1]);
2061                         if (ac->m4ac.object_type == AOT_AAC_LTP)
2062                             update_ltp(ac, &che->ch[1]);
2063                     }
2064                     if (ac->m4ac.sbr > 0) {
2065                         ff_sbr_apply(ac, &che->sbr, type, che->ch[0].ret, che->ch[1].ret);
2066                     }
2067                 }
2068                 if (type <= TYPE_CCE)
2069                     apply_channel_coupling(ac, che, type, i, AFTER_IMDCT, apply_independent_coupling);
2070             }
2071         }
2072     }
2073 }
2074
2075 static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
2076 {
2077     int size;
2078     AACADTSHeaderInfo hdr_info;
2079
2080     size = avpriv_aac_parse_header(gb, &hdr_info);
2081     if (size > 0) {
2082         if (ac->output_configured != OC_LOCKED && hdr_info.chan_config) {
2083             enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
2084             memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
2085             ac->m4ac.chan_config = hdr_info.chan_config;
2086             if (set_default_channel_config(ac->avctx, new_che_pos, hdr_info.chan_config))
2087                 return -7;
2088             if (output_configure(ac, ac->che_pos, new_che_pos, hdr_info.chan_config, OC_TRIAL_FRAME))
2089                 return -7;
2090         } else if (ac->output_configured != OC_LOCKED) {
2091             ac->m4ac.chan_config = 0;
2092             ac->output_configured = OC_NONE;
2093         }
2094         if (ac->output_configured != OC_LOCKED) {
2095             ac->m4ac.sbr = -1;
2096             ac->m4ac.ps  = -1;
2097             ac->m4ac.sample_rate     = hdr_info.sample_rate;
2098             ac->m4ac.sampling_index  = hdr_info.sampling_index;
2099             ac->m4ac.object_type     = hdr_info.object_type;
2100         }
2101         if (!ac->avctx->sample_rate)
2102             ac->avctx->sample_rate = hdr_info.sample_rate;
2103         if (hdr_info.num_aac_frames == 1) {
2104             if (!hdr_info.crc_absent)
2105                 skip_bits(gb, 16);
2106         } else {
2107             av_log_missing_feature(ac->avctx, "More than one AAC RDB per ADTS frame is", 0);
2108             return -1;
2109         }
2110     }
2111     return size;
2112 }
2113
2114 static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
2115                                 int *data_size, GetBitContext *gb)
2116 {
2117     AACContext *ac = avctx->priv_data;
2118     ChannelElement *che = NULL, *che_prev = NULL;
2119     enum RawDataBlockType elem_type, elem_type_prev = TYPE_END;
2120     int err, elem_id, data_size_tmp;
2121     int samples = 0, multiplier, audio_found = 0;
2122
2123     if (show_bits(gb, 12) == 0xfff) {
2124         if (parse_adts_frame_header(ac, gb) < 0) {
2125             av_log(avctx, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
2126             return -1;
2127         }
2128         if (ac->m4ac.sampling_index > 12) {
2129             av_log(ac->avctx, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
2130             return -1;
2131         }
2132     }
2133
2134     ac->tags_mapped = 0;
2135     // parse
2136     while ((elem_type = get_bits(gb, 3)) != TYPE_END) {
2137         elem_id = get_bits(gb, 4);
2138
2139         if (elem_type < TYPE_DSE) {
2140             if (!(che=get_che(ac, elem_type, elem_id))) {
2141                 av_log(ac->avctx, AV_LOG_ERROR, "channel element %d.%d is not allocated\n",
2142                        elem_type, elem_id);
2143                 return -1;
2144             }
2145             samples = 1024;
2146         }
2147
2148         switch (elem_type) {
2149
2150         case TYPE_SCE:
2151             err = decode_ics(ac, &che->ch[0], gb, 0, 0);
2152             audio_found = 1;
2153             break;
2154
2155         case TYPE_CPE:
2156             err = decode_cpe(ac, gb, che);
2157             audio_found = 1;
2158             break;
2159
2160         case TYPE_CCE:
2161             err = decode_cce(ac, gb, che);
2162             break;
2163
2164         case TYPE_LFE:
2165             err = decode_ics(ac, &che->ch[0], gb, 0, 0);
2166             audio_found = 1;
2167             break;
2168
2169         case TYPE_DSE:
2170             err = skip_data_stream_element(ac, gb);
2171             break;
2172
2173         case TYPE_PCE: {
2174             enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
2175             memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
2176             if ((err = decode_pce(avctx, &ac->m4ac, new_che_pos, gb)))
2177                 break;
2178             if (ac->output_configured > OC_TRIAL_PCE)
2179                 av_log(avctx, AV_LOG_ERROR,
2180                        "Not evaluating a further program_config_element as this construct is dubious at best.\n");
2181             else
2182                 err = output_configure(ac, ac->che_pos, new_che_pos, 0, OC_TRIAL_PCE);
2183             break;
2184         }
2185
2186         case TYPE_FIL:
2187             if (elem_id == 15)
2188                 elem_id += get_bits(gb, 8) - 1;
2189             if (get_bits_left(gb) < 8 * elem_id) {
2190                     av_log(avctx, AV_LOG_ERROR, overread_err);
2191                     return -1;
2192             }
2193             while (elem_id > 0)
2194                 elem_id -= decode_extension_payload(ac, gb, elem_id, che_prev, elem_type_prev);
2195             err = 0; /* FIXME */
2196             break;
2197
2198         default:
2199             err = -1; /* should not happen, but keeps compiler happy */
2200             break;
2201         }
2202
2203         che_prev       = che;
2204         elem_type_prev = elem_type;
2205
2206         if (err)
2207             return err;
2208
2209         if (get_bits_left(gb) < 3) {
2210             av_log(avctx, AV_LOG_ERROR, overread_err);
2211             return -1;
2212         }
2213     }
2214
2215     spectral_to_sample(ac);
2216
2217     multiplier = (ac->m4ac.sbr == 1) ? ac->m4ac.ext_sample_rate > ac->m4ac.sample_rate : 0;
2218     samples <<= multiplier;
2219     if (ac->output_configured < OC_LOCKED) {
2220         avctx->sample_rate = ac->m4ac.sample_rate << multiplier;
2221         avctx->frame_size = samples;
2222     }
2223
2224     data_size_tmp = samples * avctx->channels *
2225                     av_get_bytes_per_sample(avctx->sample_fmt);
2226     if (*data_size < data_size_tmp) {
2227         av_log(avctx, AV_LOG_ERROR,
2228                "Output buffer too small (%d) or trying to output too many samples (%d) for this frame.\n",
2229                *data_size, data_size_tmp);
2230         return -1;
2231     }
2232     *data_size = data_size_tmp;
2233
2234     if (samples) {
2235         if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT)
2236             ac->fmt_conv.float_interleave(data, (const float **)ac->output_data,
2237                                           samples, avctx->channels);
2238         else
2239             ac->fmt_conv.float_to_int16_interleave(data, (const float **)ac->output_data,
2240                                                    samples, avctx->channels);
2241     }
2242
2243     if (ac->output_configured && audio_found)
2244         ac->output_configured = OC_LOCKED;
2245
2246     return 0;
2247 }
2248
2249 static int aac_decode_frame(AVCodecContext *avctx, void *data,
2250                             int *data_size, AVPacket *avpkt)
2251 {
2252     const uint8_t *buf = avpkt->data;
2253     int buf_size = avpkt->size;
2254     GetBitContext gb;
2255     int buf_consumed;
2256     int buf_offset;
2257     int err;
2258
2259     init_get_bits(&gb, buf, buf_size * 8);
2260
2261     if ((err = aac_decode_frame_int(avctx, data, data_size, &gb)) < 0)
2262         return err;
2263
2264     buf_consumed = (get_bits_count(&gb) + 7) >> 3;
2265     for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
2266         if (buf[buf_offset])
2267             break;
2268
2269     return buf_size > buf_offset ? buf_consumed : buf_size;
2270 }
2271
2272 static av_cold int aac_decode_close(AVCodecContext *avctx)
2273 {
2274     AACContext *ac = avctx->priv_data;
2275     int i, type;
2276
2277     for (i = 0; i < MAX_ELEM_ID; i++) {
2278         for (type = 0; type < 4; type++) {
2279             if (ac->che[type][i])
2280                 ff_aac_sbr_ctx_close(&ac->che[type][i]->sbr);
2281             av_freep(&ac->che[type][i]);
2282         }
2283     }
2284
2285     ff_mdct_end(&ac->mdct);
2286     ff_mdct_end(&ac->mdct_small);
2287     ff_mdct_end(&ac->mdct_ltp);
2288     return 0;
2289 }
2290
2291
2292 #define LOAS_SYNC_WORD   0x2b7       ///< 11 bits LOAS sync word
2293
2294 struct LATMContext {
2295     AACContext      aac_ctx;             ///< containing AACContext
2296     int             initialized;         ///< initilized after a valid extradata was seen
2297
2298     // parser data
2299     int             audio_mux_version_A; ///< LATM syntax version
2300     int             frame_length_type;   ///< 0/1 variable/fixed frame length
2301     int             frame_length;        ///< frame length for fixed frame length
2302 };
2303
2304 static inline uint32_t latm_get_value(GetBitContext *b)
2305 {
2306     int length = get_bits(b, 2);
2307
2308     return get_bits_long(b, (length+1)*8);
2309 }
2310
2311 static int latm_decode_audio_specific_config(struct LATMContext *latmctx,
2312                                              GetBitContext *gb)
2313 {
2314     AVCodecContext *avctx = latmctx->aac_ctx.avctx;
2315     MPEG4AudioConfig m4ac;
2316     int  config_start_bit = get_bits_count(gb);
2317     int     bits_consumed, esize;
2318
2319     if (config_start_bit % 8) {
2320         av_log_missing_feature(latmctx->aac_ctx.avctx, "audio specific "
2321                                "config not byte aligned.\n", 1);
2322         return AVERROR_INVALIDDATA;
2323     } else {
2324         bits_consumed =
2325             decode_audio_specific_config(NULL, avctx, &m4ac,
2326                                          gb->buffer + (config_start_bit / 8),
2327                                          get_bits_left(gb) / 8);
2328
2329         if (bits_consumed < 0)
2330             return AVERROR_INVALIDDATA;
2331
2332         esize = (bits_consumed+7) / 8;
2333
2334         if (avctx->extradata_size <= esize) {
2335             av_free(avctx->extradata);
2336             avctx->extradata = av_malloc(esize + FF_INPUT_BUFFER_PADDING_SIZE);
2337             if (!avctx->extradata)
2338                 return AVERROR(ENOMEM);
2339         }
2340
2341         avctx->extradata_size = esize;
2342         memcpy(avctx->extradata, gb->buffer + (config_start_bit/8), esize);
2343         memset(avctx->extradata+esize, 0, FF_INPUT_BUFFER_PADDING_SIZE);
2344
2345         skip_bits_long(gb, bits_consumed);
2346     }
2347
2348     return bits_consumed;
2349 }
2350
2351 static int read_stream_mux_config(struct LATMContext *latmctx,
2352                                   GetBitContext *gb)
2353 {
2354     int ret, audio_mux_version = get_bits(gb, 1);
2355
2356     latmctx->audio_mux_version_A = 0;
2357     if (audio_mux_version)
2358         latmctx->audio_mux_version_A = get_bits(gb, 1);
2359
2360     if (!latmctx->audio_mux_version_A) {
2361
2362         if (audio_mux_version)
2363             latm_get_value(gb);                 // taraFullness
2364
2365         skip_bits(gb, 1);                       // allStreamSameTimeFraming
2366         skip_bits(gb, 6);                       // numSubFrames
2367         // numPrograms
2368         if (get_bits(gb, 4)) {                  // numPrograms
2369             av_log_missing_feature(latmctx->aac_ctx.avctx,
2370                                    "multiple programs are not supported\n", 1);
2371             return AVERROR_PATCHWELCOME;
2372         }
2373
2374         // for each program (which there is only on in DVB)
2375
2376         // for each layer (which there is only on in DVB)
2377         if (get_bits(gb, 3)) {                   // numLayer
2378             av_log_missing_feature(latmctx->aac_ctx.avctx,
2379                                    "multiple layers are not supported\n", 1);
2380             return AVERROR_PATCHWELCOME;
2381         }
2382
2383         // for all but first stream: use_same_config = get_bits(gb, 1);
2384         if (!audio_mux_version) {
2385             if ((ret = latm_decode_audio_specific_config(latmctx, gb)) < 0)
2386                 return ret;
2387         } else {
2388             int ascLen = latm_get_value(gb);
2389             if ((ret = latm_decode_audio_specific_config(latmctx, gb)) < 0)
2390                 return ret;
2391             ascLen -= ret;
2392             skip_bits_long(gb, ascLen);
2393         }
2394
2395         latmctx->frame_length_type = get_bits(gb, 3);
2396         switch (latmctx->frame_length_type) {
2397         case 0:
2398             skip_bits(gb, 8);       // latmBufferFullness
2399             break;
2400         case 1:
2401             latmctx->frame_length = get_bits(gb, 9);
2402             break;
2403         case 3:
2404         case 4:
2405         case 5:
2406             skip_bits(gb, 6);       // CELP frame length table index
2407             break;
2408         case 6:
2409         case 7:
2410             skip_bits(gb, 1);       // HVXC frame length table index
2411             break;
2412         }
2413
2414         if (get_bits(gb, 1)) {                  // other data
2415             if (audio_mux_version) {
2416                 latm_get_value(gb);             // other_data_bits
2417             } else {
2418                 int esc;
2419                 do {
2420                     esc = get_bits(gb, 1);
2421                     skip_bits(gb, 8);
2422                 } while (esc);
2423             }
2424         }
2425
2426         if (get_bits(gb, 1))                     // crc present
2427             skip_bits(gb, 8);                    // config_crc
2428     }
2429
2430     return 0;
2431 }
2432
2433 static int read_payload_length_info(struct LATMContext *ctx, GetBitContext *gb)
2434 {
2435     uint8_t tmp;
2436
2437     if (ctx->frame_length_type == 0) {
2438         int mux_slot_length = 0;
2439         do {
2440             tmp = get_bits(gb, 8);
2441             mux_slot_length += tmp;
2442         } while (tmp == 255);
2443         return mux_slot_length;
2444     } else if (ctx->frame_length_type == 1) {
2445         return ctx->frame_length;
2446     } else if (ctx->frame_length_type == 3 ||
2447                ctx->frame_length_type == 5 ||
2448                ctx->frame_length_type == 7) {
2449         skip_bits(gb, 2);          // mux_slot_length_coded
2450     }
2451     return 0;
2452 }
2453
2454 static int read_audio_mux_element(struct LATMContext *latmctx,
2455                                   GetBitContext *gb)
2456 {
2457     int err;
2458     uint8_t use_same_mux = get_bits(gb, 1);
2459     if (!use_same_mux) {
2460         if ((err = read_stream_mux_config(latmctx, gb)) < 0)
2461             return err;
2462     } else if (!latmctx->aac_ctx.avctx->extradata) {
2463         av_log(latmctx->aac_ctx.avctx, AV_LOG_DEBUG,
2464                "no decoder config found\n");
2465         return AVERROR(EAGAIN);
2466     }
2467     if (latmctx->audio_mux_version_A == 0) {
2468         int mux_slot_length_bytes = read_payload_length_info(latmctx, gb);
2469         if (mux_slot_length_bytes * 8 > get_bits_left(gb)) {
2470             av_log(latmctx->aac_ctx.avctx, AV_LOG_ERROR, "incomplete frame\n");
2471             return AVERROR_INVALIDDATA;
2472         } else if (mux_slot_length_bytes * 8 + 256 < get_bits_left(gb)) {
2473             av_log(latmctx->aac_ctx.avctx, AV_LOG_ERROR,
2474                    "frame length mismatch %d << %d\n",
2475                    mux_slot_length_bytes * 8, get_bits_left(gb));
2476             return AVERROR_INVALIDDATA;
2477         }
2478     }
2479     return 0;
2480 }
2481
2482
2483 static int latm_decode_frame(AVCodecContext *avctx, void *out, int *out_size,
2484                              AVPacket *avpkt)
2485 {
2486     struct LATMContext *latmctx = avctx->priv_data;
2487     int                 muxlength, err;
2488     GetBitContext       gb;
2489
2490     init_get_bits(&gb, avpkt->data, avpkt->size * 8);
2491
2492     // check for LOAS sync word
2493     if (get_bits(&gb, 11) != LOAS_SYNC_WORD)
2494         return AVERROR_INVALIDDATA;
2495
2496     muxlength = get_bits(&gb, 13) + 3;
2497     // not enough data, the parser should have sorted this
2498     if (muxlength > avpkt->size)
2499         return AVERROR_INVALIDDATA;
2500
2501     if ((err = read_audio_mux_element(latmctx, &gb)) < 0)
2502         return err;
2503
2504     if (!latmctx->initialized) {
2505         if (!avctx->extradata) {
2506             *out_size = 0;
2507             return avpkt->size;
2508         } else {
2509             if ((err = decode_audio_specific_config(
2510                     &latmctx->aac_ctx, avctx, &latmctx->aac_ctx.m4ac,
2511                     avctx->extradata, avctx->extradata_size)) < 0)
2512                 return err;
2513             latmctx->initialized = 1;
2514         }
2515     }
2516
2517     if (show_bits(&gb, 12) == 0xfff) {
2518         av_log(latmctx->aac_ctx.avctx, AV_LOG_ERROR,
2519                "ADTS header detected, probably as result of configuration "
2520                "misparsing\n");
2521         return AVERROR_INVALIDDATA;
2522     }
2523
2524     if ((err = aac_decode_frame_int(avctx, out, out_size, &gb)) < 0)
2525         return err;
2526
2527     return muxlength;
2528 }
2529
2530 av_cold static int latm_decode_init(AVCodecContext *avctx)
2531 {
2532     struct LATMContext *latmctx = avctx->priv_data;
2533     int ret = aac_decode_init(avctx);
2534
2535     if (avctx->extradata_size > 0)
2536         latmctx->initialized = !ret;
2537
2538     return ret;
2539 }
2540
2541
2542 AVCodec ff_aac_decoder = {
2543     .name           = "aac",
2544     .type           = AVMEDIA_TYPE_AUDIO,
2545     .id             = CODEC_ID_AAC,
2546     .priv_data_size = sizeof(AACContext),
2547     .init           = aac_decode_init,
2548     .close          = aac_decode_close,
2549     .decode         = aac_decode_frame,
2550     .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
2551     .sample_fmts = (const enum AVSampleFormat[]) {
2552         AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE
2553     },
2554     .capabilities = CODEC_CAP_CHANNEL_CONF,
2555     .channel_layouts = aac_channel_layout,
2556 };
2557
2558 /*
2559     Note: This decoder filter is intended to decode LATM streams transferred
2560     in MPEG transport streams which only contain one program.
2561     To do a more complex LATM demuxing a separate LATM demuxer should be used.
2562 */
2563 AVCodec ff_aac_latm_decoder = {
2564     .name = "aac_latm",
2565     .type = AVMEDIA_TYPE_AUDIO,
2566     .id   = CODEC_ID_AAC_LATM,
2567     .priv_data_size = sizeof(struct LATMContext),
2568     .init   = latm_decode_init,
2569     .close  = aac_decode_close,
2570     .decode = latm_decode_frame,
2571     .long_name = NULL_IF_CONFIG_SMALL("AAC LATM (Advanced Audio Codec LATM syntax)"),
2572     .sample_fmts = (const enum AVSampleFormat[]) {
2573         AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE
2574     },
2575     .capabilities = CODEC_CAP_CHANNEL_CONF,
2576     .channel_layouts = aac_channel_layout,
2577 };