aac.c 74.0 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
 * 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
A
Alex Converse 已提交
65
 * Y                    Spectral Band Replication
66 67 68 69 70 71 72 73 74 75 76 77 78 79
 * 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"
A
Alex Converse 已提交
89 90
#include "sbr.h"
#include "aacsbr.h"
91
#include "mpeg4audio.h"
92
#include "aac_parser.h"
93 94 95 96 97 98

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

99 100 101 102
#if ARCH_ARM
#   include "arm/aac.h"
#endif

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

108 109 110
static VLC vlc_scalefactors;
static VLC vlc_spectral[11];

111
static uint32_t cbrt_tab[1<<13];
112

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

D
Diego Biurrun 已提交
115 116
static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
{
117 118 119 120 121 122 123
    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 已提交
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 151 152
    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) {
153
            return NULL;
D
Diego Biurrun 已提交
154 155 156 157 158 159 160 161
        }
    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;
162 163 164
    }
}

165 166 167 168 169 170 171 172 173 174 175 176
/**
 * 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
 */
177
static av_cold int che_configure(AACContext *ac,
178 179 180 181 182 183 184
                         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);
A
Alex Converse 已提交
185
        ff_aac_sbr_ctx_init(&ac->che[type][id]->sbr);
186 187 188 189 190 191
        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;
            }
        }
A
Alex Converse 已提交
192 193 194
    } else {
        if (ac->che[type][id])
            ff_aac_sbr_ctx_close(&ac->che[type][id]->sbr);
195
        av_freep(&ac->che[type][id]);
A
Alex Converse 已提交
196
    }
197 198 199
    return 0;
}

200 201 202 203 204 205 206 207
/**
 * 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
 */
208
static av_cold int output_configure(AACContext *ac,
D
Diego Biurrun 已提交
209 210
                            enum ChannelPosition che_pos[4][MAX_ELEM_ID],
                            enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
211
                            int channel_config, enum OCStatus oc_type)
D
Diego Biurrun 已提交
212
{
213
    AVCodecContext *avctx = ac->avccontext;
214
    int i, type, channels = 0, ret;
215 216 217

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

218 219
    if (channel_config) {
        for (i = 0; i < tags_per_config[channel_config]; i++) {
220 221 222 223 224
            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;
225 226 227 228 229 230 231
        }

        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 已提交
232 233 234 235 236 237 238 239 240 241 242
        /* 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++) {
243 244
                if ((ret = che_configure(ac, che_pos, type, i, &channels)))
                    return ret;
R
Robert Swain 已提交
245
            }
246 247
        }

248
        memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
D
Diego Biurrun 已提交
249
        ac->tags_mapped = 4 * MAX_ELEM_ID;
250 251

        avctx->channel_layout = 0;
252 253
    }

254
    avctx->channels = channels;
255

256
    ac->output_configured = oc_type;
257

258 259 260
    return 0;
}

261 262 263 264 265 266 267 268
/**
 * 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 已提交
269 270 271 272 273
                               enum ChannelPosition *sce_map,
                               enum ChannelPosition type,
                               GetBitContext *gb, int n)
{
    while (n--) {
274 275 276 277 278 279 280 281 282 283 284 285
        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 已提交
286 287 288
static int decode_pce(AACContext *ac, enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
                      GetBitContext *gb)
{
289
    int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling_index;
290
    int comment_len;
291 292 293

    skip_bits(gb, 2);  // object_type

294
    sampling_index = get_bits(gb, 4);
295 296 297
    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");

298 299 300 301 302 303 304
    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);

305 306 307 308
    if (get_bits1(gb))
        skip_bits(gb, 4); // mono_mixdown_tag
    if (get_bits1(gb))
        skip_bits(gb, 4); // stereo_mixdown_tag
309

310 311
    if (get_bits1(gb))
        skip_bits(gb, 3); // mixdown_coeff_index and pseudo_surround
312

313 314 315 316
    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  );
317 318 319

    skip_bits_long(gb, 4 * num_assoc_data);

320
    decode_channel_map(new_che_pos[TYPE_CCE], new_che_pos[TYPE_CCE], AAC_CHANNEL_CC,    gb, num_cc   );
321 322 323 324

    align_get_bits(gb);

    /* comment field, first byte is length */
325 326 327 328 329 330
    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);
331 332
    return 0;
}
333

334 335 336 337 338 339 340 341
/**
 * 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
 */
342
static av_cold int set_default_channel_config(AACContext *ac,
D
Diego Biurrun 已提交
343 344
                                      enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
                                      int channel_config)
345
{
D
Diego Biurrun 已提交
346
    if (channel_config < 1 || channel_config > 7) {
347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
        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 已提交
363
    if (channel_config != 2)
364
        new_che_pos[TYPE_SCE][0] = AAC_CHANNEL_FRONT; // front center (or mono)
D
Diego Biurrun 已提交
365
    if (channel_config > 1)
366
        new_che_pos[TYPE_CPE][0] = AAC_CHANNEL_FRONT; // L + R (or stereo)
D
Diego Biurrun 已提交
367
    if (channel_config == 4)
368
        new_che_pos[TYPE_SCE][1] = AAC_CHANNEL_BACK;  // back center
D
Diego Biurrun 已提交
369
    if (channel_config > 4)
370
        new_che_pos[TYPE_CPE][(channel_config == 7) + 1]
D
Diego Biurrun 已提交
371 372
        = AAC_CHANNEL_BACK;  // back stereo
    if (channel_config > 5)
373
        new_che_pos[TYPE_LFE][0] = AAC_CHANNEL_LFE;   // LFE
D
Diego Biurrun 已提交
374
    if (channel_config == 7)
375 376 377 378 379
        new_che_pos[TYPE_CPE][1] = AAC_CHANNEL_FRONT; // outer front left + outer front right

    return 0;
}

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

D
Diego Biurrun 已提交
391
    if (get_bits1(gb)) { // frameLengthFlag
392
        av_log_missing_feature(ac->avccontext, "960/120 MDCT window is", 1);
393 394 395 396 397 398 399
        return -1;
    }

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

D
Diego Biurrun 已提交
400 401
    if (ac->m4ac.object_type == AOT_AAC_SCALABLE ||
        ac->m4ac.object_type == AOT_ER_AAC_SCALABLE)
402 403 404 405 406
        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 已提交
407
        if ((ret = decode_pce(ac, new_che_pos, gb)))
408 409
            return ret;
    } else {
D
Diego Biurrun 已提交
410
        if ((ret = set_default_channel_config(ac, new_che_pos, channel_config)))
411 412
            return ret;
    }
413
    if ((ret = output_configure(ac, ac->che_pos, new_che_pos, channel_config, OC_GLOBAL_HDR)))
