Statistics
| Branch: | Revision:

ffmpeg / libavcodec / aac.c @ 89584458

History | View | Annotate | Download (71.7 KB)

1
/*
2
 * AAC decoder
3
 * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org )
4
 * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com )
5
 *
6
 * This file is part of FFmpeg.
7
 *
8
 * FFmpeg is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU Lesser General Public
10
 * License as published by the Free Software Foundation; either
11
 * version 2.1 of the License, or (at your option) any later version.
12
 *
13
 * FFmpeg is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
 * Lesser General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU Lesser General Public
19
 * License along with FFmpeg; if not, write to the Free Software
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 */
22

    
23
/**
24
 * @file libavcodec/aac.c
25
 * AAC decoder
26
 * @author Oded Shimon  ( ods15 ods15 dyndns org )
27
 * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
28
 */
29

    
30
/*
31
 * supported tools
32
 *
33
 * Support?             Name
34
 * N (code in SoC repo) gain control
35
 * Y                    block switching
36
 * Y                    window shapes - standard
37
 * N                    window shapes - Low Delay
38
 * Y                    filterbank - standard
39
 * N (code in SoC repo) filterbank - Scalable Sample Rate
40
 * Y                    Temporal Noise Shaping
41
 * N (code in SoC repo) Long Term Prediction
42
 * Y                    intensity stereo
43
 * Y                    channel coupling
44
 * Y                    frequency domain prediction
45
 * Y                    Perceptual Noise Substitution
46
 * Y                    Mid/Side stereo
47
 * N                    Scalable Inverse AAC Quantization
48
 * N                    Frequency Selective Switch
49
 * N                    upsampling filter
50
 * Y                    quantization & coding - AAC
51
 * N                    quantization & coding - TwinVQ
52
 * N                    quantization & coding - BSAC
53
 * N                    AAC Error Resilience tools
54
 * N                    Error Resilience payload syntax
55
 * N                    Error Protection tool
56
 * N                    CELP
57
 * N                    Silence Compression
58
 * N                    HVXC
59
 * N                    HVXC 4kbits/s VR
60
 * N                    Structured Audio tools
61
 * N                    Structured Audio Sample Bank Format
62
 * N                    MIDI
63
 * N                    Harmonic and Individual Lines plus Noise
64
 * N                    Text-To-Speech Interface
65
 * N (in progress)      Spectral Band Replication
66
 * Y (not in this code) Layer-1
67
 * Y (not in this code) Layer-2
68
 * Y (not in this code) Layer-3
69
 * N                    SinuSoidal Coding (Transient, Sinusoid, Noise)
70
 * N (planned)          Parametric Stereo
71
 * N                    Direct Stream Transfer
72
 *
73
 * Note: - HE AAC v1 comprises LC AAC with Spectral Band Replication.
74
 *       - HE AAC v2 comprises LC AAC with Spectral Band Replication and
75
           Parametric Stereo.
76
 */
77

    
78

    
79
#include "avcodec.h"
80
#include "internal.h"
81
#include "get_bits.h"
82
#include "dsputil.h"
83
#include "lpc.h"
84

    
85
#include "aac.h"
86
#include "aactab.h"
87
#include "aacdectab.h"
88
#include "mpeg4audio.h"
89
#include "aac_parser.h"
90

    
91
#include <assert.h>
92
#include <errno.h>
93
#include <math.h>
94
#include <string.h>
95

    
96
#if ARCH_ARM
97
#   include "arm/aac.h"
98
#endif
99

    
100
union float754 {
101
    float f;
102
    uint32_t i;
103
};
104

    
105
static VLC vlc_scalefactors;
106
static VLC vlc_spectral[11];
107

    
108
static uint32_t cbrt_tab[1<<13];
109

    
110
static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
111
{
112
    if (ac->tag_che_map[type][elem_id]) {
113
        return ac->tag_che_map[type][elem_id];
114
    }
115
    if (ac->tags_mapped >= tags_per_config[ac->m4ac.chan_config]) {
116
        return NULL;
117
    }
118
    switch (ac->m4ac.chan_config) {
119
    case 7:
120
        if (ac->tags_mapped == 3 && type == TYPE_CPE) {
121
            ac->tags_mapped++;
122
            return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2];
123
        }
124
    case 6:
125
        /* Some streams incorrectly code 5.1 audio as SCE[0] CPE[0] CPE[1] SCE[1]
126
           instead of SCE[0] CPE[0] CPE[0] LFE[0]. If we seem to have
127
           encountered such a stream, transfer the LFE[0] element to SCE[1] */
128
        if (ac->tags_mapped == tags_per_config[ac->m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) {
129
            ac->tags_mapped++;
130
            return ac->tag_che_map[type][elem_id] = ac->che[TYPE_LFE][0];
131
        }
132
    case 5:
133
        if (ac->tags_mapped == 2 && type == TYPE_CPE) {
134
            ac->tags_mapped++;
135
            return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][1];
136
        }
137
    case 4:
138
        if (ac->tags_mapped == 2 && ac->m4ac.chan_config == 4 && type == TYPE_SCE) {
139
            ac->tags_mapped++;
140
            return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
141
        }
142
    case 3:
143
    case 2:
144
        if (ac->tags_mapped == (ac->m4ac.chan_config != 2) && type == TYPE_CPE) {
145
            ac->tags_mapped++;
146
            return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][0];
147
        } else if (ac->m4ac.chan_config == 2) {
148
            return NULL;
149
        }
150
    case 1:
151
        if (!ac->tags_mapped && type == TYPE_SCE) {
152
            ac->tags_mapped++;
153
            return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][0];
154
        }
155
    default:
156
        return NULL;
157
    }
158
}
159

    
160
/**
161
 * Check for the channel element in the current channel position configuration.
162
 * If it exists, make sure the appropriate element is allocated and map the
163
 * channel order to match the internal FFmpeg channel layout.
164
 *
165
 * @param   che_pos current channel position configuration
166
 * @param   type channel element type
167
 * @param   id channel element id
168
 * @param   channels count of the number of channels in the configuration
169
 *
170
 * @return  Returns error status. 0 - OK, !0 - error
171
 */
172
static av_cold int che_configure(AACContext *ac,
173
                         enum ChannelPosition che_pos[4][MAX_ELEM_ID],
174
                         int type, int id,
175
                         int *channels)
176
{
177
    if (che_pos[type][id]) {
178
        if (!ac->che[type][id] && !(ac->che[type][id] = av_mallocz(sizeof(ChannelElement))))
179
            return AVERROR(ENOMEM);
180
        if (type != TYPE_CCE) {
181
            ac->output_data[(*channels)++] = ac->che[type][id]->ch[0].ret;
182
            if (type == TYPE_CPE) {
183
                ac->output_data[(*channels)++] = ac->che[type][id]->ch[1].ret;
184
            }
185
        }
186
    } else
187
        av_freep(&ac->che[type][id]);
188
    return 0;
189
}
190

    
191
/**
192
 * Configure output channel order based on the current program configuration element.
193
 *
194
 * @param   che_pos current channel position configuration
195
 * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
196
 *
197
 * @return  Returns error status. 0 - OK, !0 - error
198
 */
199
static av_cold int output_configure(AACContext *ac,
200
                            enum ChannelPosition che_pos[4][MAX_ELEM_ID],
201
                            enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
202
                            int channel_config, enum OCStatus oc_type)
203
{
204
    AVCodecContext *avctx = ac->avccontext;
205
    int i, type, channels = 0, ret;
206

    
207
    memcpy(che_pos, new_che_pos, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
208

    
209
    if (channel_config) {
210
        for (i = 0; i < tags_per_config[channel_config]; i++) {
211
            if ((ret = che_configure(ac, che_pos,
212
                                     aac_channel_layout_map[channel_config - 1][i][0],
213
                                     aac_channel_layout_map[channel_config - 1][i][1],
214
                                     &channels)))
215
                return ret;
216
        }
217

    
218
        memset(ac->tag_che_map, 0,       4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
219
        ac->tags_mapped = 0;
220

    
221
        avctx->channel_layout = aac_channel_layout[channel_config - 1];
222
    } else {
223
        /* Allocate or free elements depending on if they are in the
224
         * current program configuration.
225
         *
226
         * Set up default 1:1 output mapping.
227
         *
228
         * For a 5.1 stream the output order will be:
229
         *    [ Center ] [ Front Left ] [ Front Right ] [ LFE ] [ Surround Left ] [ Surround Right ]
230
         */
231

    
232
        for (i = 0; i < MAX_ELEM_ID; i++) {
233
            for (type = 0; type < 4; type++) {
234
                if ((ret = che_configure(ac, che_pos, type, i, &channels)))
235
                    return ret;
236
            }
237
        }
238

    
239
        memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
240
        ac->tags_mapped = 4 * MAX_ELEM_ID;
241

    
242
        avctx->channel_layout = 0;
243
    }
244

    
245
    avctx->channels = channels;
246

    
247
    ac->output_configured = oc_type;
248

    
249
    return 0;
250
}
251

    
252
/**
253
 * Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit.
254
 *
255
 * @param cpe_map Stereo (Channel Pair Element) map, NULL if stereo bit is not present.
256
 * @param sce_map mono (Single Channel Element) map
257
 * @param type speaker type/position for these channels
258
 */
259
static void decode_channel_map(enum ChannelPosition *cpe_map,
260
                               enum ChannelPosition *sce_map,
261
                               enum ChannelPosition type,
262
                               GetBitContext *gb, int n)
263
{
264
    while (n--) {
265
        enum ChannelPosition *map = cpe_map && get_bits1(gb) ? cpe_map : sce_map; // stereo or mono map
266
        map[get_bits(gb, 4)] = type;
267
    }
268
}
269

    
270
/**
271
 * Decode program configuration element; reference: table 4.2.
272
 *
273
 * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
274
 *
275
 * @return  Returns error status. 0 - OK, !0 - error
276
 */
277
static int decode_pce(AACContext *ac, enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
278
                      GetBitContext *gb)
279
{
280
    int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling_index;
281

    
282
    skip_bits(gb, 2);  // object_type
283

    
284
    sampling_index = get_bits(gb, 4);
285
    if (ac->m4ac.sampling_index != sampling_index)
286
        av_log(ac->avccontext, AV_LOG_WARNING, "Sample rate index in program config element does not match the sample rate index configured by the container.\n");
287

    
288
    num_front       = get_bits(gb, 4);
289
    num_side        = get_bits(gb, 4);
290
    num_back        = get_bits(gb, 4);
291
    num_lfe         = get_bits(gb, 2);
292
    num_assoc_data  = get_bits(gb, 3);
293
    num_cc          = get_bits(gb, 4);
294

    
295
    if (get_bits1(gb))
296
        skip_bits(gb, 4); // mono_mixdown_tag
297
    if (get_bits1(gb))
298
        skip_bits(gb, 4); // stereo_mixdown_tag
299

    
300
    if (get_bits1(gb))
301
        skip_bits(gb, 3); // mixdown_coeff_index and pseudo_surround
302

    
303
    decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_FRONT, gb, num_front);
304
    decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_SIDE,  gb, num_side );
305
    decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_BACK,  gb, num_back );
