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

/**
24
 * @file libavcodec/aac.c
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
 * AAC decoder
 * @author Oded Shimon  ( ods15 ods15 dyndns org )
 * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
 */

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


#include "avcodec.h"
80
#include "internal.h"
81
#include "get_bits.h"
82
#include "dsputil.h"
83
#include "fft.h"
84
#include "lpc.h"
85 86 87

#include "aac.h"
#include "aactab.h"
88
#include "aacdectab.h"
89
#include "mpeg4audio.h"
90
#include "aac_parser.h"
91 92 93 94 95 96

#include <assert.h>
#include <errno.h>
#include <math.h>
#include <string.h>

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

D
Diego Biurrun 已提交
101 102 103 104
union float754 {
    float f;
    uint32_t i;
};
105

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

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

111 112
static const char overread_err[] = "Input buffer exhausted before END element found\n";

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

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

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

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

212 213
    if (channel_config) {
        for (i = 0; i < tags_per_config[channel_config]; i++) {
214 215 216 217 218
            if ((ret = che_configure(ac, che_pos,
                                     aac_channel_layout_map[channel_config - 1][i][0],
                                     aac_channel_layout_map[channel_config - 1][i][1],
                                     &channels)))
                return ret;
219 220 221 222 223 224 225
        }

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

        avctx->channel_layout = aac_channel_layout[channel_config - 1];
    } else {
R
Robert Swain 已提交
226 227 228 229 230 231 232 233 234 235 236
        /* Allocate or free elements depending on if they are in the
         * current program configuration.
         *
         * Set up default 1:1 output mapping.
         *
         * For a 5.1 stream the output order will be:
         *    [ Center ] [ Front Left ] [ Front Right ] [ LFE ] [ Surround Left ] [ Surround Right ]
         */

        for (i = 0; i < MAX_ELEM_ID; i++) {
            for (type = 0; type < 4; type++) {
237 238
                if ((ret = che_configure(ac, che_pos, type, i, &channels)))
                    return ret;
R
Robert Swain 已提交
239
            }
240 241
        }

242
        memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
D
Diego Biurrun 已提交
243
        ac->tags_mapped = 4 * MAX_ELEM_ID;
244 245

        avctx->channel_layout = 0;
246 247
    }

248
    avctx->channels = channels;
249

250
    ac->output_configured = oc_type;
251

252 253 254
    return 0;
}

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

/**
 * Decode program configuration element; reference: table 4.2.
 *
 * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
280 281 282
static int decode_pce(AACContext *ac, enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
                      GetBitContext *gb)
{
283
    int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling_index;
284
    int comment_len;
285 286 287

    skip_bits(gb, 2);  // object_type

288
    sampling_index = get_bits(gb, 4);
289 290 291
    if (ac->m4ac.sampling_index != sampling_index)
        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");

292 293 294 295 296 297 298
    num_front       = get_bits(gb, 4);
    num_side        = get_bits(gb, 4);
    num_back        = get_bits(gb, 4);
    num_lfe         = get_bits(gb, 2);
    num_assoc_data  = get_bits(gb, 3);
    num_cc          = get_bits(gb, 4);

299 300 301 302
    if (get_bits1(gb))
        skip_bits(gb, 4); // mono_mixdown_tag
    if (get_bits1(gb))
        skip_bits(gb, 4); // stereo_mixdown_tag
303

304 305
    if (get_bits1(gb))
        skip_bits(gb, 3); // mixdown_coeff_index and pseudo_surround
306

307 308 309 310
    decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_FRONT, gb, num_front);
    decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_SIDE,  gb, num_side );
    decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL_BACK,  gb, num_back );
    decode_channel_map(NULL,                  new_che_pos[TYPE_LFE], AAC_CHANNEL_LFE,   gb, num_lfe  );
311 312 313

    skip_bits_long(gb, 4 * num_assoc_data);

314
    decode_channel_map(new_che_pos[TYPE_CCE], new_che_pos[TYPE_CCE], AAC_CHANNEL_CC,    gb, num_cc   );
315 316 317 318

    align_get_bits(gb);

    /* comment field, first byte is length */
319 320 321 322 323 324
    comment_len = get_bits(gb, 8) * 8;
    if (get_bits_left(gb) < comment_len) {
        av_log(ac->avccontext, AV_LOG_ERROR, overread_err);
        return -1;
    }
    skip_bits_long(gb, comment_len);
325 326
    return 0;
}
327

328 329 330 331 332 333 334 335
/**
 * Set up channel positions based on a default channel configuration
 * as specified in table 1.17.
 *
 * @param   new_che_pos New channel position configuration - we only do something if it differs from the current one.
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
336
static av_cold int set_default_channel_config(AACContext *ac,
D
Diego Biurrun 已提交
337 338
                                      enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
                                      int channel_config)
339
{
D
Diego Biurrun 已提交
340
    if (channel_config < 1 || channel_config > 7) {
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356
        av_log(ac->avccontext, AV_LOG_ERROR, "invalid default channel configuration (%d)\n",
               channel_config);
        return -1;
    }

    /* default channel configurations:
     *
     * 1ch : front center (mono)
     * 2ch : L + R (stereo)
     * 3ch : front center + L + R
     * 4ch : front center + L + R + back center
     * 5ch : front center + L + R + back stereo
     * 6ch : front center + L + R + back stereo + LFE
     * 7ch : front center + L + R + outer front left + outer front right + back stereo + LFE
     */

D
Diego Biurrun 已提交
357
    if (channel_config != 2)
358
        new_che_pos[TYPE_SCE][0] = AAC_CHANNEL_FRONT; // front center (or mono)
D
Diego Biurrun 已提交
359
    if (channel_config > 1)
360
        new_che_pos[TYPE_CPE][0] = AAC_CHANNEL_FRONT; // L + R (or stereo)
D
Diego Biurrun 已提交
361
    if (channel_config == 4)
362
        new_che_pos[TYPE_SCE][1] = AAC_CHANNEL_BACK;  // back center
D
Diego Biurrun 已提交
363
    if (channel_config > 4)
364
        new_che_pos[TYPE_CPE][(channel_config == 7) + 1]
D
Diego Biurrun 已提交
365 366
        = AAC_CHANNEL_BACK;  // back stereo
    if (channel_config > 5)
367
        new_che_pos[TYPE_LFE][0] = AAC_CHANNEL_LFE;   // LFE
D
Diego Biurrun 已提交
368
    if (channel_config == 7)
369 370 371 372 373
        new_che_pos[TYPE_CPE][1] = AAC_CHANNEL_FRONT; // outer front left + outer front right

    return 0;
}

374 375 376 377 378
/**
 * Decode GA "General Audio" specific configuration; reference: table 4.1.
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
379 380 381
static int decode_ga_specific_config(AACContext *ac, GetBitContext *gb,
                                     int channel_config)
{
382 383 384
    enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
    int extension_flag, ret;

D
Diego Biurrun 已提交
385
    if (get_bits1(gb)) { // frameLengthFlag
386
        av_log_missing_feature(ac->avccontext, "960/120 MDCT window is", 1);
387 388 389 390 391 392 393
        return -1;
    }

    if (get_bits1(gb))       // dependsOnCoreCoder
        skip_bits(gb, 14);   // coreCoderDelay
    extension_flag = get_bits1(gb);

D
Diego Biurrun 已提交
394 395
    if (ac->m4ac.object_type == AOT_AAC_SCALABLE ||
        ac->m4ac.object_type == AOT_ER_AAC_SCALABLE)
396 397 398 399 400
        skip_bits(gb, 3);     // layerNr

    memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
    if (channel_config == 0) {
        skip_bits(gb, 4);  // element_instance_tag
D
Diego Biurrun 已提交
401
        if ((ret = decode_pce(ac, new_che_pos, gb)))
402 403
            return ret;
    } else {
D
Diego Biurrun 已提交
404
        if ((ret = set_default_channel_config(ac, new_che_pos, channel_config)))
405 406
            return ret;
    }
407
    if ((ret = output_configure(ac, ac->che_pos, new_che_pos, channel_config, OC_GLOBAL_HDR)))
408 409 410 411
        return ret;

    if (extension_flag) {
        switch (ac->m4ac.object_type) {
D
Diego Biurrun 已提交
412 413 414 415 416 417 418 419 420
        case AOT_ER_BSAC:
            skip_bits(gb, 5);    // numOfSubFrame
            skip_bits(gb, 11);   // layer_length
            break;
        case AOT_ER_AAC_LC:
        case AOT_ER_AAC_LTP:
        case AOT_ER_AAC_SCALABLE:
        case AOT_ER_AAC_LD:
            skip_bits(gb, 3);  /* aacSectionDataResilienceFlag
421 422 423
                                    * aacScalefactorDataResilienceFlag
                                    * aacSpectralDataResilienceFlag
                                    */
D
Diego Biurrun 已提交
424
            break;
425 426 427 428 429 430 431 432 433 434 435 436 437 438
        }
        skip_bits1(gb);    // extensionFlag3 (TBD in version 3)
    }
    return 0;
}