414 415 416 417
        return ret;

    if (extension_flag) {
        switch (ac->m4ac.object_type) {
D
Diego Biurrun 已提交
418 419 420 421 422 423 424 425 426
        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
427 428 429
                                    * aacScalefactorDataResilienceFlag
                                    * aacSpectralDataResilienceFlag
                                    */
D
Diego Biurrun 已提交
430
            break;
431 432 433 434 435 436 437 438 439 440 441 442 443 444
        }
        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 已提交
445 446 447
static int decode_audio_specific_config(AACContext *ac, void *data,
                                        int data_size)
{
448 449 450 451 452
    GetBitContext gb;
    int i;

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

D
Diego Biurrun 已提交
453
    if ((i = ff_mpeg4audio_get_config(&ac->m4ac, data, data_size)) < 0)
454
        return -1;
D
Diego Biurrun 已提交
455
    if (ac->m4ac.sampling_index > 12) {
456 457 458 459 460 461 462
        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) {
463
    case AOT_AAC_MAIN:
464 465 466 467 468 469 470 471 472 473 474 475
    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;
}

476 477 478 479 480 481 482
/**
 * 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 已提交
483 484
static av_always_inline int lcg_random(int previous_val)
{
485 486 487
    return previous_val * 1664525 + 1013904223;
}

488
static av_always_inline void reset_predict_state(PredictorState *ps)
D
Diego Biurrun 已提交
489 490 491
{
    ps->r0   = 0.0f;
    ps->r1   = 0.0f;
492 493 494 495 496 497
    ps->cor0 = 0.0f;
    ps->cor1 = 0.0f;
    ps->var0 = 1.0f;
    ps->var1 = 1.0f;
}

D
Diego Biurrun 已提交
498 499
static void reset_all_predictors(PredictorState *ps)
{
500 501 502 503 504
    int i;
    for (i = 0; i < MAX_PREDICTORS; i++)
        reset_predict_state(&ps[i]);
}

D
Diego Biurrun 已提交
505 506
static void reset_predictor_group(PredictorState *ps, int group_num)
{
507
    int i;
D
Diego Biurrun 已提交
508
    for (i = group_num - 1; i < MAX_PREDICTORS; i += 30)
509 510 511
        reset_predict_state(&ps[i]);
}

D
Diego Biurrun 已提交
512 513 514
static av_cold int aac_decode_init(AVCodecContext *avccontext)
{
    AACContext *ac = avccontext->priv_data;
515 516 517
    int i;

    ac->avccontext = avccontext;
518
    ac->m4ac.sample_rate = avccontext->sample_rate;
519

520
    if (avccontext->extradata_size > 0) {
D
Diego Biurrun 已提交
521
        if (decode_audio_specific_config(ac, avccontext->extradata, avccontext->extradata_size))
522 523
            return -1;
    }
524

D
Diego Biurrun 已提交
525
    avccontext->sample_fmt = SAMPLE_FMT_S16;
526

527 528 529 530 531 532 533 534 535 536 537
    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);
538

A
Alex Converse 已提交
539 540
    ff_aac_sbr_init();

541 542
    dsputil_init(&ac->dsp, avccontext);

543 544
    ac->random_state = 0x1f2e3d4c;

545 546 547 548
    // -1024 - Compensate wrong IMDCT method.
    // 32768 - Required to scale values to the correct range for the bias method
    //         for float to int16 conversion.

549
    if (ac->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
D
Diego Biurrun 已提交
550 551
        ac->add_bias  = 385.0f;
        ac->sf_scale  = 1. / (-1024. * 32768.);
552 553
        ac->sf_offset = 0;
    } else {
D
Diego Biurrun 已提交
554 555
        ac->add_bias  = 0.0f;
        ac->sf_scale  = 1. / -1024.;
556 557 558
        ac->sf_offset = 60;
    }

559
#if !CONFIG_HARDCODED_TABLES
560
    for (i = 0; i < 428; i++)
D
Diego Biurrun 已提交
561
        ff_aac_pow2sf_tab[i] = pow(2, (i - 200) / 4.);
562 563
#endif /* CONFIG_HARDCODED_TABLES */

564
    INIT_VLC_STATIC(&vlc_scalefactors,7,FF_ARRAY_ELEMS(ff_aac_scalefactor_code),
D
Diego Biurrun 已提交
565 566 567
                    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);
568

569 570
    ff_mdct_init(&ac->mdct, 11, 1, 1.0);
    ff_mdct_init(&ac->mdct_small, 8, 1, 1.0);
R
Robert Swain 已提交
571 572 573
    // 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);
574 575
    ff_init_ff_sine_windows(10);
    ff_init_ff_sine_windows( 7);
R
Robert Swain 已提交
576

577 578 579 580 581 582 583
    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 已提交
584

585 586 587
    return 0;
}

588 589 590
/**
 * Skip data_stream_element; reference: table 4.10.
 */
591
static int skip_data_stream_element(AACContext *ac, GetBitContext *gb)
D
Diego Biurrun 已提交
592
{
593 594 595 596 597 598
    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);
599 600 601 602 603

    if (get_bits_left(gb) < 8 * count) {
        av_log(ac->avccontext, AV_LOG_ERROR, overread_err);
        return -1;
    }
604
    skip_bits_long(gb, 8 * count);
605
    return 0;
606 607
}

D
Diego Biurrun 已提交
608 609 610
static int decode_prediction(AACContext *ac, IndividualChannelStream *ics,
                             GetBitContext *gb)
{
611 612 613 614 615 616 617 618 619 620 621 622 623 624
    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;
}