306
    decode_channel_map(NULL,                  new_che_pos[TYPE_LFE], AAC_CHANNEL_LFE,   gb, num_lfe  );
307

    
308
    skip_bits_long(gb, 4 * num_assoc_data);
309

    
310
    decode_channel_map(new_che_pos[TYPE_CCE], new_che_pos[TYPE_CCE], AAC_CHANNEL_CC,    gb, num_cc   );
311

    
312
    align_get_bits(gb);
313

    
314
    /* comment field, first byte is length */
315
    skip_bits_long(gb, 8 * get_bits(gb, 8));
316
    return 0;
317
}
318

    
319
/**
320
 * Set up channel positions based on a default channel configuration
321
 * as specified in table 1.17.
322
 *
323
 * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
324
 *
325
 * @return  Returns error status. 0 - OK, !0 - error
326
 */
327
static av_cold int set_default_channel_config(AACContext *ac,
328
                                      enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
329
                                      int channel_config)
330
{
331
    if (channel_config < 1 || channel_config > 7) {
332
        av_log(ac->avccontext, AV_LOG_ERROR, "invalid default channel configuration (%d)\n",
333
               channel_config);
334
        return -1;
335
    }
336

    
337
    /* default channel configurations:
338
     *
339
     * 1ch : front center (mono)
340
     * 2ch : L + R (stereo)
341
     * 3ch : front center + L + R
342
     * 4ch : front center + L + R + back center
343
     * 5ch : front center + L + R + back stereo
344
     * 6ch : front center + L + R + back stereo + LFE
345
     * 7ch : front center + L + R + outer front left + outer front right + back stereo + LFE
346
     */
347

    
348
    if (channel_config != 2)
349
        new_che_pos[TYPE_SCE][0] = AAC_CHANNEL_FRONT; // front center (or mono)
350
    if (channel_config > 1)
351
        new_che_pos[TYPE_CPE][0] = AAC_CHANNEL_FRONT; // L + R (or stereo)
352
    if (channel_config == 4)
353
        new_che_pos[TYPE_SCE][1] = AAC_CHANNEL_BACK;  // back center
354
    if (channel_config > 4)
355
        new_che_pos[TYPE_CPE][(channel_config == 7) + 1]
356
        = AAC_CHANNEL_BACK;  // back stereo
357
    if (channel_config > 5)
358
        new_che_pos[TYPE_LFE][0] = AAC_CHANNEL_LFE;   // LFE
359
    if (channel_config == 7)
360
        new_che_pos[TYPE_CPE][1] = AAC_CHANNEL_FRONT; // outer front left + outer front right
361

    
362
    return 0;
363
}
364

    
365
/**
366
 * Decode GA "General Audio" specific configuration; reference: table 4.1.
367
 *
368
 * @return  Returns error status. 0 - OK, !0 - error
369
 */
370
static int decode_ga_specific_config(AACContext *ac, GetBitContext *gb,
371
                                     int channel_config)
372
{
373
    enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
374
    int extension_flag, ret;
375

    
376
    if (get_bits1(gb)) { // frameLengthFlag
377
        av_log_missing_feature(ac->avccontext, "960/120 MDCT window is", 1);
378
        return -1;
379
    }
380

    
381
    if (get_bits1(gb))       // dependsOnCoreCoder
382
        skip_bits(gb, 14);   // coreCoderDelay
383
    extension_flag = get_bits1(gb);
384

    
385
    if (ac->m4ac.object_type == AOT_AAC_SCALABLE ||
386
        ac->m4ac.object_type == AOT_ER_AAC_SCALABLE)
387
        skip_bits(gb, 3);     // layerNr
388

    
389
    memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
390
    if (channel_config == 0) {
391
        skip_bits(gb, 4);  // element_instance_tag
392
        if ((ret = decode_pce(ac, new_che_pos, gb)))
393
            return ret;
394
    } else {
395
        if ((ret = set_default_channel_config(ac, new_che_pos, channel_config)))
396
            return ret;
397
    }
398
    if ((ret = output_configure(ac, ac->che_pos, new_che_pos, channel_config, OC_GLOBAL_HDR)))
399
        return ret;
400

    
401
    if (extension_flag) {
402
        switch (ac->m4ac.object_type) {
403
        case AOT_ER_BSAC:
404
            skip_bits(gb, 5);    // numOfSubFrame
405
            skip_bits(gb, 11);   // layer_length
406
            break;
407
        case AOT_ER_AAC_LC:
408
        case AOT_ER_AAC_LTP:
409
        case AOT_ER_AAC_SCALABLE:
410
        case AOT_ER_AAC_LD:
411
            skip_bits(gb, 3);  /* aacSectionDataResilienceFlag
412
                                    * aacScalefactorDataResilienceFlag
413
                                    * aacSpectralDataResilienceFlag
414
                                    */
415
            break;
416
        }
417
        skip_bits1(gb);    // extensionFlag3 (TBD in version 3)
418
    }
419
    return 0;
420
}
421

    
422
/**
423
 * Decode audio specific configuration; reference: table 1.13.
424
 *
425
 * @param   data        pointer to AVCodecContext extradata
426
 * @param   data_size   size of AVCCodecContext extradata
427
 *
428
 * @return  Returns error status. 0 - OK, !0 - error
429
 */
430
static int decode_audio_specific_config(AACContext *ac, void *data,
431
                                        int data_size)
432
{
433
    GetBitContext gb;
434
    int i;
435

    
436
    init_get_bits(&gb, data, data_size * 8);
437

    
438
    if ((i = ff_mpeg4audio_get_config(&ac->m4ac, data, data_size)) < 0)
439
        return -1;
440
    if (ac->m4ac.sampling_index > 12) {
441
        av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
442
        return -1;
443
    }
444

    
445
    skip_bits_long(&gb, i);
446

    
447
    switch (ac->m4ac.object_type) {
448
    case AOT_AAC_MAIN:
449
    case AOT_AAC_LC:
450
        if (decode_ga_specific_config(ac, &gb, ac->m4ac.chan_config))
451
            return -1;
452
        break;
453
    default:
454
        av_log(ac->avccontext, AV_LOG_ERROR, "Audio object type %s%d is not supported.\n",
455
               ac->m4ac.sbr == 1? "SBR+" : "", ac->m4ac.object_type);
456
        return -1;
457
    }
458
    return 0;
459
}
460

    
461
/**
462
 * linear congruential pseudorandom number generator
463
 *
464
 * @param   previous_val    pointer to the current state of the generator
465
 *
466
 * @return  Returns a 32-bit pseudorandom integer
467
 */
468
static av_always_inline int lcg_random(int previous_val)
469
{
470
    return previous_val * 1664525 + 1013904223;
471
}
472

    
473
static void reset_predict_state(PredictorState *ps)
474
{
475
    ps->r0   = 0.0f;
476
    ps->r1   = 0.0f;
477
    ps->cor0 = 0.0f;
478
    ps->cor1 = 0.0f;
479
    ps->var0 = 1.0f;
480
    ps->var1 = 1.0f;
481
}
482

    
483
static void reset_all_predictors(PredictorState *ps)
484
{
485
    int i;
486
    for (i = 0; i < MAX_PREDICTORS; i++)
487
        reset_predict_state(&ps[i]);
488
}
489

    
490
static void reset_predictor_group(PredictorState *ps, int group_num)
491
{
492
    int i;
493
    for (i = group_num - 1; i < MAX_PREDICTORS; i += 30)
494
        reset_predict_state(&ps[i]);
495
}
496

    
497
static av_cold int aac_decode_init(AVCodecContext *avccontext)
498
{
499
    AACContext *ac = avccontext->priv_data;
500
    int i;
501

    
502
    ac->avccontext = avccontext;
503

    
504
    if (avccontext->extradata_size > 0) {
505
        if (decode_audio_specific_config(ac, avccontext->extradata, avccontext->extradata_size))
506
            return -1;
507
        avccontext->sample_rate = ac->m4ac.sample_rate;
508
    } else if (avccontext->channels > 0) {
509
        ac->m4ac.sample_rate = avccontext->sample_rate;
510
    }
511

    
512
    avccontext->sample_fmt = SAMPLE_FMT_S16;
513
    avccontext->frame_size = 1024;
514

    
515
    AAC_INIT_VLC_STATIC( 0, 304);
516
    AAC_INIT_VLC_STATIC( 1, 270);
517
    AAC_INIT_VLC_STATIC( 2, 550);
518
    AAC_INIT_VLC_STATIC( 3, 300);
519
    AAC_INIT_VLC_STATIC( 4, 328);
520
    AAC_INIT_VLC_STATIC( 5, 294);
521
    AAC_INIT_VLC_STATIC( 6, 306);
522
    AAC_INIT_VLC_STATIC( 7, 268);
523
    AAC_INIT_VLC_STATIC( 8, 510);
524
    AAC_INIT_VLC_STATIC( 9, 366);
525
    AAC_INIT_VLC_STATIC(10, 462);
526

    
527
    dsputil_init(&ac->dsp, avccontext);
528

    
529
    ac->random_state = 0x1f2e3d4c;
530

    
531
    // -1024 - Compensate wrong IMDCT method.
532
    // 32768 - Required to scale values to the correct range for the bias method
533
    //         for float to int16 conversion.
534

    
535
    if (ac->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
536
        ac->add_bias  = 385.0f;
537
        ac->sf_scale  = 1. / (-1024. * 32768.);
538
        ac->sf_offset = 0;
539
    } else {
540
        ac->add_bias  = 0.0f;
541
        ac->sf_scale  = 1. / -1024.;
542
        ac->sf_offset = 60;
543
    }
544

    
545
#if !CONFIG_HARDCODED_TABLES
546
    for (i = 0; i < 428; i++)
547
        ff_aac_pow2sf_tab[i] = pow(2, (i - 200) / 4.);
548
#endif /* CONFIG_HARDCODED_TABLES */
549

    
550
    INIT_VLC_STATIC(&vlc_scalefactors,7,FF_ARRAY_ELEMS(ff_aac_scalefactor_code),
551
                    ff_aac_scalefactor_bits, sizeof(ff_aac_scalefactor_bits[0]), sizeof(ff_aac_scalefactor_bits[0]),
552
                    ff_aac_scalefactor_code, sizeof(ff_aac_scalefactor_code[0]), sizeof(ff_aac_scalefactor_code[0]),
553
                    352);
554

    
555
    ff_mdct_init(&ac->mdct, 11, 1, 1.0);
556
    ff_mdct_init(&ac->mdct_small, 8, 1, 1.0);
557
    // window initialization
558
    ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
559
    ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
560
    ff_init_ff_sine_windows(10);
561
    ff_init_ff_sine_windows( 7);
562

    
563
    if (!cbrt_tab[(1<<13) - 1]) {
564
        for (i = 0; i < 1<<13; i++) {
565
            union float754 f;
566
            f.f = cbrtf(i) * i;
567
            cbrt_tab[i] = f.i;
568
        }
569
    }
570

    
571
    return 0;
572
}
573

    
574
/**
575
 * Skip data_stream_element; reference: table 4.10.
576
 */