/**
 * Decode audio specific configuration; reference: table 1.13.
 *
 * @param   data        pointer to AVCodecContext extradata
 * @param   data_size   size of AVCCodecContext extradata
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
439 440 441
static int decode_audio_specific_config(AACContext *ac, void *data,
                                        int data_size)
{
442 443 444 445 446
    GetBitContext gb;
    int i;

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

D
Diego Biurrun 已提交
447
    if ((i = ff_mpeg4audio_get_config(&ac->m4ac, data, data_size)) < 0)
448
        return -1;
D
Diego Biurrun 已提交
449
    if (ac->m4ac.sampling_index > 12) {
450 451 452 453 454 455 456
        av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
        return -1;
    }

    skip_bits_long(&gb, i);

    switch (ac->m4ac.object_type) {
457
    case AOT_AAC_MAIN:
458 459 460 461 462 463 464 465 466 467 468 469
    case AOT_AAC_LC:
        if (decode_ga_specific_config(ac, &gb, ac->m4ac.chan_config))
            return -1;
        break;
    default:
        av_log(ac->avccontext, AV_LOG_ERROR, "Audio object type %s%d is not supported.\n",
               ac->m4ac.sbr == 1? "SBR+" : "", ac->m4ac.object_type);
        return -1;
    }
    return 0;
}

470 471 472 473 474 475 476
/**
 * linear congruential pseudorandom number generator
 *
 * @param   previous_val    pointer to the current state of the generator
 *
 * @return  Returns a 32-bit pseudorandom integer
 */
D
Diego Biurrun 已提交
477 478
static av_always_inline int lcg_random(int previous_val)
{
479 480 481
    return previous_val * 1664525 + 1013904223;
}

482
static av_always_inline void reset_predict_state(PredictorState *ps)
D
Diego Biurrun 已提交
483 484 485
{
    ps->r0   = 0.0f;
    ps->r1   = 0.0f;
486 487 488 489 490 491
    ps->cor0 = 0.0f;
    ps->cor1 = 0.0f;
    ps->var0 = 1.0f;
    ps->var1 = 1.0f;
}

D
Diego Biurrun 已提交
492 493
static void reset_all_predictors(PredictorState *ps)
{
494 495 496 497 498
    int i;
    for (i = 0; i < MAX_PREDICTORS; i++)
        reset_predict_state(&ps[i]);
}

D
Diego Biurrun 已提交
499 500
static void reset_predictor_group(PredictorState *ps, int group_num)
{
501
    int i;
D
Diego Biurrun 已提交
502
    for (i = group_num - 1; i < MAX_PREDICTORS; i += 30)
503 504 505
        reset_predict_state(&ps[i]);
}

D
Diego Biurrun 已提交
506 507 508
static av_cold int aac_decode_init(AVCodecContext *avccontext)
{
    AACContext *ac = avccontext->priv_data;
509 510 511
    int i;

    ac->avccontext = avccontext;
512
    ac->m4ac.sample_rate = avccontext->sample_rate;
513

514
    if (avccontext->extradata_size > 0) {
D
Diego Biurrun 已提交
515
        if (decode_audio_specific_config(ac, avccontext->extradata, avccontext->extradata_size))
516 517
            return -1;
    }
518

D
Diego Biurrun 已提交
519
    avccontext->sample_fmt = SAMPLE_FMT_S16;
520

521 522 523 524 525 526 527 528 529 530 531
    AAC_INIT_VLC_STATIC( 0, 304);
    AAC_INIT_VLC_STATIC( 1, 270);
    AAC_INIT_VLC_STATIC( 2, 550);
    AAC_INIT_VLC_STATIC( 3, 300);
    AAC_INIT_VLC_STATIC( 4, 328);
    AAC_INIT_VLC_STATIC( 5, 294);
    AAC_INIT_VLC_STATIC( 6, 306);
    AAC_INIT_VLC_STATIC( 7, 268);
    AAC_INIT_VLC_STATIC( 8, 510);
    AAC_INIT_VLC_STATIC( 9, 366);
    AAC_INIT_VLC_STATIC(10, 462);
532 533 534

    dsputil_init(&ac->dsp, avccontext);

535 536
    ac->random_state = 0x1f2e3d4c;

537 538 539 540
    // -1024 - Compensate wrong IMDCT method.
    // 32768 - Required to scale values to the correct range for the bias method
    //         for float to int16 conversion.

541
    if (ac->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
D
Diego Biurrun 已提交
542 543
        ac->add_bias  = 385.0f;
        ac->sf_scale  = 1. / (-1024. * 32768.);
544 545
        ac->sf_offset = 0;
    } else {
D
Diego Biurrun 已提交
546 547
        ac->add_bias  = 0.0f;
        ac->sf_scale  = 1. / -1024.;
548 549 550
        ac->sf_offset = 60;
    }

551
#if !CONFIG_HARDCODED_TABLES
552
    for (i = 0; i < 428; i++)
D
Diego Biurrun 已提交
553
        ff_aac_pow2sf_tab[i] = pow(2, (i - 200) / 4.);
554 555
#endif /* CONFIG_HARDCODED_TABLES */

556
    INIT_VLC_STATIC(&vlc_scalefactors,7,FF_ARRAY_ELEMS(ff_aac_scalefactor_code),
D
Diego Biurrun 已提交
557 558 559
                    ff_aac_scalefactor_bits, sizeof(ff_aac_scalefactor_bits[0]), sizeof(ff_aac_scalefactor_bits[0]),
                    ff_aac_scalefactor_code, sizeof(ff_aac_scalefactor_code[0]), sizeof(ff_aac_scalefactor_code[0]),
                    352);
560

561 562
    ff_mdct_init(&ac->mdct, 11, 1, 1.0);
    ff_mdct_init(&ac->mdct_small, 8, 1, 1.0);
R
Robert Swain 已提交
563 564 565
    // window initialization
    ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
    ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
566 567
    ff_init_ff_sine_windows(10);
    ff_init_ff_sine_windows( 7);
R
Robert Swain 已提交
568

569 570 571 572 573 574 575
    if (!cbrt_tab[(1<<13) - 1]) {
        for (i = 0; i < 1<<13; i++) {
            union float754 f;
            f.f = cbrtf(i) * i;
            cbrt_tab[i] = f.i;
        }
    }
M
Måns Rullgård 已提交
576

577 578 579
    return 0;
}

580 581 582
/**
 * Skip data_stream_element; reference: table 4.10.
 */
583
static int skip_data_stream_element(AACContext *ac, GetBitContext *gb)
D
Diego Biurrun 已提交
584
{
585 586 587 588 589 590
    int byte_align = get_bits1(gb);
    int count = get_bits(gb, 8);
    if (count == 255)
        count += get_bits(gb, 8);
    if (byte_align)
        align_get_bits(gb);
591 592 593 594 595

    if (get_bits_left(gb) < 8 * count) {
        av_log(ac->avccontext, AV_LOG_ERROR, overread_err);
        return -1;
    }
596
    skip_bits_long(gb, 8 * count);
597
    return 0;
598 599
}

D
Diego Biurrun 已提交
600 601 602
static int decode_prediction(AACContext *ac, IndividualChannelStream *ics,
                             GetBitContext *gb)
{
603 604 605 606 607 608 609 610 611 612 613 614 615 616
    int sfb;
    if (get_bits1(gb)) {
        ics->predictor_reset_group = get_bits(gb, 5);
        if (ics->predictor_reset_group == 0 || ics->predictor_reset_group > 30) {
            av_log(ac->avccontext, AV_LOG_ERROR, "Invalid Predictor Reset Group.\n");
            return -1;
        }
    }
    for (sfb = 0; sfb < FFMIN(ics->max_sfb, ff_aac_pred_sfb_max[ac->m4ac.sampling_index]); sfb++) {
        ics->prediction_used[sfb] = get_bits1(gb);
    }
    return 0;
}

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

D
Diego Biurrun 已提交
678
    if (ics->max_sfb > ics->num_swb) {
679
        av_log(ac->avccontext, AV_LOG_ERROR,
D
Diego Biurrun 已提交
680 681
               "Number of scalefactor bands in group (%d) exceeds limit (%d).\n",
               ics->max_sfb, ics->num_swb);
682 683 684 685
        memset(ics, 0, sizeof(IndividualChannelStream));
        return -1;
    }

686 687 688 689 690 691 692 693 694 695 696
    return 0;
}