625 626 627 628 629
/**
 * 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 已提交
630 631 632
static int decode_ics_info(AACContext *ac, IndividualChannelStream *ics,
                           GetBitContext *gb, int common_window)
{
633 634 635 636 637 638 639
    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 已提交
640 641 642 643
    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 已提交
644 645 646 647 648
    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 已提交
649
                ics->group_len[ics->num_window_groups - 1]++;
R
Robert Swain 已提交
650 651
            } else {
                ics->num_window_groups++;
D
Diego Biurrun 已提交
652
                ics->group_len[ics->num_window_groups - 1] = 1;
R
Robert Swain 已提交
653 654
            }
        }
D
Diego Biurrun 已提交
655 656 657 658
        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];
659
        ics->predictor_present = 0;
R
Robert Swain 已提交
660
    } else {
D
Diego Biurrun 已提交
661 662 663 664 665 666
        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);
667 668 669 670 671 672 673 674 675 676 677 678
        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 {
679
                av_log_missing_feature(ac->avccontext, "Predictor bit set but LTP is", 1);
R
Robert Swain 已提交
680 681
                memset(ics, 0, sizeof(IndividualChannelStream));
                return -1;
682
            }
683 684 685
        }
    }

D
Diego Biurrun 已提交
686
    if (ics->max_sfb > ics->num_swb) {
687
        av_log(ac->avccontext, AV_LOG_ERROR,
D
Diego Biurrun 已提交
688 689
               "Number of scalefactor bands in group (%d) exceeds limit (%d).\n",
               ics->max_sfb, ics->num_swb);
690 691 692 693
        memset(ics, 0, sizeof(IndividualChannelStream));
        return -1;
    }

694 695 696 697 698 699 700 701 702 703 704
    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 已提交
705 706 707 708
static int decode_band_types(AACContext *ac, enum BandType band_type[120],
                             int band_type_run_end[120], GetBitContext *gb,
                             IndividualChannelStream *ics)
{
709 710 711 712 713
    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) {
714
            uint8_t sect_end = k;
715 716 717 718 719 720
            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 已提交
721
            while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1)
722 723
                sect_end += sect_len_incr;
            sect_end += sect_len_incr;
724 725 726 727
            if (get_bits_left(gb) < 0) {
                av_log(ac->avccontext, AV_LOG_ERROR, overread_err);
                return -1;
            }
728
            if (sect_end > ics->max_sfb) {
729
                av_log(ac->avccontext, AV_LOG_ERROR,
D
Diego Biurrun 已提交
730
                       "Number of bands (%d) exceeds limit (%d).\n",
731
                       sect_end, ics->max_sfb);
732 733
                return -1;
            }
734
            for (; k < sect_end; k++) {
R
Robert Swain 已提交
735
                band_type        [idx]   = sect_band_type;
736
                band_type_run_end[idx++] = sect_end;
R
Robert Swain 已提交
737
            }
738 739 740 741
        }
    }
    return 0;
}
742

743 744
/**
 * Decode scalefactors; reference: table 4.47.
745 746 747 748 749 750 751 752
 *
 * @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 已提交
753 754 755 756 757 758
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])
{
759 760 761 762 763 764 765 766 767
    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 已提交
768
                for (; i < run_end; i++, idx++)
769
                    sf[idx] = 0.;
D
Diego Biurrun 已提交
770 771
            } else if ((band_type[idx] == INTENSITY_BT) || (band_type[idx] == INTENSITY_BT2)) {
                for (; i < run_end; i++, idx++) {
772
                    offset[2] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
D
Diego Biurrun 已提交
773
                    if (offset[2] > 255U) {
774
                        av_log(ac->avccontext, AV_LOG_ERROR,
D
Diego Biurrun 已提交
775
                               "%s (%d) out of range.\n", sf_str[2], offset[2]);
776 777
                        return -1;
                    }
D
Diego Biurrun 已提交
778
                    sf[idx] = ff_aac_pow2sf_tab[-offset[2] + 300];
779
                }
D
Diego Biurrun 已提交
780 781 782
            } else if (band_type[idx] == NOISE_BT) {
                for (; i < run_end; i++, idx++) {
                    if (noise_flag-- > 0)
783 784 785
                        offset[1] += get_bits(gb, 9) - 256;
                    else
                        offset[1] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
D
Diego Biurrun 已提交
786
                    if (offset[1] > 255U) {
787
                        av_log(ac->avccontext, AV_LOG_ERROR,
D
Diego Biurrun 已提交
788
                               "%s (%d) out of range.\n", sf_str[1], offset[1]);
789 790
                        return -1;
                    }
D
Diego Biurrun 已提交
791
                    sf[idx] = -ff_aac_pow2sf_tab[offset[1] + sf_offset + 100];
792
                }
D
Diego Biurrun 已提交
793 794
            } else {
                for (; i < run_end; i++, idx++) {
795
                    offset[0] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
D
Diego Biurrun 已提交
796
                    if (offset[0] > 255U) {
797
                        av_log(ac->avccontext, AV_LOG_ERROR,
D
Diego Biurrun 已提交
798
                               "%s (%d) out of range.\n", sf_str[0], offset[0]);
799 800 801 802 803 804 805 806 807 808 809 810 811
                        return -1;
                    }
                    sf[idx] = -ff_aac_pow2sf_tab[ offset[0] + sf_offset];
                }
            }
        }
    }
    return 0;
}

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

R
Robert Swain 已提交
834 835 836 837 838
/**
 * Decode Temporal Noise Shaping data; reference: table 4.48.
 *
 * @return  Returns error status. 0 - OK, !0 - error
 */
D
Diego Biurrun 已提交
839 840 841
static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns,
                      GetBitContext *gb, const IndividualChannelStream *ics)
{
R
Robert Swain 已提交
842 843 844 845
    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++) {
846
        if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) {
R
Robert Swain 已提交
847 848
            coef_res = get_bits1(gb);

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

D
Diego Biurrun 已提交
853
                if ((tns->order[w][filt] = get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
854
                    av_log(ac->avccontext, AV_LOG_ERROR, "TNS filter order %d is greater than maximum %d.\n",
R
Robert Swain 已提交
855 856 857 858
                           tns->order[w][filt], tns_max_order);
                    tns->order[w][filt] = 0;
                    return -1;
                }
859
                if (tns->order[w][filt]) {
R
Robert Swain 已提交
860 861 862
                    tns->direction[w][filt] = get_bits1(gb);
                    coef_compress = get_bits1(gb);
                    coef_len = coef_res + 3 - coef_compress;
D
Diego Biurrun 已提交
863
                    tmp2_idx = 2 * coef_compress + coef_res;
R
Robert Swain 已提交
864

R
Robert Swain 已提交
865 866
                    for (i = 0; i < tns->order[w][filt]; i++)
                        tns->coef[w][filt][i] = tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)];
867
                }
R
Robert Swain 已提交
868
            }
869
        }
R
Robert Swain 已提交
870 871 872 873
    }
    return 0;
}

