ac3dec.c 54.5 KB
Newer Older
1 2
/*
 * AC-3 Audio Decoder
3 4
 * This code was developed as part of Google Summer of Code 2006.
 * E-AC-3 support was added as part of Google Summer of Code 2007.
5
 *
6
 * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com)
7
 * Copyright (c) 2007-2008 Bartlomiej Wolowiec <bartek.wolowiec@gmail.com>
8
 * Copyright (c) 2007 Justin Ruggles <justin.ruggles@gmail.com>
9
 *
10
 * This file is part of FFmpeg.
11
 *
12
 * FFmpeg is free software; you can redistribute it and/or
13
 * modify it under the terms of the GNU Lesser General Public
14
 * License as published by the Free Software Foundation; either
15
 * version 2.1 of the License, or (at your option) any later version.
16
 *
17
 * FFmpeg is distributed in the hope that it will be useful,
18 19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20
 * Lesser General Public License for more details.
21
 *
22
 * You should have received a copy of the GNU Lesser General Public
23
 * License along with FFmpeg; if not, write to the Free Software
24 25 26 27 28 29 30 31
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#include <stdio.h>
#include <stddef.h>
#include <math.h>
#include <string.h>

32
#include "libavutil/crc.h"
33
#include "libavutil/opt.h"
34
#include "internal.h"
35
#include "aac_ac3_parser.h"
36
#include "ac3_parser.h"
37
#include "ac3dec.h"
38
#include "ac3dec_data.h"
39
#include "kbdwin.h"
40

41 42 43 44 45
/**
 * table for ungrouping 3 values in 7 bits.
 * used for exponents and bap=2 mantissas
 */
static uint8_t ungroup_3_in_7_bits_tab[128][3];
46 47


48
/** tables for ungrouping mantissas */
49 50 51 52 53
static int b1_mantissas[32][3];
static int b2_mantissas[128][3];
static int b3_mantissas[8];
static int b4_mantissas[128][2];
static int b5_mantissas[16];
54

55 56 57 58
/**
 * Quantization table: levels for symmetric. bits for asymmetric.
 * reference: Table 7.18 Mapping of bap to Quantizer
 */
59
static const uint8_t quantization_tab[16] = {
60 61 62
    0, 3, 5, 7, 11, 15,
    5, 6, 7, 8, 9, 10, 11, 12, 14, 16
};
63

64
/** dynamic range table. converts codes to scale factors. */
65
static float dynamic_range_tab[256];
66

67
/** Adjustments in dB gain */
68 69 70
static const float gain_levels[9] = {
    LEVEL_PLUS_3DB,
    LEVEL_PLUS_1POINT5DB,
71
    LEVEL_ONE,
72
    LEVEL_MINUS_1POINT5DB,
73 74 75
    LEVEL_MINUS_3DB,
    LEVEL_MINUS_4POINT5DB,
    LEVEL_MINUS_6DB,
76
    LEVEL_ZERO,
77 78
    LEVEL_MINUS_9DB
};
79

80 81 82 83 84 85 86 87 88 89 90 91
/**
 * Table for center mix levels
 * reference: Section 5.4.2.4 cmixlev
 */
static const uint8_t center_levels[4] = { 4, 5, 6, 5 };

/**
 * Table for surround mix levels
 * reference: Section 5.4.2.5 surmixlev
 */
static const uint8_t surround_levels[4] = { 4, 6, 7, 6 };

92 93 94 95 96
/**
 * Table for default stereo downmixing coefficients
 * reference: Section 7.8.2 Downmixing Into Two Channels
 */
static const uint8_t ac3_default_coeffs[8][5][2] = {
97 98 99 100 101 102 103 104
    { { 2, 7 }, { 7, 2 },                               },
    { { 4, 4 },                                         },
    { { 2, 7 }, { 7, 2 },                               },
    { { 2, 7 }, { 5, 5 }, { 7, 2 },                     },
    { { 2, 7 }, { 7, 2 }, { 6, 6 },                     },
    { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 },           },
    { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 },           },
    { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
105
};
106

107 108 109 110 111
/**
 * Symmetrical Dequantization
 * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
 *            Tables 7.19 to 7.23
 */
112
static inline int
113
symmetric_dequant(int code, int levels)
114
{
115
    return ((code - (levels >> 1)) << 24) / levels;
116 117
}

118 119 120
/*
 * Initialize tables at runtime.
 */
121
static av_cold void ac3_tables_init(void)
122
{
123
    int i;
124

125 126 127 128 129 130 131 132
    /* generate table for ungrouping 3 values in 7 bits
       reference: Section 7.1.3 Exponent Decoding */
    for(i=0; i<128; i++) {
        ungroup_3_in_7_bits_tab[i][0] =  i / 25;
        ungroup_3_in_7_bits_tab[i][1] = (i % 25) / 5;
        ungroup_3_in_7_bits_tab[i][2] = (i % 25) % 5;
    }

133 134 135 136
    /* generate grouped mantissa tables
       reference: Section 7.3.5 Ungrouping of Mantissas */
    for(i=0; i<32; i++) {
        /* bap=1 mantissas */
137 138 139
        b1_mantissas[i][0] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][0], 3);
        b1_mantissas[i][1] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][1], 3);
        b1_mantissas[i][2] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][2], 3);
140 141 142
    }
    for(i=0; i<128; i++) {
        /* bap=2 mantissas */
143 144 145
        b2_mantissas[i][0] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][0], 5);
        b2_mantissas[i][1] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][1], 5);
        b2_mantissas[i][2] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][2], 5);
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160

        /* bap=4 mantissas */
        b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
        b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
    }
    /* generate ungrouped mantissa tables
       reference: Tables 7.21 and 7.23 */
    for(i=0; i<7; i++) {
        /* bap=3 mantissas */
        b3_mantissas[i] = symmetric_dequant(i, 7);
    }
    for(i=0; i<15; i++) {
        /* bap=5 mantissas */
        b5_mantissas[i] = symmetric_dequant(i, 15);
    }
161

162 163 164 165
    /* generate dynamic range table
       reference: Section 7.7.1 Dynamic Range Control */
    for(i=0; i<256; i++) {
        int v = (i >> 5) - ((i >> 7) << 3) - 5;
166
        dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
167
    }
168 169
}

170

171 172 173
/**
 * AVCodec initialization
 */
174
static av_cold int ac3_decode_init(AVCodecContext *avctx)
175
{
176 177
    AC3DecodeContext *s = avctx->priv_data;
    s->avctx = avctx;
178

179 180 181 182 183
#if FF_API_DRC_SCALE
    if (avctx->drc_scale)
        s->drc_scale = avctx->drc_scale;
#endif

184
    ff_ac3_common_init();
185
    ac3_tables_init();
186 187
    ff_mdct_init(&s->imdct_256, 8, 1, 1.0);
    ff_mdct_init(&s->imdct_512, 9, 1, 1.0);
188
    ff_kbd_window_init(s->window, 5.0, 256);
189
    dsputil_init(&s->dsp, avctx);
190
    ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT);
191
    ff_fmt_convert_init(&s->fmt_conv, avctx);
192
    av_lfg_init(&s->dith_state, 0);
193

194
    /* set scale value for float to int16 conversion */
195 196 197 198 199 200 201
    if (avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT) {
        s->mul_bias = 1.0f;
        avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
    } else {
        s->mul_bias = 32767.0f;
        avctx->sample_fmt = AV_SAMPLE_FMT_S16;
    }