/**
 * Decode band types (section_data payload); reference: table 4.46.
 *
 * @param   band_type           array of the used band type
 * @param   band_type_run_end   array of the last scalefactor band of a band type run
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
697 698 699 700
static int decode_band_types(AACContext *ac, enum BandType band_type[120],
                             int band_type_run_end[120], GetBitContext *gb,
                             IndividualChannelStream *ics)
{
701 702 703 704 705
    int g, idx = 0;
    const int bits = (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) ? 3 : 5;
    for (g = 0; g < ics->num_window_groups; g++) {
        int k = 0;
        while (k < ics->max_sfb) {
706
            uint8_t sect_end = k;
707 708 709 710 711 712
            int sect_len_incr;
            int sect_band_type = get_bits(gb, 4);
            if (sect_band_type == 12) {
                av_log(ac->avccontext, AV_LOG_ERROR, "invalid band type\n");
                return -1;
            }
D
Diego Biurrun 已提交
713
            while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1)
714 715
                sect_end += sect_len_incr;
            sect_end += sect_len_incr;
716 717 718 719
            if (get_bits_left(gb) < 0) {
                av_log(ac->avccontext, AV_LOG_ERROR, overread_err);
                return -1;
            }
720
            if (sect_end > ics->max_sfb) {
721
                av_log(ac->avccontext, AV_LOG_ERROR,
D
Diego Biurrun 已提交
722
                       "Number of bands (%d) exceeds limit (%d).\n",
723
                       sect_end, ics->max_sfb);
724 725
                return -1;
            }
726
            for (; k < sect_end; k++) {
R
Robert Swain 已提交
727
                band_type        [idx]   = sect_band_type;
728
                band_type_run_end[idx++] = sect_end;
R
Robert Swain 已提交
729
            }
730 731 732 733
        }
    }
    return 0;
}
734

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

/**
 * Decode pulse data; reference: table 4.7.
 */
D
Diego Biurrun 已提交
804 805 806
static int decode_pulses(Pulse *pulse, GetBitContext *gb,
                         const uint16_t *swb_offset, int num_swb)
{
807
    int i, pulse_swb;
808
    pulse->num_pulse = get_bits(gb, 2) + 1;
809 810 811 812
    pulse_swb        = get_bits(gb, 6);
    if (pulse_swb >= num_swb)
        return -1;
    pulse->pos[0]    = swb_offset[pulse_swb];
813
    pulse->pos[0]   += get_bits(gb, 5);
814 815
    if (pulse->pos[0] > 1023)
        return -1;
816 817
    pulse->amp[0]    = get_bits(gb, 4);
    for (i = 1; i < pulse->num_pulse; i++) {
D
Diego Biurrun 已提交
818
        pulse->pos[i] = get_bits(gb, 5) + pulse->pos[i - 1];
819 820
        if (pulse->pos[i] > 1023)
            return -1;
821
        pulse->amp[i] = get_bits(gb, 4);
822
    }
823
    return 0;
824 825
}

R
Robert Swain 已提交
826 827 828 829 830
/**
 * Decode Temporal Noise Shaping data; reference: table 4.48.
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
831 832 833
static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns,
                      GetBitContext *gb, const IndividualChannelStream *ics)
{
R
Robert Swain 已提交
834 835 836 837
    int w, filt, i, coef_len, coef_res, coef_compress;
    const int is8 = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE;
    const int tns_max_order = is8 ? 7 : ac->m4ac.object_type == AOT_AAC_MAIN ? 20 : 12;
    for (w = 0; w < ics->num_windows; w++) {
838
        if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) {
R
Robert Swain 已提交
839 840
            coef_res = get_bits1(gb);

R
Robert Swain 已提交
841 842
            for (filt = 0; filt < tns->n_filt[w]; filt++) {
                int tmp2_idx;
D
Diego Biurrun 已提交
843
                tns->length[w][filt] = get_bits(gb, 6 - 2 * is8);
R
Robert Swain 已提交
844

D
Diego Biurrun 已提交
845
                if ((tns->order[w][filt] = get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
846
                    av_log(ac->avccontext, AV_LOG_ERROR, "TNS filter order %d is greater than maximum %d.\n",
R
Robert Swain 已提交
847 848 849 850
                           tns->order[w][filt], tns_max_order);
                    tns->order[w][filt] = 0;
                    return -1;
                }
851
                if (tns->order[w][filt]) {
R
Robert Swain 已提交
852 853 854
                    tns->direction[w][filt] = get_bits1(gb);
                    coef_compress = get_bits1(gb);
                    coef_len = coef_res + 3 - coef_compress;
D
Diego Biurrun 已提交
855
                    tmp2_idx = 2 * coef_compress + coef_res;
R
Robert Swain 已提交
856

R
Robert Swain 已提交
857 858
                    for (i = 0; i < tns->order[w][filt]; i++)
                        tns->coef[w][filt][i] = tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)];
859
                }
R
Robert Swain 已提交
860
            }
861
        }
R
Robert Swain 已提交
862 863 864 865
    }
    return 0;
}

866 867 868 869 870 871 872
/**
 * Decode Mid/Side data; reference: table 4.54.
 *
 * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
 *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
 *                      [3] reserved for scalable AAC
 */
D
Diego Biurrun 已提交
873 874 875
static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb,
                                   int ms_present)
{
876 877 878 879 880 881 882 883
    int idx;
    if (ms_present == 1) {
        for (idx = 0; idx < cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb; idx++)
            cpe->ms_mask[idx] = get_bits1(gb);
    } else if (ms_present == 2) {
        memset(cpe->ms_mask, 1, cpe->ch[0].ics.num_window_groups * cpe->ch[0].ics.max_sfb * sizeof(cpe->ms_mask[0]));
    }
}
884

885
#ifndef VMUL2
886 887 888 889 890 891 892 893
static inline float *VMUL2(float *dst, const float *v, unsigned idx,
                           const float *scale)
{
    float s = *scale;
    *dst++ = v[idx    & 15] * s;
    *dst++ = v[idx>>4 & 15] * s;
    return dst;
}
894
#endif
895

896
#ifndef VMUL4
897 898 899 900 901 902 903 904 905 906
static inline float *VMUL4(float *dst, const float *v, unsigned idx,
                           const float *scale)
{
    float s = *scale;
    *dst++ = v[idx    & 3] * s;
    *dst++ = v[idx>>2 & 3] * s;
    *dst++ = v[idx>>4 & 3] * s;
    *dst++ = v[idx>>6 & 3] * s;
    return dst;
}
907
#endif
908

909
#ifndef VMUL2S
910 911 912 913 914 915 916 917 918 919 920 921 922 923
static inline float *VMUL2S(float *dst, const float *v, unsigned idx,
                            unsigned sign, const float *scale)
{
    union float754 s0, s1;

    s0.f = s1.f = *scale;
    s0.i ^= sign >> 1 << 31;
    s1.i ^= sign      << 31;

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

    return dst;
}
924
#endif
925

926
#ifndef VMUL4S
927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950
static inline float *VMUL4S(float *dst, const float *v, unsigned idx,
                            unsigned sign, const float *scale)
{
    unsigned nz = idx >> 12;
    union float754 s = { .f = *scale };
    union float754 t;

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

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

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

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

    return dst;
}
951
#endif
952