577
static void skip_data_stream_element(GetBitContext *gb)
578
{
579
    int byte_align = get_bits1(gb);
580
    int count = get_bits(gb, 8);
581
    if (count == 255)
582
        count += get_bits(gb, 8);
583
    if (byte_align)
584
        align_get_bits(gb);
585
    skip_bits_long(gb, 8 * count);
586
}
587

    
588
static int decode_prediction(AACContext *ac, IndividualChannelStream *ics,
589
                             GetBitContext *gb)
590
{
591
    int sfb;
592
    if (get_bits1(gb)) {
593
        ics->predictor_reset_group = get_bits(gb, 5);
594
        if (ics->predictor_reset_group == 0 || ics->predictor_reset_group > 30) {
595
            av_log(ac->avccontext, AV_LOG_ERROR, "Invalid Predictor Reset Group.\n");
596
            return -1;
597
        }
598
    }
599
    for (sfb = 0; sfb < FFMIN(ics->max_sfb, ff_aac_pred_sfb_max[ac->m4ac.sampling_index]); sfb++) {
600
        ics->prediction_used[sfb] = get_bits1(gb);
601
    }
602
    return 0;
603
}
604

    
605
/**
606
 * Decode Individual Channel Stream info; reference: table 4.6.
607
 *
608
 * @param   common_window   Channels have independent [0], or shared [1], Individual Channel Stream information.
609
 */
610
static int decode_ics_info(AACContext *ac, IndividualChannelStream *ics,
611
                           GetBitContext *gb, int common_window)
612
{
613
    if (get_bits1(gb)) {
614
        av_log(ac->avccontext, AV_LOG_ERROR, "Reserved bit set.\n");
615
        memset(ics, 0, sizeof(IndividualChannelStream));
616
        return -1;
617
    }
618
    ics->window_sequence[1] = ics->window_sequence[0];
619
    ics->window_sequence[0] = get_bits(gb, 2);
620
    ics->use_kb_window[1]   = ics->use_kb_window[0];
621
    ics->use_kb_window[0]   = get_bits1(gb);
622
    ics->num_window_groups  = 1;
623
    ics->group_len[0]       = 1;
624
    if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
625
        int i;
626
        ics->max_sfb = get_bits(gb, 4);
627
        for (i = 0; i < 7; i++) {
628
            if (get_bits1(gb)) {
629
                ics->group_len[ics->num_window_groups - 1]++;
630
            } else {
631
                ics->num_window_groups++;
632
                ics->group_len[ics->num_window_groups - 1] = 1;
633
            }
634
        }
635
        ics->num_windows       = 8;
636
        ics->swb_offset        =    ff_swb_offset_128[ac->m4ac.sampling_index];
637
        ics->num_swb           =   ff_aac_num_swb_128[ac->m4ac.sampling_index];
638
        ics->tns_max_bands     = ff_tns_max_bands_128[ac->m4ac.sampling_index];
639
        ics->predictor_present = 0;
640
    } else {
641
        ics->max_sfb               = get_bits(gb, 6);
642
        ics->num_windows           = 1;
643
        ics->swb_offset            =    ff_swb_offset_1024[ac->m4ac.sampling_index];
644
        ics->num_swb               =   ff_aac_num_swb_1024[ac->m4ac.sampling_index];
645
        ics->tns_max_bands         = ff_tns_max_bands_1024[ac->m4ac.sampling_index];
646
        ics->predictor_present     = get_bits1(gb);
647
        ics->predictor_reset_group = 0;
648
        if (ics->predictor_present) {
649
            if (ac->m4ac.object_type == AOT_AAC_MAIN) {
650
                if (decode_prediction(ac, ics, gb)) {
651
                    memset(ics, 0, sizeof(IndividualChannelStream));
652
                    return -1;
653
                }
654
            } else if (ac->m4ac.object_type == AOT_AAC_LC) {
655
                av_log(ac->avccontext, AV_LOG_ERROR, "Prediction is not allowed in AAC-LC.\n");
656
                memset(ics, 0, sizeof(IndividualChannelStream));
657
                return -1;
658
            } else {
659
                av_log_missing_feature(ac->avccontext, "Predictor bit set but LTP is", 1);
660
                memset(ics, 0, sizeof(IndividualChannelStream));
661
                return -1;
662
            }
663
        }
664
    }
665

    
666
    if (ics->max_sfb > ics->num_swb) {
667
        av_log(ac->avccontext, AV_LOG_ERROR,
668
               "Number of scalefactor bands in group (%d) exceeds limit (%d).\n",
669
               ics->max_sfb, ics->num_swb);
670
        memset(ics, 0, sizeof(IndividualChannelStream));
671
        return -1;
672
    }
673

    
674
    return 0;
675
}
676

    
677
/**
678
 * Decode band types (section_data payload); reference: table 4.46.
679
 *
680
 * @param   band_type           array of the used band type
681
 * @param   band_type_run_end   array of the last scalefactor band of a band type run
682
 *
683
 * @return  Returns error status. 0 - OK, !0 - error
684
 */
685
static int decode_band_types(AACContext *ac, enum BandType band_type[120],
686
                             int band_type_run_end[120], GetBitContext *gb,
687
                             IndividualChannelStream *ics)
688
{
689
    int g, idx = 0;
690
    const int bits = (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) ? 3 : 5;
691
    for (g = 0; g < ics->num_window_groups; g++) {
692
        int k = 0;
693
        while (k < ics->max_sfb) {
694
            uint8_t sect_end = k;
695
            int sect_len_incr;
696
            int sect_band_type = get_bits(gb, 4);
697
            if (sect_band_type == 12) {
698
                av_log(ac->avccontext, AV_LOG_ERROR, "invalid band type\n");
699
                return -1;
700
            }
701
            while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1)
702
                sect_end += sect_len_incr;
703
            sect_end += sect_len_incr;
704
            if (sect_end > ics->max_sfb) {
705
                av_log(ac->avccontext, AV_LOG_ERROR,
706
                       "Number of bands (%d) exceeds limit (%d).\n",
707
                       sect_end, ics->max_sfb);
708
                return -1;
709
            }
710
            for (; k < sect_end; k++) {
711
                band_type        [idx]   = sect_band_type;
712
                band_type_run_end[idx++] = sect_end;
713
            }
714
        }
715
    }
716
    return 0;
717
}
718

    
719
/**
720
 * Decode scalefactors; reference: table 4.47.
721
 *
722
 * @param   global_gain         first scalefactor value as scalefactors are differentially coded
723
 * @param   band_type           array of the used band type
724
 * @param   band_type_run_end   array of the last scalefactor band of a band type run
725
 * @param   sf                  array of scalefactors or intensity stereo positions
726
 *
727
 * @return  Returns error status. 0 - OK, !0 - error
728
 */
729
static int decode_scalefactors(AACContext *ac, float sf[120], GetBitContext *gb,
730
                               unsigned int global_gain,
731
                               IndividualChannelStream *ics,
732
                               enum BandType band_type[120],
733
                               int band_type_run_end[120])
734
{
735
    const int sf_offset = ac->sf_offset + (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE ? 12 : 0);
736
    int g, i, idx = 0;
737
    int offset[3] = { global_gain, global_gain - 90, 100 };
738
    int noise_flag = 1;
739
    static const char *sf_str[3] = { "Global gain", "Noise gain", "Intensity stereo position" };
740
    for (g = 0; g < ics->num_window_groups; g++) {
741
        for (i = 0; i < ics->max_sfb;) {
742
            int run_end = band_type_run_end[idx];
743
            if (band_type[idx] == ZERO_BT) {
744
                for (; i < run_end; i++, idx++)
745
                    sf[idx] = 0.;
746
            } else if ((band_type[idx] == INTENSITY_BT) || (band_type[idx] == INTENSITY_BT2)) {
747
                for (; i < run_end; i++, idx++) {
748
                    offset[2] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
749
                    if (offset[2] > 255U) {
750
                        av_log(ac->avccontext, AV_LOG_ERROR,
751
                               "%s (%d) out of range.\n", sf_str[2], offset[2]);
752
                        return -1;
753
                    }
754
                    sf[idx] = ff_aac_pow2sf_tab[-offset[2] + 300];
755
                }
756
            } else if (band_type[idx] == NOISE_BT) {
757
                for (; i < run_end; i++, idx++) {
758
                    if (noise_flag-- > 0)
759
                        offset[1] += get_bits(gb, 9) - 256;
760
                    else
761
                        offset[1] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
762
                    if (offset[1] > 255U) {
763
                        av_log(ac->avccontext, AV_LOG_ERROR,
764
                               "%s (%d) out of range.\n", sf_str[1], offset[1]);
765
                        return -1;
766
                    }
767
                    sf[idx] = -ff_aac_pow2sf_tab[offset[1] + sf_offset + 100];
768
                }
769
            } else {
770
                for (; i < run_end; i++, idx++) {
771
                    offset[0] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
772
                    if (offset[0] > 255U) {
773
                        av_log(ac->avccontext, AV_LOG_ERROR,
774
                               "%s (%d) out of range.\n", sf_str[0], offset[0]);
775
                        return -1;
776
                    }
777
                    sf[idx] = -ff_aac_pow2sf_tab[ offset[0] + sf_offset];
778
                }
779
            }
780
        }
781
    }
782
    return 0;
783
}
784

    
785
/**
786
 * Decode pulse data; reference: table 4.7.
787
 */