202

203 204 205 206 207 208
    /* allow downmixing to stereo or mono */
    if (avctx->channels > 0 && avctx->request_channels > 0 &&
            avctx->request_channels < avctx->channels &&
            avctx->request_channels <= 2) {
        avctx->channels = avctx->request_channels;
    }
209
    s->downmixed = 1;
210

211
    return 0;
212 213
}

214
/**
215
 * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
216
 * GetBitContext within AC3DecodeContext must point to
217
 * the start of the synchronized AC-3 bitstream.
218
 */
219
static int ac3_parse_header(AC3DecodeContext *s)
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
{
    GetBitContext *gbc = &s->gbc;
    int i;

    /* read the rest of the bsi. read twice for dual mono mode. */
    i = !(s->channel_mode);
    do {
        skip_bits(gbc, 5); // skip dialog normalization
        if (get_bits1(gbc))
            skip_bits(gbc, 8); //skip compression
        if (get_bits1(gbc))
            skip_bits(gbc, 8); //skip language code
        if (get_bits1(gbc))
            skip_bits(gbc, 7); //skip audio production information
    } while (i--);

    skip_bits(gbc, 2); //skip copyright bit and original bitstream bit

    /* skip the timecodes (or extra bitstream information for Alternate Syntax)
       TODO: read & use the xbsi1 downmix levels */
    if (get_bits1(gbc))
        skip_bits(gbc, 14); //skip timecode1 / xbsi1
    if (get_bits1(gbc))
        skip_bits(gbc, 14); //skip timecode2 / xbsi2

    /* skip additional bitstream info */
    if (get_bits1(gbc)) {
        i = get_bits(gbc, 6);
        do {
            skip_bits(gbc, 8);
        } while(i--);
    }

    return 0;
}

/**
257
 * Common function to parse AC-3 or E-AC-3 frame header
258 259
 */
static int parse_frame_header(AC3DecodeContext *s)
260
{
261
    AC3HeaderInfo hdr;
262
    int err;
263

264
    err = avpriv_ac3_parse_header(&s->gbc, &hdr);
265 266 267 268
    if(err)
        return err;

    /* get decoding parameters from header info */
269
    s->bit_alloc_params.sr_code     = hdr.sr_code;
270
    s->bitstream_mode               = hdr.bitstream_mode;
271
    s->channel_mode                 = hdr.channel_mode;
272
    s->channel_layout               = hdr.channel_layout;
273
    s->lfe_on                       = hdr.lfe_on;
274
    s->bit_alloc_params.sr_shift    = hdr.sr_shift;
275
    s->sample_rate                  = hdr.sample_rate;
276 277 278 279 280
    s->bit_rate                     = hdr.bit_rate;
    s->channels                     = hdr.channels;
    s->fbw_channels                 = s->channels - s->lfe_on;
    s->lfe_ch                       = s->fbw_channels + 1;
    s->frame_size                   = hdr.frame_size;
281 282
    s->center_mix_level             = hdr.center_mix_level;
    s->surround_mix_level           = hdr.surround_mix_level;
283
    s->num_blocks                   = hdr.num_blocks;
284
    s->frame_type                   = hdr.frame_type;
285
    s->substreamid                  = hdr.substreamid;
286

287 288 289 290 291 292 293
    if(s->lfe_on) {
        s->start_freq[s->lfe_ch] = 0;
        s->end_freq[s->lfe_ch] = 7;
        s->num_exp_groups[s->lfe_ch] = 2;
        s->channel_in_cpl[s->lfe_ch] = 0;
    }

294 295 296 297 298 299 300 301 302 303 304
    if (hdr.bitstream_id <= 10) {
        s->eac3                  = 0;
        s->snr_offset_strategy   = 2;
        s->block_switch_syntax   = 1;
        s->dither_flag_syntax    = 1;
        s->bit_allocation_syntax = 1;
        s->fast_gain_syntax      = 0;
        s->first_cpl_leak        = 0;
        s->dba_syntax            = 1;
        s->skip_syntax           = 1;
        memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
Justin Ruggles's avatar
Justin Ruggles committed
305
        return ac3_parse_header(s);
306
    } else if (CONFIG_EAC3_DECODER) {
307 308
        s->eac3 = 1;
        return ff_eac3_parse_header(s);
309 310 311
    } else {
        av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
        return -1;
312
    }
313 314 315 316 317 318 319 320 321
}

/**
 * Set stereo downmixing coefficients based on frame header info.
 * reference: Section 7.8.2 Downmixing Into Two Channels
 */
static void set_downmix_coeffs(AC3DecodeContext *s)
{
    int i;
322 323
    float cmix = gain_levels[center_levels[s->center_mix_level]];
    float smix = gain_levels[surround_levels[s->surround_mix_level]];
Loren Merritt's avatar
Loren Merritt committed
324
    float norm0, norm1;
325

326 327 328
    for(i=0; i<s->fbw_channels; i++) {
        s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
        s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
329
    }
330
    if(s->channel_mode > 1 && s->channel_mode & 1) {
331
        s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
332
    }
333 334
    if(s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
        int nf = s->channel_mode - 2;
335
        s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
336
    }
337 338
    if(s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
        int nf = s->channel_mode - 4;
339
        s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
340
    }
341

Loren Merritt's avatar
Loren Merritt committed
342 343
    /* renormalize */
    norm0 = norm1 = 0.0;
344
    for(i=0; i<s->fbw_channels; i++) {
Loren Merritt's avatar
Loren Merritt committed
345 346 347 348 349 350 351 352 353 354 355 356 357
        norm0 += s->downmix_coeffs[i][0];
        norm1 += s->downmix_coeffs[i][1];
    }
    norm0 = 1.0f / norm0;
    norm1 = 1.0f / norm1;
    for(i=0; i<s->fbw_channels; i++) {
        s->downmix_coeffs[i][0] *= norm0;
        s->downmix_coeffs[i][1] *= norm1;
    }

    if(s->output_mode == AC3_CHMODE_MONO) {
        for(i=0; i<s->fbw_channels; i++)
            s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] + s->downmix_coeffs[i][1]) * LEVEL_MINUS_3DB;
358
    }
359 360
}

361
/**
362 363
 * Decode the grouped exponents according to exponent strategy.
 * reference: Section 7.1.3 Exponent Decoding
364
 */
365
static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
366
                            uint8_t absexp, int8_t *dexps)
367
{
368
    int i, j, grp, group_size;
369 370 371 372
    int dexp[256];
    int expacc, prevexp;

    /* unpack groups */
373
    group_size = exp_strategy + (exp_strategy == EXP_D45);
374
    for(grp=0,i=0; grp<ngrps; grp++) {
375
        expacc = get_bits(gbc, 7);
376 377 378
        dexp[i++] = ungroup_3_in_7_bits_tab[expacc][0];
        dexp[i++] = ungroup_3_in_7_bits_tab[expacc][1];
        dexp[i++] = ungroup_3_in_7_bits_tab[expacc][2];
379
    }
380

381 382
    /* convert to absolute exps and expand groups */
    prevexp = absexp;
383
    for(i=0,j=0; i<ngrps*3; i++) {
384
        prevexp += dexp[i] - 2;
385
        if (prevexp > 24U)
386
            return -1;
387 388 389 390 391
        switch (group_size) {
            case 4: dexps[j++] = prevexp;
                    dexps[j++] = prevexp;
            case 2: dexps[j++] = prevexp;
            case 1: dexps[j++] = prevexp;
392
        }
393
    }
394
    return 0;
395 396
}