R
Robert Swain 已提交
953 954 955 956 957 958 959 960 961 962 963 964
/**
 * Decode spectral data; reference: table 4.50.
 * Dequantize and scale spectral data; reference: 4.6.3.3.
 *
 * @param   coef            array of dequantized, scaled spectral data
 * @param   sf              array of scalefactors or intensity stereo positions
 * @param   pulse_present   set if pulses are present
 * @param   pulse           pointer to pulse data struct
 * @param   band_type       array of the used band type
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
965
static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
966
                                       GetBitContext *gb, const float sf[120],
D
Diego Biurrun 已提交
967 968 969 970
                                       int pulse_present, const Pulse *pulse,
                                       const IndividualChannelStream *ics,
                                       enum BandType band_type[120])
{
R
Robert Swain 已提交
971
    int i, k, g, idx = 0;
D
Diego Biurrun 已提交
972 973
    const int c = 1024 / ics->num_windows;
    const uint16_t *offsets = ics->swb_offset;
R
Robert Swain 已提交
974
    float *coef_base = coef;
975
    int err_idx;
R
Robert Swain 已提交
976 977

    for (g = 0; g < ics->num_windows; g++)
D
Diego Biurrun 已提交
978
        memset(coef + g * 128 + offsets[ics->max_sfb], 0, sizeof(float) * (c - offsets[ics->max_sfb]));
R
Robert Swain 已提交
979 980

    for (g = 0; g < ics->num_window_groups; g++) {
981 982
        unsigned g_len = ics->group_len[g];

R
Robert Swain 已提交
983
        for (i = 0; i < ics->max_sfb; i++, idx++) {
984 985 986
            const unsigned cbt_m1 = band_type[idx] - 1;
            float *cfo = coef + offsets[i];
            int off_len = offsets[i + 1] - offsets[i];
R
Robert Swain 已提交
987
            int group;
988 989 990 991

            if (cbt_m1 >= INTENSITY_BT2 - 1) {
                for (group = 0; group < g_len; group++, cfo+=128) {
                    memset(cfo, 0, off_len * sizeof(float));
R
Robert Swain 已提交
992
                }
993 994
            } else if (cbt_m1 == NOISE_BT - 1) {
                for (group = 0; group < g_len; group++, cfo+=128) {
995
                    float scale;
996
                    float band_energy;
M
Måns Rullgård 已提交
997

998
                    for (k = 0; k < off_len; k++) {
R
Robert Swain 已提交
999
                        ac->random_state  = lcg_random(ac->random_state);
1000
                        cfo[k] = ac->random_state;
1001
                    }
M
Måns Rullgård 已提交
1002

1003
                    band_energy = ac->dsp.scalarproduct_float(cfo, cfo, off_len);
1004
                    scale = sf[idx] / sqrtf(band_energy);
1005
                    ac->dsp.vector_fmul_scalar(cfo, cfo, scale, off_len);
R
Robert Swain 已提交
1006
                }
D
Diego Biurrun 已提交
1007
            } else {
1008 1009 1010 1011
                const float *vq = ff_aac_codebook_vector_vals[cbt_m1];
                const uint16_t *cb_vector_idx = ff_aac_codebook_vector_idx[cbt_m1];
                VLC_TYPE (*vlc_tab)[2] = vlc_spectral[cbt_m1].table;
                const int cb_size = ff_aac_spectral_sizes[cbt_m1];
1012
                OPEN_READER(re, gb);
1013

1014 1015 1016 1017 1018
                switch (cbt_m1 >> 1) {
                case 0:
                    for (group = 0; group < g_len; group++, cfo+=128) {
                        float *cf = cfo;
                        int len = off_len;
M
Måns Rullgård 已提交
1019

1020
                        do {
1021
                            int code;
1022 1023
                            unsigned cb_idx;

1024 1025 1026 1027 1028
                            UPDATE_CACHE(re, gb);
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);

                            if (code >= cb_size) {
                                err_idx = code;
1029 1030 1031
                                goto err_cb_overflow;
                            }

1032
                            cb_idx = cb_vector_idx[code];
1033 1034
                            cf = VMUL4(cf, vq, cb_idx, sf + idx);
                        } while (len -= 4);
1035 1036 1037 1038 1039 1040 1041 1042
                    }
                    break;

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

1043
                        do {
1044
                            int code;
1045 1046 1047 1048
                            unsigned nnz;
                            unsigned cb_idx;
                            uint32_t bits;

1049 1050 1051 1052 1053
                            UPDATE_CACHE(re, gb);
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);

                            if (code >= cb_size) {
                                err_idx = code;
1054 1055 1056
                                goto err_cb_overflow;
                            }

1057 1058 1059 1060
#if MIN_CACHE_BITS < 20
                            UPDATE_CACHE(re, gb);
#endif
                            cb_idx = cb_vector_idx[code];
1061
                            nnz = cb_idx >> 8 & 15;
1062 1063
                            bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
                            LAST_SKIP_BITS(re, gb, nnz);
1064 1065
                            cf = VMUL4S(cf, vq, cb_idx, bits, sf + idx);
                        } while (len -= 4);
1066 1067 1068 1069 1070 1071 1072 1073
                    }
                    break;

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

1074
                        do {
1075
                            int code;
1076 1077
                            unsigned cb_idx;

1078 1079 1080 1081 1082
                            UPDATE_CACHE(re, gb);
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);

                            if (code >= cb_size) {
                                err_idx = code;
1083
                                goto err_cb_overflow;
1084
                            }
1085

1086
                            cb_idx = cb_vector_idx[code];
1087 1088
                            cf = VMUL2(cf, vq, cb_idx, sf + idx);
                        } while (len -= 2);
1089 1090 1091 1092 1093 1094 1095 1096 1097
                    }
                    break;

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

1098
                        do {
1099
                            int code;
1100 1101 1102 1103
                            unsigned nnz;
                            unsigned cb_idx;
                            unsigned sign;

1104 1105 1106 1107 1108
                            UPDATE_CACHE(re, gb);
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);

                            if (code >= cb_size) {
                                err_idx = code;
1109 1110 1111
                                goto err_cb_overflow;
                            }

1112
                            cb_idx = cb_vector_idx[code];
1113
                            nnz = cb_idx >> 8 & 15;
1114 1115
                            sign = SHOW_UBITS(re, gb, nnz) << (cb_idx >> 12);
                            LAST_SKIP_BITS(re, gb, nnz);
1116 1117
                            cf = VMUL2S(cf, vq, cb_idx, sign, sf + idx);
                        } while (len -= 2);
1118 1119 1120 1121 1122 1123 1124 1125 1126
                    }
                    break;

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

1127
                        do {
1128
                            int code;
1129 1130 1131 1132 1133
                            unsigned nzt, nnz;
                            unsigned cb_idx;
                            uint32_t bits;
                            int j;

1134 1135 1136 1137
                            UPDATE_CACHE(re, gb);
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);

                            if (!code) {
1138 1139
                                *icf++ = 0;
                                *icf++ = 0;
1140 1141 1142
                                continue;
                            }

1143 1144
                            if (code >= cb_size) {
                                err_idx = code;
1145 1146 1147
                                goto err_cb_overflow;
                            }

1148
                            cb_idx = cb_vector_idx[code];
1149 1150
                            nnz = cb_idx >> 12;
                            nzt = cb_idx >> 8;
1151 1152
                            bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
                            LAST_SKIP_BITS(re, gb, nnz);
1153 1154 1155

                            for (j = 0; j < 2; j++) {
                                if (nzt & 1<<j) {
1156 1157
                                    uint32_t b;
                                    int n;
1158 1159
                                    /* The total length of escape_sequence must be < 22 bits according
                                       to the specification (i.e. max is 111111110xxxxxxxxxxxx). */
1160 1161 1162 1163 1164
                                    UPDATE_CACHE(re, gb);
                                    b = GET_CACHE(re, gb);
                                    b = 31 - av_log2(~b);

                                    if (b > 8) {
1165 1166 1167
                                        av_log(ac->avccontext, AV_LOG_ERROR, "error in spectral data, ESC overflow\n");
                                        return -1;
                                    }
1168 1169 1170 1171 1172 1173 1174 1175 1176 1177

#if MIN_CACHE_BITS < 21
                                    LAST_SKIP_BITS(re, gb, b + 1);
                                    UPDATE_CACHE(re, gb);
#else
                                    SKIP_BITS(re, gb, b + 1);
#endif
                                    b += 4;
                                    n = (1 << b) + SHOW_UBITS(re, gb, b);
                                    LAST_SKIP_BITS(re, gb, b);
1178
                                    *icf++ = cbrt_tab[n] | (bits & 1<<31);
1179 1180 1181
                                    bits <<= 1;
                                } else {
                                    unsigned v = ((const uint32_t*)vq)[cb_idx & 15];
1182
                                    *icf++ = (bits & 1<<31) | v;
1183
                                    bits <<= !!v;
A
Alex Converse 已提交
1184
                                }
1185
                                cb_idx >>= 4;
R
Robert Swain 已提交
1186
                            }
1187
                        } while (len -= 2);
M
Måns Rullgård 已提交
1188

1189
                        ac->dsp.vector_fmul_scalar(cfo, cfo, sf[idx], off_len);
M
Måns Rullgård 已提交
1190
                    }
R
Robert Swain 已提交
1191
                }
1192 1193

                CLOSE_READER(re, gb);
R
Robert Swain 已提交
1194 1195
            }
        }
1196
        coef += g_len << 7;
R
Robert Swain 已提交
1197 1198 1199
    }

    if (pulse_present) {
1200
        idx = 0;
D
Diego Biurrun 已提交
1201 1202 1203
        for (i = 0; i < pulse->num_pulse; i++) {
            float co = coef_base[ pulse->pos[i] ];
            while (offsets[idx + 1] <= pulse->pos[i])
1204 1205
                idx++;
            if (band_type[idx] != NOISE_BT && sf[idx]) {
R
Robert Swain 已提交
1206 1207 1208 1209 1210 1211
                float ico = -pulse->amp[i];
                if (co) {
                    co /= sf[idx];
                    ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
                }
                coef_base[ pulse->pos[i] ] = cbrtf(fabsf(ico)) * ico * sf[idx];
1212
            }
R
Robert Swain 已提交
1213 1214 1215
        }
    }
    return 0;
1216 1217 1218 1219 1220 1221

err_cb_overflow:
    av_log(ac->avccontext, AV_LOG_ERROR,
           "Read beyond end of ff_aac_codebook_vectors[%d][]. index %d >= %d\n",
           band_type[idx], err_idx, ff_aac_spectral_sizes[band_type[idx]]);
    return -1;
R
Robert Swain 已提交
1222 1223
}

D
Diego Biurrun 已提交
1224 1225
static av_always_inline float flt16_round(float pf)
{
1226 1227 1228 1229
    union float754 tmp;
    tmp.f = pf;
    tmp.i = (tmp.i + 0x00008000U) & 0xFFFF0000U;
    return tmp.f;
1230 1231
}

D
Diego Biurrun 已提交
1232 1233
static av_always_inline float flt16_even(float pf)
{
1234 1235
    union float754 tmp;
    tmp.f = pf;
D
Diego Biurrun 已提交
1236
    tmp.i = (tmp.i + 0x00007FFFU + (tmp.i & 0x00010000U >> 16)) & 0xFFFF0000U;
1237
    return tmp.f;
1238 1239
}

D
Diego Biurrun 已提交
1240 1241
static av_always_inline float flt16_trunc(float pf)
{
1242 1243 1244 1245
    union float754 pun;
    pun.f = pf;
    pun.i &= 0xFFFF0000U;
    return pun.f;
1246 1247
}