874 875 876 877 878 879 880
/**
 * 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 已提交
881 882 883
static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb,
                                   int ms_present)
{
884 885 886 887 888 889 890 891
    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]));
    }
}
892

893
#ifndef VMUL2
894 895 896 897 898 899 900 901
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;
}
902
#endif
903

904
#ifndef VMUL4
905 906 907 908 909 910 911 912 913 914
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;
}
915
#endif
916

917
#ifndef VMUL2S
918 919 920 921 922 923 924 925 926 927 928 929 930 931
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;
}
932
#endif
933

934
#ifndef VMUL4S
935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958
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;
}
959
#endif
960

R
Robert Swain 已提交
961 962 963 964 965 966 967 968 969 970 971 972
/**
 * 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 已提交
973
static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
974
                                       GetBitContext *gb, const float sf[120],
D
Diego Biurrun 已提交
975 976 977 978
                                       int pulse_present, const Pulse *pulse,
                                       const IndividualChannelStream *ics,
                                       enum BandType band_type[120])
{
R
Robert Swain 已提交
979
    int i, k, g, idx = 0;
D
Diego Biurrun 已提交
980 981
    const int c = 1024 / ics->num_windows;
    const uint16_t *offsets = ics->swb_offset;
R
Robert Swain 已提交
982
    float *coef_base = coef;
983
    int err_idx;
R
Robert Swain 已提交
984 985

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

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

R
Robert Swain 已提交
991
        for (i = 0; i < ics->max_sfb; i++, idx++) {
992 993 994
            const unsigned cbt_m1 = band_type[idx] - 1;
            float *cfo = coef + offsets[i];
            int off_len = offsets[i + 1] - offsets[i];
R
Robert Swain 已提交
995
            int group;
996 997 998 999

            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 已提交
1000
                }
1001 1002
            } else if (cbt_m1 == NOISE_BT - 1) {
                for (group = 0; group < g_len; group++, cfo+=128) {
1003
                    float scale;
1004
                    float band_energy;
M
Måns Rullgård 已提交
1005

1006
                    for (k = 0; k < off_len; k++) {
R
Robert Swain 已提交
1007
                        ac->random_state  = lcg_random(ac->random_state);
1008
                        cfo[k] = ac->random_state;
1009
                    }
M
Måns Rullgård 已提交
1010

1011
                    band_energy = ac->dsp.scalarproduct_float(cfo, cfo, off_len);
1012
                    scale = sf[idx] / sqrtf(band_energy);
1013
                    ac->dsp.vector_fmul_scalar(cfo, cfo, scale, off_len);
R
Robert Swain 已提交
1014
                }
D
Diego Biurrun 已提交
1015
            } else {
1016 1017 1018 1019
                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];
1020
                OPEN_READER(re, gb);
1021

1022 1023 1024 1025 1026
                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 已提交
1027

1028
                        do {
1029
                            int code;
1030 1031
                            unsigned cb_idx;

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

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

1040
                            cb_idx = cb_vector_idx[code];
1041 1042
                            cf = VMUL4(cf, vq, cb_idx, sf + idx);
                        } while (len -= 4);
1043 1044 1045 1046 1047 1048 1049 1050
                    }
                    break;

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

1051
                        do {
1052
                            int code;
1053 1054 1055 1056
                            unsigned nnz;
                            unsigned cb_idx;
                            uint32_t bits;

1057 1058 1059 1060 1061
                            UPDATE_CACHE(re, gb);
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);

                            if (code >= cb_size) {
                                err_idx = code;
1062 1063 1064
                                goto err_cb_overflow;
                            }

1065 1066 1067 1068
#if MIN_CACHE_BITS < 20
                            UPDATE_CACHE(re, gb);
#endif
                            cb_idx = cb_vector_idx[code];
1069
                            nnz = cb_idx >> 8 & 15;
1070 1071
                            bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
                            LAST_SKIP_BITS(re, gb, nnz);
1072 1073
                            cf = VMUL4S(cf, vq, cb_idx, bits, sf + idx);
                        } while (len -= 4);
1074 1075 1076 1077 1078 1079 1080 1081
                    }
                    break;

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

1082
                        do {
1083
                            int code;
1084 1085
                            unsigned cb_idx;

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

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

1094
                            cb_idx = cb_vector_idx[code];
1095 1096
                            cf = VMUL2(cf, vq, cb_idx, sf + idx);
                        } while (len -= 2);
1097 1098 1099 1100 1101 1102 1103 1104 1105
                    }
                    break;

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

1106
                        do {
1107
                            int code;
1108 1109 1110 1111
                            unsigned nnz;
                            unsigned cb_idx;
                            unsigned sign;

1112 1113 1114 1115 1116
                            UPDATE_CACHE(re, gb);
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);

                            if (code >= cb_size) {
                                err_idx = code;
1117 1118 1119
                                goto err_cb_overflow;
                            }

1120
                            cb_idx = cb_vector_idx[code];
1121
                            nnz = cb_idx >> 8 & 15;
1122 1123
                            sign = SHOW_UBITS(re, gb, nnz) << (cb_idx >> 12);
                            LAST_SKIP_BITS(re, gb, nnz);
1124 1125
                            cf = VMUL2S(cf, vq, cb_idx, sign, sf + idx);
                        } while (len -= 2);
1126 1127 1128 1129 1130 1131 1132 1133 1134
                    }
                    break;

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

1135
                        do {
1136
                            int code;
1137 1138 1139 1140 1141
                            unsigned nzt, nnz;
                            unsigned cb_idx;
                            uint32_t bits;
                            int j;

1142 1143 1144 1145
                            UPDATE_CACHE(re, gb);
                            GET_VLC(code, re, gb, vlc_tab, 8, 2);

                            if (!code) {
1146 1147
                                *icf++ = 0;
                                *icf++ = 0;
1148 1149 1150
                                continue;
                            }

1151 1152
                            if (code >= cb_size) {
                                err_idx = code;
1153 1154 1155
                                goto err_cb_overflow;
                            }

1156
                            cb_idx = cb_vector_idx[code];
1157 1158
                            nnz = cb_idx >> 12;
                            nzt = cb_idx >> 8;
1159 1160
                            bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
                            LAST_SKIP_BITS(re, gb, nnz);
1161 1162 1163

                            for (j = 0; j < 2; j++) {
                                if (nzt & 1<<j) {
1164 1165
                                    uint32_t b;
                                    int n;
1166 1167
                                    /* The total length of escape_sequence must be < 22 bits according
                                       to the specification (i.e. max is 111111110xxxxxxxxxxxx). */
1168 1169 1170 1171 1172
                                    UPDATE_CACHE(re, gb);
                                    b = GET_CACHE(re, gb);
                                    b = 31 - av_log2(~b);

                                    if (b > 8) {
1173 1174 1175
                                        av_log(ac->avccontext, AV_LOG_ERROR, "error in spectral data, ESC overflow\n");
                                        return -1;
                                    }
1176 1177 1178 1179 1180 1181 1182 1183 1184 1185

#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);
1186
                                    *icf++ = cbrt_tab[n] | (bits & 1<<31);
1187 1188 1189
                                    bits <<= 1;
                                } else {
                                    unsigned v = ((const uint32_t*)vq)[cb_idx & 15];
1190
                                    *icf++ = (bits & 1<<31) | v;
1191
                                    bits <<= !!v;
A
Alex Converse 已提交
1192
                                }
1193
                                cb_idx >>= 4;
R
Robert Swain 已提交
1194
                            }
1195
                        } while (len -= 2);
M
Måns Rullgård 已提交
1196

1197
                        ac->dsp.vector_fmul_scalar(cfo, cfo, sf[idx], off_len);
M
Måns Rullgård 已提交
1198
                    }
R
Robert Swain 已提交
1199
                }
1200 1201

                CLOSE_READER(re, gb);
R
Robert Swain 已提交
1202 1203
            }
        }
1204
        coef += g_len << 7;