397
/**
398
 * Generate transform coefficients for each coupled channel in the coupling
399 400 401
 * range using the coupling coefficients and coupling coordinates.
 * reference: Section 7.4.3 Coupling Coordinate Format
 */
402
static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
403
{
404
    int bin, band, ch;
405 406 407

    bin = s->start_freq[CPL_CH];
    for (band = 0; band < s->num_cpl_bands; band++) {
408
        int band_start = bin;
409
        int band_end = bin + s->cpl_band_sizes[band];
410 411
        for (ch = 1; ch <= s->fbw_channels; ch++) {
            if (s->channel_in_cpl[ch]) {
412
                int cpl_coord = s->cpl_coords[ch][band] << 5;
413
                for (bin = band_start; bin < band_end; bin++) {
414
                    s->fixed_coeffs[ch][bin] = MULH(s->fixed_coeffs[CPL_CH][bin] << 4, cpl_coord);
415 416 417 418
                }
                if (ch == 2 && s->phase_flags[band]) {
                    for (bin = band_start; bin < band_end; bin++)
                        s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
419
                }
420
            }
421
        }
422
        bin = band_end;
423 424 425
    }
}

426 427 428 429
/**
 * Grouped mantissas for 3-level 5-level and 11-level quantization
 */
typedef struct {
430 431 432 433 434 435
    int b1_mant[2];
    int b2_mant[2];
    int b4_mant;
    int b1;
    int b2;
    int b4;
436 437
} mant_groups;

438
/**
439
 * Decode the transform coefficients for a particular channel
440 441
 * reference: Section 7.3 Quantization and Decoding of Mantissas
 */
442
static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
443
{
444 445 446 447 448
    int start_freq = s->start_freq[ch_index];
    int end_freq = s->end_freq[ch_index];
    uint8_t *baps = s->bap[ch_index];
    int8_t *exps = s->dexps[ch_index];
    int *coeffs = s->fixed_coeffs[ch_index];
449
    int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
450
    GetBitContext *gbc = &s->gbc;
451
    int freq;
452

453 454 455 456
    for(freq = start_freq; freq < end_freq; freq++){
        int bap = baps[freq];
        int mantissa;
        switch(bap){
457
            case 0:
458
                if (dither)
459
                    mantissa = (av_lfg_get(&s->dith_state) & 0x7FFFFF) - 0x400000;
460 461
                else
                    mantissa = 0;
462
                break;
463
            case 1:
464 465 466 467 468 469 470 471 472 473
                if(m->b1){
                    m->b1--;
                    mantissa = m->b1_mant[m->b1];
                }
                else{
                    int bits      = get_bits(gbc, 5);
                    mantissa      = b1_mantissas[bits][0];
                    m->b1_mant[1] = b1_mantissas[bits][1];
                    m->b1_mant[0] = b1_mantissas[bits][2];
                    m->b1         = 2;
474
                }
475
                break;
476
            case 2:
477 478 479 480 481 482 483 484 485 486
                if(m->b2){
                    m->b2--;
                    mantissa = m->b2_mant[m->b2];
                }
                else{
                    int bits      = get_bits(gbc, 7);
                    mantissa      = b2_mantissas[bits][0];
                    m->b2_mant[1] = b2_mantissas[bits][1];
                    m->b2_mant[0] = b2_mantissas[bits][2];
                    m->b2         = 2;
487
                }
488
                break;
489
            case 3:
490
                mantissa = b3_mantissas[get_bits(gbc, 3)];
491
                break;
492
            case 4:
493 494 495 496 497 498 499 500 501
                if(m->b4){
                    m->b4 = 0;
                    mantissa = m->b4_mant;
                }
                else{
                    int bits   = get_bits(gbc, 7);
                    mantissa   = b4_mantissas[bits][0];
                    m->b4_mant = b4_mantissas[bits][1];
                    m->b4      = 1;
502
                }
503
                break;
504
            case 5:
505
                mantissa = b5_mantissas[get_bits(gbc, 4)];
506
                break;
507 508
            default: /* 6 to 15 */
                /* Shift mantissa and sign-extend it. */
509 510
                mantissa = get_sbits(gbc, quantization_tab[bap]);
                mantissa <<= 24 - quantization_tab[bap];
511
                break;
512
        }
513
        coeffs[freq] = mantissa >> exps[freq];
514 515 516
    }
}

517
/**
518 519
 * Remove random dithering from coupling range coefficients with zero-bit
 * mantissas for coupled channels which do not use dithering.
520 521
 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
 */
522
static void remove_dithering(AC3DecodeContext *s) {
523 524
    int ch, i;

525
    for(ch=1; ch<=s->fbw_channels; ch++) {
526 527 528 529
        if(!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
            for(i = s->start_freq[CPL_CH]; i<s->end_freq[CPL_CH]; i++) {
                if(!s->bap[CPL_CH][i])
                    s->fixed_coeffs[ch][i] = 0;
530 531 532 533 534
            }
        }
    }
}

535
static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch,
536 537 538
                                    mant_groups *m)
{
    if (!s->channel_uses_aht[ch]) {
539
        ac3_decode_transform_coeffs_ch(s, ch, m);
540 541 542 543
    } else {
        /* if AHT is used, mantissas for all blocks are encoded in the first
           block of the frame. */
        int bin;
544
        if (!blk && CONFIG_EAC3_DECODER)
545
            ff_eac3_decode_transform_coeffs_aht_ch(s, ch);
546
        for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
547
            s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
548 549 550 551
        }
    }
}

552
/**
553
 * Decode the transform coefficients.
554
 */
555
static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
556
{
557
    int ch, end;
558
    int got_cplchan = 0;
559 560
    mant_groups m;

561
    m.b1 = m.b2 = m.b4 = 0;
562

563
    for (ch = 1; ch <= s->channels; ch++) {
564
        /* transform coefficients for full-bandwidth channel */
565
        decode_transform_coeffs_ch(s, blk, ch, &m);
566 567
        /* tranform coefficients for coupling channel come right after the
           coefficients for the first coupled channel*/
568
        if (s->channel_in_cpl[ch])  {
569
            if (!got_cplchan) {
570
                decode_transform_coeffs_ch(s, blk, CPL_CH, &m);
571
                calc_transform_coeffs_cpl(s);
572 573
                got_cplchan = 1;
            }
574
            end = s->end_freq[CPL_CH];
575
        } else {
576
            end = s->end_freq[ch];
577
        }
578
        do
579
            s->fixed_coeffs[ch][end] = 0;
580 581
        while(++end < 256);
    }
582

583
    /* zero the dithered coefficients for appropriate channels */
Justin Ruggles's avatar
Justin Ruggles committed
584
    remove_dithering(s);
585 586
}

587
/**
588
 * Stereo rematrixing.
589 590
 * reference: Section 7.5.4 Rematrixing : Decoding Technique
 */
591
static void do_rematrixing(AC3DecodeContext *s)
592
{
593
    int bnd, i;
594 595
    int end, bndend;

596
    end = FFMIN(s->end_freq[1], s->end_freq[2]);
597

598 599
    for(bnd=0; bnd<s->num_rematrixing_bands; bnd++) {
        if(s->rematrixing_flags[bnd]) {
600
            bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd+1]);
601
            for(i=ff_ac3_rematrix_band_tab[bnd]; i<bndend; i++) {
602
                int tmp0 = s->fixed_coeffs[1][i];
603
                s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
604
                s->fixed_coeffs[2][i]  = tmp0 - s->fixed_coeffs[2][i];
605 606
            }
        }