1248
static av_always_inline void predict(AACContext *ac, PredictorState *ps, float *coef,
D
Diego Biurrun 已提交
1249 1250 1251 1252
                    int output_enable)
{
    const float a     = 0.953125; // 61.0 / 64
    const float alpha = 0.90625;  // 29.0 / 32
1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278
    float e0, e1;
    float pv;
    float k1, k2;

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

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

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

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

    ps->r1 = flt16_trunc(a * (ps->r0 - k1 * e0));
    ps->r0 = flt16_trunc(a * e0);
}

/**
 * Apply AAC-Main style frequency domain prediction.
 */
D
Diego Biurrun 已提交
1279 1280
static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
{
1281 1282 1283
    int sfb, k;

    if (!sce->ics.predictor_initialized) {
1284
        reset_all_predictors(sce->predictor_state);
1285 1286 1287 1288 1289 1290
        sce->ics.predictor_initialized = 1;
    }

    if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
        for (sfb = 0; sfb < ff_aac_pred_sfb_max[ac->m4ac.sampling_index]; sfb++) {
            for (k = sce->ics.swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
1291
                predict(ac, &sce->predictor_state[k], &sce->coeffs[k],
D
Diego Biurrun 已提交
1292
                        sce->ics.predictor_present && sce->ics.prediction_used[sfb]);
1293 1294 1295
            }
        }
        if (sce->ics.predictor_reset_group)
1296
            reset_predictor_group(sce->predictor_state, sce->ics.predictor_reset_group);
1297
    } else
1298
        reset_all_predictors(sce->predictor_state);
1299 1300
}

1301
/**
1302 1303 1304 1305 1306 1307 1308
 * Decode an individual_channel_stream payload; reference: table 4.44.
 *
 * @param   common_window   Channels have independent [0], or shared [1], Individual Channel Stream information.
 * @param   scale_flag      scalable [1] or non-scalable [0] AAC (Unused until scalable AAC is implemented.)
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
1309 1310 1311
static int decode_ics(AACContext *ac, SingleChannelElement *sce,
                      GetBitContext *gb, int common_window, int scale_flag)
{
1312
    Pulse pulse;
D
Diego Biurrun 已提交
1313 1314 1315
    TemporalNoiseShaping    *tns = &sce->tns;
    IndividualChannelStream *ics = &sce->ics;
    float *out = sce->coeffs;
1316 1317
    int global_gain, pulse_present = 0;

1318 1319
    /* This assignment is to silence a GCC warning about the variable being used
     * uninitialized when in fact it always is.
1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341
     */
    pulse.num_pulse = 0;

    global_gain = get_bits(gb, 8);

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

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

    pulse_present = 0;
    if (!scale_flag) {
        if ((pulse_present = get_bits1(gb))) {
            if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
                av_log(ac->avccontext, AV_LOG_ERROR, "Pulse tool not allowed in eight short sequence.\n");
                return -1;
            }
1342 1343 1344 1345
            if (decode_pulses(&pulse, gb, ics->swb_offset, ics->num_swb)) {
                av_log(ac->avccontext, AV_LOG_ERROR, "Pulse data corrupt or invalid.\n");
                return -1;
            }
1346 1347 1348 1349
        }
        if ((tns->present = get_bits1(gb)) && decode_tns(ac, tns, gb, ics))
            return -1;
        if (get_bits1(gb)) {
1350
            av_log_missing_feature(ac->avccontext, "SSR", 1);
1351 1352 1353 1354
            return -1;
        }
    }

1355
    if (decode_spectrum_and_dequant(ac, out, gb, sce->sf, pulse_present, &pulse, ics, sce->band_type) < 0)
1356
        return -1;
1357

D
Diego Biurrun 已提交
1358
    if (ac->m4ac.object_type == AOT_AAC_MAIN && !common_window)
1359 1360
        apply_prediction(ac, sce);

1361 1362 1363
    return 0;
}

R
Robert Swain 已提交
1364 1365 1366
/**
 * Mid/Side stereo decoding; reference: 4.6.8.1.3.
 */
M
Måns Rullgård 已提交
1367
static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
D
Diego Biurrun 已提交
1368 1369
{
    const IndividualChannelStream *ics = &cpe->ch[0].ics;
R
Robert Swain 已提交
1370 1371
    float *ch0 = cpe->ch[0].coeffs;
    float *ch1 = cpe->ch[1].coeffs;
M
Måns Rullgård 已提交
1372
    int g, i, group, idx = 0;
D
Diego Biurrun 已提交
1373
    const uint16_t *offsets = ics->swb_offset;
R
Robert Swain 已提交
1374 1375 1376
    for (g = 0; g < ics->num_window_groups; g++) {
        for (i = 0; i < ics->max_sfb; i++, idx++) {
            if (cpe->ms_mask[idx] &&
D
Diego Biurrun 已提交
1377
                    cpe->ch[0].band_type[idx] < NOISE_BT && cpe->ch[1].band_type[idx] < NOISE_BT) {
R
Robert Swain 已提交
1378
                for (group = 0; group < ics->group_len[g]; group++) {
M
Måns Rullgård 已提交
1379 1380 1381
                    ac->dsp.butterflies_float(ch0 + group * 128 + offsets[i],
                                              ch1 + group * 128 + offsets[i],
                                              offsets[i+1] - offsets[i]);
R
Robert Swain 已提交
1382 1383 1384
                }
            }
        }
D
Diego Biurrun 已提交
1385 1386
        ch0 += ics->group_len[g] * 128;
        ch1 += ics->group_len[g] * 128;
R
Robert Swain 已提交
1387 1388 1389 1390 1391 1392 1393 1394 1395 1396
    }
}

/**
 * intensity stereo decoding; reference: 4.6.8.2.3
 *
 * @param   ms_present  Indicates mid/side stereo presence. [0] mask is all 0s;
 *                      [1] mask is decoded from bitstream; [2] mask is all 1s;
 *                      [3] reserved for scalable AAC
 */
D
Diego Biurrun 已提交
1397 1398 1399 1400
static void apply_intensity_stereo(ChannelElement *cpe, int ms_present)
{
    const IndividualChannelStream *ics = &cpe->ch[1].ics;
    SingleChannelElement         *sce1 = &cpe->ch[1];
R
Robert Swain 已提交
1401
    float *coef0 = cpe->ch[0].coeffs, *coef1 = cpe->ch[1].coeffs;
D
Diego Biurrun 已提交
1402
    const uint16_t *offsets = ics->swb_offset;
R
Robert Swain 已提交
1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415
    int g, group, i, k, idx = 0;
    int c;
    float scale;
    for (g = 0; g < ics->num_window_groups; g++) {
        for (i = 0; i < ics->max_sfb;) {
            if (sce1->band_type[idx] == INTENSITY_BT || sce1->band_type[idx] == INTENSITY_BT2) {
                const int bt_run_end = sce1->band_type_run_end[idx];
                for (; i < bt_run_end; i++, idx++) {
                    c = -1 + 2 * (sce1->band_type[idx] - 14);
                    if (ms_present)
                        c *= 1 - 2 * cpe->ms_mask[idx];
                    scale = c * sce1->sf[idx];
                    for (group = 0; group < ics->group_len[g]; group++)
D
Diego Biurrun 已提交
1416 1417
                        for (k = offsets[i]; k < offsets[i + 1]; k++)
                            coef1[group * 128 + k] = scale * coef0[group * 128 + k];
R
Robert Swain 已提交
1418 1419 1420 1421 1422 1423 1424
                }
            } else {
                int bt_run_end = sce1->band_type_run_end[idx];
                idx += bt_run_end - i;
                i    = bt_run_end;
            }
        }
D
Diego Biurrun 已提交
1425 1426
        coef0 += ics->group_len[g] * 128;
        coef1 += ics->group_len[g] * 128;
R
Robert Swain 已提交
1427 1428 1429
    }
}