R
Robert Swain 已提交
1205 1206 1207
    }

    if (pulse_present) {
1208
        idx = 0;
D
Diego Biurrun 已提交
1209 1210 1211
        for (i = 0; i < pulse->num_pulse; i++) {
            float co = coef_base[ pulse->pos[i] ];
            while (offsets[idx + 1] <= pulse->pos[i])
1212 1213
                idx++;
            if (band_type[idx] != NOISE_BT && sf[idx]) {
R
Robert Swain 已提交
1214 1215 1216 1217 1218 1219
                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];
1220
            }
R
Robert Swain 已提交
1221 1222 1223
        }
    }
    return 0;
1224 1225 1226 1227 1228 1229

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 已提交
1230 1231
}

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

D
Diego Biurrun 已提交
1240 1241
static av_always_inline float flt16_even(float pf)
{
1242 1243
    union float754 tmp;
    tmp.f = pf;
D
Diego Biurrun 已提交
1244
    tmp.i = (tmp.i + 0x00007FFFU + (tmp.i & 0x00010000U >> 16)) & 0xFFFF0000U;
1245
    return tmp.f;
1246 1247
}

D
Diego Biurrun 已提交
1248 1249
static av_always_inline float flt16_trunc(float pf)
{
1250 1251 1252 1253
    union float754 pun;
    pun.f = pf;
    pun.i &= 0xFFFF0000U;
    return pun.f;
1254 1255
}

1256
static av_always_inline void predict(AACContext *ac, PredictorState *ps, float *coef,
D
Diego Biurrun 已提交
1257 1258 1259 1260
                    int output_enable)
{
    const float a     = 0.953125; // 61.0 / 64
    const float alpha = 0.90625;  // 29.0 / 32
1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286
    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 已提交
1287 1288
static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
{
1289 1290 1291
    int sfb, k;

    if (!sce->ics.predictor_initialized) {
1292
        reset_all_predictors(sce->predictor_state);
1293 1294 1295 1296 1297 1298
        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++) {
1299
                predict(ac, &sce->predictor_state[k], &sce->coeffs[k],
D
Diego Biurrun 已提交
1300
                        sce->ics.predictor_present && sce->ics.prediction_used[sfb]);
1301 1302 1303
            }
        }
        if (sce->ics.predictor_reset_group)
1304
            reset_predictor_group(sce->predictor_state, sce->ics.predictor_reset_group);
1305
    } else
1306
        reset_all_predictors(sce->predictor_state);
1307 1308
}

1309
/**
1310 1311 1312 1313 1314 1315 1316
 * 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 已提交
1317 1318 1319
static int decode_ics(AACContext *ac, SingleChannelElement *sce,
                      GetBitContext *gb, int common_window, int scale_flag)
{
1320
    Pulse pulse;
D
Diego Biurrun 已提交
1321 1322 1323
    TemporalNoiseShaping    *tns = &sce->tns;
    IndividualChannelStream *ics = &sce->ics;
    float *out = sce->coeffs;
1324 1325
    int global_gain, pulse_present = 0;

1326 1327
    /* This assignment is to silence a GCC warning about the variable being used
     * uninitialized when in fact it always is.
1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349
     */
    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;
            }
1350 1351 1352 1353
            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;
            }
1354 1355 1356 1357
        }
        if ((tns->present = get_bits1(gb)) && decode_tns(ac, tns, gb, ics))
            return -1;
        if (get_bits1(gb)) {
1358
            av_log_missing_feature(ac->avccontext, "SSR", 1);
1359 1360 1361 1362
            return -1;
        }
    }

1363
    if (decode_spectrum_and_dequant(ac, out, gb, sce->sf, pulse_present, &pulse, ics, sce->band_type) < 0)
1364
        return -1;
1365

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

1369 1370 1371
    return 0;
}

R
Robert Swain 已提交
1372 1373 1374
/**
 * Mid/Side stereo decoding; reference: 4.6.8.1.3.
 */
M
Måns Rullgård 已提交
1375
static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
D
Diego Biurrun 已提交
1376 1377
{
    const IndividualChannelStream *ics = &cpe->ch[0].ics;
R
Robert Swain 已提交
1378 1379
    float *ch0 = cpe->ch[0].coeffs;
    float *ch1 = cpe->ch[1].coeffs;
M
Måns Rullgård 已提交
1380
    int g, i, group, idx = 0;
D
Diego Biurrun 已提交
1381
    const uint16_t *offsets = ics->swb_offset;
R
Robert Swain 已提交
1382 1383 1384
    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 已提交
1385
                    cpe->ch[0].band_type[idx] < NOISE_BT && cpe->ch[1].band_type[idx] < NOISE_BT) {
R
Robert Swain 已提交
1386
                for (group = 0; group < ics->group_len[g]; group++) {
M
Måns Rullgård 已提交
1387 1388 1389
                    ac->dsp.butterflies_float(ch0 + group * 128 + offsets[i],
                                              ch1 + group * 128 + offsets[i],
                                              offsets[i+1] - offsets[i]);
R
Robert Swain 已提交
1390 1391 1392
                }
            }
        }
D
Diego Biurrun 已提交
1393 1394
        ch0 += ics->group_len[g] * 128;
        ch1 += ics->group_len[g] * 128;
R
Robert Swain 已提交
1395 1396 1397 1398 1399 1400 1401 1402 1403 1404
    }
}