607 608
    }
}
609

610 611 612 613 614
/**
 * Inverse MDCT Transform.
 * Convert frequency domain coefficients to time-domain audio samples.
 * reference: Section 7.9.4 Transformation Equations
 */
615
static inline void do_imdct(AC3DecodeContext *s, int channels)
616
{
Justin Ruggles's avatar
Justin Ruggles committed
617
    int ch;
618

619
    for (ch=1; ch<=channels; ch++) {
620
        if (s->block_switch[ch]) {
Loren Merritt's avatar
Loren Merritt committed
621 622 623 624
            int i;
            float *x = s->tmp_output+128;
            for(i=0; i<128; i++)
                x[i] = s->transform_coeffs[ch][2*i];
625
            s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x);
626
            s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, 128);
Loren Merritt's avatar
Loren Merritt committed
627 628
            for(i=0; i<128; i++)
                x[i] = s->transform_coeffs[ch][2*i+1];
629
            s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch-1], x);
630
        } else {
631
            s->imdct_512.imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
632
            s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, 128);
Loren Merritt's avatar
Loren Merritt committed
633
            memcpy(s->delay[ch-1], s->tmp_output+128, 128*sizeof(float));
634
        }
635 636 637
    }
}

638
/**
639
 * Downmix the output to mono or stereo.
640
 */
Loren Merritt's avatar
Loren Merritt committed
641
void ff_ac3_downmix_c(float (*samples)[256], float (*matrix)[2], int out_ch, int in_ch, int len)
642 643
{
    int i, j;
644
    float v0, v1;
Loren Merritt's avatar
Loren Merritt committed
645 646
    if(out_ch == 2) {
        for(i=0; i<len; i++) {
Loren Merritt's avatar
Loren Merritt committed
647
            v0 = v1 = 0.0f;
Loren Merritt's avatar
Loren Merritt committed
648 649 650
            for(j=0; j<in_ch; j++) {
                v0 += samples[j][i] * matrix[j][0];
                v1 += samples[j][i] * matrix[j][1];
Loren Merritt's avatar
Loren Merritt committed
651 652 653
            }
            samples[0][i] = v0;
            samples[1][i] = v1;
654
        }
Loren Merritt's avatar
Loren Merritt committed
655 656
    } else if(out_ch == 1) {
        for(i=0; i<len; i++) {
Loren Merritt's avatar
Loren Merritt committed
657
            v0 = 0.0f;
Loren Merritt's avatar
Loren Merritt committed
658 659
            for(j=0; j<in_ch; j++)
                v0 += samples[j][i] * matrix[j][0];
Loren Merritt's avatar
Loren Merritt committed
660
            samples[0][i] = v0;
661 662 663 664
        }
    }
}

665 666 667 668 669
/**
 * Upmix delay samples from stereo to original channel layout.
 */
static void ac3_upmix_delay(AC3DecodeContext *s)
{
670
    int channel_data_size = sizeof(s->delay[0]);
671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692
    switch(s->channel_mode) {
        case AC3_CHMODE_DUALMONO:
        case AC3_CHMODE_STEREO:
            /* upmix mono to stereo */
            memcpy(s->delay[1], s->delay[0], channel_data_size);
            break;
        case AC3_CHMODE_2F2R:
            memset(s->delay[3], 0, channel_data_size);
        case AC3_CHMODE_2F1R:
            memset(s->delay[2], 0, channel_data_size);
            break;
        case AC3_CHMODE_3F2R:
            memset(s->delay[4], 0, channel_data_size);
        case AC3_CHMODE_3F1R:
            memset(s->delay[3], 0, channel_data_size);
        case AC3_CHMODE_3F:
            memcpy(s->delay[2], s->delay[1], channel_data_size);
            memset(s->delay[1], 0, channel_data_size);
            break;
    }
}

693 694
/**
 * Decode band structure for coupling, spectral extension, or enhanced coupling.
695 696 697 698
 * The band structure defines how many subbands are in each band.  For each
 * subband in the range, 1 means it is combined with the previous band, and 0
 * means that it starts a new band.
 *
699 700 701 702 703 704 705 706 707 708 709 710 711
 * @param[in] gbc bit reader context
 * @param[in] blk block number
 * @param[in] eac3 flag to indicate E-AC-3
 * @param[in] ecpl flag to indicate enhanced coupling
 * @param[in] start_subband subband number for start of range
 * @param[in] end_subband subband number for end of range
 * @param[in] default_band_struct default band structure table
 * @param[out] num_bands number of bands (optionally NULL)
 * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
 */
static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
                                  int ecpl, int start_subband, int end_subband,
                                  const uint8_t *default_band_struct,
712
                                  int *num_bands, uint8_t *band_sizes)
713
{
714
    int subbnd, bnd, n_subbands, n_bands=0;
715
    uint8_t bnd_sz[22];
716 717
    uint8_t coded_band_struct[22];
    const uint8_t *band_struct;
718 719 720 721 722 723

    n_subbands = end_subband - start_subband;

    /* decode band structure from bitstream or use default */
    if (!eac3 || get_bits1(gbc)) {
        for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
724
            coded_band_struct[subbnd] = get_bits1(gbc);
725
        }
726
        band_struct = coded_band_struct;
727
    } else if (!blk) {
728 729 730 731
        band_struct = &default_band_struct[start_subband+1];
    } else {
        /* no change in band structure */
        return;
732 733 734 735 736 737
    }

    /* calculate number of bands and band sizes based on band structure.
       note that the first 4 subbands in enhanced coupling span only 6 bins
       instead of 12. */
    if (num_bands || band_sizes ) {
738
        n_bands = n_subbands;
739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754
        bnd_sz[0] = ecpl ? 6 : 12;
        for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
            int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
            if (band_struct[subbnd-1]) {
                n_bands--;
                bnd_sz[bnd] += subbnd_size;
            } else {
                bnd_sz[++bnd] = subbnd_size;
            }
        }
    }

    /* set optional output params */
    if (num_bands)
        *num_bands = n_bands;
    if (band_sizes)
755
        memcpy(band_sizes, bnd_sz, n_bands);
756 757
}

758
/**
759
 * Decode a single audio block from the AC-3 bitstream.
760
 */
761
static int decode_audio_block(AC3DecodeContext *s, int blk)
762
{
763 764
    int fbw_channels = s->fbw_channels;
    int channel_mode = s->channel_mode;
765
    int i, bnd, seg, ch;
766 767
    int different_transforms;
    int downmix_output;
768
    int cpl_in_use;
769
    GetBitContext *gbc = &s->gbc;
770
    uint8_t bit_alloc_stages[AC3_MAX_CHANNELS];
771

772 773
    memset(bit_alloc_stages, 0, AC3_MAX_CHANNELS);

774
    /* block switch flags */
775
    different_transforms = 0;
776
    if (s->block_switch_syntax) {
Justin Ruggles's avatar
Justin Ruggles committed
777 778 779 780 781
        for (ch = 1; ch <= fbw_channels; ch++) {
            s->block_switch[ch] = get_bits1(gbc);
            if(ch > 1 && s->block_switch[ch] != s->block_switch[1])
                different_transforms = 1;
        }
782
    }
783

784
    /* dithering flags */
785
    if (s->dither_flag_syntax) {
Justin Ruggles's avatar
Justin Ruggles committed
786 787 788
        for (ch = 1; ch <= fbw_channels; ch++) {
            s->dither_flag[ch] = get_bits1(gbc);
        }
789
    }
790

791
    /* dynamic range */
792
    i = !(s->channel_mode);
793
    do {
794
        if(get_bits1(gbc)) {
795
            s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)]-1.0) *
