~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/ac3dec.c

  • Committer: Bazaar Package Importer
  • Author(s): Lionel Le Folgoc, Andrew Starr-Bochicchio, Lionel Le Folgoc
  • Date: 2008-12-26 00:10:06 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20081226001006-2040ls9680bd1blt
Tags: 1.1.7-0.2ubuntu1
[ Andrew Starr-Bochicchio ]
* Merge from debian-multimedia (LP: #298547), Ubuntu Changes:
 - For ffmpeg-related build-deps, fix versionized dependencies
   as the ubuntu versioning is different than debian-multimedia's.

[ Lionel Le Folgoc ]
* LP: #311412 is fixed since the 1.1.7~rc1-0.1 revision.
* debian/patches/03_ffmpeg.diff: updated to fix FTBFS due to libswscale API
  change (cherry-pick from Gentoo #234383).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * AC-3 Audio Decoder
 
3
 * This code is developed as part of Google Summer of Code 2006 Program.
 
4
 *
 
5
 * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com).
 
6
 * Copyright (c) 2007 Justin Ruggles
 
7
 *
 
8
 * Portions of this code are derived from liba52
 
9
 * http://liba52.sourceforge.net
 
10
 * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
 
11
 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
 
12
 *
 
13
 * This file is part of FFmpeg.
 
14
 *
 
15
 * FFmpeg is free software; you can redistribute it and/or
 
16
 * modify it under the terms of the GNU General Public
 
17
 * License as published by the Free Software Foundation; either
 
18
 * version 2 of the License, or (at your option) any later version.
 
19
 *
 
20
 * FFmpeg is distributed in the hope that it will be useful,
 
21
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
22
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
23
 * General Public License for more details.
 
24
 *
 
25
 * You should have received a copy of the GNU General Public
 
26
 * License along with FFmpeg; if not, write to the Free Software
 
27
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
28
 */
 
29
 
 
30
#include <stdio.h>
 
31
#include <stddef.h>
 
32
#include <math.h>
 
33
#include <string.h>
 
34
 
 
35
#include "avcodec.h"
 
36
#include "ac3_parser.h"
 
37
#include "bitstream.h"
 
38
#include "crc.h"
 
39
#include "dsputil.h"
 
40
#include "random.h"
 
41
 
 
42
/** Maximum possible frame size when the specification limit is ignored */
 
43
#define AC3_MAX_FRAME_SIZE 21695
 
44
 
 
45
/**
 
46
 * Table of bin locations for rematrixing bands
 
47
 * reference: Section 7.5.2 Rematrixing : Frequency Band Definitions
 
48
 */
 
49
static const uint8_t rematrix_band_tab[5] = { 13, 25, 37, 61, 253 };
 
50
 
 
51
/** table for grouping exponents */
 
52
static uint8_t exp_ungroup_tab[128][3];
 
53
 
 
54
 
 
55
/** tables for ungrouping mantissas */
 
56
static int b1_mantissas[32][3];
 
57
static int b2_mantissas[128][3];
 
58
static int b3_mantissas[8];
 
59
static int b4_mantissas[128][2];
 
60
static int b5_mantissas[16];
 
61
 
 
62
/**
 
63
 * Quantization table: levels for symmetric. bits for asymmetric.
 
64
 * reference: Table 7.18 Mapping of bap to Quantizer
 
65
 */
 
66
static const uint8_t quantization_tab[16] = {
 
67
    0, 3, 5, 7, 11, 15,
 
68
    5, 6, 7, 8, 9, 10, 11, 12, 14, 16
 
69
};
 
70
 
 
71
/** dynamic range table. converts codes to scale factors. */
 
72
static float dynamic_range_tab[256];
 
73
 
 
74
/** Adjustments in dB gain */
 
75
#define LEVEL_MINUS_3DB         0.7071067811865476
 
76
#define LEVEL_MINUS_4POINT5DB   0.5946035575013605
 
77
#define LEVEL_MINUS_6DB         0.5000000000000000
 
78
#define LEVEL_MINUS_9DB         0.3535533905932738
 
79
#define LEVEL_ZERO              0.0000000000000000
 
80
#define LEVEL_ONE               1.0000000000000000
 
81
 
 
82
static const float gain_levels[6] = {
 
83
    LEVEL_ZERO,
 
84
    LEVEL_ONE,
 
85
    LEVEL_MINUS_3DB,
 
86
    LEVEL_MINUS_4POINT5DB,
 
87
    LEVEL_MINUS_6DB,
 
88
    LEVEL_MINUS_9DB
 
89
};
 
90
 
 
91
/**
 
92
 * Table for default stereo downmixing coefficients
 
93
 * reference: Section 7.8.2 Downmixing Into Two Channels
 
94
 */
 
95
static const uint8_t ac3_default_coeffs[8][5][2] = {
 
96
    { { 1, 0 }, { 0, 1 },                               },
 
97
    { { 2, 2 },                                         },
 
98
    { { 1, 0 }, { 0, 1 },                               },
 
99
    { { 1, 0 }, { 3, 3 }, { 0, 1 },                     },
 
100
    { { 1, 0 }, { 0, 1 }, { 4, 4 },                     },
 
101
    { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 5, 5 },           },
 
102
    { { 1, 0 }, { 0, 1 }, { 4, 0 }, { 0, 4 },           },
 
103
    { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 4, 0 }, { 0, 4 }, },
 
104
};
 
105
 
 
106
/* override ac3.h to include coupling channel */
 
107
#undef AC3_MAX_CHANNELS
 
108
#define AC3_MAX_CHANNELS 7
 
109
#define CPL_CH 0
 
110
 
 
111
#define AC3_OUTPUT_LFEON  8
 