788
static int decode_pulses(Pulse *pulse, GetBitContext *gb,
789
                         const uint16_t *swb_offset, int num_swb)
790
{
791
    int i, pulse_swb;
792
    pulse->num_pulse = get_bits(gb, 2) + 1;
793
    pulse_swb        = get_bits(gb, 6);
794
    if (pulse_swb >= num_swb)
795
        return -1;
796
    pulse->pos[0]    = swb_offset[pulse_swb];
797
    pulse->pos[0]   += get_bits(gb, 5);
798
    if (pulse->pos[0] > 1023)
799
        return -1;
800
    pulse->amp[0]    = get_bits(gb, 4);
801
    for (i = 1; i < pulse->num_pulse; i++) {
802
        pulse->pos[i] = get_bits(gb, 5) + pulse->pos[i - 1];
803
        if (pulse->pos[i] > 1023)
804
            return -1;
805
        pulse->amp[i] = get_bits(gb, 4);
806
    }
807
    return 0;
808
}
809

    
810
/**
811
 * Decode Temporal Noise Shaping data; reference: table 4.48.
812
 *
813
 * @return  Returns error status. 0 - OK, !0 - error
814
 */
815
static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns,
816
                      GetBitContext *gb, const IndividualChannelStream *ics)
817
{
818
    int w, filt, i, coef_len, coef_res, coef_compress;
819
    const int is8 = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE;
820
    const int tns_max_order = is8 ? 7 : ac->m4ac.object_type == AOT_AAC_MAIN ? 20 : 12;
821
    for (w = 0; w < ics->num_windows; w++) {
822
        if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) {
823
            coef_res = get_bits1(gb);
824

    
825
            for (filt = 0; filt < tns->n_filt[w]; filt++) {
826
                int tmp2_idx;
827
                tns->length[w][filt] = get_bits(gb, 6 - 2 * is8);
828

    
829
                if ((tns->order[w][filt] = get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
830
                    av_log(ac->avccontext, AV_LOG_ERROR, "TNS filter order %d is greater than maximum %d.",
831
                           tns->order[w][filt], tns_max_order);
832
                    tns->order[w][filt] = 0;
833
                    return -1;
834
                }
835
                if (tns->order[w][filt]) {
836
                    tns->direction[w][filt] = get_bits1(gb);
837
                    coef_compress = get_bits1(gb);
838
                    coef_len = coef_res + 3 - coef_compress;
839
                    tmp2_idx = 2 * coef_compress + coef_res;
840

    
841
                    for (i = 0; i < tns->order[w][filt]; i++)
842
                        tns->coef[w][filt][i] = tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)];
843
                }
844
            }
845
        }
846
    }
847
    return 0;
848
}
849

    
850
/**
851
 * Decode Mid/Side data; reference: table 4.54.
852
 *
853
 * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
854
 *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
855
 *                      [3] reserved for scalable AAC
856
 */
857
static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb,
858
                                   int ms_present)
859
{
860
    int idx;
861
    if (ms_present == 1) {
862
        for (idx = 0; idx < cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb; idx++)
863
            cpe->ms_mask[idx] = get_bits1(gb);
864
    } else if (ms_present == 2) {
865
        memset(cpe->ms_mask, 1, cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb * sizeof(cpe->ms_mask[0]));
866
    }
867
}
868

    
869
#ifndef VMUL2
870
static inline float *VMUL2(float *dst, const float *v, unsigned idx,
871
                           const float *scale)
872
{
873
    float s = *scale;
874
    *dst++ = v[idx    & 15] * s;
875
    *dst++ = v[idx>>4 & 15] * s;
876
    return dst;
877
}
878
#endif
879

    
880
#ifndef VMUL4
881
static inline float *VMUL4(float *dst, const float *v, unsigned idx,
882
                           const float *scale)
883
{
884
    float s = *scale;
885
    *dst++ = v[idx    & 3] * s;
886
    *dst++ = v[idx>>2 & 3] * s;
887
    *dst++ = v[idx>>4 & 3] * s;
888
    *dst++ = v[idx>>6 & 3] * s;
889
    return dst;
890
}
891
#endif
892

    
893
#ifndef VMUL2S
894
static inline float *VMUL2S(float *dst, const float *v, unsigned idx,
895
                            unsigned sign, const float *scale)
896
{
897
    union float754 s0, s1;
898

    
899
    s0.f = s1.f = *scale;
900
    s0.i ^= sign >> 1 << 31;
901
    s1.i ^= sign      << 31;
902

    
903
    *dst++ = v[idx    & 15] * s0.f;
904
    *dst++ = v[idx>>4 & 15] * s1.f;
905

    
906
    return dst;
907
}
908
#endif
909

    
910
#ifndef VMUL4S
911
static inline float *VMUL4S(float *dst, const float *v, unsigned idx,
912
                            unsigned sign, const float *scale)
913
{
914
    unsigned nz = idx >> 12;
915
    union float754 s = { .f = *scale };
916
    union float754 t;
917

    
918
    t.i = s.i ^ (sign & 1<<31);
919
    *dst++ = v[idx    & 3] * t.f;
920

    
921
    sign <<= nz & 1; nz >>= 1;
922
    t.i = s.i ^ (sign & 1<<31);
923
    *dst++ = v[idx>>2 & 3] * t.f;
924

    
925
    sign <<= nz & 1; nz >>= 1;
926
    t.i = s.i ^ (sign & 1<<31);
927
    *dst++ = v[idx>>4 & 3] * t.f;
928

    
929
    sign <<= nz & 1; nz >>= 1;
930
    t.i = s.i ^ (sign & 1<<31);
931
    *dst++ = v[idx>>6 & 3] * t.f;
932

    
933
    return dst;
934
}
935
#endif
936

    
937
/**
938
 * Decode spectral data; reference: table 4.50.
939
 * Dequantize and scale spectral data; reference: 4.6.3.3.
940
 *
941
 * @param   coef            array of dequantized, scaled spectral data
942
 * @param   sf              array of scalefactors or intensity stereo positions
943
 * @param   pulse_present   set if pulses are present
944
 * @param   pulse           pointer to pulse data struct
945
 * @param   band_type       array of the used band type
946
 *
947
 * @return  Returns error status. 0 - OK, !0 - error
948
 */
949
static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
950
                                       GetBitContext *gb, const float sf[120],
951
                                       int pulse_present, const Pulse *pulse,
952
                                       const IndividualChannelStream *ics,
953
                                       enum BandType band_type[120])