796
                                  s->drc_scale)+1.0;
797
        } else if(blk == 0) {
798
            s->dynamic_range[i] = 1.0f;
799
        }
800
    } while(i--);
801

802 803
    /* spectral extension strategy */
    if (s->eac3 && (!blk || get_bits1(gbc))) {
804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855
        s->spx_in_use = get_bits1(gbc);
        if (s->spx_in_use) {
            int dst_start_freq, dst_end_freq, src_start_freq,
                start_subband, end_subband;

            /* determine which channels use spx */
            if (s->channel_mode == AC3_CHMODE_MONO) {
                s->channel_uses_spx[1] = 1;
            } else {
                for (ch = 1; ch <= fbw_channels; ch++)
                    s->channel_uses_spx[ch] = get_bits1(gbc);
            }

            /* get the frequency bins of the spx copy region and the spx start
               and end subbands */
            dst_start_freq = get_bits(gbc, 2);
            start_subband  = get_bits(gbc, 3) + 2;
            if (start_subband > 7)
                start_subband += start_subband - 7;
            end_subband    = get_bits(gbc, 3) + 5;
            if (end_subband   > 7)
                end_subband   += end_subband   - 7;
            dst_start_freq = dst_start_freq * 12 + 25;
            src_start_freq = start_subband  * 12 + 25;
            dst_end_freq   = end_subband    * 12 + 25;

            /* check validity of spx ranges */
            if (start_subband >= end_subband) {
                av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
                       "range (%d >= %d)\n", start_subband, end_subband);
                return -1;
            }
            if (dst_start_freq >= src_start_freq) {
                av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
                       "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
                return -1;
            }

            s->spx_dst_start_freq = dst_start_freq;
            s->spx_src_start_freq = src_start_freq;
            s->spx_dst_end_freq   = dst_end_freq;

            decode_band_structure(gbc, blk, s->eac3, 0,
                                  start_subband, end_subband,
                                  ff_eac3_default_spx_band_struct,
                                  &s->num_spx_bands,
                                  s->spx_band_sizes);
        } else {
            for (ch = 1; ch <= fbw_channels; ch++) {
                s->channel_uses_spx[ch] = 0;
                s->first_spx_coords[ch] = 1;
            }
856 857 858
        }
    }

859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902
    /* spectral extension coordinates */
    if (s->spx_in_use) {
        for (ch = 1; ch <= fbw_channels; ch++) {
            if (s->channel_uses_spx[ch]) {
                if (s->first_spx_coords[ch] || get_bits1(gbc)) {
                    float spx_blend;
                    int bin, master_spx_coord;

                    s->first_spx_coords[ch] = 0;
                    spx_blend = get_bits(gbc, 5) * (1.0f/32);
                    master_spx_coord = get_bits(gbc, 2) * 3;

                    bin = s->spx_src_start_freq;
                    for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
                        int bandsize;
                        int spx_coord_exp, spx_coord_mant;
                        float nratio, sblend, nblend, spx_coord;

                        /* calculate blending factors */
                        bandsize = s->spx_band_sizes[bnd];
                        nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
                        nratio = av_clipf(nratio, 0.0f, 1.0f);
                        nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3) to give unity variance
                        sblend = sqrtf(1.0f - nratio);
                        bin += bandsize;

                        /* decode spx coordinates */
                        spx_coord_exp  = get_bits(gbc, 4);
                        spx_coord_mant = get_bits(gbc, 2);
                        if (spx_coord_exp == 15) spx_coord_mant <<= 1;
                        else                     spx_coord_mant += 4;
                        spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
                        spx_coord = spx_coord_mant * (1.0f/(1<<23));

                        /* multiply noise and signal blending factors by spx coordinate */
                        s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
                        s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
                    }
                }
            } else {
                s->first_spx_coords[ch] = 1;
            }
        }
    }
903

904
    /* coupling strategy */
905
    if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
906
        memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
907
        if (!s->eac3)
Justin Ruggles's avatar
Justin Ruggles committed
908
            s->cpl_in_use[blk] = get_bits1(gbc);
909
        if (s->cpl_in_use[blk]) {
910
            /* coupling in use */
911
            int cpl_start_subband, cpl_end_subband;
912

913 914 915 916 917
            if (channel_mode < AC3_CHMODE_STEREO) {
                av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
                return -1;
            }

918 919 920
            /* check for enhanced coupling */
            if (s->eac3 && get_bits1(gbc)) {
                /* TODO: parse enhanced coupling strategy info */
921
                av_log_missing_feature(s->avctx, "Enhanced coupling", 1);
922 923 924
                return -1;
            }

925
            /* determine which channels are coupled */
926 927 928 929
            if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
                s->channel_in_cpl[1] = 1;
                s->channel_in_cpl[2] = 1;
            } else {
Justin Ruggles's avatar
Justin Ruggles committed
930 931
                for (ch = 1; ch <= fbw_channels; ch++)
                    s->channel_in_cpl[ch] = get_bits1(gbc);
932
            }
933

934
            /* phase flags in use */
935
            if (channel_mode == AC3_CHMODE_STEREO)
936
                s->phase_flags_in_use = get_bits1(gbc);
937

938
            /* coupling frequency range */
939
            cpl_start_subband = get_bits(gbc, 4);
940 941
            cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
                                              get_bits(gbc, 4) + 3;
942 943
            if (cpl_start_subband >= cpl_end_subband) {
                av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
944
                       cpl_start_subband, cpl_end_subband);
945
                return -1;
946
            }
947
            s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
948
            s->end_freq[CPL_CH]   = cpl_end_subband   * 12 + 37;
949

950 951 952
            decode_band_structure(gbc, blk, s->eac3, 0, cpl_start_subband,
                                  cpl_end_subband,
                                  ff_eac3_default_cpl_band_struct,
953
                                  &s->num_cpl_bands, s->cpl_band_sizes);
954
        } else {
955
            /* coupling not in use */
956
            for (ch = 1; ch <= fbw_channels; ch++) {
957
                s->channel_in_cpl[ch] = 0;
958 959
                s->first_cpl_coords[ch] = 1;
            }
960
            s->first_cpl_leak = s->eac3;
961
            s->phase_flags_in_use = 0;
962
        }
963 964
    } else if (!s->eac3) {
        if(!blk) {
Justin Ruggles's avatar
Justin Ruggles committed
965 966 967 968 969
            av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must be present in block 0\n");
            return -1;
        } else {
            s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
        }
970
    }
971
    cpl_in_use = s->cpl_in_use[blk];
972

973
    /* coupling coordinates */
974
    if (cpl_in_use) {
975
        int cpl_coords_exist = 0;
976

977
        for (ch = 1; ch <= fbw_channels; ch++) {
978
            if (s->channel_in_cpl[ch]) {
979
                if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(gbc)) {
980
                    int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
981
                    s->first_cpl_coords[ch] = 0;
982
                    cpl_coords_exist = 1;
983
                    master_cpl_coord = 3 * get_bits(gbc, 2);
984
                    for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
985 986
                        cpl_coord_exp = get_bits(gbc, 4);
                        cpl_coord_mant = get_bits(gbc, 4);
987
                        if (cpl_coord_exp == 15)
988
                            s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
989
                        else
990 991
                            s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
                        s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
992
                    }
993 994 995
                } else if (!blk) {
                    av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must be present in block 0\n");
                    return -1;
996
                }
997 998 999
            } else {
                /* channel not in coupling */
                s->first_cpl_coords[ch] = 1;
1000 1001
            }
        }