112
 
 
113
typedef struct {
 
114
    int channel_mode;                       ///< channel mode (acmod)
 
115
    int block_switch[AC3_MAX_CHANNELS];     ///< block switch flags
 
116
    int dither_flag[AC3_MAX_CHANNELS];      ///< dither flags
 
117
    int dither_all;                         ///< true if all channels are dithered
 
118
    int cpl_in_use;                         ///< coupling in use
 
119
    int channel_in_cpl[AC3_MAX_CHANNELS];   ///< channel in coupling
 
120
    int phase_flags_in_use;                 ///< phase flags in use
 
121
    int phase_flags[18];                    ///< phase flags
 
122
    int cpl_band_struct[18];                ///< coupling band structure
 
123
    int num_rematrixing_bands;              ///< number of rematrixing bands
 
124
    int rematrixing_flags[4];               ///< rematrixing flags
 
125
    int exp_strategy[AC3_MAX_CHANNELS];     ///< exponent strategies
 
126
    int snr_offset[AC3_MAX_CHANNELS];       ///< signal-to-noise ratio offsets
 
127
    int fast_gain[AC3_MAX_CHANNELS];        ///< fast gain values (signal-to-mask ratio)
 
128
    int dba_mode[AC3_MAX_CHANNELS];         ///< delta bit allocation mode
 
129
    int dba_nsegs[AC3_MAX_CHANNELS];        ///< number of delta segments
 
130
    uint8_t dba_offsets[AC3_MAX_CHANNELS][8]; ///< delta segment offsets
 
131
    uint8_t dba_lengths[AC3_MAX_CHANNELS][8]; ///< delta segment lengths
 
132
    uint8_t dba_values[AC3_MAX_CHANNELS][8];  ///< delta values for each segment
 
133
 
 
134
    int sample_rate;                        ///< sample frequency, in Hz
 
135
    int bit_rate;                           ///< stream bit rate, in bits-per-second
 
136
    int frame_size;                         ///< current frame size, in bytes
 
137
 
 
138
    int channels;                           ///< number of total channels
 
139
    int fbw_channels;                       ///< number of full-bandwidth channels
 
140
    int lfe_on;                             ///< lfe channel in use
 
141
    int lfe_ch;                             ///< index of LFE channel
 
142
    int output_mode;                        ///< output channel configuration
 
143
    int out_channels;                       ///< number of output channels
 
144
 
 
145
    int center_mix_level;                   ///< Center mix level index
 
146
    int surround_mix_level;                 ///< Surround mix level index
 
147
    float downmix_coeffs[AC3_MAX_CHANNELS][2];  ///< stereo downmix coefficients
 
148
    float downmix_coeff_adjust[2];          ///< adjustment needed for each output channel when downmixing
 
149
    float dynamic_range[2];                 ///< dynamic range
 
150
    int   cpl_coords[AC3_MAX_CHANNELS][18]; ///< coupling coordinates
 
151
    int   num_cpl_bands;                    ///< number of coupling bands
 
152
    int   num_cpl_subbands;                 ///< number of coupling sub bands
 
153
    int   start_freq[AC3_MAX_CHANNELS];     ///< start frequency bin
 
154
    int   end_freq[AC3_MAX_CHANNELS];       ///< end frequency bin
 
155
    AC3BitAllocParameters bit_alloc_params; ///< bit allocation parameters
 
156
 
 
157
    int8_t  dexps[AC3_MAX_CHANNELS][256];   ///< decoded exponents
 
158
    uint8_t bap[AC3_MAX_CHANNELS][256];     ///< bit allocation pointers
 
159
    int16_t psd[AC3_MAX_CHANNELS][256];     ///< scaled exponents
 
160
    int16_t band_psd[AC3_MAX_CHANNELS][50]; ///< interpolated exponents
 
161
    int16_t mask[AC3_MAX_CHANNELS][50];     ///< masking curve values
 
162
 
 
163
    int fixed_coeffs[AC3_MAX_CHANNELS][256];    ///> fixed-point transform coefficients
 
164
    DECLARE_ALIGNED_16(float, transform_coeffs[AC3_MAX_CHANNELS][256]);  ///< transform coefficients
 
165
    int downmixed;                              ///< indicates if coeffs are currently downmixed
 
166
 
 
167
    /* For IMDCT. */
 
168
    MDCTContext imdct_512;                  ///< for 512 sample IMDCT
 
169
    MDCTContext imdct_256;                  ///< for 256 sample IMDCT
 
170
    DSPContext  dsp;                        ///< for optimization
 
171
    float       add_bias;                   ///< offset for float_to_int16 conversion
 
172
    float       mul_bias;                   ///< scaling for float_to_int16 conversion
 
173
 
 
174
    DECLARE_ALIGNED_16(float, output[AC3_MAX_CHANNELS][256]);       ///< output after imdct transform and windowing
 
175
    DECLARE_ALIGNED_16(short, int_output[AC3_MAX_CHANNELS-1][256]); ///< final 16-bit integer output
 
176
    DECLARE_ALIGNED_16(float, delay[AC3_MAX_CHANNELS][256]);        ///< delay - added to the next block
 
177
    DECLARE_ALIGNED_16(float, tmp_imdct[256]);                      ///< temporary storage for imdct transform
 
178
    DECLARE_ALIGNED_16(float, tmp_output[512]);                     ///< temporary storage for output before windowing
 
179
    DECLARE_ALIGNED_16(float, window[256]);                         ///< window coefficients
 
180
 
 
181
    /* Miscellaneous. */
 
182
    GetBitContext gbc;                      ///< bitstream reader
 
183
    AVRandomState dith_state;               ///< for dither generation
 
184
    AVCodecContext *avctx;                  ///< parent context
 
185
    uint8_t *input_buffer;                  ///< temp buffer to prevent overread
 
186
} AC3DecodeContext;
 
187
 
 
188
/**
 
189
 * Symmetrical Dequantization
 
190
 * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
 
191
 *            Tables 7.19 to 7.23
 
192
 */
 
193
static inline int
 
194
symmetric_dequant(int code, int levels)
 
195
{
 
196
    return ((code - (levels >> 1)) << 24) / levels;
 
197
}
 
198
 
 
199
/*
 
200
 * Initialize tables at runtime.
 
201
 */
 
202
static av_cold void ac3_tables_init(void)
 
203
{
 
204
    int i;
 
205
 
 
206
    /* generate grouped mantissa tables
 
207
       reference: Section 7.3.5 Ungrouping of Mantissas */
 
208
    for(i=0; i<32; i++) {
 
209
        /* bap=1 mantissas */
 
210
        b1_mantissas[i][0] = symmetric_dequant( i / 9     , 3);
 
211
        b1_mantissas[i][1] = symmetric_dequant((i % 9) / 3, 3);
 
212
        b1_mantissas[i][2] = symmetric_dequant((i % 9) % 3, 3);
 
213
    }
 
214
    for(i=0; i<128; i++) {
 
215
        /* bap=2 mantissas */
 
216
        b2_mantissas[i][0] = symmetric_dequant( i / 25     , 5);
 
217
        b2_mantissas[i][1] = symmetric_dequant((i % 25) / 5, 5);
 
218
        b2_mantissas[i][2] = symmetric_dequant((i % 25) % 5, 5);
 
219
 
 
220
        /* bap=4 mantissas */
 
221
        b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
 
222
        b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
 
223
    }
 
224
    /* generate ungrouped mantissa tables
 
225
       reference: Tables 7.21 and 7.23 */
 
226
    for(i=0; i<7; i++) {
 
227
        /* bap=3 mantissas */
 
228
        b3_mantissas[i] = symmetric_dequant(i, 7);
 
229
    }
 
230
    for(i=0; i<15; i++) {
 
231
        /* bap=5 mantissas */
 
232
        b5_mantissas[i] = symmetric_dequant(i, 15);
 
233
    }
 
234
 
 
235
    /* generate dynamic range table
 
236
       reference: Section 7.7.1 Dynamic Range Control */
 
237
    for(i=0; i<256; i++) {
 
238
        int v = (i >> 5) - ((i >> 7) << 3) - 5;
 
239
        dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
 
240
    }
 
241
 
 
242
    /* generate exponent tables
 
243
       reference: Section 7.1.3 Exponent Decoding */
 
244
    for(i=0; i<128; i++) {
 
245
        exp_ungroup_tab[i][0] =  i / 25;
 
246
        exp_ungroup_tab[i][1] = (i % 25) / 5;
 
247
        exp_ungroup_tab[i][2] = (i % 25) % 5;
 
248
    }
 
249
}
 
250
 
 
251
 
 
252
/**
 
253
 * AVCodec initialization
 
254
 */
 
255
static av_cold int ac3_decode_init(AVCodecContext *avctx)
 