/**
 * 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 已提交
1405 1406 1407 1408
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 已提交
1409
    float *coef0 = cpe->ch[0].coeffs, *coef1 = cpe->ch[1].coeffs;
D
Diego Biurrun 已提交
1410
    const uint16_t *offsets = ics->swb_offset;
R
Robert Swain 已提交
1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423
    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 已提交
1424 1425
                        for (k = offsets[i]; k < offsets[i + 1]; k++)
                            coef1[group * 128 + k] = scale * coef0[group * 128 + k];
R
Robert Swain 已提交
1426 1427 1428 1429 1430 1431 1432
                }
            } else {
                int bt_run_end = sce1->band_type_run_end[idx];
                idx += bt_run_end - i;
                i    = bt_run_end;
            }
        }
D
Diego Biurrun 已提交
1433 1434
        coef0 += ics->group_len[g] * 128;
        coef1 += ics->group_len[g] * 128;
R
Robert Swain 已提交
1435 1436 1437
    }
}

1438 1439 1440 1441 1442 1443 1444
/**
 * 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 已提交
1445 1446
static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
{
1447 1448 1449 1450 1451 1452 1453 1454 1455 1456
    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 已提交
1457
        if (ms_present == 3) {
1458 1459
            av_log(ac->avccontext, AV_LOG_ERROR, "ms_present = 3 is reserved.\n");
            return -1;
D
Diego Biurrun 已提交
1460
        } else if (ms_present)
1461 1462 1463 1464 1465 1466 1467
            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;

1468 1469
    if (common_window) {
        if (ms_present)
M
Måns Rullgård 已提交
1470
            apply_mid_side_stereo(ac, cpe);
1471 1472 1473 1474 1475
        if (ac->m4ac.object_type == AOT_AAC_MAIN) {
            apply_prediction(ac, &cpe->ch[0]);
            apply_prediction(ac, &cpe->ch[1]);
        }
    }
1476

1477
    apply_intensity_stereo(cpe, ms_present);
1478 1479 1480
    return 0;
}

R
Robert Swain 已提交
1481 1482 1483 1484 1485 1486 1487
/**
 * 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 已提交
1488 1489
static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
{
R
Robert Swain 已提交
1490
    int num_gain = 0;
1491
    int c, g, sfb, ret;
R
Robert Swain 已提交
1492 1493
    int sign;
    float scale;
D
Diego Biurrun 已提交
1494 1495
    SingleChannelElement *sce = &che->ch[0];
    ChannelCoupling     *coup = &che->coup;
R
Robert Swain 已提交
1496

D
Diego Biurrun 已提交
1497
    coup->coupling_point = 2 * get_bits1(gb);
1498 1499 1500 1501 1502 1503 1504 1505 1506 1507
    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
1508
            coup->ch_select[c] = 2;
1509
    }
D
Diego Biurrun 已提交
1510
    coup->coupling_point += get_bits1(gb) || (coup->coupling_point >> 1);
1511

D
Diego Biurrun 已提交
1512
    sign  = get_bits(gb, 1);
1513
    scale = pow(2., pow(2., (int)get_bits(gb, 2) - 3));
1514 1515 1516 1517 1518

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

    for (c = 0; c < num_gain; c++) {
D
Diego Biurrun 已提交
1519 1520
        int idx  = 0;
        int cge  = 1;
1521 1522 1523 1524 1525
        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;
1526
            gain_cache = pow(scale, -gain);
1527
        }
1528 1529 1530
        if (coup->coupling_point == AFTER_IMDCT) {
            coup->gain[c][0] = gain_cache;
        } else {
A
Alex Converse 已提交
1531 1532 1533 1534 1535
            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 已提交
1536
                            if (t) {
A
Alex Converse 已提交
1537 1538 1539 1540 1541 1542 1543
                                int s = 1;
                                t = gain += t;
                                if (sign) {
                                    s  -= 2 * (t & 0x1);
                                    t >>= 1;
                                }
                                gain_cache = pow(scale, -t) * s;
1544 1545
                            }
                        }
A
Alex Converse 已提交
1546
                        coup->gain[c][idx] = gain_cache;
1547 1548
                    }
                }
R
Robert Swain 已提交
1549 1550
            }
        }
1551 1552 1553 1554 1555 1556 1557 1558 1559
    }
    return 0;
}

/**
 * Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
 *
 * @return  Returns number of bytes consumed.
 */
D
Diego Biurrun 已提交
1560 1561 1562
static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc,
                                         GetBitContext *gb)
{
1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573
    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;
}

1574 1575 1576 1577 1578 1579 1580
/**
 * 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 已提交
1581 1582 1583 1584
static int decode_dynamic_range(DynamicRangeControl *che_drc,
                                GetBitContext *gb, int cnt)
{
    int n             = 1;
1585 1586 1587 1588
    int drc_num_bands = 1;
    int i;

    /* pce_tag_present? */
D
Diego Biurrun 已提交
1589
    if (get_bits1(gb)) {
1590 1591 1592 1593 1594 1595
        che_drc->pce_instance_tag  = get_bits(gb, 4);
        skip_bits(gb, 4); // tag_reserved_bits
        n++;
    }

    /* excluded_chns_present? */
D
Diego Biurrun 已提交
1596
    if (get_bits1(gb)) {
1597 1598 1599 1600 1601 1602 1603 1604 1605 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
        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
 */
A
Alex Converse 已提交
1635 1636
static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt,
                                    ChannelElement *che, enum RawDataBlockType elem_type)
D
Diego Biurrun 已提交
1637
{
1638 1639 1640
    int crc_flag = 0;
    int res = cnt;
    switch (get_bits(gb, 4)) { // extension type
D
Diego Biurrun 已提交
1641 1642 1643
    case EXT_SBR_DATA_CRC:
        crc_flag++;
    case EXT_SBR_DATA:
A
Alex Converse 已提交
1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658
        if (!che) {
            av_log(ac->avccontext, AV_LOG_ERROR, "SBR was found before the first channel element.\n");
            return res;
        } else if (!ac->m4ac.sbr) {
            av_log(ac->avccontext, AV_LOG_ERROR, "SBR signaled to be not-present but was found in the bitstream.\n");
            skip_bits_long(gb, 8 * cnt - 4);
            return res;
        } else if (ac->m4ac.sbr == -1 && ac->output_configured == OC_LOCKED) {
            av_log(ac->avccontext, AV_LOG_ERROR, "Implicit SBR was found with a first occurrence after the first frame.\n");
            skip_bits_long(gb, 8 * cnt - 4);
            return res;
        } else {
            ac->m4ac.sbr = 1;
        }
        res = ff_decode_sbr_extension(ac, &che->sbr, gb, crc_flag, cnt, elem_type);
D
Diego Biurrun 已提交
1659 1660 1661 1662 1663 1664 1665 1666 1667 1668
        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;
1669 1670 1671 1672
    };
    return res;
}

1673 1674 1675 1676 1677 1678
/**
 * 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 已提交
1679 1680 1681 1682
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 已提交
1683
    int w, filt, m, i;
1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695
    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;

1696 1697
            // tns_decode_coef
            compute_lpc_coefs(tns->coef[w][filt], order, lpc, 0, 0, 0);
1698

R
Robert Swain 已提交
1699 1700 1701 1702 1703
            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 已提交
1704 1705
                inc = -1;
                start = end - 1;
R
Robert Swain 已提交
1706 1707 1708 1709 1710 1711 1712 1713
            } 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 已提交
1714
                    coef[start] -= coef[start - i * inc] * lpc[i - 1];
R
Robert Swain 已提交
1715 1716 1717 1718
        }
    }
}

1719 1720 1721
/**
 * Conduct IMDCT and windowing.
 */
D
Diego Biurrun 已提交
1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732
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;
1733 1734
    int i;

1735
    // imdct
1736 1737 1738 1739 1740
    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");
1741 1742
        for (i = 0; i < 1024; i += 128)
            ff_imdct_half(&ac->mdct_small, buf + i, in + i);
1743
    } else
1744
        ff_imdct_half(&ac->mdct, buf, in);