954
{
955
    int i, k, g, idx = 0;
956
    const int c = 1024 / ics->num_windows;
957
    const uint16_t *offsets = ics->swb_offset;
958
    float *coef_base = coef;
959
    int err_idx;
960

    
961
    for (g = 0; g < ics->num_windows; g++)
962
        memset(coef + g * 128 + offsets[ics->max_sfb], 0, sizeof(float) * (c - offsets[ics->max_sfb]));
963

    
964
    for (g = 0; g < ics->num_window_groups; g++) {
965
        unsigned g_len = ics->group_len[g];
966

    
967
        for (i = 0; i < ics->max_sfb; i++, idx++) {
968
            const unsigned cbt_m1 = band_type[idx] - 1;
969
            float *cfo = coef + offsets[i];
970
            int off_len = offsets[i + 1] - offsets[i];
971
            int group;
972

    
973
            if (cbt_m1 >= INTENSITY_BT2 - 1) {
974
                for (group = 0; group < g_len; group++, cfo+=128) {
975
                    memset(cfo, 0, off_len * sizeof(float));
976
                }
977
            } else if (cbt_m1 == NOISE_BT - 1) {
978
                for (group = 0; group < g_len; group++, cfo+=128) {
979
                    float scale;
980
                    float band_energy;
981

    
982
                    for (k = 0; k < off_len; k++) {
983
                        ac->random_state  = lcg_random(ac->random_state);
984
                        cfo[k] = ac->random_state;
985
                    }
986

    
987
                    band_energy = ac->dsp.scalarproduct_float(cfo, cfo, off_len);
988
                    scale = sf[idx] / sqrtf(band_energy);
989
                    ac->dsp.vector_fmul_scalar(cfo, cfo, scale, off_len);
990
                }
991
            } else {
992
                const float *vq = ff_aac_codebook_vector_vals[cbt_m1];
993
                const uint16_t *cb_vector_idx = ff_aac_codebook_vector_idx[cbt_m1];
994
                VLC_TYPE (*vlc_tab)[2] = vlc_spectral[cbt_m1].table;
995
                const int cb_size = ff_aac_spectral_sizes[cbt_m1];
996
                OPEN_READER(re, gb);
997

    
998
                switch (cbt_m1 >> 1) {
999
                case 0:
1000
                    for (group = 0; group < g_len; group++, cfo+=128) {
1001
                        float *cf = cfo;
1002
                        int len = off_len;
1003

    
1004
                        do {
1005
                            int code;
1006
                            unsigned cb_idx;
1007

    
1008
                            UPDATE_CACHE(re, gb);
1009
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);
1010

    
1011
                            if (code >= cb_size) {
1012
                                err_idx = code;
1013
                                goto err_cb_overflow;
1014
                            }
1015

    
1016
                            cb_idx = cb_vector_idx[code];
1017
                            cf = VMUL4(cf, vq, cb_idx, sf + idx);
1018
                        } while (len -= 4);
1019
                    }
1020
                    break;
1021

    
1022
                case 1:
1023
                    for (group = 0; group < g_len; group++, cfo+=128) {
1024
                        float *cf = cfo;
1025
                        int len = off_len;
1026

    
1027
                        do {
1028
                            int code;
1029
                            unsigned nnz;
1030
                            unsigned cb_idx;
1031
                            uint32_t bits;
1032

    
1033
                            UPDATE_CACHE(re, gb);
1034
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);
1035

    
1036
                            if (code >= cb_size) {
1037
                                err_idx = code;
1038
                                goto err_cb_overflow;
1039
                            }
1040

    
1041
#if MIN_CACHE_BITS < 20
1042
                            UPDATE_CACHE(re, gb);
1043
#endif
1044
                            cb_idx = cb_vector_idx[code];
1045
                            nnz = cb_idx >> 8 & 15;
1046
                            bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
1047
                            LAST_SKIP_BITS(re, gb, nnz);
1048
                            cf = VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1049
                        } while (len -= 4);
1050
                    }
1051
                    break;
1052

    
1053
                case 2:
1054
                    for (group = 0; group < g_len; group++, cfo+=128) {
1055
                        float *cf = cfo;
1056
                        int len = off_len;
1057

    
1058
                        do {
1059
                            int code;
1060
                            unsigned cb_idx;
1061

    
1062
                            UPDATE_CACHE(re, gb);
1063
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);
1064

    
1065
                            if (code >= cb_size) {
1066
                                err_idx = code;
1067
                                goto err_cb_overflow;
1068
                            }
1069

    
1070
                            cb_idx = cb_vector_idx[code];
1071
                            cf = VMUL2(cf, vq, cb_idx, sf + idx);
1072
                        } while (len -= 2);
1073
                    }
1074
                    break;
1075

    
1076
                case 3:
1077
                case 4:
1078
                    for (group = 0; group < g_len; group++, cfo+=128) {
1079
                        float *cf = cfo;
1080
                        int len = off_len;
1081

    
1082
                        do {
1083
                            int code;
1084
                            unsigned nnz;
1085
                            unsigned cb_idx;
1086
                            unsigned sign;
1087

    
1088
                            UPDATE_CACHE(re, gb);
1089
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);
1090

    
1091
                            if (code >= cb_size) {
1092
                                err_idx = code;
1093
                                goto err_cb_overflow;
1094
                            }
1095

    
1096
                            cb_idx = cb_vector_idx[code];
1097
                            nnz = cb_idx >> 8 & 15;
1098
                            sign = SHOW_UBITS(re, gb, nnz) << (cb_idx >> 12);
1099
                            LAST_SKIP_BITS(re, gb, nnz);
1100
                            cf = VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1101
                        } while (len -= 2);
1102
                    }
1103
                    break;
1104

    
1105
                default:
1106
                    for (group = 0; group < g_len; group++, cfo+=128) {
1107
                        float *cf = cfo;
1108
                        uint32_t *icf = (uint32_t *) cf;
1109
                        int len = off_len;
1110

    
1111
                        do {
1112
                            int code;
1113
                            unsigned nzt, nnz;
1114
                            unsigned cb_idx;
1115
                            uint32_t bits;
1116
                            int j;
1117

    
1118
                            UPDATE_CACHE(re, gb);
1119
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);
1120

    
1121
                            if (!code) {
1122
                                *icf++ = 0;
1123
                                *icf++ = 0;
1124
                                continue;
1125
                            }
1126

    
1127
                            if (code >= cb_size) {
1128
                                err_idx = code;
1129
                                goto err_cb_overflow;
1130
                            }
1131

    
1132
                            cb_idx = cb_vector_idx[code];
1133
                            nnz = cb_idx >> 12;
1134
                            nzt = cb_idx >> 8;
1135
                            bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
1136
                            LAST_SKIP_BITS(re, gb, nnz);
1137

    
1138
                            for (j = 0; j < 2; j++) {
1139
                                if (nzt & 1<<j) {
1140
                                    uint32_t b;
1141
                                    int n;
1142
                                    /* The total length of escape_sequence must be < 22 bits according
1143
                                       to the specification (i.e. max is 111111110xxxxxxxxxxxx). */
1144
                                    UPDATE_CACHE(re, gb);
1145
                                    b = GET_CACHE(re, gb);
1146
                                    b = 31 - av_log2(~b);
1147

    
1148
                                    if (b > 8) {
1149
                                        av_log(ac->avccontext, AV_LOG_ERROR, "error in spectral data, ESC overflow\n");
1150
                                        return -1;
1151
                                    }
1152

    
1153
#if MIN_CACHE_BITS < 21
1154
                                    LAST_SKIP_BITS(re, gb, b + 1);
1155
                                    UPDATE_CACHE(re, gb);
1156
#else
1157
                                    SKIP_BITS(re, gb, b + 1);
1158
#endif
1159
                                    b += 4;
1160
                                    n = (1 << b) + SHOW_UBITS(re, gb, b);
1161
                                    LAST_SKIP_BITS(re, gb, b);
1162
                                    *icf++ = cbrt_tab[n] | (bits & 1<<31);
1163
                                    bits <<= 1;
1164
                                } else {
1165
                                    unsigned v = ((const uint32_t*)vq)[cb_idx & 15];
1166
                                    *icf++ = (bits & 1<<31) | v;
1167
                                    bits <<= !!v;
1168
                                }
1169
                                cb_idx >>= 4;
1170
                            }
1171
                        } while (len -= 2);
1172

    
1173
                        ac->dsp.vector_fmul_scalar(cfo, cfo, sf[idx], off_len);
1174
                    }
1175
                }
1176

    
1177
                CLOSE_READER(re, gb);
1178
            }
1179
        }
1180
        coef += g_len << 7;
1181
    }
1182

    
1183
    if (pulse_present) {
1184
        idx = 0;
1185
        for (i = 0; i < pulse->num_pulse; i++) {
1186
            float co = coef_base[ pulse->pos[i] ];
1187
            while (offsets[idx + 1] <= pulse->pos[i])
1188
                idx++;
1189
            if (band_type[idx] != NOISE_BT && sf[idx]) {
1190
                float ico = -pulse->amp[i];
1191
                if (co) {
1192
                    co /= sf[idx];
1193
                    ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
1194
                }
1195
                coef_base[ pulse->pos[i] ] = cbrtf(fabsf(ico)) * ico * sf[idx];
1196
            }
1197
        }
1198
    }
1199
    return 0;
1200

    
1201
err_cb_overflow:
1202
    av_log(ac->avccontext, AV_LOG_ERROR,
1203
           "Read beyond end of ff_aac_codebook_vectors[%d][]. index %d >= %d\n",
1204
           band_type[idx], err_idx, ff_aac_spectral_sizes[band_type[idx]]);
1205
    return -1;
1206
}
1207

    
1208
static av_always_inline float flt16_round(float pf)
1209
{
1210
    union float754 tmp;
1211
    tmp.f = pf;
1212
    tmp.i = (tmp.i + 0x00008000U) & 0xFFFF0000U;
1213
    return tmp.f;
1214
}
1215

    
1216
static av_always_inline float flt16_even(float pf)
1217
{
1218
    union float754 tmp;
1219
    tmp.f = pf;
1220
    tmp.i = (tmp.i + 0x00007FFFU + (tmp.i & 0x00010000U >> 16)) & 0xFFFF0000U;
1221
    return tmp.f;
1222
}
1223

    
1224
static av_always_inline float flt16_trunc(float pf)
1225
{
1226
    union float754 pun;
1227
    pun.f = pf;
1228
    pun.i &= 0xFFFF0000U;
1229
    return pun.f;
1230
}
1231

    
1232
static void predict(AACContext *ac, PredictorState *ps, float *coef,
1233
                    int output_enable)
1234
{
1235
    const float a     = 0.953125; // 61.0 / 64
1236
    const float alpha = 0.90625;  // 29.0 / 32
1237
    float e0, e1;
1238
    float pv;
1239
    float k1, k2;
1240

    
1241
    k1 = ps->var0 > 1 ? ps->cor0 * flt16_even(a / ps->var0) : 0;
1242
    k2 = ps->var1 > 1 ? ps->cor1 * flt16_even(a / ps->var1) : 0;
1243

    
1244
    pv = flt16_round(k1 * ps->r0 + k2 * ps->r1);
1245
    if (output_enable)
1246
        *coef += pv * ac->sf_scale;
1247

    
1248
    e0 = *coef / ac->sf_scale;
1249
    e1 = e0 - k1 * ps->r0;
1250

    
1251
    ps->cor1 = flt16_trunc(alpha * ps->cor1 + ps->r1 * e1);
1252
    ps->var1 = flt16_trunc(alpha * ps->var1 + 0.5 * (ps->r1 * ps->r1 + e1 * e1));
1253
    ps->cor0 = flt16_trunc(alpha * ps->cor0 + ps->r0 * e0);
1254
    ps->var0 = flt16_trunc(alpha * ps->var0 + 0.5 * (ps->r0 * ps->r0 + e0 * e0));
1255

    
1256
    ps->r1 = flt16_trunc(a * (ps->r0 - k1 * e0));
1257
    ps->r0 = flt16_trunc(a * e0);
1258
}
1259

    
1260
/**
1261
 * Apply AAC-Main style frequency domain prediction.
1262
 */
1263
static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
1264
{
1265
    int sfb, k;
1266

    
1267
    if (!sce->ics.predictor_initialized) {
1268
        reset_all_predictors(sce->predictor_state);
1269
        sce->ics.predictor_initialized = 1;
1270
    }
1271

    
1272
    if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
1273
        for (sfb = 0; sfb < ff_aac_pred_sfb_max[ac->m4ac.sampling_index]; sfb++) {
1274
            for (k = sce->ics.swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
1275
                predict(ac, &sce->predictor_state[k], &sce->coeffs[k],
1276
                        sce->ics.predictor_present && sce->ics.prediction_used[sfb]);
1277
            }
1278
        }
1279
        if (sce->ics.predictor_reset_group)
1280
            reset_predictor_group(sce->predictor_state, sce->ics.predictor_reset_group);
1281
    } else
1282
        reset_all_predictors(sce->predictor_state);
1283
}
1284

    
1285
/**
1286
 * Decode an individual_channel_stream payload; reference: table 4.44.
1287
 *
1288
 * @param   common_window   Channels have independent [0], or shared [1], Individual Channel Stream information.
1289
 * @param   scale_flag      scalable [1] or non-scalable [0] AAC (Unused until scalable AAC is implemented.)
1290
 *
1291
 * @return  Returns error status. 0 - OK, !0 - error
1292
 */
1293
static int decode_ics(AACContext *ac, SingleChannelElement *sce,
1294
                      GetBitContext *gb, int common_window, int scale_flag)