256
{
 
257
    AC3DecodeContext *s = avctx->priv_data;
 
258
    s->avctx = avctx;
 
259
 
 
260
    ac3_common_init();
 
261
    ac3_tables_init();
 
262
    ff_mdct_init(&s->imdct_256, 8, 1);
 
263
    ff_mdct_init(&s->imdct_512, 9, 1);
 
264
    ff_kbd_window_init(s->window, 5.0, 256);
 
265
    dsputil_init(&s->dsp, avctx);
 
266
    av_init_random(0, &s->dith_state);
 
267
 
 
268
    /* set bias values for float to int16 conversion */
 
269
    if(s->dsp.float_to_int16 == ff_float_to_int16_c) {
 
270
        s->add_bias = 385.0f;
 
271
        s->mul_bias = 1.0f;
 
272
    } else {
 
273
        s->add_bias = 0.0f;
 
274
        s->mul_bias = 32767.0f;
 
275
    }
 
276
 
 
277
    /* allow downmixing to stereo or mono */
 
278
    if (avctx->channels > 0 && avctx->request_channels > 0 &&
 
279
            avctx->request_channels < avctx->channels &&
 
280
            avctx->request_channels <= 2) {
 
281
        avctx->channels = avctx->request_channels;
 
282
    }
 
283
    s->downmixed = 1;
 
284
 
 
285
    /* allocate context input buffer */
 
286
    if (avctx->error_resilience >= FF_ER_CAREFUL) {
 
287
        s->input_buffer = av_mallocz(AC3_MAX_FRAME_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
 
288
        if (!s->input_buffer)
 
289
            return AVERROR_NOMEM;
 
290
    }
 
291
 
 
292
    return 0;
 
293
}
 
294
 
 
295
/**
 
296
 * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
 
297
 * GetBitContext within AC3DecodeContext must point to
 
298
 * start of the synchronized ac3 bitstream.
 
299
 */
 
300
static int ac3_parse_header(AC3DecodeContext *s)
 
301
{
 
302
    AC3HeaderInfo hdr;
 
303
    GetBitContext *gbc = &s->gbc;
 
304
    int err, i;
 
305
 
 
306
    err = ff_ac3_parse_header(gbc, &hdr);
 
307
    if(err)
 
308
        return err;
 
309
 
 
310
    if(hdr.bitstream_id > 10)
 
311
        return AC3_PARSE_ERROR_BSID;
 
312
 
 
313
    /* get decoding parameters from header info */
 
314
    s->bit_alloc_params.sr_code     = hdr.sr_code;
 
315
    s->channel_mode                 = hdr.channel_mode;
 
316
    s->lfe_on                       = hdr.lfe_on;
 
317
    s->bit_alloc_params.sr_shift    = hdr.sr_shift;
 
318
    s->sample_rate                  = hdr.sample_rate;
 
319
    s->bit_rate                     = hdr.bit_rate;
 
320
    s->channels                     = hdr.channels;
 
321
    s->fbw_channels                 = s->channels - s->lfe_on;
 
322
    s->lfe_ch                       = s->fbw_channels + 1;
 
323
    s->frame_size                   = hdr.frame_size;
 
324
    s->center_mix_level             = hdr.center_mix_level;
 
325
    s->surround_mix_level           = hdr.surround_mix_level;
 
326
 
 
327
    /* set default output to all source channels */
 
328
    s->out_channels = s->channels;
 
329
    s->output_mode = s->channel_mode;
 
330
    if(s->lfe_on)
 
331
        s->output_mode |= AC3_OUTPUT_LFEON;
 
332
 
 
333
    /* read the rest of the bsi. read twice for dual mono mode. */
 
334
    i = !(s->channel_mode);
 
335
    do {
 
336
        skip_bits(gbc, 5); // skip dialog normalization
 
337
        if (get_bits1(gbc))
 
338
            skip_bits(gbc, 8); //skip compression
 
339
        if (get_bits1(gbc))
 
340
            skip_bits(gbc, 8); //skip language code
 
341
        if (get_bits1(gbc))
 
342
            skip_bits(gbc, 7); //skip audio production information
 
343
    } while (i--);
 
344
 
 
345
    skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
 
346
 
 
347
    /* skip the timecodes (or extra bitstream information for Alternate Syntax)
 
348
       TODO: read & use the xbsi1 downmix levels */
 
349
    if (get_bits1(gbc))
 
350
        skip_bits(gbc, 14); //skip timecode1 / xbsi1
 
351
    if (get_bits1(gbc))
 
352
        skip_bits(gbc, 14); //skip timecode2 / xbsi2
 
353
 
 
354
    /* skip additional bitstream info */
 
355
    if (get_bits1(gbc)) {
 
356
        i = get_bits(gbc, 6);
 
357
        do {
 
358
            skip_bits(gbc, 8);
 
359
        } while(i--);
 
360
    }
 
361
 
 
362
    return 0;
 
363
}
 
364
 
 
365
/**
 
366
 * Set stereo downmixing coefficients based on frame header info.
 
367
 * reference: Section 7.8.2 Downmixing Into Two Channels
 
368
 */
 
369
static void set_downmix_coeffs(AC3DecodeContext *s)
 
370
{
 
371
    int i;
 
372
    float cmix = gain_levels[s->center_mix_level];
 
373
    float smix = gain_levels[s->surround_mix_level];
 
374
 
 
375
    for(i=0; i<s->fbw_channels; i++) {
 
376
        s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
 
377
        s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
 
378
    }
 
379
    if(s->channel_mode > 1 && s->channel_mode & 1) {
 
380
        s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
 
381
    }
 
382
    if(s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
 
383
        int nf = s->channel_mode - 2;
 
384
        s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
 
385
    }
 
386
    if(s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
 
387
        int nf = s->channel_mode - 4;
 
388
        s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
 
389
    }
 
390
 
 
391
    /* calculate adjustment needed for each channel to avoid clipping */
 
392
    s->downmix_coeff_adjust[0] = s->downmix_coeff_adjust[1] = 0.0f;
 
393
    for(i=0; i<s->fbw_channels; i++) {
 
394
        s->downmix_coeff_adjust[0] += s->downmix_coeffs[i][0];
 
395
        s->downmix_coeff_adjust[1] += s->downmix_coeffs[i][1];
 
396
    }
 
397
    s->downmix_coeff_adjust[0] = 1.0f / s->downmix_coeff_adjust[0];
 
398
    s->downmix_coeff_adjust[1] = 1.0f / s->downmix_coeff_adjust[1];
 
399
}
 
400
 
 
401
/**
 
402
 * Decode the grouped exponents according to exponent strategy.
 
403
 * reference: Section 7.1.3 Exponent Decoding
 
404
 */
 
405
static void decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
 
406
                             uint8_t absexp, int8_t *dexps)
 
407
{
 
408
    int i, j, grp, group_size;
 
409
    int dexp[256];
 
410
    int expacc, prevexp;
 
411
 
 
412
    /* unpack groups */
 
413
    group_size = exp_strategy + (exp_strategy == EXP_D45);
 
414
    for(grp=0,i=0; grp<ngrps; grp++) {
 
415
        expacc = get_bits(gbc, 7);
 
416
        dexp[i++] = exp_ungroup_tab[expacc][0];
 
417
        dexp[i++] = exp_ungroup_tab[expacc][1];
 
418
        dexp[i++] = exp_ungroup_tab[expacc][2];
 
419
    }
 
420
 
 
421
    /* convert to absolute exps and expand groups */
 
422
    prevexp = absexp;
 
423
    for(i=0; i<ngrps*3; i++) {
 
424
        prevexp = av_clip(prevexp + dexp[i]-2, 0, 24);
 
425
        for(j=0; j<group_size; j++) {
 
426
            dexps[(i*group_size)+j] = prevexp;
 
427
        }
 
428
    }
 
429
}
 