1745 1746 1747 1748 1749 1750 1751 1752

    /* 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 已提交
1753
            (ics->window_sequence[0] == ONLY_LONG_SEQUENCE || ics->window_sequence[0] == LONG_START_SEQUENCE)) {
1754
        ac->dsp.vector_fmul_window(    out,               saved,            buf,         lwindow_prev, ac->add_bias, 512);
1755
    } else {
1756 1757
        for (i = 0; i < 448; i++)
            out[i] = saved[i] + ac->add_bias;
1758

1759
        if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1760 1761 1762 1763 1764 1765
            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));
1766
        } else {
1767
            ac->dsp.vector_fmul_window(out + 448,         saved + 448,      buf,         swindow_prev, ac->add_bias, 64);
1768
            for (i = 576; i < 1024; i++)
1769
                out[i] = buf[i-512] + ac->add_bias;
1770 1771
        }
    }
1772

1773 1774
    // buffer update
    if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
1775 1776 1777 1778 1779 1780
        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));
1781
    } else if (ics->window_sequence[0] == LONG_START_SEQUENCE) {
1782 1783
        memcpy(                    saved,       buf + 512,        448 * sizeof(float));
        memcpy(                    saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
1784
    } else { // LONG_STOP or ONLY_LONG
1785
        memcpy(                    saved,       buf + 512,        512 * sizeof(float));
1786 1787 1788
    }
}

1789 1790 1791 1792 1793
/**
 * Apply dependent channel coupling (applied before IMDCT).
 *
 * @param   index   index into coupling gain array
 */
D
Diego Biurrun 已提交
1794 1795 1796 1797 1798 1799 1800 1801
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;
1802
    int g, i, group, k, idx = 0;
D
Diego Biurrun 已提交
1803
    if (ac->m4ac.object_type == AOT_AAC_LTP) {
1804 1805 1806 1807 1808 1809
        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++) {
1810
            if (cce->ch[0].band_type[idx] != ZERO_BT) {
1811
                const float gain = cce->coup.gain[index][idx];
1812
                for (group = 0; group < ics->group_len[g]; group++) {
D
Diego Biurrun 已提交
1813
                    for (k = offsets[i]; k < offsets[i + 1]; k++) {
1814
                        // XXX dsputil-ize
D
Diego Biurrun 已提交
1815
                        dest[group * 128 + k] += gain * src[group * 128 + k];
1816 1817 1818 1819
                    }
                }
            }
        }
D
Diego Biurrun 已提交
1820 1821
        dest += ics->group_len[g] * 128;
        src  += ics->group_len[g] * 128;
1822 1823 1824 1825 1826 1827 1828 1829
    }
}

/**
 * Apply independent channel coupling (applied after IMDCT).
 *
 * @param   index   index into coupling gain array
 */
D
Diego Biurrun 已提交
1830 1831 1832 1833
static void apply_independent_coupling(AACContext *ac,
                                       SingleChannelElement *target,
                                       ChannelElement *cce, int index)
{
1834
    int i;
1835 1836
    const float gain = cce->coup.gain[index][0];
    const float bias = ac->add_bias;
D
Diego Biurrun 已提交
1837 1838
    const float *src = cce->ch[0].ret;
    float *dest = target->ret;
A
Alex Converse 已提交
1839
    const int len = 1024 << (ac->m4ac.sbr == 1);
1840

A
Alex Converse 已提交
1841
    for (i = 0; i < len; i++)
1842
        dest[i] += gain * (src[i] - bias);
1843 1844
}

R
Robert Swain 已提交
1845 1846 1847 1848 1849 1850
/**
 * channel coupling transformation interface
 *
 * @param   index   index into coupling gain array
 * @param   apply_coupling_method   pointer to (in)dependent coupling function
 */
D
Diego Biurrun 已提交
1851 1852 1853 1854
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 已提交
1855
{
1856 1857 1858 1859 1860 1861 1862
    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 已提交
1863
            ChannelCoupling *coup = &cce->coup;
1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875

            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 已提交
1876 1877 1878 1879 1880 1881 1882 1883
            }
        }
    }
}

/**
 * Convert spectral data to float samples, applying all supported tools as appropriate.
 */
D
Diego Biurrun 已提交
1884 1885
static void spectral_to_sample(AACContext *ac)
{
1886 1887
    int i, type;
    for (type = 3; type >= 0; type--) {
1888
        for (i = 0; i < MAX_ELEM_ID; i++) {
R
Robert Swain 已提交
1889
            ChannelElement *che = ac->che[type][i];
D
Diego Biurrun 已提交
1890 1891
            if (che) {
                if (type <= TYPE_CPE)
1892
                    apply_channel_coupling(ac, che, type, i, BEFORE_TNS, apply_dependent_coupling);
D
Diego Biurrun 已提交
1893
                if (che->ch[0].tns.present)
R
Robert Swain 已提交
1894
                    apply_tns(che->ch[0].coeffs, &che->ch[0].tns, &che->ch[0].ics, 1);
D
Diego Biurrun 已提交
1895
                if (che->ch[1].tns.present)
R
Robert Swain 已提交
1896
                    apply_tns(che->ch[1].coeffs, &che->ch[1].tns, &che->ch[1].ics, 1);
D
Diego Biurrun 已提交
1897
                if (type <= TYPE_CPE)
1898
                    apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMDCT, apply_dependent_coupling);
A
Alex Converse 已提交
1899
                if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT) {
1900
                    imdct_and_windowing(ac, &che->ch[0]);
A
Alex Converse 已提交
1901 1902 1903 1904 1905 1906
                    if (ac->m4ac.sbr > 0) {
                        ff_sbr_dequant(ac, &che->sbr, type == TYPE_CPE ? TYPE_CPE : TYPE_SCE);
                        ff_sbr_apply(ac, &che->sbr, 0, che->ch[0].ret, che->ch[0].ret);
                    }
                }
                if (type == TYPE_CPE) {
R
Robert Swain 已提交
1907
                    imdct_and_windowing(ac, &che->ch[1]);
A
Alex Converse 已提交
1908 1909 1910
                    if (ac->m4ac.sbr > 0)
                        ff_sbr_apply(ac, &che->sbr, 1, che->ch[1].ret, che->ch[1].ret);
                }
D
Diego Biurrun 已提交
1911
                if (type <= TYPE_CCE)
1912
                    apply_channel_coupling(ac, che, type, i, AFTER_IMDCT, apply_independent_coupling);
1913 1914 1915 1916 1917
            }
        }
    }
}

D
Diego Biurrun 已提交
1918 1919
static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
{
1920 1921 1922 1923 1924
    int size;
    AACADTSHeaderInfo hdr_info;

    size = ff_aac_parse_header(gb, &hdr_info);
    if (size > 0) {
1925
        if (ac->output_configured != OC_LOCKED && hdr_info.chan_config) {
1926 1927
            enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
            memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1928
            ac->m4ac.chan_config = hdr_info.chan_config;
1929 1930
            if (set_default_channel_config(ac, new_che_pos, hdr_info.chan_config))
                return -7;
1931
            if (output_configure(ac, ac->che_pos, new_che_pos, hdr_info.chan_config, OC_TRIAL_FRAME))
1932
                return -7;
1933 1934
        } else if (ac->output_configured != OC_LOCKED) {
            ac->output_configured = OC_NONE;
1935
        }
1936 1937
        if (ac->output_configured != OC_LOCKED)
            ac->m4ac.sbr = -1;
1938 1939 1940
        ac->m4ac.sample_rate     = hdr_info.sample_rate;
        ac->m4ac.sampling_index  = hdr_info.sampling_index;
        ac->m4ac.object_type     = hdr_info.object_type;
1941 1942
        if (!ac->avccontext->sample_rate)
            ac->avccontext->sample_rate = hdr_info.sample_rate;
A
Alex Converse 已提交
1943 1944 1945 1946
        if (hdr_info.num_aac_frames == 1) {
            if (!hdr_info.crc_absent)
                skip_bits(gb, 16);
        } else {
1947
            av_log_missing_feature(ac->avccontext, "More than one AAC RDB per ADTS frame is", 0);
A
Alex Converse 已提交
1948 1949
            return -1;
        }
1950
    }
1951 1952 1953
    return size;
}