1002
        /* phase flags */
1003
        if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
1004
            for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1005
                s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
1006 1007
            }
        }
1008
    }
1009

1010
    /* stereo rematrixing strategy and band structure */
1011
    if (channel_mode == AC3_CHMODE_STEREO) {
1012
        if ((s->eac3 && !blk) || get_bits1(gbc)) {
1013
            s->num_rematrixing_bands = 4;
1014
            if (cpl_in_use && s->start_freq[CPL_CH] <= 61) {
1015
                s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
1016 1017 1018
            } else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
                s->num_rematrixing_bands--;
            }
1019 1020
            for(bnd=0; bnd<s->num_rematrixing_bands; bnd++)
                s->rematrixing_flags[bnd] = get_bits1(gbc);
1021
        } else if (!blk) {
1022 1023
            av_log(s->avctx, AV_LOG_WARNING, "Warning: new rematrixing strategy not present in block 0\n");
            s->num_rematrixing_bands = 0;
1024
        }
1025 1026
    }

1027
    /* exponent strategies for each channel */
1028
    for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1029
        if (!s->eac3)
1030
            s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
1031
        if(s->exp_strategy[blk][ch] != EXP_REUSE)
1032 1033 1034
            bit_alloc_stages[ch] = 3;
    }

1035
    /* channel bandwidth */
1036
    for (ch = 1; ch <= fbw_channels; ch++) {
1037
        s->start_freq[ch] = 0;
1038
        if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1039
            int group_size;
1040 1041 1042
            int prev = s->end_freq[ch];
            if (s->channel_in_cpl[ch])
                s->end_freq[ch] = s->start_freq[CPL_CH];
1043 1044
            else if (s->channel_uses_spx[ch])
                s->end_freq[ch] = s->spx_src_start_freq;
1045
            else {
1046
                int bandwidth_code = get_bits(gbc, 6);
1047
                if (bandwidth_code > 60) {
1048
                    av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
1049 1050
                    return -1;
                }
1051
                s->end_freq[ch] = bandwidth_code * 3 + 73;
1052
            }
1053
            group_size = 3 << (s->exp_strategy[blk][ch] - 1);
1054
            s->num_exp_groups[ch] = (s->end_freq[ch]+group_size-4) / group_size;
1055
            if(blk > 0 && s->end_freq[ch] != prev)
1056
                memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
1057
        }
1058
    }
1059
    if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
1060
        s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
1061
                                    (3 << (s->exp_strategy[blk][CPL_CH] - 1));
1062
    }
1063

1064
    /* decode exponents for each channel */
1065
    for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1066
        if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1067
            s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
1068
            if (decode_exponents(gbc, s->exp_strategy[blk][ch],
1069 1070
                                 s->num_exp_groups[ch], s->dexps[ch][0],
                                 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1071 1072 1073
                av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n");
                return -1;
            }
1074
            if(ch != CPL_CH && ch != s->lfe_ch)
1075
                skip_bits(gbc, 2); /* skip gainrng */
1076
        }
1077
    }
1078

1079
    /* bit allocation information */
1080
    if (s->bit_allocation_syntax) {
Justin Ruggles's avatar
Justin Ruggles committed
1081 1082 1083 1084 1085
        if (get_bits1(gbc)) {
            s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
            s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
            s->bit_alloc_params.slow_gain  = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
            s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
1086
            s->bit_alloc_params.floor  = ff_ac3_floor_tab[get_bits(gbc, 3)];
Justin Ruggles's avatar
Justin Ruggles committed
1087 1088 1089 1090 1091 1092
            for(ch=!cpl_in_use; ch<=s->channels; ch++)
                bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
        } else if (!blk) {
            av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must be present in block 0\n");
            return -1;
        }
1093
    }
1094

1095
    /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
1096 1097
    if(!s->eac3 || !blk){
        if(s->snr_offset_strategy && get_bits1(gbc)) {
Justin Ruggles's avatar
Justin Ruggles committed
1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109
            int snr = 0;
            int csnr;
            csnr = (get_bits(gbc, 6) - 15) << 4;
            for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
                /* snr offset */
                if (ch == i || s->snr_offset_strategy == 2)
                    snr = (csnr + get_bits(gbc, 4)) << 2;
                /* run at least last bit allocation stage if snr offset changes */
                if(blk && s->snr_offset[ch] != snr) {
                    bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
                }
                s->snr_offset[ch] = snr;
1110 1111 1112 1113

                /* fast gain (normal AC-3 only) */
                if (!s->eac3) {
                    int prev = s->fast_gain[ch];
Justin Ruggles's avatar
Justin Ruggles committed
1114
                    s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1115 1116 1117 1118
                    /* run last 2 bit allocation stages if fast gain changes */
                    if(blk && prev != s->fast_gain[ch])
                        bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
                }
Justin Ruggles's avatar
Justin Ruggles committed
1119
            }
1120
        } else if (!s->eac3 && !blk) {
Justin Ruggles's avatar
Justin Ruggles committed
1121 1122
            av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
            return -1;
1123
        }
1124
    }
1125

1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144
    /* fast gain (E-AC-3 only) */
    if (s->fast_gain_syntax && get_bits1(gbc)) {
        for (ch = !cpl_in_use; ch <= s->channels; ch++) {
            int prev = s->fast_gain[ch];
            s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
            /* run last 2 bit allocation stages if fast gain changes */
            if(blk && prev != s->fast_gain[ch])
                bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
        }
    } else if (s->eac3 && !blk) {
        for (ch = !cpl_in_use; ch <= s->channels; ch++)
            s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
    }

    /* E-AC-3 to AC-3 converter SNR offset */
    if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
        skip_bits(gbc, 10); // skip converter snr offset
    }

1145
    /* coupling leak information */
1146
    if (cpl_in_use) {
1147 1148 1149 1150 1151 1152 1153
        if (s->first_cpl_leak || get_bits1(gbc)) {
            int fl = get_bits(gbc, 3);
            int sl = get_bits(gbc, 3);
            /* run last 2 bit allocation stages for coupling channel if
               coupling leak changes */
            if(blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
                       sl != s->bit_alloc_params.cpl_slow_leak)) {
Justin Ruggles's avatar
Justin Ruggles committed
1154
                bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
1155 1156 1157 1158
            }
            s->bit_alloc_params.cpl_fast_leak = fl;
            s->bit_alloc_params.cpl_slow_leak = sl;
        } else if (!s->eac3 && !blk) {
Justin Ruggles's avatar
Justin Ruggles committed
1159 1160 1161
            av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must be present in block 0\n");
            return -1;
        }
1162
        s->first_cpl_leak = 0;
1163
    }
1164

1165
    /* delta bit allocation information */
1166
    if (s->dba_syntax && get_bits1(gbc)) {
1167
        /* delta bit allocation exists (strategy) */
1168
        for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1169 1170 1171
            s->dba_mode[ch] = get_bits(gbc, 2);
            if (s->dba_mode[ch] == DBA_RESERVED) {
                av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1172 1173
                return -1;
            }
1174
            bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1175
        }