430
 
 
431
/**
 
432
 * Generate transform coefficients for each coupled channel in the coupling
 
433
 * range using the coupling coefficients and coupling coordinates.
 
434
 * reference: Section 7.4.3 Coupling Coordinate Format
 
435
 */
 
436
static void uncouple_channels(AC3DecodeContext *s)
 
437
{
 
438
    int i, j, ch, bnd, subbnd;
 
439
 
 
440
    subbnd = -1;
 
441
    i = s->start_freq[CPL_CH];
 
442
    for(bnd=0; bnd<s->num_cpl_bands; bnd++) {
 
443
        do {
 
444
            subbnd++;
 
445
            for(j=0; j<12; j++) {
 
446
                for(ch=1; ch<=s->fbw_channels; ch++) {
 
447
                    if(s->channel_in_cpl[ch]) {
 
448
                        s->fixed_coeffs[ch][i] = ((int64_t)s->fixed_coeffs[CPL_CH][i] * (int64_t)s->cpl_coords[ch][bnd]) >> 23;
 
449
                        if (ch == 2 && s->phase_flags[bnd])
 
450
                            s->fixed_coeffs[ch][i] = -s->fixed_coeffs[ch][i];
 
451
                    }
 
452
                }
 
453
                i++;
 
454
            }
 
455
        } while(s->cpl_band_struct[subbnd]);
 
456
    }
 
457
}
 
458
 
 
459
/**
 
460
 * Grouped mantissas for 3-level 5-level and 11-level quantization
 
461
 */
 
462
typedef struct {
 
463
    int b1_mant[3];
 
464
    int b2_mant[3];
 
465
    int b4_mant[2];
 
466
    int b1ptr;
 
467
    int b2ptr;
 
468
    int b4ptr;
 
469
} mant_groups;
 
470
 
 
471
/**
 
472
 * Get the transform coefficients for a particular channel
 
473
 * reference: Section 7.3 Quantization and Decoding of Mantissas
 
474
 */
 
475
static int get_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
 
476
{
 
477
    GetBitContext *gbc = &s->gbc;
 
478
    int i, gcode, tbap, start, end;
 
479
    uint8_t *exps;
 
480
    uint8_t *bap;
 
481
    int *coeffs;
 
482
 
 
483
    exps = s->dexps[ch_index];
 
484
    bap = s->bap[ch_index];
 
485
    coeffs = s->fixed_coeffs[ch_index];
 
486
    start = s->start_freq[ch_index];
 
487
    end = s->end_freq[ch_index];
 
488
 
 
489
    for (i = start; i < end; i++) {
 
490
        tbap = bap[i];
 
491
        switch (tbap) {
 
492
            case 0:
 
493
                coeffs[i] = (av_random(&s->dith_state) & 0x7FFFFF) - 4194304;
 
494
                break;
 
495
 
 
496
            case 1:
 
497
                if(m->b1ptr > 2) {
 
498
                    gcode = get_bits(gbc, 5);
 
499
                    m->b1_mant[0] = b1_mantissas[gcode][0];
 
500
                    m->b1_mant[1] = b1_mantissas[gcode][1];
 
501
                    m->b1_mant[2] = b1_mantissas[gcode][2];
 
502
                    m->b1ptr = 0;
 
503
                }
 
504
                coeffs[i] = m->b1_mant[m->b1ptr++];
 
505
                break;
 
506
 
 
507
            case 2:
 
508
                if(m->b2ptr > 2) {
 
509
                    gcode = get_bits(gbc, 7);
 
510
                    m->b2_mant[0] = b2_mantissas[gcode][0];
 
511
                    m->b2_mant[1] = b2_mantissas[gcode][1];
 
512
                    m->b2_mant[2] = b2_mantissas[gcode][2];
 
513
                    m->b2ptr = 0;
 
514
                }
 
515
                coeffs[i] = m->b2_mant[m->b2ptr++];
 
516
                break;
 
517
 
 
518
            case 3:
 
519
                coeffs[i] = b3_mantissas[get_bits(gbc, 3)];
 
520
                break;
 
521
 
 
522
            case 4:
 
523
                if(m->b4ptr > 1) {
 
524
                    gcode = get_bits(gbc, 7);
 
525
                    m->b4_mant[0] = b4_mantissas[gcode][0];
 
526
                    m->b4_mant[1] = b4_mantissas[gcode][1];
 
527
                    m->b4ptr = 0;
 
528
                }
 
529
                coeffs[i] = m->b4_mant[m->b4ptr++];
 
530
                break;
 
531
 
 
532
            case 5:
 
533
                coeffs[i] = b5_mantissas[get_bits(gbc, 4)];
 
534
                break;
 
535
 
 
536
            default: {
 
537
                /* asymmetric dequantization */
 
538
                int qlevel = quantization_tab[tbap];
 
539
                coeffs[i] = get_sbits(gbc, qlevel) << (24 - qlevel);
 
540
                break;
 
541
            }
 
542
        }
 
543
        coeffs[i] >>= exps[i];
 
544
    }
 
545
 
 
546
    return 0;
 
547
}
 
548
 
 
549
/**
 
550
 * Remove random dithering from coefficients with zero-bit mantissas
 
551
 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
 
552
 */
 
553
static void remove_dithering(AC3DecodeContext *s) {
 
554
    int ch, i;
 
555
    int end=0;
 
556
    int *coeffs;
 
557
    uint8_t *bap;
 
558
 
 
559
    for(ch=1; ch<=s->fbw_channels; ch++) {
 
560
        if(!s->dither_flag[ch]) {
 
561
            coeffs = s->fixed_coeffs[ch];
 
562
            bap = s->bap[ch];
 
563
            if(s->channel_in_cpl[ch])
 
564
                end = s->start_freq[CPL_CH];
 
565
            else
 
566
                end = s->end_freq[ch];
 
567
            for(i=0; i<end; i++) {
 
568
                if(!bap[i])
 
569
                    coeffs[i] = 0;
 
570
            }
 
571
            if(s->channel_in_cpl[ch]) {
 
572
                bap = s->bap[CPL_CH];
 
573
                for(; i<s->end_freq[CPL_CH]; i++) {
 
574
                    if(!bap[i])
 
575
                        coeffs[i] = 0;
 
576
                }
 
577
            }
 
578
        }
 
579
    }
 
580
}
 
581
 
 
582
/**
 
583
 * Get the transform coefficients.
 
584
 */
 
585
static int get_transform_coeffs(AC3DecodeContext *s)
 