1295
{
1296
    Pulse pulse;
1297
    TemporalNoiseShaping    *tns = &sce->tns;
1298
    IndividualChannelStream *ics = &sce->ics;
1299
    float *out = sce->coeffs;
1300
    int global_gain, pulse_present = 0;
1301

    
1302
    /* This assignment is to silence a GCC warning about the variable being used
1303
     * uninitialized when in fact it always is.
1304
     */
1305
    pulse.num_pulse = 0;
1306

    
1307
    global_gain = get_bits(gb, 8);
1308

    
1309
    if (!common_window && !scale_flag) {
1310
        if (decode_ics_info(ac, ics, gb, 0) < 0)
1311
            return -1;
1312
    }
1313

    
1314
    if (decode_band_types(ac, sce->band_type, sce->band_type_run_end, gb, ics) < 0)
1315
        return -1;
1316
    if (decode_scalefactors(ac, sce->sf, gb, global_gain, ics, sce->band_type, sce->band_type_run_end) < 0)
1317
        return -1;
1318

    
1319
    pulse_present = 0;
1320
    if (!scale_flag) {
1321
        if ((pulse_present = get_bits1(gb))) {
1322
            if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1323
                av_log(ac->avccontext, AV_LOG_ERROR, "Pulse tool not allowed in eight short sequence.\n");
1324
                return -1;
1325
            }
1326
            if (decode_pulses(&pulse, gb, ics->swb_offset, ics->num_swb)) {
1327
                av_log(ac->avccontext, AV_LOG_ERROR, "Pulse data corrupt or invalid.\n");
1328
                return -1;
1329
            }
1330
        }
1331
        if ((tns->present = get_bits1(gb)) && decode_tns(ac, tns, gb, ics))
1332
            return -1;
1333
        if (get_bits1(gb)) {
1334
            av_log_missing_feature(ac->avccontext, "SSR", 1);
1335
            return -1;
1336
        }
1337
    }
1338

    
1339
    if (decode_spectrum_and_dequant(ac, out, gb, sce->sf, pulse_present, &pulse, ics, sce->band_type) < 0)
1340
        return -1;
1341

    
1342
    if (ac->m4ac.object_type == AOT_AAC_MAIN && !common_window)
1343
        apply_prediction(ac, sce);
1344

    
1345
    return 0;
1346
}
1347

    
1348
/**
1349
 * Mid/Side stereo decoding; reference: 4.6.8.1.3.
1350
 */
1351
static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
1352
{
1353
    const IndividualChannelStream *ics = &cpe->ch[0].ics;
1354
    float *ch0 = cpe->ch[0].coeffs;
1355
    float *ch1 = cpe->ch[1].coeffs;
1356
    int g, i, group, idx = 0;
1357
    const uint16_t *offsets = ics->swb_offset;
1358
    for (g = 0; g < ics->num_window_groups; g++) {
1359
        for (i = 0; i < ics->max_sfb; i++, idx++) {
1360
            if (cpe->ms_mask[idx] &&
1361
                    cpe->ch[0].band_type[idx] < NOISE_BT && cpe->ch[1].band_type[idx] < NOISE_BT) {
1362
                for (group = 0; group < ics->group_len[g]; group++) {
1363
                    ac->dsp.butterflies_float(ch0 + group * 128 + offsets[i],
1364
                                              ch1 + group * 128 + offsets[i],
1365
                                              offsets[i+1] - offsets[i]);
1366
                }
1367
            }
1368
        }
1369
        ch0 += ics->group_len[g] * 128;
1370
        ch1 += ics->group_len[g] * 128;
1371
    }
1372
}
1373

    
1374
/**
1375
 * intensity stereo decoding; reference: 4.6.8.2.3
1376
 *
1377
 * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
1378
 *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
1379
 *                      [3] reserved for scalable AAC
1380
 */
1381
static void apply_intensity_stereo(ChannelElement *cpe, int ms_present)
1382
{
1383
    const IndividualChannelStream *ics = &cpe->ch[1].ics;
1384
    SingleChannelElement         *sce1 = &cpe->ch[1];
1385
    float *coef0 = cpe->ch[0].coeffs, *coef1 = cpe->ch[1].coeffs;
1386
    const uint16_t *offsets = ics->swb_offset;
1387
    int g, group, i, k, idx = 0;
1388
    int c;
1389
    float scale;
1390
    for (g = 0; g < ics->num_window_groups; g++) {
1391
        for (i = 0; i < ics->max_sfb;) {
1392
            if (sce1->band_type[idx] == INTENSITY_BT || sce1->band_type[idx] == INTENSITY_BT2) {
1393
                const int bt_run_end = sce1->band_type_run_end[idx];
1394
                for (; i < bt_run_end; i++, idx++) {
1395
                    c = -1 + 2 * (sce1->band_type[idx] - 14);
1396
                    if (ms_present)
1397
                        c *= 1 - 2 * cpe->ms_mask[idx];
1398
                    scale = c * sce1->sf[idx];
1399
                    for (group = 0; group < ics->group_len[g]; group++)
1400
                        for (k = offsets[i]; k < offsets[i + 1]; k++)
1401
                            coef1[group * 128 + k] = scale * coef0[group * 128 + k];
1402
                }
1403
            } else {
1404
                int bt_run_end = sce1->band_type_run_end[idx];
1405
                idx += bt_run_end - i;
1406
                i    = bt_run_end;
1407
            }
1408
        }
1409
        coef0 += ics->group_len[g] * 128;
1410
        coef1 += ics->group_len[g] * 128;
1411
    }
1412
}
1413

    
1414
/**
1415
 * Decode a channel_pair_element; reference: table 4.4.
1416
 *
1417
 * @param   elem_id Identifies the instance of a syntax element.
1418
 *
1419
 * @return  Returns error status. 0 - OK, !0 - error
1420
 */
1421
static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
1422
{
1423
    int i, ret, common_window, ms_present = 0;
1424

    
1425
    common_window = get_bits1(gb);
1426
    if (common_window) {
1427
        if (decode_ics_info(ac, &cpe->ch[0].ics, gb, 1))
1428
            return -1;
1429
        i = cpe->ch[1].ics.use_kb_window[0];
1430
        cpe->ch[1].ics = cpe->ch[0].ics;
1431
        cpe->ch[1].ics.use_kb_window[1] = i;
1432
        ms_present = get_bits(gb, 2);
1433
        if (ms_present == 3) {
1434
            av_log(ac->avccontext, AV_LOG_ERROR, "ms_present = 3 is reserved.\n");
1435
            return -1;
1436
        } else if (ms_present)
1437
            decode_mid_side_stereo(cpe, gb, ms_present);
1438
    }
1439
    if ((ret = decode_ics(ac, &cpe->ch[0], gb, common_window, 0)))
1440
        return ret;
1441
    if ((ret = decode_ics(ac, &cpe->ch[1], gb, common_window, 0)))
1442
        return ret;
1443

    
1444
    if (common_window) {
1445
        if (ms_present)
1446
            apply_mid_side_stereo(ac, cpe);
1447
        if (ac->m4ac.object_type == AOT_AAC_MAIN) {
1448
            apply_prediction(ac, &cpe->ch[0]);
1449
            apply_prediction(ac, &cpe->ch[1]);
1450
        }
1451
    }
1452

    
1453
    apply_intensity_stereo(cpe, ms_present);
1454
    return 0;
1455
}
1456

    
1457
/**
1458
 * Decode coupling_channel_element; reference: table 4.8.
1459
 *
1460
 * @param   elem_id Identifies the instance of a syntax element.
1461
 *
1462
 * @return  Returns error status. 0 - OK, !0 - error
1463
 */
1464
static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
1465
{
1466
    int num_gain = 0;
1467
    int c, g, sfb, ret;
1468
    int sign;
1469
    float scale;
1470
    SingleChannelElement *sce = &che->ch[0];
1471
    ChannelCoupling     *coup = &che->coup;
1472

    
1473
    coup->coupling_point = 2 * get_bits1(gb);
1474
    coup->num_coupled = get_bits(gb, 3);
1475
    for (c = 0; c <= coup->num_coupled; c++) {
1476
        num_gain++;
1477
        coup->type[c] = get_bits1(gb) ? TYPE_CPE : TYPE_SCE;
1478
        coup->id_select[c] = get_bits(gb, 4);
1479
        if (coup->type[c] == TYPE_CPE) {
1480
            coup->ch_select[c] = get_bits(gb, 2);
1481
            if (coup->ch_select[c] == 3)
1482
                num_gain++;
1483
        } else
1484
            coup->ch_select[c] = 2;
1485
    }
1486
    coup->coupling_point += get_bits1(gb) || (coup->coupling_point >> 1);
1487

    
1488
    sign  = get_bits(gb, 1);
1489
    scale = pow(2., pow(2., (int)get_bits(gb, 2) - 3));
1490

    
1491
    if ((ret = decode_ics(ac, sce, gb, 0, 0)))
1492
        return ret;
1493

    
1494
    for (c = 0; c < num_gain; c++) {
1495
        int idx  = 0;
1496
        int cge  = 1;
1497
        int gain = 0;
1498
        float gain_cache = 1.;
1499
        if (c) {
1500
            cge = coup->coupling_point == AFTER_IMDCT ? 1 : get_bits1(gb);
1501
            gain = cge ? get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60: 0;
1502
            gain_cache = pow(scale, -gain);
1503
        }
1504
        if (coup->coupling_point == AFTER_IMDCT) {
1505
            coup->gain[c][0] = gain_cache;
1506
        } else {
1507
            for (g = 0; g < sce->ics.num_window_groups; g++) {
1508
                for (sfb = 0; sfb < sce->ics.max_sfb; sfb++, idx++) {
1509
                    if (sce->band_type[idx] != ZERO_BT) {
1510
                        if (!cge) {
1511
                            int t = get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
1512
                            if (t) {
1513
                                int s = 1;
1514
                                t = gain += t;
1515
                                if (sign) {
1516
                                    s  -= 2 * (t & 0x1);
1517
                                    t >>= 1;
1518
                                }
1519
                                gain_cache = pow(scale, -t) * s;
1520
                            }
1521
                        }
1522
                        coup->gain[c][idx] = gain_cache;
1523
                    }
1524
                }
1525
            }
1526
        }
1527
    }
1528
    return 0;
1529
}
1530

    
1531
/**
1532
 * Decode Spectral Band Replication extension data; reference: table 4.55.
1533
 *
1534
 * @param   crc flag indicating the presence of CRC checksum
1535
 * @param   cnt length of TYPE_FIL syntactic element in bytes
1536
 *
1537
 * @return  Returns number of bytes consumed from the TYPE_FIL element.
1538
 */
1539
static int decode_sbr_extension(AACContext *ac, GetBitContext *gb,
1540
                                int crc, int cnt)
1541
{
1542
    // TODO : sbr_extension implementation
1543
    av_log_missing_feature(ac->avccontext, "SBR", 0);
1544
    skip_bits_long(gb, 8 * cnt - 4); // -4 due to reading extension type
1545
    return cnt;
1546
}
1547

    
1548
/**
1549
 * Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
1550
 *
1551
 * @return  Returns number of bytes consumed.
1552
 */
1553
static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc,
1554
                                         GetBitContext *gb)