1430 1431 1432 1433 1434 1435 1436
/**
 * Decode a channel_pair_element; reference: table 4.4.
 *
 * @param   elem_id Identifies the instance of a syntax element.
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
1437 1438
static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
{
1439 1440 1441 1442 1443 1444 1445 1446 1447 1448
    int i, ret, common_window, ms_present = 0;

    common_window = get_bits1(gb);
    if (common_window) {
        if (decode_ics_info(ac, &cpe->ch[0].ics, gb, 1))
            return -1;
        i = cpe->ch[1].ics.use_kb_window[0];
        cpe->ch[1].ics = cpe->ch[0].ics;
        cpe->ch[1].ics.use_kb_window[1] = i;
        ms_present = get_bits(gb, 2);
D
Diego Biurrun 已提交
1449
        if (ms_present == 3) {
1450 1451
            av_log(ac->avccontext, AV_LOG_ERROR, "ms_present = 3 is reserved.\n");
            return -1;
D
Diego Biurrun 已提交
1452
        } else if (ms_present)
1453 1454 1455 1456 1457 1458 1459
            decode_mid_side_stereo(cpe, gb, ms_present);
    }
    if ((ret = decode_ics(ac, &cpe->ch[0], gb, common_window, 0)))
        return ret;
    if ((ret = decode_ics(ac, &cpe->ch[1], gb, common_window, 0)))
        return ret;

1460 1461
    if (common_window) {
        if (ms_present)
M
Måns Rullgård 已提交
1462
            apply_mid_side_stereo(ac, cpe);
1463 1464 1465 1466 1467
        if (ac->m4ac.object_type == AOT_AAC_MAIN) {
            apply_prediction(ac, &cpe->ch[0]);
            apply_prediction(ac, &cpe->ch[1]);
        }
    }
1468

1469
    apply_intensity_stereo(cpe, ms_present);
1470 1471 1472
    return 0;
}

R
Robert Swain 已提交
1473 1474 1475 1476 1477 1478 1479
/**
 * Decode coupling_channel_element; reference: table 4.8.
 *
 * @param   elem_id Identifies the instance of a syntax element.
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
1480 1481
static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
{
R
Robert Swain 已提交
1482
    int num_gain = 0;
1483
    int c, g, sfb, ret;
R
Robert Swain 已提交
1484 1485
    int sign;
    float scale;
D
Diego Biurrun 已提交
1486 1487
    SingleChannelElement *sce = &che->ch[0];
    ChannelCoupling     *coup = &che->coup;
R
Robert Swain 已提交
1488

D
Diego Biurrun 已提交
1489
    coup->coupling_point = 2 * get_bits1(gb);
1490 1491 1492 1493 1494 1495 1496 1497 1498 1499
    coup->num_coupled = get_bits(gb, 3);
    for (c = 0; c <= coup->num_coupled; c++) {
        num_gain++;
        coup->type[c] = get_bits1(gb) ? TYPE_CPE : TYPE_SCE;
        coup->id_select[c] = get_bits(gb, 4);
        if (coup->type[c] == TYPE_CPE) {
            coup->ch_select[c] = get_bits(gb, 2);
            if (coup->ch_select[c] == 3)
                num_gain++;
        } else
1500
            coup->ch_select[c] = 2;
1501
    }
D
Diego Biurrun 已提交
1502
    coup->coupling_point += get_bits1(gb) || (coup->coupling_point >> 1);
1503

D
Diego Biurrun 已提交
1504
    sign  = get_bits(gb, 1);
1505
    scale = pow(2., pow(2., (int)get_bits(gb, 2) - 3));
1506 1507 1508 1509 1510

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

    for (c = 0; c < num_gain; c++) {
D
Diego Biurrun 已提交
1511 1512
        int idx  = 0;
        int cge  = 1;
1513 1514 1515 1516 1517
        int gain = 0;
        float gain_cache = 1.;
        if (c) {
            cge = coup->coupling_point == AFTER_IMDCT ? 1 : get_bits1(gb);
            gain = cge ? get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60: 0;
1518
            gain_cache = pow(scale, -gain);
1519
        }
1520 1521 1522
        if (coup->coupling_point == AFTER_IMDCT) {
            coup->gain[c][0] = gain_cache;
        } else {
A
Alex Converse 已提交
1523 1524 1525 1526 1527
            for (g = 0; g < sce->ics.num_window_groups; g++) {
                for (sfb = 0; sfb < sce->ics.max_sfb; sfb++, idx++) {
                    if (sce->band_type[idx] != ZERO_BT) {
                        if (!cge) {
                            int t = get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
D
Diego Biurrun 已提交
1528
                            if (t) {
A
Alex Converse 已提交
1529 1530 1531 1532 1533 1534 1535
                                int s = 1;
                                t = gain += t;
                                if (sign) {
                                    s  -= 2 * (t & 0x1);
                                    t >>= 1;
                                }
                                gain_cache = pow(scale, -t) * s;
1536 1537
                            }
                        }
A
Alex Converse 已提交
1538
                        coup->gain[c][idx] = gain_cache;
1539 1540
                    }
                }
R
Robert Swain 已提交
1541 1542
            }
        }
1543 1544 1545 1546
    }
    return 0;
}

1547 1548
/**
 * Decode Spectral Band Replication extension data; reference: table 4.55.
1549 1550 1551
 *
 * @param   crc flag indicating the presence of CRC checksum
 * @param   cnt length of TYPE_FIL syntactic element in bytes
1552
 *
1553 1554
 * @return  Returns number of bytes consumed from the TYPE_FIL element.
 */
D
Diego Biurrun 已提交
1555 1556 1557
static int decode_sbr_extension(AACContext *ac, GetBitContext *gb,
                                int crc, int cnt)
{
1558
    // TODO : sbr_extension implementation
1559
    av_log_missing_feature(ac->avccontext, "SBR", 0);
D
Diego Biurrun 已提交
1560
    skip_bits_long(gb, 8 * cnt - 4); // -4 due to reading extension type
1561 1562 1563
    return cnt;
}

1564 1565 1566 1567 1568
/**
 * Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
 *
 * @return  Returns number of bytes consumed.
 */
D
Diego Biurrun 已提交
1569 1570 1571
static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc,
                                         GetBitContext *gb)
{
1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582
    int i;
    int num_excl_chan = 0;

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

    return num_excl_chan / 7;
}

1583 1584 1585 1586 1587 1588 1589
/**
 * Decode dynamic range information; reference: table 4.52.
 *
 * @param   cnt length of TYPE_FIL syntactic element in bytes
 *
 * @return  Returns number of bytes consumed.
 */
D
Diego Biurrun 已提交
1590 1591 1592 1593
static int decode_dynamic_range(DynamicRangeControl *che_drc,
                                GetBitContext *gb, int cnt)
{
    int n             = 1;
1594 1595 1596 1597
    int drc_num_bands = 1;
    int i;

    /* pce_tag_present? */
D
Diego Biurrun 已提交
1598
    if (get_bits1(gb)) {
1599 1600 1601 1602 1603 1604
        che_drc->pce_instance_tag  = get_bits(gb, 4);
        skip_bits(gb, 4); // tag_reserved_bits
        n++;
    }

    /* excluded_chns_present? */
D
Diego Biurrun 已提交
1605
    if (get_bits1(gb)) {
1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643
        n += decode_drc_channel_exclusions(che_drc, gb);
    }

    /* drc_bands_present? */
    if (get_bits1(gb)) {
        che_drc->band_incr            = get_bits(gb, 4);
        che_drc->interpolation_scheme = get_bits(gb, 4);
        n++;
        drc_num_bands += che_drc->band_incr;
        for (i = 0; i < drc_num_bands; i++) {
            che_drc->band_top[i] = get_bits(gb, 8);
            n++;
        }
    }

    /* prog_ref_level_present? */
    if (get_bits1(gb)) {
        che_drc->prog_ref_level = get_bits(gb, 7);
        skip_bits1(gb); // prog_ref_level_reserved_bits
        n++;
    }

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

    return n;
}

/**
 * Decode extension data (incomplete); reference: table 4.51.
 *
 * @param   cnt length of TYPE_FIL syntactic element in bytes
 *
 * @return Returns number of bytes consumed
 */
D
Diego Biurrun 已提交
1644 1645
static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt)
{
1646 1647 1648
    int crc_flag = 0;
    int res = cnt;
    switch (get_bits(gb, 4)) { // extension type
D
Diego Biurrun 已提交
1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662
    case EXT_SBR_DATA_CRC:
        crc_flag++;
    case EXT_SBR_DATA:
        res = decode_sbr_extension(ac, gb, crc_flag, cnt);
        break;
    case EXT_DYNAMIC_RANGE:
        res = decode_dynamic_range(&ac->che_drc, gb, cnt);
        break;
    case EXT_FILL:
    case EXT_FILL_DATA:
    case EXT_DATA_ELEMENT:
    default:
        skip_bits_long(gb, 8 * cnt - 4);
        break;
1663 1664 1665 1666
    };
    return res;
}

1667 1668 1669 1670 1671 1672
/**
 * Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4.6.9.3.
 *
 * @param   decode  1 if tool is used normally, 0 if tool is used in LTP.
 * @param   coef    spectral coefficients
 */
D
Diego Biurrun 已提交
1673 1674 1675 1676
static void apply_tns(float coef[1024], TemporalNoiseShaping *tns,
                      IndividualChannelStream *ics, int decode)
{
    const int mmm = FFMIN(ics->tns_max_bands, ics->max_sfb);
R
Robert Swain 已提交
1677
    int w, filt, m, i;
1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689
    int bottom, top, order, start, end, size, inc;
    float lpc[TNS_MAX_ORDER];

    for (w = 0; w < ics->num_windows; w++) {
        bottom = ics->num_swb;
        for (filt = 0; filt < tns->n_filt[w]; filt++) {
            top    = bottom;
            bottom = FFMAX(0, top - tns->length[w][filt]);
            order  = tns->order[w][filt];
            if (order == 0)
                continue;

1690 1691
            // tns_decode_coef
            compute_lpc_coefs(tns->coef[w][filt], order, lpc, 0, 0, 0);
1692

R
Robert Swain 已提交
1693 1694 1695 1696 1697
            start = ics->swb_offset[FFMIN(bottom, mmm)];
            end   = ics->swb_offset[FFMIN(   top, mmm)];
            if ((size = end - start) <= 0)
                continue;
            if (tns->direction[w][filt]) {
D
Diego Biurrun 已提交
1698 1699
                inc = -1;
                start = end - 1;
R
Robert Swain 已提交
1700 1701 1702 1703 1704 1705 1706 1707
            } else {
                inc = 1;
            }
            start += w * 128;

            // ar filter
            for (m = 0; m < size; m++, start += inc)
                for (i = 1; i <= FFMIN(m, order); i++)
D
Diego Biurrun 已提交
1708
                    coef[start] -= coef[start - i * inc] * lpc[i - 1];
R
Robert Swain 已提交
1709 1710 1711 1712
        }
    }
}