586
{
 
587
    int ch, end;
 
588
    int got_cplchan = 0;
 
589
    mant_groups m;
 
590
 
 
591
    m.b1ptr = m.b2ptr = m.b4ptr = 3;
 
592
 
 
593
    for (ch = 1; ch <= s->channels; ch++) {
 
594
        /* transform coefficients for full-bandwidth channel */
 
595
        if (get_transform_coeffs_ch(s, ch, &m))
 
596
            return -1;
 
597
        /* tranform coefficients for coupling channel come right after the
 
598
           coefficients for the first coupled channel*/
 
599
        if (s->channel_in_cpl[ch])  {
 
600
            if (!got_cplchan) {
 
601
                if (get_transform_coeffs_ch(s, CPL_CH, &m)) {
 
602
                    av_log(s->avctx, AV_LOG_ERROR, "error in decoupling channels\n");
 
603
                    return -1;
 
604
                }
 
605
                uncouple_channels(s);
 
606
                got_cplchan = 1;
 
607
            }
 
608
            end = s->end_freq[CPL_CH];
 
609
        } else {
 
610
            end = s->end_freq[ch];
 
611
        }
 
612
        do
 
613
            s->transform_coeffs[ch][end] = 0;
 
614
        while(++end < 256);
 
615
    }
 
616
 
 
617
    /* if any channel doesn't use dithering, zero appropriate coefficients */
 
618
    if(!s->dither_all)
 
619
        remove_dithering(s);
 
620
 
 
621
    return 0;
 
622
}
 
623
 
 
624
/**
 
625
 * Stereo rematrixing.
 
626
 * reference: Section 7.5.4 Rematrixing : Decoding Technique
 
627
 */
 
628
static void do_rematrixing(AC3DecodeContext *s)
 
629
{
 
630
    int bnd, i;
 
631
    int end, bndend;
 
632
    int tmp0, tmp1;
 
633
 
 
634
    end = FFMIN(s->end_freq[1], s->end_freq[2]);
 
635
 
 
636
    for(bnd=0; bnd<s->num_rematrixing_bands; bnd++) {
 
637
        if(s->rematrixing_flags[bnd]) {
 
638
            bndend = FFMIN(end, rematrix_band_tab[bnd+1]);
 
639
            for(i=rematrix_band_tab[bnd]; i<bndend; i++) {
 
640
                tmp0 = s->fixed_coeffs[1][i];
 
641
                tmp1 = s->fixed_coeffs[2][i];
 
642
                s->fixed_coeffs[1][i] = tmp0 + tmp1;
 
643
                s->fixed_coeffs[2][i] = tmp0 - tmp1;
 
644
            }
 
645
        }
 
646
    }
 
647
}
 
648
 
 
649
/**
 
650
 * Perform the 256-point IMDCT
 
651
 */
 
652
static void do_imdct_256(AC3DecodeContext *s, int chindex)
 
653
{
 
654
    int i, k;
 
655
    DECLARE_ALIGNED_16(float, x[128]);
 
656
    FFTComplex z[2][64];
 
657
    float *o_ptr = s->tmp_output;
 
658
 
 
659
    for(i=0; i<2; i++) {
 
660
        /* de-interleave coefficients */
 
661
        for(k=0; k<128; k++) {
 
662
            x[k] = s->transform_coeffs[chindex][2*k+i];
 
663
        }
 
664
 
 
665
        /* run standard IMDCT */
 
666
        s->imdct_256.fft.imdct_calc(&s->imdct_256, o_ptr, x, s->tmp_imdct);
 
667
 
 
668
        /* reverse the post-rotation & reordering from standard IMDCT */
 
669
        for(k=0; k<32; k++) {
 
670
            z[i][32+k].re = -o_ptr[128+2*k];
 
671
            z[i][32+k].im = -o_ptr[2*k];
 
672
            z[i][31-k].re =  o_ptr[2*k+1];
 
673
            z[i][31-k].im =  o_ptr[128+2*k+1];
 
674
        }
 
675
    }
 
676
 
 
677
    /* apply AC-3 post-rotation & reordering */
 
678
    for(k=0; k<64; k++) {
 
679
        o_ptr[    2*k  ] = -z[0][   k].im;
 
680
        o_ptr[    2*k+1] =  z[0][63-k].re;
 
681
        o_ptr[128+2*k  ] = -z[0][   k].re;
 
682
        o_ptr[128+2*k+1] =  z[0][63-k].im;
 
683
        o_ptr[256+2*k  ] = -z[1][   k].re;
 
684
        o_ptr[256+2*k+1] =  z[1][63-k].im;
 
685
        o_ptr[384+2*k  ] =  z[1][   k].im;
 
686
        o_ptr[384+2*k+1] = -z[1][63-k].re;
 
687
    }
 
688
}
 
689
 
 
690
/**
 
691
 * Inverse MDCT Transform.
 
692
 * Convert frequency domain coefficients to time-domain audio samples.
 
693
 * reference: Section 7.9.4 Transformation Equations
 
694
 */
 
695
static inline void do_imdct(AC3DecodeContext *s, int channels)
 
696
{
 
697
    int ch;
 
698
 
 
699
    for (ch=1; ch<=channels; ch++) {
 
700
        if (s->block_switch[ch]) {
 
701
            do_imdct_256(s, ch);
 
702
        } else {
 
703
            s->imdct_512.fft.imdct_calc(&s->imdct_512, s->tmp_output,
 
704
                                        s->transform_coeffs[ch], s->tmp_imdct);
 
705
        }
 
706
        /* For the first half of the block, apply the window, add the delay
 
707
           from the previous block, and send to output */
 
708
        s->dsp.vector_fmul_add_add(s->output[ch-1], s->tmp_output,
 
709
                                     s->window, s->delay[ch-1], 0, 256, 1);
 
710
        /* For the second half of the block, apply the window and store the
 
711
           samples to delay, to be combined with the next block */
 
712
        s->dsp.vector_fmul_reverse(s->delay[ch-1], s->tmp_output+256,
 
713
                                   s->window, 256);
 
714
    }
 
715
}
 
716
 
 
717
/**
 
718
 * Downmix the output to mono or stereo.
 
719
 */
 
720
static void ac3_downmix(AC3DecodeContext *s,
 
721
                        float samples[AC3_MAX_CHANNELS][256], int ch_offset)
 
722
{
 
723
    int i, j;
 
724
    float v0, v1;
 
725
 
 
726
    for(i=0; i<256; i++) {
 
727
        v0 = v1 = 0.0f;
 
728
        for(j=0; j<s->fbw_channels; j++) {
 
729
            v0 += samples[j+ch_offset][i] * s->downmix_coeffs[j][0];
 
730
            v1 += samples[j+ch_offset][i] * s->downmix_coeffs[j][1];
 
731
        }
 
732
        v0 *= s->downmix_coeff_adjust[0];
 
733
        v1 *= s->downmix_coeff_adjust[1];
 
734
        if(s->output_mode == AC3_CHMODE_MONO) {
 
735
            samples[ch_offset][i] = (v0 + v1) * LEVEL_MINUS_3DB;
 
736
        } else if(s->output_mode == AC3_CHMODE_STEREO) {
 
737
            samples[  ch_offset][i] = v0;
 
738
            samples[1+ch_offset][i] = v1;
 
739
        }
 
740
    }
 
741
}
 
742
 
 
743
/**
 
744
 * Upmix delay samples from stereo to original channel layout.
 
745
 */
 
746
static void ac3_upmix_delay(AC3DecodeContext *s)
 