1555
{
1556
    int i;
1557
    int num_excl_chan = 0;
1558

    
1559
    do {
1560
        for (i = 0; i < 7; i++)
1561
            che_drc->exclude_mask[num_excl_chan++] = get_bits1(gb);
1562
    } while (num_excl_chan < MAX_CHANNELS - 7 && get_bits1(gb));
1563

    
1564
    return num_excl_chan / 7;
1565
}
1566

    
1567
/**
1568
 * Decode dynamic range information; reference: table 4.52.
1569
 *
1570
 * @param   cnt length of TYPE_FIL syntactic element in bytes
1571
 *
1572
 * @return  Returns number of bytes consumed.
1573
 */
1574
static int decode_dynamic_range(DynamicRangeControl *che_drc,
1575
                                GetBitContext *gb, int cnt)
1576
{
1577
    int n             = 1;
1578
    int drc_num_bands = 1;
1579
    int i;
1580

    
1581
    /* pce_tag_present? */
1582
    if (get_bits1(gb)) {
1583
        che_drc->pce_instance_tag  = get_bits(gb, 4);
1584
        skip_bits(gb, 4); // tag_reserved_bits
1585
        n++;
1586
    }
1587

    
1588
    /* excluded_chns_present? */
1589
    if (get_bits1(gb)) {
1590
        n += decode_drc_channel_exclusions(che_drc, gb);
1591
    }
1592

    
1593
    /* drc_bands_present? */
1594
    if (get_bits1(gb)) {
1595
        che_drc->band_incr            = get_bits(gb, 4);
1596
        che_drc->interpolation_scheme = get_bits(gb, 4);
1597
        n++;
1598
        drc_num_bands += che_drc->band_incr;
1599
        for (i = 0; i < drc_num_bands; i++) {
1600
            che_drc->band_top[i] = get_bits(gb, 8);
1601
            n++;
1602
        }
1603
    }
1604

    
1605
    /* prog_ref_level_present? */
1606
    if (get_bits1(gb)) {
1607
        che_drc->prog_ref_level = get_bits(gb, 7);
1608
        skip_bits1(gb); // prog_ref_level_reserved_bits
1609
        n++;
1610
    }
1611

    
1612
    for (i = 0; i < drc_num_bands; i++) {
1613
        che_drc->dyn_rng_sgn[i] = get_bits1(gb);
1614
        che_drc->dyn_rng_ctl[i] = get_bits(gb, 7);
1615
        n++;
1616
    }
1617

    
1618
    return n;
1619
}
1620

    
1621
/**
1622
 * Decode extension data (incomplete); reference: table 4.51.
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_extension_payload(AACContext *ac, GetBitContext *gb, int cnt)
1629
{
1630
    int crc_flag = 0;
1631
    int res = cnt;
1632
    switch (get_bits(gb, 4)) { // extension type
1633
    case EXT_SBR_DATA_CRC:
1634
        crc_flag++;
1635
    case EXT_SBR_DATA:
1636
        res = decode_sbr_extension(ac, gb, crc_flag, cnt);
1637
        break;
1638
    case EXT_DYNAMIC_RANGE:
1639
        res = decode_dynamic_range(&ac->che_drc, gb, cnt);
1640
        break;
1641
    case EXT_FILL:
1642
    case EXT_FILL_DATA:
1643
    case EXT_DATA_ELEMENT:
1644
    default:
1645
        skip_bits_long(gb, 8 * cnt - 4);
1646
        break;
1647
    };
1648
    return res;
1649
}
1650

    
1651
/**
1652
 * Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4.6.9.3.
1653
 *
1654
 * @param   decode  1 if tool is used normally, 0 if tool is used in LTP.
1655
 * @param   coef    spectral coefficients
1656
 */
1657
static void apply_tns(float coef[1024], TemporalNoiseShaping *tns,
1658
                      IndividualChannelStream *ics, int decode)
1659
{
1660
    const int mmm = FFMIN(ics->tns_max_bands, ics->max_sfb);
1661
    int w, filt, m, i;
1662
    int bottom, top, order, start, end, size, inc;
1663
    float lpc[TNS_MAX_ORDER];
1664

    
1665
    for (w = 0; w < ics->num_windows; w++) {
1666
        bottom = ics->num_swb;
1667
        for (filt = 0; filt < tns->n_filt[w]; filt++) {
1668
            top    = bottom;
1669
            bottom = FFMAX(0, top - tns->length[w][filt]);
1670
            order  = tns->order[w][filt];
1671
            if (order == 0)
1672
                continue;
1673

    
1674
            // tns_decode_coef
1675
            compute_lpc_coefs(tns->coef[w][filt], order, lpc, 0, 0, 0);
1676

    
1677
            start = ics->swb_offset[FFMIN(bottom, mmm)];
1678
            end   = ics->swb_offset[FFMIN(   top, mmm)];
1679
            if ((size = end - start) <= 0)
1680
                continue;
1681
            if (tns->direction[w][filt]) {
1682
                inc = -1;
1683
                start = end - 1;
1684
            } else {
1685
                inc = 1;
1686
            }
1687
            start += w * 128;
1688

    
1689
            // ar filter
1690
            for (m = 0; m < size; m++, start += inc)
1691
                for (i = 1; i <= FFMIN(m, order); i++)
1692
                    coef[start] -= coef[start - i * inc] * lpc[i - 1];
1693
        }
1694
    }
1695
}
1696

    
1697
/**
1698
 * Conduct IMDCT and windowing.
1699
 */
1700
static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
1701
{
1702
    IndividualChannelStream *ics = &sce->ics;
1703
    float *in    = sce->coeffs;
1704
    float *out   = sce->ret;
1705
    float *saved = sce->saved;
1706
    const float *swindow      = ics->use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
1707
    const float *lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
1708
    const float *swindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
1709
    float *buf  = ac->buf_mdct;
1710
    float *temp = ac->temp;
1711
    int i;
1712

    
1713
    // imdct
1714
    if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1715
        if (ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE)
1716
            av_log(ac->avccontext, AV_LOG_WARNING,
1717
                   "Transition from an ONLY_LONG or LONG_STOP to an EIGHT_SHORT sequence detected. "
1718
                   "If you heard an audible artifact, please submit the sample to the FFmpeg developers.\n");
1719
        for (i = 0; i < 1024; i += 128)
1720
            ff_imdct_half(&ac->mdct_small, buf + i, in + i);
1721
    } else
1722
        ff_imdct_half(&ac->mdct, buf, in);
1723

    
1724
    /* window overlapping
1725
     * NOTE: To simplify the overlapping code, all 'meaningless' short to long
1726
     * and long to short transitions are considered to be short to short
1727
     * transitions. This leaves just two cases (long to long and short to short)
1728
     * with a little special sauce for EIGHT_SHORT_SEQUENCE.
1729
     */
1730
    if ((ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE) &&
1731
            (ics->window_sequence[0] == ONLY_LONG_SEQUENCE || ics->window_sequence[0] == LONG_START_SEQUENCE)) {
1732
        ac->dsp.vector_fmul_window(    out,               saved,            buf,         lwindow_prev, ac->add_bias, 512);
1733
    } else {
1734
        for (i = 0; i < 448; i++)
1735
            out[i] = saved[i] + ac->add_bias;
1736

    
1737
        if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1738
            ac->dsp.vector_fmul_window(out + 448 + 0*128, saved + 448,      buf + 0*128, swindow_prev, ac->add_bias, 64);
1739
            ac->dsp.vector_fmul_window(out + 448 + 1*128, buf + 0*128 + 64, buf + 1*128, swindow,      ac->add_bias, 64);
1740
            ac->dsp.vector_fmul_window(out + 448 + 2*128, buf + 1*128 + 64, buf + 2*128, swindow,      ac->add_bias, 64);
1741
            ac->dsp.vector_fmul_window(out + 448 + 3*128, buf + 2*128 + 64, buf + 3*128, swindow,      ac->add_bias, 64);
1742
            ac->dsp.vector_fmul_window(temp,              buf + 3*128 + 64, buf + 4*128, swindow,      ac->add_bias, 64);
1743
            memcpy(                    out + 448 + 4*128, temp, 64 * sizeof(float));
1744
        } else {
1745
            ac->dsp.vector_fmul_window(out + 448,         saved + 448,      buf,         swindow_prev, ac->add_bias, 64);
1746
            for (i = 576; i < 1024; i++)
1747
                out[i] = buf[i-512] + ac->add_bias;
1748
        }
1749
    }
1750

    
1751
    // buffer update
1752
    if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1753
        for (i = 0; i < 64; i++)
1754
            saved[i] = temp[64 + i] - ac->add_bias;
1755
        ac->dsp.vector_fmul_window(saved + 64,  buf + 4*128 + 64, buf + 5*128, swindow, 0, 64);
1756
        ac->dsp.vector_fmul_window(saved + 192, buf + 5*128 + 64, buf + 6*128, swindow, 0, 64);
1757
        ac->dsp.vector_fmul_window(saved + 320, buf + 6*128 + 64, buf + 7*128, swindow, 0, 64);
1758
        memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1759
    } else if (ics->window_sequence[0] == LONG_START_SEQUENCE) {
1760
        memcpy(                    saved,       buf + 512,        448 * sizeof(float));
1761
        memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1762
    } else { // LONG_STOP or ONLY_LONG
1763
        memcpy(                    saved,       buf + 512,        512 * sizeof(float));
1764
    }
1765
}
1766

    
1767
/**
1768
 * Apply dependent channel coupling (applied before IMDCT).
1769
 *
1770
 * @param   index   index into coupling gain array
1771
 */
1772
static void apply_dependent_coupling(AACContext *ac,
1773
                                     SingleChannelElement *target,
1774
                                     ChannelElement *cce, int index)
1775
{
1776
    IndividualChannelStream *ics = &cce->ch[0].ics;
1777
    const uint16_t *offsets = ics->swb_offset;
1778
    float *dest = target->coeffs;
1779
    const float *src = cce->ch[0].coeffs;
1780
    int g, i, group, k, idx = 0;
1781
    if (ac->m4ac.object_type == AOT_AAC_LTP) {
1782
        av_log(ac->avccontext, AV_LOG_ERROR,
1783
               "Dependent coupling is not supported together with LTP\n");
1784
        return;
1785
    }
1786
    for (g = 0; g < ics->num_window_groups; g++) {
1787
        for (i = 0; i < ics->max_sfb; i++, idx++) {
1788
            if (cce->ch[0].band_type[idx] != ZERO_BT) {
1789
                const float gain = cce->coup.gain[index][idx];
1790
                for (group = 0; group < ics->group_len[g]; group++) {
1791
                    for (k = offsets[i]; k < offsets[i + 1]; k++) {
1792
                        // XXX dsputil-ize
1793
                        dest[group * 128 + k] += gain * src[group * 128 + k];
1794
                    }
1795
                }
1796
            }
1797
        }
1798
        dest += ics->group_len[g] * 128;
1799
        src  += ics->group_len[g] * 128;
1800
    }
1801
}
1802

    
1803
/**
1804
 * Apply independent channel coupling (applied after IMDCT).
1805
 *
1806
 * @param   index   index into coupling gain array
1807
 */