1176
        /* channel delta offset, len and bit allocation */
1177
        for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1178
            if (s->dba_mode[ch] == DBA_NEW) {
1179 1180
                s->dba_nsegs[ch] = get_bits(gbc, 3) + 1;
                for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1181 1182 1183
                    s->dba_offsets[ch][seg] = get_bits(gbc, 5);
                    s->dba_lengths[ch][seg] = get_bits(gbc, 4);
                    s->dba_values[ch][seg] = get_bits(gbc, 3);
1184
                }
1185 1186
                /* run last 2 bit allocation stages if new dba values */
                bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1187
            }
1188
        }
1189
    } else if(blk == 0) {
1190 1191
        for(ch=0; ch<=s->channels; ch++) {
            s->dba_mode[ch] = DBA_NONE;
1192
        }
1193
    }
1194

1195
    /* Bit allocation */
1196
    for(ch=!cpl_in_use; ch<=s->channels; ch++) {
1197 1198
        if(bit_alloc_stages[ch] > 2) {
            /* Exponent mapping into PSD and PSD integration */
1199 1200 1201
            ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
                                      s->start_freq[ch], s->end_freq[ch],
                                      s->psd[ch], s->band_psd[ch]);
1202
        }
1203 1204 1205
        if(bit_alloc_stages[ch] > 1) {
            /* Compute excitation function, Compute masking curve, and
               Apply delta bit allocation */
1206
            if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1207 1208 1209 1210 1211
                                           s->start_freq[ch], s->end_freq[ch],
                                           s->fast_gain[ch], (ch == s->lfe_ch),
                                           s->dba_mode[ch], s->dba_nsegs[ch],
                                           s->dba_offsets[ch], s->dba_lengths[ch],
                                           s->dba_values[ch], s->mask[ch])) {
1212 1213 1214
                av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
                return -1;
            }
1215
        }
1216 1217
        if(bit_alloc_stages[ch] > 0) {
            /* Compute bit allocation */
1218 1219
            const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
                                     ff_eac3_hebap_tab : ff_ac3_bap_tab;
1220
            s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1221 1222 1223
                                      s->start_freq[ch], s->end_freq[ch],
                                      s->snr_offset[ch],
                                      s->bit_alloc_params.floor,
1224
                                      bap_tab, s->bap[ch]);
1225
        }
1226
    }
1227

1228
    /* unused dummy data */
1229
    if (s->skip_syntax && get_bits1(gbc)) {
1230
        int skipl = get_bits(gbc, 9);
1231
        while(skipl--)
1232
            skip_bits(gbc, 8);
1233
    }
1234

1235
    /* unpack the transform coefficients
1236
       this also uncouples channels if coupling is in use. */
1237
    decode_transform_coeffs(s, blk);
1238

1239 1240
    /* TODO: generate enhanced coupling coordinates and uncouple */

1241
    /* recover coefficients if rematrixing is in use */
1242 1243
    if(s->channel_mode == AC3_CHMODE_STEREO)
        do_rematrixing(s);
1244

1245
    /* apply scaling to coefficients (headroom, dynrng) */
1246
    for(ch=1; ch<=s->channels; ch++) {
1247
        float gain = s->mul_bias / 4194304.0f;
1248
        if(s->channel_mode == AC3_CHMODE_DUALMONO) {
1249
            gain *= s->dynamic_range[2-ch];
1250
        } else {
1251
            gain *= s->dynamic_range[0];
1252
        }
1253
        s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256);
1254
    }
1255

1256
    /* apply spectral extension to high frequency bins */
1257
    if (s->spx_in_use && CONFIG_EAC3_DECODER) {
1258 1259 1260
        ff_eac3_apply_spectral_extension(s);
    }

1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277
    /* downmix and MDCT. order depends on whether block switching is used for
       any channel in this block. this is because coefficients for the long
       and short transforms cannot be mixed. */
    downmix_output = s->channels != s->out_channels &&
                     !((s->output_mode & AC3_OUTPUT_LFEON) &&
                     s->fbw_channels == s->out_channels);
    if(different_transforms) {
        /* the delay samples have already been downmixed, so we upmix the delay
           samples in order to reconstruct all channels before downmixing. */
        if(s->downmixed) {
            s->downmixed = 0;
            ac3_upmix_delay(s);
        }

        do_imdct(s, s->channels);

        if(downmix_output) {
Loren Merritt's avatar
Loren Merritt committed
1278
            s->dsp.ac3_downmix(s->output, s->downmix_coeffs, s->out_channels, s->fbw_channels, 256);
1279 1280 1281
        }
    } else {
        if(downmix_output) {
Loren Merritt's avatar
Loren Merritt committed
1282
            s->dsp.ac3_downmix(s->transform_coeffs+1, s->downmix_coeffs, s->out_channels, s->fbw_channels, 256);
1283 1284
        }

1285
        if(downmix_output && !s->downmixed) {
1286
            s->downmixed = 1;
Loren Merritt's avatar
Loren Merritt committed
1287
            s->dsp.ac3_downmix(s->delay, s->downmix_coeffs, s->out_channels, s->fbw_channels, 128);
1288
        }
1289

1290
        do_imdct(s, s->out_channels);
1291 1292
    }

1293
    return 0;
1294 1295
}

1296 1297
/**
 * Decode a single AC-3 frame.
1298
 */
1299
static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
1300
                            AVPacket *avpkt)
1301
{
1302 1303
    const uint8_t *buf = avpkt->data;
    int buf_size = avpkt->size;
1304
    AC3DecodeContext *s = avctx->priv_data;
1305 1306
    float   *out_samples_flt = data;
    int16_t *out_samples_s16 = data;
1307
    int blk, ch, err;
1308
    int data_size_orig, data_size_tmp;
1309
    const uint8_t *channel_map;
1310
    const float *output[AC3_MAX_CHANNELS];
1311

Justin Ruggles's avatar
Justin Ruggles committed
1312 1313
    /* copy input buffer to decoder context to avoid reading past the end
       of the buffer, which can be caused by a damaged input stream. */
1314 1315 1316 1317 1318
    if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
        // seems to be byte-swapped AC-3
        int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
        s->dsp.bswap16_buf((uint16_t *)s->input_buffer, (const uint16_t *)buf, cnt);
    } else
1319
        memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1320 1321
    buf = s->input_buffer;
    /* initialize the GetBitContext with the start of valid AC-3 Frame */
1322
    init_get_bits(&s->gbc, buf, buf_size * 8);
1323

1324
    /* parse the syncinfo */
1325
    data_size_orig = *data_size;
1326
    *data_size = 0;
1327
    err = parse_frame_header(s);
1328

1329
    if (err) {
1330
        switch(err) {
1331
            case AAC_AC3_PARSE_ERROR_SYNC:
1332
                av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1333
                return -1;
1334
            case AAC_AC3_PARSE_ERROR_BSID:
1335 1336
                av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
                break;
1337
            case AAC_AC3_PARSE_ERROR_SAMPLE_RATE:
1338 1339
                av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
                break;
1340
            case AAC_AC3_PARSE_ERROR_FRAME_SIZE:
1341 1342
                av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
                break;
1343
            case AAC_AC3_PARSE_ERROR_FRAME_TYPE:
1344 1345 1346 1347 1348 1349
                /* skip frame if CRC is ok. otherwise use error concealment. */
                /* TODO: add support for substreams and dependent frames */
                if(s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) {
                    av_log(avctx, AV_LOG_ERROR, "unsupported frame type : skipping frame\n");
                    return s->frame_size;
                } else {
Justin Ruggles's avatar
Justin Ruggles committed
1350
                    av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1351
                }
1352
                break;
1353 1354 1355 1356
            default:
                av_log(avctx, AV_LOG_ERROR, "invalid header\n");
                break;
        }
1357 1358 1359 1360 1361
    } else {
        /* check that reported frame size fits in input buffer */
        if (s->frame_size > buf_size) {
            av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
            err = AAC_AC3_PARSE_ERROR_FRAME_SIZE;
1362
        } else if (avctx->err_recognition & AV_EF_CRCCHECK) {
1363 1364 1365 1366 1367 1368
            /* check for crc mismatch */
            if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) {
                av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
                err = AAC_AC3_PARSE_ERROR_CRC;
            }
        }