747
{
 
748
    int channel_data_size = sizeof(s->delay[0]);
 
749
    switch(s->channel_mode) {
 
750
        case AC3_CHMODE_DUALMONO:
 
751
        case AC3_CHMODE_STEREO:
 
752
            /* upmix mono to stereo */
 
753
            memcpy(s->delay[1], s->delay[0], channel_data_size);
 
754
            break;
 
755
        case AC3_CHMODE_2F2R:
 
756
            memset(s->delay[3], 0, channel_data_size);
 
757
        case AC3_CHMODE_2F1R:
 
758
            memset(s->delay[2], 0, channel_data_size);
 
759
            break;
 
760
        case AC3_CHMODE_3F2R:
 
761
            memset(s->delay[4], 0, channel_data_size);
 
762
        case AC3_CHMODE_3F1R:
 
763
            memset(s->delay[3], 0, channel_data_size);
 
764
        case AC3_CHMODE_3F:
 
765
            memcpy(s->delay[2], s->delay[1], channel_data_size);
 
766
            memset(s->delay[1], 0, channel_data_size);
 
767
            break;
 
768
    }
 
769
}
 
770
 
 
771
/**
 
772
 * Parse an audio block from AC-3 bitstream.
 
773
 */
 
774
static int ac3_parse_audio_block(AC3DecodeContext *s, int blk)
 
775
{
 
776
    int fbw_channels = s->fbw_channels;
 
777
    int channel_mode = s->channel_mode;
 
778
    int i, bnd, seg, ch;
 
779
    int different_transforms;
 
780
    int downmix_output;
 
781
    GetBitContext *gbc = &s->gbc;
 
782
    uint8_t bit_alloc_stages[AC3_MAX_CHANNELS];
 
783
 
 
784
    memset(bit_alloc_stages, 0, AC3_MAX_CHANNELS);
 
785
 
 
786
    /* block switch flags */
 
787
    different_transforms = 0;
 
788
    for (ch = 1; ch <= fbw_channels; ch++) {
 
789
        s->block_switch[ch] = get_bits1(gbc);
 
790
        if(ch > 1 && s->block_switch[ch] != s->block_switch[1])
 
791
            different_transforms = 1;
 
792
    }
 
793
 
 
794
    /* dithering flags */
 
795
    s->dither_all = 1;
 
796
    for (ch = 1; ch <= fbw_channels; ch++) {
 
797
        s->dither_flag[ch] = get_bits1(gbc);
 
798
        if(!s->dither_flag[ch])
 
799
            s->dither_all = 0;
 
800
    }
 
801
 
 
802
    /* dynamic range */
 
803
    i = !(s->channel_mode);
 
804
    do {
 
805
        if(get_bits1(gbc)) {
 
806
            s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)]-1.0) *
 
807
                                  s->avctx->drc_scale)+1.0;
 
808
        } else if(blk == 0) {
 
809
            s->dynamic_range[i] = 1.0f;
 
810
        }
 
811
    } while(i--);
 
812
 
 
813
    /* coupling strategy */
 
814
    if (get_bits1(gbc)) {
 
815
        memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
 
816
        s->cpl_in_use = get_bits1(gbc);
 
817
        if (s->cpl_in_use) {
 
818
            /* coupling in use */
 
819
            int cpl_begin_freq, cpl_end_freq;
 
820
 
 
821
            /* determine which channels are coupled */
 
822
            for (ch = 1; ch <= fbw_channels; ch++)
 
823
                s->channel_in_cpl[ch] = get_bits1(gbc);
 
824
 
 
825
            /* phase flags in use */
 
826
            if (channel_mode == AC3_CHMODE_STEREO)
 
827
                s->phase_flags_in_use = get_bits1(gbc);
 
828
 
 
829
            /* coupling frequency range and band structure */
 
830
            cpl_begin_freq = get_bits(gbc, 4);
 
831
            cpl_end_freq = get_bits(gbc, 4);
 
832
            if (3 + cpl_end_freq - cpl_begin_freq < 0) {
 
833
                av_log(s->avctx, AV_LOG_ERROR, "3+cplendf = %d < cplbegf = %d\n", 3+cpl_end_freq, cpl_begin_freq);
 
834
                return -1;
 
835
            }
 
836
            s->num_cpl_bands = s->num_cpl_subbands = 3 + cpl_end_freq - cpl_begin_freq;
 
837
            s->start_freq[CPL_CH] = cpl_begin_freq * 12 + 37;
 
838
            s->end_freq[CPL_CH] = cpl_end_freq * 12 + 73;
 
839
            for (bnd = 0; bnd < s->num_cpl_subbands - 1; bnd++) {
 
840
                if (get_bits1(gbc)) {
 
841
                    s->cpl_band_struct[bnd] = 1;
 
842
                    s->num_cpl_bands--;
 
843
                }
 
844
            }
 
845
            s->cpl_band_struct[s->num_cpl_subbands-1] = 0;
 
846
        } else {
 
847
            /* coupling not in use */
 
848
            for (ch = 1; ch <= fbw_channels; ch++)
 
849
                s->channel_in_cpl[ch] = 0;
 
850
        }
 
851
    }
 
852
 
 
853
    /* coupling coordinates */
 
854
    if (s->cpl_in_use) {
 
855
        int cpl_coords_exist = 0;
 
856
 
 
857
        for (ch = 1; ch <= fbw_channels; ch++) {
 
858
            if (s->channel_in_cpl[ch]) {
 
859
                if (get_bits1(gbc)) {
 
860
                    int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
 
861
                    cpl_coords_exist = 1;
 
862
                    master_cpl_coord = 3 * get_bits(gbc, 2);
 
863
                    for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
 
864
                        cpl_coord_exp = get_bits(gbc, 4);
 
865
                        cpl_coord_mant = get_bits(gbc, 4);
 
866
                        if (cpl_coord_exp == 15)
 
867
                            s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
 
868
                        else
 
869
                            s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
 
870
                        s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
 
871
                    }
 
872
                }
 
873
            }
 
874
        }
 
875
        /* phase flags */
 
876
        if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
 
877
            for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
 
878
                s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
 
879
            }
 
880
        }
 
881
    }
 
882
 
 
883
    /* stereo rematrixing strategy and band structure */
 
884
    if (channel_mode == AC3_CHMODE_STEREO) {
 
885
        if (get_bits1(gbc)) {
 
886
            s->num_rematrixing_bands = 4;
 
887
            if(s->cpl_in_use && s->start_freq[CPL_CH] <= 61)
 
888
                s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
 
889
            for(bnd=0; bnd<s->num_rematrixing_bands; bnd++)
 
890
                s->rematrixing_flags[bnd] = get_bits1(gbc);
 
891
        }
 
892
    }
 
893
 
 
894
    /* exponent strategies for each channel */
 
895
    s->exp_strategy[CPL_CH] = EXP_REUSE;
 
896
    s->exp_strategy[s->lfe_ch] = EXP_REUSE;
 
897
    for (ch = !s->cpl_in_use; ch <= s->channels; ch++) {
 
898
        if(ch == s->lfe_ch)
 
899
            s->exp_strategy[ch] = get_bits(gbc, 1);
 
900
        else
 
901
            s->exp_strategy[ch] = get_bits(gbc, 2);
 
902
        if(s->exp_strategy[ch] != EXP_REUSE)
 
903
            bit_alloc_stages[ch] = 3;
 
904
    }
 
905
 
 
906
    /* channel bandwidth */
 