D
Diego Biurrun 已提交
1954 1955 1956
static int aac_decode_frame(AVCodecContext *avccontext, void *data,
                            int *data_size, AVPacket *avpkt)
{
1957 1958
    const uint8_t *buf = avpkt->data;
    int buf_size = avpkt->size;
D
Diego Biurrun 已提交
1959
    AACContext *ac = avccontext->priv_data;
A
Alex Converse 已提交
1960
    ChannelElement *che = NULL, *che_prev = NULL;
1961
    GetBitContext gb;
A
Alex Converse 已提交
1962
    enum RawDataBlockType elem_type, elem_type_prev = TYPE_END;
1963
    int err, elem_id, data_size_tmp;
1964
    int buf_consumed;
1965
    int samples = 1024, multiplier;
1966

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

1969
    if (show_bits(&gb, 12) == 0xfff) {
1970
        if (parse_adts_frame_header(ac, &gb) < 0) {
1971 1972 1973
            av_log(avccontext, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
            return -1;
        }
1974
        if (ac->m4ac.sampling_index > 12) {
1975 1976 1977
            av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
            return -1;
        }
1978 1979
    }

1980 1981 1982 1983
    // parse
    while ((elem_type = get_bits(&gb, 3)) != TYPE_END) {
        elem_id = get_bits(&gb, 4);

D
Diego Biurrun 已提交
1984
        if (elem_type < TYPE_DSE && !(che=get_che(ac, elem_type, elem_id))) {
1985 1986
            av_log(ac->avccontext, AV_LOG_ERROR, "channel element %d.%d is not allocated\n", elem_type, elem_id);
            return -1;
1987 1988 1989 1990 1991
        }

        switch (elem_type) {

        case TYPE_SCE:
1992
            err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1993 1994 1995
            break;

        case TYPE_CPE:
1996
            err = decode_cpe(ac, &gb, che);
1997 1998 1999
            break;

        case TYPE_CCE:
2000
            err = decode_cce(ac, &gb, che);
2001 2002 2003
            break;

        case TYPE_LFE:
2004
            err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
2005 2006 2007
            break;

        case TYPE_DSE:
2008
            err = skip_data_stream_element(ac, &gb);
2009 2010
            break;

D
Diego Biurrun 已提交
2011
        case TYPE_PCE: {
2012 2013
            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 已提交
2014
            if ((err = decode_pce(ac, new_che_pos, &gb)))
2015
                break;
2016
            if (ac->output_configured > OC_TRIAL_PCE)
2017 2018 2019
                av_log(avccontext, AV_LOG_ERROR,
                       "Not evaluating a further program_config_element as this construct is dubious at best.\n");
            else
2020
                err = output_configure(ac, ac->che_pos, new_che_pos, 0, OC_TRIAL_PCE);
2021 2022 2023 2024 2025 2026
            break;
        }

        case TYPE_FIL:
            if (elem_id == 15)
                elem_id += get_bits(&gb, 8) - 1;
2027 2028 2029 2030
            if (get_bits_left(&gb) < 8 * elem_id) {
                    av_log(avccontext, AV_LOG_ERROR, overread_err);
                    return -1;
            }
2031
            while (elem_id > 0)
A
Alex Converse 已提交
2032
                elem_id -= decode_extension_payload(ac, &gb, elem_id, che_prev, elem_type_prev);
2033 2034 2035 2036 2037 2038 2039 2040
            err = 0; /* FIXME */
            break;

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

A
Alex Converse 已提交
2041 2042 2043
        che_prev       = che;
        elem_type_prev = elem_type;

D
Diego Biurrun 已提交
2044
        if (err)
2045
            return err;
2046 2047 2048 2049 2050

        if (get_bits_left(&gb) < 3) {
            av_log(avccontext, AV_LOG_ERROR, overread_err);
            return -1;
        }
2051 2052 2053 2054
    }

    spectral_to_sample(ac);

A
Alex Converse 已提交
2055
    multiplier = (ac->m4ac.sbr == 1) ? ac->m4ac.ext_sample_rate > ac->m4ac.sample_rate : 0;
2056 2057 2058 2059 2060 2061
    samples <<= multiplier;
    if (ac->output_configured < OC_LOCKED) {
        avccontext->sample_rate = ac->m4ac.sample_rate << multiplier;
        avccontext->frame_size = samples;
    }

A
Alex Converse 已提交
2062
    data_size_tmp = samples * avccontext->channels * sizeof(int16_t);
D
Diego Biurrun 已提交
2063
    if (*data_size < data_size_tmp) {
2064 2065 2066 2067 2068 2069 2070
        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;

A
Alex Converse 已提交
2071
    ac->dsp.float_to_int16_interleave(data, (const float **)ac->output_data, samples, avccontext->channels);
2072

2073 2074 2075
    if (ac->output_configured)
        ac->output_configured = OC_LOCKED;

2076 2077
    buf_consumed = (get_bits_count(&gb) + 7) >> 3;
    return buf_size > buf_consumed ? buf_consumed : buf_size;
2078 2079
}

D
Diego Biurrun 已提交
2080 2081 2082
static av_cold int aac_decode_close(AVCodecContext *avccontext)
{
    AACContext *ac = avccontext->priv_data;
2083
    int i, type;
2084

2085
    for (i = 0; i < MAX_ELEM_ID; i++) {
A
Alex Converse 已提交
2086 2087 2088
        for (type = 0; type < 4; type++) {
            if (ac->che[type][i])
                ff_aac_sbr_ctx_close(&ac->che[type][i]->sbr);
2089
            av_freep(&ac->che[type][i]);
A
Alex Converse 已提交
2090
        }
2091 2092 2093 2094
    }

    ff_mdct_end(&ac->mdct);
    ff_mdct_end(&ac->mdct_small);
D
Diego Biurrun 已提交
2095
    return 0;
2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107
}

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"),
2108
    .sample_fmts = (const enum SampleFormat[]) {
D
Diego Biurrun 已提交
2109 2110
        SAMPLE_FMT_S16,SAMPLE_FMT_NONE
    },
2111
    .channel_layouts = aac_channel_layout,
2112
};