1369
    }
1370

1371 1372
    /* if frame is ok, set audio parameters */
    if (!err) {
Justin Ruggles's avatar
Justin Ruggles committed
1373 1374 1375 1376 1377
        avctx->sample_rate = s->sample_rate;
        avctx->bit_rate = s->bit_rate;

        /* channel config */
        s->out_channels = s->channels;
1378 1379 1380
        s->output_mode = s->channel_mode;
        if(s->lfe_on)
            s->output_mode |= AC3_OUTPUT_LFEON;
Justin Ruggles's avatar
Justin Ruggles committed
1381 1382 1383 1384
        if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
                avctx->request_channels < s->channels) {
            s->out_channels = avctx->request_channels;
            s->output_mode  = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
1385
            s->channel_layout = ff_ac3_channel_layout_tab[s->output_mode];
Justin Ruggles's avatar
Justin Ruggles committed
1386 1387
        }
        avctx->channels = s->out_channels;
1388
        avctx->channel_layout = s->channel_layout;
1389

1390 1391 1392 1393
        s->loro_center_mix_level   = gain_levels[  center_levels[s->  center_mix_level]];
        s->loro_surround_mix_level = gain_levels[surround_levels[s->surround_mix_level]];
        s->ltrt_center_mix_level   = LEVEL_MINUS_3DB;
        s->ltrt_surround_mix_level = LEVEL_MINUS_3DB;
Justin Ruggles's avatar
Justin Ruggles committed
1394 1395 1396 1397 1398
        /* set downmixing coefficients if needed */
        if(s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
                s->fbw_channels == s->out_channels)) {
            set_downmix_coeffs(s);
        }
1399 1400 1401 1402
    } else if (!s->out_channels) {
        s->out_channels = avctx->channels;
        if(s->out_channels < s->channels)
            s->output_mode  = s->out_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
Justin Ruggles's avatar
Justin Ruggles committed
1403
    }
1404 1405 1406 1407
    /* set audio service type based on bitstream mode for AC-3 */
    avctx->audio_service_type = s->bitstream_mode;
    if (s->bitstream_mode == 0x7 && s->channels > 1)
        avctx->audio_service_type = AV_AUDIO_SERVICE_TYPE_KARAOKE;
1408

1409
    /* decode the audio blocks */
1410
    channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
1411 1412
    for (ch = 0; ch < s->out_channels; ch++)
        output[ch] = s->output[channel_map[ch]];
1413
    data_size_tmp = s->num_blocks * 256 * avctx->channels;
1414
    data_size_tmp *= avctx->sample_fmt == AV_SAMPLE_FMT_FLT ? sizeof(*out_samples_flt) : sizeof(*out_samples_s16);
1415 1416 1417
    if (data_size_orig < data_size_tmp)
        return -1;
    *data_size = data_size_tmp;
1418
    for (blk = 0; blk < s->num_blocks; blk++) {
1419 1420
        if (!err && decode_audio_block(s, blk)) {
            av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
1421
            err = 1;
1422
        }
1423

1424
        if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT) {
1425 1426
            s->fmt_conv.float_interleave(out_samples_flt, output, 256,
                                         s->out_channels);
1427 1428
            out_samples_flt += 256 * s->out_channels;
        } else {
1429 1430 1431
            s->fmt_conv.float_to_int16_interleave(out_samples_s16, output, 256,
                                                  s->out_channels);
            out_samples_s16 += 256 * s->out_channels;
1432
        }
1433
    }
1434
    *data_size = s->num_blocks * 256 * avctx->channels *
1435
                 av_get_bytes_per_sample(avctx->sample_fmt);
1436
    return FFMIN(buf_size, s->frame_size);
1437
}
1438

1439 1440
/**
 * Uninitialize the AC-3 decoder.
1441
 */
1442
static av_cold int ac3_decode_end(AVCodecContext *avctx)
1443
{
1444
    AC3DecodeContext *s = avctx->priv_data;
1445 1446
    ff_mdct_end(&s->imdct_512);
    ff_mdct_end(&s->imdct_256);
1447

1448 1449 1450
    return 0;
}

1451 1452 1453
#define OFFSET(x) offsetof(AC3DecodeContext, x)
#define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
static const AVOption options[] = {
1454
    { "drc_scale", "percentage of dynamic range compression to apply", OFFSET(drc_scale), AV_OPT_TYPE_FLOAT, {1.0}, 0.0, 1.0, PAR },
1455

1456 1457 1458 1459 1460
{"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, 0, "dmix_mode"},
{"ltrt_cmixlev",   "Lt/Rt Center Mix Level",   OFFSET(ltrt_center_mix_level),    AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
{"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level),  AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
{"loro_cmixlev",   "Lo/Ro Center Mix Level",   OFFSET(loro_center_mix_level),    AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
{"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level),  AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
1461

1462 1463 1464 1465
    { NULL},
};

static const AVClass ac3_decoder_class = {
1466
    .class_name = "AC3 decoder",
1467 1468 1469 1470 1471
    .item_name  = av_default_item_name,
    .option     = options,
    .version    = LIBAVUTIL_VERSION_INT,
};

1472
AVCodec ff_ac3_decoder = {
1473
    .name = "ac3",
1474
    .type = AVMEDIA_TYPE_AUDIO,
1475 1476 1477 1478 1479
    .id = CODEC_ID_AC3,
    .priv_data_size = sizeof (AC3DecodeContext),
    .init = ac3_decode_init,
    .close = ac3_decode_end,
    .decode = ac3_decode_frame,
1480
    .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
1481 1482 1483
    .sample_fmts = (const enum AVSampleFormat[]) {
        AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE
    },
1484
    .priv_class = &ac3_decoder_class,
1485 1486
};

1487
#if CONFIG_EAC3_DECODER
1488 1489 1490 1491 1492 1493
static const AVClass eac3_decoder_class = {
    .class_name = "E-AC3 decoder",
    .item_name  = av_default_item_name,
    .option     = options,
    .version    = LIBAVUTIL_VERSION_INT,
};
1494
AVCodec ff_eac3_decoder = {
1495
    .name = "eac3",
1496
    .type = AVMEDIA_TYPE_AUDIO,
1497 1498 1499 1500 1501 1502
    .id = CODEC_ID_EAC3,
    .priv_data_size = sizeof (AC3DecodeContext),
    .init = ac3_decode_init,
    .close = ac3_decode_end,
    .decode = ac3_decode_frame,
    .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52B (AC-3, E-AC-3)"),
1503 1504 1505
    .sample_fmts = (const enum AVSampleFormat[]) {
        AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE
    },
1506
    .priv_class = &eac3_decoder_class,
1507
};
1508
#endif