907
    for (ch = 1; ch <= fbw_channels; ch++) {
 
908
        s->start_freq[ch] = 0;
 
909
        if (s->exp_strategy[ch] != EXP_REUSE) {
 
910
            int prev = s->end_freq[ch];
 
911
            if (s->channel_in_cpl[ch])
 
912
                s->end_freq[ch] = s->start_freq[CPL_CH];
 
913
            else {
 
914
                int bandwidth_code = get_bits(gbc, 6);
 
915
                if (bandwidth_code > 60) {
 
916
                    av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60", bandwidth_code);
 
917
                    return -1;
 
918
                }
 
919
                s->end_freq[ch] = bandwidth_code * 3 + 73;
 
920
            }
 
921
            if(blk > 0 && s->end_freq[ch] != prev)
 
922
                memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
 
923
        }
 
924
    }
 
925
    s->start_freq[s->lfe_ch] = 0;
 
926
    s->end_freq[s->lfe_ch] = 7;
 
927
 
 
928
    /* decode exponents for each channel */
 
929
    for (ch = !s->cpl_in_use; ch <= s->channels; ch++) {
 
930
        if (s->exp_strategy[ch] != EXP_REUSE) {
 
931
            int group_size, num_groups;
 
932
            group_size = 3 << (s->exp_strategy[ch] - 1);
 
933
            if(ch == CPL_CH)
 
934
                num_groups = (s->end_freq[ch] - s->start_freq[ch]) / group_size;
 
935
            else if(ch == s->lfe_ch)
 
936
                num_groups = 2;
 
937
            else
 
938
                num_groups = (s->end_freq[ch] + group_size - 4) / group_size;
 
939
            s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
 
940
            decode_exponents(gbc, s->exp_strategy[ch], num_groups, s->dexps[ch][0],
 
941
                             &s->dexps[ch][s->start_freq[ch]+!!ch]);
 
942
            if(ch != CPL_CH && ch != s->lfe_ch)
 
943
                skip_bits(gbc, 2); /* skip gainrng */
 
944
        }
 
945
    }
 
946
 
 
947
    /* bit allocation information */
 
948
    if (get_bits1(gbc)) {
 
949
        s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
 
950
        s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
 
951
        s->bit_alloc_params.slow_gain  = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
 
952
        s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
 
953
        s->bit_alloc_params.floor  = ff_ac3_floor_tab[get_bits(gbc, 3)];
 
954
        for(ch=!s->cpl_in_use; ch<=s->channels; ch++) {
 
955
            bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
 
956
        }
 
957
    }
 
958
 
 
959
    /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
 
960
    if (get_bits1(gbc)) {
 
961
        int csnr;
 
962
        csnr = (get_bits(gbc, 6) - 15) << 4;
 
963
        for (ch = !s->cpl_in_use; ch <= s->channels; ch++) { /* snr offset and fast gain */
 
964
            s->snr_offset[ch] = (csnr + get_bits(gbc, 4)) << 2;
 
965
            s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
 
966
        }
 
967
        memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
 
968
    }
 
969
 
 
970
    /* coupling leak information */
 
971
    if (s->cpl_in_use && get_bits1(gbc)) {
 
972
        s->bit_alloc_params.cpl_fast_leak = get_bits(gbc, 3);
 
973
        s->bit_alloc_params.cpl_slow_leak = get_bits(gbc, 3);
 
974
        bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
 
975
    }
 
976
 
 
977
    /* delta bit allocation information */
 
978
    if (get_bits1(gbc)) {
 
979
        /* delta bit allocation exists (strategy) */
 
980
        for (ch = !s->cpl_in_use; ch <= fbw_channels; ch++) {
 
981
            s->dba_mode[ch] = get_bits(gbc, 2);
 
982
            if (s->dba_mode[ch] == DBA_RESERVED) {
 
983
                av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
 
984
                return -1;
 
985
            }
 
986
            bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
 
987
        }
 
988
        /* channel delta offset, len and bit allocation */
 
989
        for (ch = !s->cpl_in_use; ch <= fbw_channels; ch++) {
 
990
            if (s->dba_mode[ch] == DBA_NEW) {
 
991
                s->dba_nsegs[ch] = get_bits(gbc, 3);
 
992
                for (seg = 0; seg <= s->dba_nsegs[ch]; seg++) {
 
993
                    s->dba_offsets[ch][seg] = get_bits(gbc, 5);
 
994
                    s->dba_lengths[ch][seg] = get_bits(gbc, 4);
 
995
                    s->dba_values[ch][seg] = get_bits(gbc, 3);
 
996
                }
 
997
            }
 
998
        }
 
999
    } else if(blk == 0) {
 
1000
        for(ch=0; ch<=s->channels; ch++) {
 
1001
            s->dba_mode[ch] = DBA_NONE;
 
1002
        }
 
1003
    }
 
1004
 
 
1005
    /* Bit allocation */
 
1006
    for(ch=!s->cpl_in_use; ch<=s->channels; ch++) {
 
1007
        if(bit_alloc_stages[ch] > 2) {
 
1008
            /* Exponent mapping into PSD and PSD integration */
 
1009
            ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
 
1010
                                      s->start_freq[ch], s->end_freq[ch],
 
1011
                                      s->psd[ch], s->band_psd[ch]);
 
1012
        }
 
1013
        if(bit_alloc_stages[ch] > 1) {
 
1014
            /* Compute excitation function, Compute masking curve, and
 
1015
               Apply delta bit allocation */
 
1016
            ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
 
1017
                                       s->start_freq[ch], s->end_freq[ch],
 
1018
                                       s->fast_gain[ch], (ch == s->lfe_ch),
 
1019
                                       s->dba_mode[ch], s->dba_nsegs[ch],
 
1020
                                       s->dba_offsets[ch], s->dba_lengths[ch],
 
1021
                                       s->dba_values[ch], s->mask[ch]);
 
1022
        }
 
1023
        if(bit_alloc_stages[ch] > 0) {
 
1024
            /* Compute bit allocation */
 
1025
            ff_ac3_bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
 
1026
                                      s->start_freq[ch], s->end_freq[ch],
 
1027
                                      s->snr_offset[ch],
 
1028
                                      s->bit_alloc_params.floor,
 
1029
                                      s->bap[ch]);
 
1030
        }
 
1031
    }
 
1032
 
 
1033
    /* unused dummy data */
 
1034
    if (get_bits1(gbc)) {
 
1035
        int skipl = get_bits(gbc, 9);
 
1036
        while(skipl--)
 
1037
            skip_bits(gbc, 8);
 
1038
    }
 
1039
 
 
1040
    /* unpack the transform coefficients
 
1041
       this also uncouples channels if coupling is in use. */
 
1042
    if (get_transform_coeffs(s)) {
 
1043
        av_log(s->avctx, AV_LOG_ERROR, "Error in routine get_transform_coeffs\n");
 
1044
        return -1;
 
1045
    }
 
1046
 
 
1047
    /* recover coefficients if rematrixing is in use */
 
1048
    if(s->channel_mode == AC3_CHMODE_STEREO)
 
1049
        do_rematrixing(s);
 
1050
 
 
1051
    /* apply scaling to coefficients (headroom, dynrng) */
 