1713 1714 1715
/**
 * Conduct IMDCT and windowing.
 */
D
Diego Biurrun 已提交
1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726
static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
{
    IndividualChannelStream *ics = &sce->ics;
    float *in    = sce->coeffs;
    float *out   = sce->ret;
    float *saved = sce->saved;
    const float *swindow      = ics->use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
    const float *lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
    const float *swindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
    float *buf  = ac->buf_mdct;
    float *temp = ac->temp;
1727 1728
    int i;

1729
    // imdct
1730 1731 1732 1733 1734
    if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
        if (ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE)
            av_log(ac->avccontext, AV_LOG_WARNING,
                   "Transition from an ONLY_LONG or LONG_STOP to an EIGHT_SHORT sequence detected. "
                   "If you heard an audible artifact, please submit the sample to the FFmpeg developers.\n");
1735 1736
        for (i = 0; i < 1024; i += 128)
            ff_imdct_half(&ac->mdct_small, buf + i, in + i);
1737
    } else
1738
        ff_imdct_half(&ac->mdct, buf, in);
1739 1740 1741 1742 1743 1744 1745 1746

    /* window overlapping
     * NOTE: To simplify the overlapping code, all 'meaningless' short to long
     * and long to short transitions are considered to be short to short
     * transitions. This leaves just two cases (long to long and short to short)
     * with a little special sauce for EIGHT_SHORT_SEQUENCE.
     */
    if ((ics->window_sequence[1] == ONLY_LONG_SEQUENCE || ics->window_sequence[1] == LONG_STOP_SEQUENCE) &&
D
Diego Biurrun 已提交
1747
            (ics->window_sequence[0] == ONLY_LONG_SEQUENCE || ics->window_sequence[0] == LONG_START_SEQUENCE)) {
1748
        ac->dsp.vector_fmul_window(    out,               saved,            buf,         lwindow_prev, ac->add_bias, 512);
1749
    } else {
1750 1751
        for (i = 0; i < 448; i++)
            out[i] = saved[i] + ac->add_bias;
1752

1753
        if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1754 1755 1756 1757 1758 1759
            ac->dsp.vector_fmul_window(out + 448 + 0*128, saved + 448,      buf + 0*128, swindow_prev, ac->add_bias, 64);
            ac->dsp.vector_fmul_window(out + 448 + 1*128, buf + 0*128 + 64, buf + 1*128, swindow,      ac->add_bias, 64);
            ac->dsp.vector_fmul_window(out + 448 + 2*128, buf + 1*128 + 64, buf + 2*128, swindow,      ac->add_bias, 64);
            ac->dsp.vector_fmul_window(out + 448 + 3*128, buf + 2*128 + 64, buf + 3*128, swindow,      ac->add_bias, 64);
            ac->dsp.vector_fmul_window(temp,              buf + 3*128 + 64, buf + 4*128, swindow,      ac->add_bias, 64);
            memcpy(                    out + 448 + 4*128, temp, 64 * sizeof(float));
1760
        } else {
1761
            ac->dsp.vector_fmul_window(out + 448,         saved + 448,      buf,         swindow_prev, ac->add_bias, 64);
1762
            for (i = 576; i < 1024; i++)
1763
                out[i] = buf[i-512] + ac->add_bias;
1764 1765
        }
    }
1766

1767 1768
    // buffer update
    if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1769 1770 1771 1772 1773 1774
        for (i = 0; i < 64; i++)
            saved[i] = temp[64 + i] - ac->add_bias;
        ac->dsp.vector_fmul_window(saved + 64,  buf + 4*128 + 64, buf + 5*128, swindow, 0, 64);
        ac->dsp.vector_fmul_window(saved + 192, buf + 5*128 + 64, buf + 6*128, swindow, 0, 64);
        ac->dsp.vector_fmul_window(saved + 320, buf + 6*128 + 64, buf + 7*128, swindow, 0, 64);
        memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1775
    } else if (ics->window_sequence[0] == LONG_START_SEQUENCE) {
1776 1777
        memcpy(                    saved,       buf + 512,        448 * sizeof(float));
        memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1778
    } else { // LONG_STOP or ONLY_LONG
1779
        memcpy(                    saved,       buf + 512,        512 * sizeof(float));
1780 1781 1782
    }
}

1783 1784 1785 1786 1787
/**
 * Apply dependent channel coupling (applied before IMDCT).
 *
 * @param   index   index into coupling gain array
 */
D
Diego Biurrun 已提交
1788 1789 1790 1791 1792 1793 1794 1795
static void apply_dependent_coupling(AACContext *ac,
                                     SingleChannelElement *target,
                                     ChannelElement *cce, int index)
{
    IndividualChannelStream *ics = &cce->ch[0].ics;
    const uint16_t *offsets = ics->swb_offset;
    float *dest = target->coeffs;
    const float *src = cce->ch[0].coeffs;
1796
    int g, i, group, k, idx = 0;
D
Diego Biurrun 已提交
1797
    if (ac->m4ac.object_type == AOT_AAC_LTP) {
1798 1799 1800 1801 1802 1803
        av_log(ac->avccontext, AV_LOG_ERROR,
               "Dependent coupling is not supported together with LTP\n");
        return;
    }
    for (g = 0; g < ics->num_window_groups; g++) {
        for (i = 0; i < ics->max_sfb; i++, idx++) {
1804
            if (cce->ch[0].band_type[idx] != ZERO_BT) {
1805
                const float gain = cce->coup.gain[index][idx];
1806
                for (group = 0; group < ics->group_len[g]; group++) {
D
Diego Biurrun 已提交
1807
                    for (k = offsets[i]; k < offsets[i + 1]; k++) {
1808
                        // XXX dsputil-ize
D
Diego Biurrun 已提交
1809
                        dest[group * 128 + k] += gain * src[group * 128 + k];
1810 1811 1812 1813
                    }
                }
            }
        }
D
Diego Biurrun 已提交
1814 1815
        dest += ics->group_len[g] * 128;
        src  += ics->group_len[g] * 128;
1816 1817 1818 1819 1820 1821 1822 1823
    }
}

/**
 * Apply independent channel coupling (applied after IMDCT).
 *
 * @param   index   index into coupling gain array
 */
D
Diego Biurrun 已提交
1824 1825 1826 1827
static void apply_independent_coupling(AACContext *ac,
                                       SingleChannelElement *target,
                                       ChannelElement *cce, int index)
{
1828
    int i;
1829 1830
    const float gain = cce->coup.gain[index][0];
    const float bias = ac->add_bias;
D
Diego Biurrun 已提交
1831 1832
    const float *src = cce->ch[0].ret;
    float *dest = target->ret;
1833

1834
    for (i = 0; i < 1024; i++)
1835
        dest[i] += gain * (src[i] - bias);
1836 1837
}

R
Robert Swain 已提交
1838 1839 1840 1841 1842 1843
/**
 * channel coupling transformation interface
 *
 * @param   index   index into coupling gain array
 * @param   apply_coupling_method   pointer to (in)dependent coupling function
 */
D
Diego Biurrun 已提交
1844 1845 1846 1847
static void apply_channel_coupling(AACContext *ac, ChannelElement *cc,
                                   enum RawDataBlockType type, int elem_id,
                                   enum CouplingPoint coupling_point,
                                   void (*apply_coupling_method)(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
R
Robert Swain 已提交
1848
{
1849 1850 1851 1852 1853 1854 1855
    int i, c;

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

        if (cce && cce->coup.coupling_point == coupling_point) {
D
Diego Biurrun 已提交
1856
            ChannelCoupling *coup = &cce->coup;
1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868

            for (c = 0; c <= coup->num_coupled; c++) {
                if (coup->type[c] == type && coup->id_select[c] == elem_id) {
                    if (coup->ch_select[c] != 1) {
                        apply_coupling_method(ac, &cc->ch[0], cce, index);
                        if (coup->ch_select[c] != 0)
                            index++;
                    }
                    if (coup->ch_select[c] != 2)
                        apply_coupling_method(ac, &cc->ch[1], cce, index++);
                } else
                    index += 1 + (coup->ch_select[c] == 3);
R
Robert Swain 已提交
1869 1870 1871 1872 1873 1874 1875 1876
            }
        }
    }
}

/**
 * Convert spectral data to float samples, applying all supported tools as appropriate.
 */
D
Diego Biurrun 已提交
1877 1878
static void spectral_to_sample(AACContext *ac)
{
1879 1880
    int i, type;
    for (type = 3; type >= 0; type--) {
1881
        for (i = 0; i < MAX_ELEM_ID; i++) {
R
Robert Swain 已提交
1882
            ChannelElement *che = ac->che[type][i];
D
Diego Biurrun 已提交
1883 1884
            if (che) {
                if (type <= TYPE_CPE)
1885
                    apply_channel_coupling(ac, che, type, i, BEFORE_TNS, apply_dependent_coupling);
D
Diego Biurrun 已提交
1886
                if (che->ch[0].tns.present)
R
Robert Swain 已提交
1887
                    apply_tns(che->ch[0].coeffs, &che->ch[0].tns, &che->ch[0].ics, 1);
D
Diego Biurrun 已提交
1888
                if (che->ch[1].tns.present)
R
Robert Swain 已提交
1889
                    apply_tns(che->ch[1].coeffs, &che->ch[1].tns, &che->ch[1].ics, 1);
D
Diego Biurrun 已提交
1890
                if (type <= TYPE_CPE)
1891
                    apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMDCT, apply_dependent_coupling);
D
Diego Biurrun 已提交
1892
                if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT)
1893
                    imdct_and_windowing(ac, &che->ch[0]);
D
Diego Biurrun 已提交
1894
                if (type == TYPE_CPE)
R
Robert Swain 已提交
1895
                    imdct_and_windowing(ac, &che->ch[1]);
D
Diego Biurrun 已提交
1896
                if (type <= TYPE_CCE)
1897
                    apply_channel_coupling(ac, che, type, i, AFTER_IMDCT, apply_independent_coupling);
1898 1899 1900 1901 1902
            }
        }
    }
}