1808
static void apply_independent_coupling(AACContext *ac,
1809
                                       SingleChannelElement *target,
1810
                                       ChannelElement *cce, int index)
1811
{
1812
    int i;
1813
    const float gain = cce->coup.gain[index][0];
1814
    const float bias = ac->add_bias;
1815
    const float *src = cce->ch[0].ret;
1816
    float *dest = target->ret;
1817

    
1818
    for (i = 0; i < 1024; i++)
1819
        dest[i] += gain * (src[i] - bias);
1820
}
1821

    
1822
/**
1823
 * channel coupling transformation interface
1824
 *
1825
 * @param   index   index into coupling gain array
1826
 * @param   apply_coupling_method   pointer to (in)dependent coupling function
1827
 */
1828
static void apply_channel_coupling(AACContext *ac, ChannelElement *cc,
1829
                                   enum RawDataBlockType type, int elem_id,
1830
                                   enum CouplingPoint coupling_point,
1831
                                   void (*apply_coupling_method)(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
1832
{
1833
    int i, c;
1834

    
1835
    for (i = 0; i < MAX_ELEM_ID; i++) {
1836
        ChannelElement *cce = ac->che[TYPE_CCE][i];
1837
        int index = 0;
1838

    
1839
        if (cce && cce->coup.coupling_point == coupling_point) {
1840
            ChannelCoupling *coup = &cce->coup;
1841

    
1842
            for (c = 0; c <= coup->num_coupled; c++) {
1843
                if (coup->type[c] == type && coup->id_select[c] == elem_id) {
1844
                    if (coup->ch_select[c] != 1) {
1845
                        apply_coupling_method(ac, &cc->ch[0], cce, index);
1846
                        if (coup->ch_select[c] != 0)
1847
                            index++;
1848
                    }
1849
                    if (coup->ch_select[c] != 2)
1850
                        apply_coupling_method(ac, &cc->ch[1], cce, index++);
1851
                } else
1852
                    index += 1 + (coup->ch_select[c] == 3);
1853
            }
1854
        }
1855
    }
1856
}
1857

    
1858
/**
1859
 * Convert spectral data to float samples, applying all supported tools as appropriate.
1860
 */
1861
static void spectral_to_sample(AACContext *ac)
1862
{
1863
    int i, type;
1864
    for (type = 3; type >= 0; type--) {
1865
        for (i = 0; i < MAX_ELEM_ID; i++) {
1866
            ChannelElement *che = ac->che[type][i];
1867
            if (che) {
1868
                if (type <= TYPE_CPE)
1869
                    apply_channel_coupling(ac, che, type, i, BEFORE_TNS, apply_dependent_coupling);
1870
                if (che->ch[0].tns.present)
1871
                    apply_tns(che->ch[0].coeffs, &che->ch[0].tns, &che->ch[0].ics, 1);
1872
                if (che->ch[1].tns.present)
1873
                    apply_tns(che->ch[1].coeffs, &che->ch[1].tns, &che->ch[1].ics, 1);
1874
                if (type <= TYPE_CPE)
1875
                    apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMDCT, apply_dependent_coupling);
1876
                if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT)
1877
                    imdct_and_windowing(ac, &che->ch[0]);
1878
                if (type == TYPE_CPE)
1879
                    imdct_and_windowing(ac, &che->ch[1]);
1880
                if (type <= TYPE_CCE)
1881
                    apply_channel_coupling(ac, che, type, i, AFTER_IMDCT, apply_independent_coupling);
1882
            }
1883
        }
1884
    }
1885
}
1886

    
1887
static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
1888
{
1889
    int size;
1890
    AACADTSHeaderInfo hdr_info;
1891

    
1892
    size = ff_aac_parse_header(gb, &hdr_info);
1893
    if (size > 0) {
1894
        if (ac->output_configured != OC_LOCKED && hdr_info.chan_config) {
1895
            enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
1896
            memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1897
            ac->m4ac.chan_config = hdr_info.chan_config;
1898
            if (set_default_channel_config(ac, new_che_pos, hdr_info.chan_config))
1899
                return -7;
1900
            if (output_configure(ac, ac->che_pos, new_che_pos, hdr_info.chan_config, OC_TRIAL_FRAME))
1901
                return -7;
1902
        } else if (ac->output_configured != OC_LOCKED) {
1903
            ac->output_configured = OC_NONE;
1904
        }
1905
        if (ac->output_configured != OC_LOCKED)
1906
            ac->m4ac.sbr = -1;
1907
        ac->m4ac.sample_rate     = hdr_info.sample_rate;
1908
        ac->m4ac.sampling_index  = hdr_info.sampling_index;
1909
        ac->m4ac.object_type     = hdr_info.object_type;
1910
        if (!ac->avccontext->sample_rate)
1911
            ac->avccontext->sample_rate = hdr_info.sample_rate;
1912
        if (hdr_info.num_aac_frames == 1) {
1913
            if (!hdr_info.crc_absent)
1914
                skip_bits(gb, 16);
1915
        } else {
1916
            av_log_missing_feature(ac->avccontext, "More than one AAC RDB per ADTS frame is", 0);
1917
            return -1;
1918
        }
1919
    }
1920
    return size;
1921
}
1922

    
1923
static int aac_decode_frame(AVCodecContext *avccontext, void *data,
1924
                            int *data_size, AVPacket *avpkt)
1925
{
1926
    const uint8_t *buf = avpkt->data;
1927
    int buf_size = avpkt->size;
1928
    AACContext *ac = avccontext->priv_data;
1929
    ChannelElement *che = NULL;
1930
    GetBitContext gb;
1931
    enum RawDataBlockType elem_type;
1932
    int err, elem_id, data_size_tmp;
1933

    
1934
    init_get_bits(&gb, buf, buf_size * 8);
1935

    
1936
    if (show_bits(&gb, 12) == 0xfff) {
1937
        if (parse_adts_frame_header(ac, &gb) < 0) {
1938
            av_log(avccontext, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
1939
            return -1;
1940
        }
1941
        if (ac->m4ac.sampling_index > 12) {
1942
            av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
1943
            return -1;
1944
        }
1945
    }
1946

    
1947
    // parse
1948
    while ((elem_type = get_bits(&gb, 3)) != TYPE_END) {
1949
        elem_id = get_bits(&gb, 4);
1950

    
1951
        if (elem_type < TYPE_DSE && !(che=get_che(ac, elem_type, elem_id))) {
1952
            av_log(ac->avccontext, AV_LOG_ERROR, "channel element %d.%d is not allocated\n", elem_type, elem_id);
1953
            return -1;
1954
        }
1955

    
1956
        switch (elem_type) {
1957

    
1958
        case TYPE_SCE:
1959
            err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1960
            break;
1961

    
1962
        case TYPE_CPE:
1963
            err = decode_cpe(ac, &gb, che);
1964
            break;
1965

    
1966
        case TYPE_CCE:
1967
            err = decode_cce(ac, &gb, che);
1968
            break;
1969

    
1970
        case TYPE_LFE:
1971
            err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1972
            break;
1973

    
1974
        case TYPE_DSE:
1975
            skip_data_stream_element(&gb);
1976
            err = 0;
1977
            break;
1978

    
1979
        case TYPE_PCE: {
1980
            enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
1981
            memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1982
            if ((err = decode_pce(ac, new_che_pos, &gb)))
1983
                break;
1984
            if (ac->output_configured > OC_TRIAL_PCE)
1985
                av_log(avccontext, AV_LOG_ERROR,
1986
                       "Not evaluating a further program_config_element as this construct is dubious at best.\n");
1987
            else
1988
                err = output_configure(ac, ac->che_pos, new_che_pos, 0, OC_TRIAL_PCE);
1989
            break;
1990
        }
1991

    
1992
        case TYPE_FIL:
1993
            if (elem_id == 15)
1994
                elem_id += get_bits(&gb, 8) - 1;
1995
            while (elem_id > 0)
1996
                elem_id -= decode_extension_payload(ac, &gb, elem_id);
1997
            err = 0; /* FIXME */
1998
            break;
1999

    
2000
        default:
2001
            err = -1; /* should not happen, but keeps compiler happy */
2002
            break;
2003
        }
2004

    
2005
        if (err)
2006
            return err;
2007
    }
2008

    
2009
    spectral_to_sample(ac);
2010

    
2011
    data_size_tmp = 1024 * avccontext->channels * sizeof(int16_t);
2012
    if (*data_size < data_size_tmp) {
2013
        av_log(avccontext, AV_LOG_ERROR,
2014
               "Output buffer too small (%d) or trying to output too many samples (%d) for this frame.\n",
2015
               *data_size, data_size_tmp);
2016
        return -1;
2017
    }
2018
    *data_size = data_size_tmp;
2019

    
2020
    ac->dsp.float_to_int16_interleave(data, (const float **)ac->output_data, 1024, avccontext->channels);
2021

    
2022
    if (ac->output_configured)
2023
        ac->output_configured = OC_LOCKED;
2024

    
2025
    return buf_size;
2026
}
2027

    
2028
static av_cold int aac_decode_close(AVCodecContext *avccontext)
2029
{
2030
    AACContext *ac = avccontext->priv_data;
2031
    int i, type;
2032

    
2033
    for (i = 0; i < MAX_ELEM_ID; i++) {
2034
        for (type = 0; type < 4; type++)
2035
            av_freep(&ac->che[type][i]);
2036
    }
2037

    
2038
    ff_mdct_end(&ac->mdct);
2039
    ff_mdct_end(&ac->mdct_small);
2040
    return 0;
2041
}
2042

    
2043
AVCodec aac_decoder = {
2044
    "aac",
2045
    CODEC_TYPE_AUDIO,
2046
    CODEC_ID_AAC,
2047
    sizeof(AACContext),
2048
    aac_decode_init,
2049
    NULL,
2050
    aac_decode_close,
2051
    aac_decode_frame,
2052
    .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
2053
    .sample_fmts = (const enum SampleFormat[]) {
2054
        SAMPLE_FMT_S16,SAMPLE_FMT_NONE
2055
    },
2056
    .channel_layouts = aac_channel_layout,
2057
};