1052
    for(ch=1; ch<=s->channels; ch++) {
 
1053
        float gain = s->mul_bias / 4194304.0f;
 
1054
        if(s->channel_mode == AC3_CHMODE_DUALMONO) {
 
1055
            gain *= s->dynamic_range[ch-1];
 
1056
        } else {
 
1057
            gain *= s->dynamic_range[0];
 
1058
        }
 
1059
        for(i=0; i<256; i++) {
 
1060
            s->transform_coeffs[ch][i] = s->fixed_coeffs[ch][i] * gain;
 
1061
        }
 
1062
    }
 
1063
 
 
1064
    /* downmix and MDCT. order depends on whether block switching is used for
 
1065
       any channel in this block. this is because coefficients for the long
 
1066
       and short transforms cannot be mixed. */
 
1067
    downmix_output = s->channels != s->out_channels &&
 
1068
                     !((s->output_mode & AC3_OUTPUT_LFEON) &&
 
1069
                     s->fbw_channels == s->out_channels);
 
1070
    if(different_transforms) {
 
1071
        /* the delay samples have already been downmixed, so we upmix the delay
 
1072
           samples in order to reconstruct all channels before downmixing. */
 
1073
        if(s->downmixed) {
 
1074
            s->downmixed = 0;
 
1075
            ac3_upmix_delay(s);
 
1076
        }
 
1077
 
 
1078
        do_imdct(s, s->channels);
 
1079
 
 
1080
        if(downmix_output) {
 
1081
            ac3_downmix(s, s->output, 0);
 
1082
        }
 
1083
    } else {
 
1084
        if(downmix_output) {
 
1085
            ac3_downmix(s, s->transform_coeffs, 1);
 
1086
        }
 
1087
 
 
1088
        if(!s->downmixed) {
 
1089
            s->downmixed = 1;
 
1090
            ac3_downmix(s, s->delay, 0);
 
1091
        }
 
1092
 
 
1093
        do_imdct(s, s->out_channels);
 
1094
    }
 
1095
 
 
1096
    /* convert float to 16-bit integer */
 
1097
    for(ch=0; ch<s->out_channels; ch++) {
 
1098
        for(i=0; i<256; i++) {
 
1099
            s->output[ch][i] += s->add_bias;
 
1100
        }
 
1101
        s->dsp.float_to_int16(s->int_output[ch], s->output[ch], 256);
 
1102
    }
 
1103
 
 
1104
    return 0;
 
1105
}
 
1106
 
 
1107
/**
 
1108
 * Decode a single AC-3 frame.
 
1109
 */
 
1110
static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
 
1111
                            const uint8_t *buf, int buf_size)
 
1112
{
 
1113
    AC3DecodeContext *s = avctx->priv_data;
 
1114
    int16_t *out_samples = (int16_t *)data;
 
1115
    int i, blk, ch, err;
 
1116
 
 
1117
    /* initialize the GetBitContext with the start of valid AC-3 Frame */
 
1118
    if (s->input_buffer) {
 
1119
        /* copy input buffer to decoder context to avoid reading past the end
 
1120
           of the buffer, which can be caused by a damaged input stream. */
 
1121
        memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_MAX_FRAME_SIZE));
 
1122
        init_get_bits(&s->gbc, s->input_buffer, buf_size * 8);
 
1123
    } else {
 
1124
        init_get_bits(&s->gbc, buf, buf_size * 8);
 
1125
    }
 
1126
 
 
1127
    /* parse the syncinfo */
 
1128
    err = ac3_parse_header(s);
 
1129
    if(err) {
 
1130
        switch(err) {
 
1131
            case AC3_PARSE_ERROR_SYNC:
 
1132
                av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
 
1133
                break;
 
1134
            case AC3_PARSE_ERROR_BSID:
 
1135
                av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
 
1136
                break;
 
1137
            case AC3_PARSE_ERROR_SAMPLE_RATE:
 
1138
                av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
 
1139
                break;
 
1140
            case AC3_PARSE_ERROR_FRAME_SIZE:
 
1141
                av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
 
1142
                break;
 
1143
            case AC3_PARSE_ERROR_FRAME_TYPE:
 
1144
                av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
 
1145
                break;
 
1146
            default:
 
1147
                av_log(avctx, AV_LOG_ERROR, "invalid header\n");
 
1148
                break;
 
1149
        }
 
1150
        return -1;
 
1151
    }
 
1152
 
 
1153
    /* check that reported frame size fits in input buffer */
 
1154
    if(s->frame_size > buf_size) {
 
1155
        av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
 
1156
        return -1;
 
1157
    }
 
1158
 
 
1159
    /* check for crc mismatch */
 
1160
    if(avctx->error_resilience >= FF_ER_CAREFUL) {
 
1161
        if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) {
 
1162
            av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
 
1163
            return -1;
 
1164
        }
 
1165
        /* TODO: error concealment */
 
1166
    }
 
1167
 
 
1168
    avctx->sample_rate = s->sample_rate;
 
1169
    avctx->bit_rate = s->bit_rate;
 
1170
 
 
1171
    /* channel config */
 
1172
    s->out_channels = s->channels;
 
1173
    if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
 
1174
            avctx->request_channels < s->channels) {
 
1175
        s->out_channels = avctx->request_channels;
 
1176
        s->output_mode  = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
 
1177
    }
 
1178
    avctx->channels = s->out_channels;
 
1179
 
 
1180
    /* set downmixing coefficients if needed */
 
1181
    if(s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
 
1182
            s->fbw_channels == s->out_channels)) {
 
1183
        set_downmix_coeffs(s);
 
1184
    }
 
1185
 
 
1186
    /* parse the audio blocks */
 
1187
    for (blk = 0; blk < NB_BLOCKS; blk++) {
 
1188
        if (ac3_parse_audio_block(s, blk)) {
 
1189
            av_log(avctx, AV_LOG_ERROR, "error parsing the audio block\n");
 
1190
            *data_size = 0;
 
1191
            return s->frame_size;
 
1192
        }
 
1193
        for (i = 0; i < 256; i++)
 
1194
            for (ch = 0; ch < s->out_channels; ch++)
 
1195
                *(out_samples++) = s->int_output[ch][i];
 
1196
    }
 
1197
    *data_size = NB_BLOCKS * 256 * avctx->channels * sizeof (int16_t);
 
1198
    return s->frame_size;
 
1199
}
 
1200
 
 
1201
/**
 
1202
 * Uninitialize the AC-3 decoder.
 
1203
 */
 
1204
static av_cold int ac3_decode_end(AVCodecContext *avctx)
 
1205
{
 
1206
    AC3DecodeContext *s = avctx->priv_data;
 
1207
    ff_mdct_end(&s->imdct_512);
 
1208
    ff_mdct_end(&s->imdct_256);
 
1209
 
 
1210
    av_freep(&s->input_buffer);
 
1211
 
 
1212
    return 0;
 
1213
}
 
1214
 
 
1215
AVCodec ac3_decoder = {
 
1216
    .name = "ac3",
 
1217
    .type = CODEC_TYPE_AUDIO,
 
1218
    .id = CODEC_ID_AC3,
 
1219
    .priv_data_size = sizeof (AC3DecodeContext),
 
1220
    .init = ac3_decode_init,
 
1221
    .close = ac3_decode_end,
 
1222
    .decode = ac3_decode_frame,
 
1223
    .long_name = "ATSC A/52 / AC-3",
 
1224
};