D
Diego Biurrun 已提交
1903 1904
static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
{
1905 1906 1907 1908 1909
    int size;
    AACADTSHeaderInfo hdr_info;

    size = ff_aac_parse_header(gb, &hdr_info);
    if (size > 0) {
1910
        if (ac->output_configured != OC_LOCKED && hdr_info.chan_config) {
1911 1912
            enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
            memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1913
            ac->m4ac.chan_config = hdr_info.chan_config;
1914 1915
            if (set_default_channel_config(ac, new_che_pos, hdr_info.chan_config))
                return -7;
1916
            if (output_configure(ac, ac->che_pos, new_che_pos, hdr_info.chan_config, OC_TRIAL_FRAME))
1917
                return -7;
1918 1919
        } else if (ac->output_configured != OC_LOCKED) {
            ac->output_configured = OC_NONE;
1920
        }
1921 1922
        if (ac->output_configured != OC_LOCKED)
            ac->m4ac.sbr = -1;
1923 1924 1925
        ac->m4ac.sample_rate     = hdr_info.sample_rate;
        ac->m4ac.sampling_index  = hdr_info.sampling_index;
        ac->m4ac.object_type     = hdr_info.object_type;
1926 1927
        if (!ac->avccontext->sample_rate)
            ac->avccontext->sample_rate = hdr_info.sample_rate;
A
Alex Converse 已提交
1928 1929 1930 1931
        if (hdr_info.num_aac_frames == 1) {
            if (!hdr_info.crc_absent)
                skip_bits(gb, 16);
        } else {
1932
            av_log_missing_feature(ac->avccontext, "More than one AAC RDB per ADTS frame is", 0);
A
Alex Converse 已提交
1933 1934
            return -1;
        }
1935
    }
1936 1937 1938
    return size;
}

D
Diego Biurrun 已提交
1939 1940 1941
static int aac_decode_frame(AVCodecContext *avccontext, void *data,
                            int *data_size, AVPacket *avpkt)
{
1942 1943
    const uint8_t *buf = avpkt->data;
    int buf_size = avpkt->size;
D
Diego Biurrun 已提交
1944 1945
    AACContext *ac = avccontext->priv_data;
    ChannelElement *che = NULL;
1946 1947 1948
    GetBitContext gb;
    enum RawDataBlockType elem_type;
    int err, elem_id, data_size_tmp;
1949
    int buf_consumed;
1950
    int samples = 1024, multiplier;
1951

D
Diego Biurrun 已提交
1952
    init_get_bits(&gb, buf, buf_size * 8);
1953

1954
    if (show_bits(&gb, 12) == 0xfff) {
1955
        if (parse_adts_frame_header(ac, &gb) < 0) {
1956 1957 1958
            av_log(avccontext, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
            return -1;
        }
1959
        if (ac->m4ac.sampling_index > 12) {
1960 1961 1962
            av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
            return -1;
        }
1963 1964
    }

1965 1966 1967 1968
    // parse
    while ((elem_type = get_bits(&gb, 3)) != TYPE_END) {
        elem_id = get_bits(&gb, 4);

D
Diego Biurrun 已提交
1969
        if (elem_type < TYPE_DSE && !(che=get_che(ac, elem_type, elem_id))) {
1970 1971
            av_log(ac->avccontext, AV_LOG_ERROR, "channel element %d.%d is not allocated\n", elem_type, elem_id);
            return -1;
1972 1973 1974 1975 1976
        }

        switch (elem_type) {

        case TYPE_SCE:
1977
            err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1978 1979 1980
            break;

        case TYPE_CPE:
1981
            err = decode_cpe(ac, &gb, che);
1982 1983 1984
            break;

        case TYPE_CCE:
1985
            err = decode_cce(ac, &gb, che);
1986 1987 1988
            break;

        case TYPE_LFE:
1989
            err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1990 1991 1992
            break;

        case TYPE_DSE:
1993
            err = skip_data_stream_element(ac, &gb);
1994 1995
            break;

D
Diego Biurrun 已提交
1996
        case TYPE_PCE: {
1997 1998
            enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
            memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
D
Diego Biurrun 已提交
1999
            if ((err = decode_pce(ac, new_che_pos, &gb)))
2000
                break;
2001
            if (ac->output_configured > OC_TRIAL_PCE)
2002 2003 2004
                av_log(avccontext, AV_LOG_ERROR,
                       "Not evaluating a further program_config_element as this construct is dubious at best.\n");
            else
2005
                err = output_configure(ac, ac->che_pos, new_che_pos, 0, OC_TRIAL_PCE);
2006 2007 2008 2009 2010 2011
            break;
        }

        case TYPE_FIL:
            if (elem_id == 15)
                elem_id += get_bits(&gb, 8) - 1;
2012 2013 2014 2015
            if (get_bits_left(&gb) < 8 * elem_id) {
                    av_log(avccontext, AV_LOG_ERROR, overread_err);
                    return -1;
            }
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025
            while (elem_id > 0)
                elem_id -= decode_extension_payload(ac, &gb, elem_id);
            err = 0; /* FIXME */
            break;

        default:
            err = -1; /* should not happen, but keeps compiler happy */
            break;
        }

D
Diego Biurrun 已提交
2026
        if (err)
2027
            return err;
2028 2029 2030 2031 2032

        if (get_bits_left(&gb) < 3) {
            av_log(avccontext, AV_LOG_ERROR, overread_err);
            return -1;
        }
2033 2034 2035 2036
    }

    spectral_to_sample(ac);

A
Alex Converse 已提交
2037
    multiplier = 0;
2038 2039 2040 2041 2042 2043
    samples <<= multiplier;
    if (ac->output_configured < OC_LOCKED) {
        avccontext->sample_rate = ac->m4ac.sample_rate << multiplier;
        avccontext->frame_size = samples;
    }

2044
    data_size_tmp = 1024 * avccontext->channels * sizeof(int16_t);
D
Diego Biurrun 已提交
2045
    if (*data_size < data_size_tmp) {
2046 2047 2048 2049 2050 2051 2052 2053 2054
        av_log(avccontext, AV_LOG_ERROR,
               "Output buffer too small (%d) or trying to output too many samples (%d) for this frame.\n",
               *data_size, data_size_tmp);
        return -1;
    }
    *data_size = data_size_tmp;

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

2055 2056 2057
    if (ac->output_configured)
        ac->output_configured = OC_LOCKED;

2058 2059
    buf_consumed = (get_bits_count(&gb) + 7) >> 3;
    return buf_size > buf_consumed ? buf_consumed : buf_size;
2060 2061
}

D
Diego Biurrun 已提交
2062 2063 2064
static av_cold int aac_decode_close(AVCodecContext *avccontext)
{
    AACContext *ac = avccontext->priv_data;
2065
    int i, type;
2066

2067
    for (i = 0; i < MAX_ELEM_ID; i++) {
D
Diego Biurrun 已提交
2068
        for (type = 0; type < 4; type++)
2069
            av_freep(&ac->che[type][i]);
2070 2071 2072 2073
    }

    ff_mdct_end(&ac->mdct);
    ff_mdct_end(&ac->mdct_small);
D
Diego Biurrun 已提交
2074
    return 0;
2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086
}

AVCodec aac_decoder = {
    "aac",
    CODEC_TYPE_AUDIO,
    CODEC_ID_AAC,
    sizeof(AACContext),
    aac_decode_init,
    NULL,
    aac_decode_close,
    aac_decode_frame,
    .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
2087
    .sample_fmts = (const enum SampleFormat[]) {
D
Diego Biurrun 已提交
2088 2089
        SAMPLE_FMT_S16,SAMPLE_FMT_NONE
    },
2090
    .channel_layouts = aac_channel_layout,
2091
};