]> git.sesse.net Git - ffmpeg/blob - libavcodec/ac3dec.c
cosmetics: indent
[ffmpeg] / libavcodec / ac3dec.c
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 "libavutil/crc.h"
36 #include "libavutil/random.h"
37 #include "avcodec.h"
38 #include "ac3_parser.h"
39 #include "bitstream.h"
40 #include "dsputil.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             if (channel_mode < AC3_CHMODE_STEREO) {
822                 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
823                 return -1;
824             }
825
826             /* determine which channels are coupled */
827             for (ch = 1; ch <= fbw_channels; ch++)
828                 s->channel_in_cpl[ch] = get_bits1(gbc);
829
830             /* phase flags in use */
831             if (channel_mode == AC3_CHMODE_STEREO)
832                 s->phase_flags_in_use = get_bits1(gbc);
833
834             /* coupling frequency range and band structure */
835             cpl_begin_freq = get_bits(gbc, 4);
836             cpl_end_freq = get_bits(gbc, 4);
837             if (3 + cpl_end_freq - cpl_begin_freq < 0) {
838                 av_log(s->avctx, AV_LOG_ERROR, "3+cplendf = %d < cplbegf = %d\n", 3+cpl_end_freq, cpl_begin_freq);
839                 return -1;
840             }
841             s->num_cpl_bands = s->num_cpl_subbands = 3 + cpl_end_freq - cpl_begin_freq;
842             s->start_freq[CPL_CH] = cpl_begin_freq * 12 + 37;
843             s->end_freq[CPL_CH] = cpl_end_freq * 12 + 73;
844             for (bnd = 0; bnd < s->num_cpl_subbands - 1; bnd++) {
845                 if (get_bits1(gbc)) {
846                     s->cpl_band_struct[bnd] = 1;
847                     s->num_cpl_bands--;
848                 }
849             }
850             s->cpl_band_struct[s->num_cpl_subbands-1] = 0;
851         } else {
852             /* coupling not in use */
853             for (ch = 1; ch <= fbw_channels; ch++)
854                 s->channel_in_cpl[ch] = 0;
855         }
856     } else if (!blk) {
857         av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must be present in block 0\n");
858         return -1;
859     }
860
861     /* coupling coordinates */
862     if (s->cpl_in_use) {
863         int cpl_coords_exist = 0;
864
865         for (ch = 1; ch <= fbw_channels; ch++) {
866             if (s->channel_in_cpl[ch]) {
867                 if (get_bits1(gbc)) {
868                     int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
869                     cpl_coords_exist = 1;
870                     master_cpl_coord = 3 * get_bits(gbc, 2);
871                     for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
872                         cpl_coord_exp = get_bits(gbc, 4);
873                         cpl_coord_mant = get_bits(gbc, 4);
874                         if (cpl_coord_exp == 15)
875                             s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
876                         else
877                             s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
878                         s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
879                     }
880                 } else if (!blk) {
881                     av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must be present in block 0\n");
882                     return -1;
883                 }
884             }
885         }
886         /* phase flags */
887         if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
888             for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
889                 s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
890             }
891         }
892     }
893
894     /* stereo rematrixing strategy and band structure */
895     if (channel_mode == AC3_CHMODE_STEREO) {
896         if (get_bits1(gbc)) {
897             s->num_rematrixing_bands = 4;
898             if(s->cpl_in_use && s->start_freq[CPL_CH] <= 61)
899                 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
900             for(bnd=0; bnd<s->num_rematrixing_bands; bnd++)
901                 s->rematrixing_flags[bnd] = get_bits1(gbc);
902         } else if (!blk) {
903             av_log(s->avctx, AV_LOG_ERROR, "new rematrixing strategy must be present in block 0\n");
904             return -1;
905         }
906     }
907
908     /* exponent strategies for each channel */
909     s->exp_strategy[CPL_CH] = EXP_REUSE;
910     s->exp_strategy[s->lfe_ch] = EXP_REUSE;
911     for (ch = !s->cpl_in_use; ch <= s->channels; ch++) {
912         if(ch == s->lfe_ch)
913             s->exp_strategy[ch] = get_bits(gbc, 1);
914         else
915             s->exp_strategy[ch] = get_bits(gbc, 2);
916         if(s->exp_strategy[ch] != EXP_REUSE)
917             bit_alloc_stages[ch] = 3;
918     }
919
920     /* channel bandwidth */
921     for (ch = 1; ch <= fbw_channels; ch++) {
922         s->start_freq[ch] = 0;
923         if (s->exp_strategy[ch] != EXP_REUSE) {
924             int prev = s->end_freq[ch];
925             if (s->channel_in_cpl[ch])
926                 s->end_freq[ch] = s->start_freq[CPL_CH];
927             else {
928                 int bandwidth_code = get_bits(gbc, 6);
929                 if (bandwidth_code > 60) {
930                     av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60", bandwidth_code);
931                     return -1;
932                 }
933                 s->end_freq[ch] = bandwidth_code * 3 + 73;
934             }
935             if(blk > 0 && s->end_freq[ch] != prev)
936                 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
937         }
938     }
939     s->start_freq[s->lfe_ch] = 0;
940     s->end_freq[s->lfe_ch] = 7;
941
942     /* decode exponents for each channel */
943     for (ch = !s->cpl_in_use; ch <= s->channels; ch++) {
944         if (s->exp_strategy[ch] != EXP_REUSE) {
945             int group_size, num_groups;
946             group_size = 3 << (s->exp_strategy[ch] - 1);
947             if(ch == CPL_CH)
948                 num_groups = (s->end_freq[ch] - s->start_freq[ch]) / group_size;
949             else if(ch == s->lfe_ch)
950                 num_groups = 2;
951             else
952                 num_groups = (s->end_freq[ch] + group_size - 4) / group_size;
953             s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
954             decode_exponents(gbc, s->exp_strategy[ch], num_groups, s->dexps[ch][0],
955                              &s->dexps[ch][s->start_freq[ch]+!!ch]);
956             if(ch != CPL_CH && ch != s->lfe_ch)
957                 skip_bits(gbc, 2); /* skip gainrng */
958         }
959     }
960
961     /* bit allocation information */
962     if (get_bits1(gbc)) {
963         s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
964         s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
965         s->bit_alloc_params.slow_gain  = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
966         s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
967         s->bit_alloc_params.floor  = ff_ac3_floor_tab[get_bits(gbc, 3)];
968         for(ch=!s->cpl_in_use; ch<=s->channels; ch++) {
969             bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
970         }
971     } else if (!blk) {
972         av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must be present in block 0\n");
973         return -1;
974     }
975
976     /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
977     if (get_bits1(gbc)) {
978         int csnr;
979         csnr = (get_bits(gbc, 6) - 15) << 4;
980         for (ch = !s->cpl_in_use; ch <= s->channels; ch++) { /* snr offset and fast gain */
981             s->snr_offset[ch] = (csnr + get_bits(gbc, 4)) << 2;
982             s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
983         }
984         memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
985     } else if (!blk) {
986         av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
987         return -1;
988     }
989
990     /* coupling leak information */
991     if (s->cpl_in_use) {
992         if (get_bits1(gbc)) {
993             s->bit_alloc_params.cpl_fast_leak = get_bits(gbc, 3);
994             s->bit_alloc_params.cpl_slow_leak = get_bits(gbc, 3);
995             bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
996         } else if (!blk) {
997             av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must be present in block 0\n");
998             return -1;
999         }
1000     }
1001
1002     /* delta bit allocation information */
1003     if (get_bits1(gbc)) {
1004         /* delta bit allocation exists (strategy) */
1005         for (ch = !s->cpl_in_use; ch <= fbw_channels; ch++) {
1006             s->dba_mode[ch] = get_bits(gbc, 2);
1007             if (s->dba_mode[ch] == DBA_RESERVED) {
1008                 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1009                 return -1;
1010             }
1011             bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1012         }
1013         /* channel delta offset, len and bit allocation */
1014         for (ch = !s->cpl_in_use; ch <= fbw_channels; ch++) {
1015             if (s->dba_mode[ch] == DBA_NEW) {
1016                 s->dba_nsegs[ch] = get_bits(gbc, 3);
1017                 for (seg = 0; seg <= s->dba_nsegs[ch]; seg++) {
1018                     s->dba_offsets[ch][seg] = get_bits(gbc, 5);
1019                     s->dba_lengths[ch][seg] = get_bits(gbc, 4);
1020                     s->dba_values[ch][seg] = get_bits(gbc, 3);
1021                 }
1022             }
1023         }
1024     } else if(blk == 0) {
1025         for(ch=0; ch<=s->channels; ch++) {
1026             s->dba_mode[ch] = DBA_NONE;
1027         }
1028     }
1029
1030     /* Bit allocation */
1031     for(ch=!s->cpl_in_use; ch<=s->channels; ch++) {
1032         if(bit_alloc_stages[ch] > 2) {
1033             /* Exponent mapping into PSD and PSD integration */
1034             ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
1035                                       s->start_freq[ch], s->end_freq[ch],
1036                                       s->psd[ch], s->band_psd[ch]);
1037         }
1038         if(bit_alloc_stages[ch] > 1) {
1039             /* Compute excitation function, Compute masking curve, and
1040                Apply delta bit allocation */
1041             ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1042                                        s->start_freq[ch], s->end_freq[ch],
1043                                        s->fast_gain[ch], (ch == s->lfe_ch),
1044                                        s->dba_mode[ch], s->dba_nsegs[ch],
1045                                        s->dba_offsets[ch], s->dba_lengths[ch],
1046                                        s->dba_values[ch], s->mask[ch]);
1047         }
1048         if(bit_alloc_stages[ch] > 0) {
1049             /* Compute bit allocation */
1050             ff_ac3_bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1051                                       s->start_freq[ch], s->end_freq[ch],
1052                                       s->snr_offset[ch],
1053                                       s->bit_alloc_params.floor,
1054                                       s->bap[ch]);
1055         }
1056     }
1057
1058     /* unused dummy data */
1059     if (get_bits1(gbc)) {
1060         int skipl = get_bits(gbc, 9);
1061         while(skipl--)
1062             skip_bits(gbc, 8);
1063     }
1064
1065     /* unpack the transform coefficients
1066        this also uncouples channels if coupling is in use. */
1067     if (get_transform_coeffs(s)) {
1068         av_log(s->avctx, AV_LOG_ERROR, "Error in routine get_transform_coeffs\n");
1069         return -1;
1070     }
1071
1072     /* recover coefficients if rematrixing is in use */
1073     if(s->channel_mode == AC3_CHMODE_STEREO)
1074         do_rematrixing(s);
1075
1076     /* apply scaling to coefficients (headroom, dynrng) */
1077     for(ch=1; ch<=s->channels; ch++) {
1078         float gain = s->mul_bias / 4194304.0f;
1079         if(s->channel_mode == AC3_CHMODE_DUALMONO) {
1080             gain *= s->dynamic_range[ch-1];
1081         } else {
1082             gain *= s->dynamic_range[0];
1083         }
1084         for(i=0; i<256; i++) {
1085             s->transform_coeffs[ch][i] = s->fixed_coeffs[ch][i] * gain;
1086         }
1087     }
1088
1089     /* downmix and MDCT. order depends on whether block switching is used for
1090        any channel in this block. this is because coefficients for the long
1091        and short transforms cannot be mixed. */
1092     downmix_output = s->channels != s->out_channels &&
1093                      !((s->output_mode & AC3_OUTPUT_LFEON) &&
1094                      s->fbw_channels == s->out_channels);
1095     if(different_transforms) {
1096         /* the delay samples have already been downmixed, so we upmix the delay
1097            samples in order to reconstruct all channels before downmixing. */
1098         if(s->downmixed) {
1099             s->downmixed = 0;
1100             ac3_upmix_delay(s);
1101         }
1102
1103         do_imdct(s, s->channels);
1104
1105         if(downmix_output) {
1106             ac3_downmix(s, s->output, 0);
1107         }
1108     } else {
1109         if(downmix_output) {
1110             ac3_downmix(s, s->transform_coeffs, 1);
1111         }
1112
1113         if(!s->downmixed) {
1114             s->downmixed = 1;
1115             ac3_downmix(s, s->delay, 0);
1116         }
1117
1118         do_imdct(s, s->out_channels);
1119     }
1120
1121     /* convert float to 16-bit integer */
1122     for(ch=0; ch<s->out_channels; ch++) {
1123         for(i=0; i<256; i++) {
1124             s->output[ch][i] += s->add_bias;
1125         }
1126         s->dsp.float_to_int16(s->int_output[ch], s->output[ch], 256);
1127     }
1128
1129     return 0;
1130 }
1131
1132 /**
1133  * Decode a single AC-3 frame.
1134  */
1135 static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
1136                             const uint8_t *buf, int buf_size)
1137 {
1138     AC3DecodeContext *s = avctx->priv_data;
1139     int16_t *out_samples = (int16_t *)data;
1140     int i, blk, ch, err;
1141
1142     /* initialize the GetBitContext with the start of valid AC-3 Frame */
1143     if (s->input_buffer) {
1144         /* copy input buffer to decoder context to avoid reading past the end
1145            of the buffer, which can be caused by a damaged input stream. */
1146         memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_MAX_FRAME_SIZE));
1147         init_get_bits(&s->gbc, s->input_buffer, buf_size * 8);
1148     } else {
1149         init_get_bits(&s->gbc, buf, buf_size * 8);
1150     }
1151
1152     /* parse the syncinfo */
1153     err = ac3_parse_header(s);
1154     if(err) {
1155         switch(err) {
1156             case AC3_PARSE_ERROR_SYNC:
1157                 av_log(avctx, AV_LOG_ERROR, "frame sync error : cannot use error concealment\n");
1158                 return -1;
1159             case AC3_PARSE_ERROR_BSID:
1160                 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1161                 break;
1162             case AC3_PARSE_ERROR_SAMPLE_RATE:
1163                 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1164                 break;
1165             case AC3_PARSE_ERROR_FRAME_SIZE:
1166                 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1167                 break;
1168             case AC3_PARSE_ERROR_FRAME_TYPE:
1169                 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1170                 break;
1171             default:
1172                 av_log(avctx, AV_LOG_ERROR, "invalid header\n");
1173                 break;
1174         }
1175     }
1176
1177     /* check that reported frame size fits in input buffer */
1178     if(s->frame_size > buf_size) {
1179         av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1180         return -1;
1181     }
1182
1183     /* check for crc mismatch */
1184     if(avctx->error_resilience >= FF_ER_CAREFUL) {
1185         if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) {
1186             av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1187             err = 1;
1188         }
1189     }
1190
1191     /* if frame is ok, set audio parameters */
1192     if (!err) {
1193         avctx->sample_rate = s->sample_rate;
1194         avctx->bit_rate = s->bit_rate;
1195
1196         /* channel config */
1197         s->out_channels = s->channels;
1198         if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
1199                 avctx->request_channels < s->channels) {
1200             s->out_channels = avctx->request_channels;
1201             s->output_mode  = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
1202         }
1203         avctx->channels = s->out_channels;
1204
1205         /* set downmixing coefficients if needed */
1206         if(s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1207                 s->fbw_channels == s->out_channels)) {
1208             set_downmix_coeffs(s);
1209         }
1210     }
1211
1212     /* parse the audio blocks */
1213     for (blk = 0; blk < NB_BLOCKS; blk++) {
1214         if (!err && ac3_parse_audio_block(s, blk)) {
1215             av_log(avctx, AV_LOG_ERROR, "error parsing the audio block\n");
1216         }
1217         for (i = 0; i < 256; i++)
1218             for (ch = 0; ch < s->out_channels; ch++)
1219                 *(out_samples++) = s->int_output[ch][i];
1220     }
1221     *data_size = NB_BLOCKS * 256 * avctx->channels * sizeof (int16_t);
1222     return s->frame_size;
1223 }
1224
1225 /**
1226  * Uninitialize the AC-3 decoder.
1227  */
1228 static av_cold int ac3_decode_end(AVCodecContext *avctx)
1229 {
1230     AC3DecodeContext *s = avctx->priv_data;
1231     ff_mdct_end(&s->imdct_512);
1232     ff_mdct_end(&s->imdct_256);
1233
1234     av_freep(&s->input_buffer);
1235
1236     return 0;
1237 }
1238
1239 AVCodec ac3_decoder = {
1240     .name = "ac3",
1241     .type = CODEC_TYPE_AUDIO,
1242     .id = CODEC_ID_AC3,
1243     .priv_data_size = sizeof (AC3DecodeContext),
1244     .init = ac3_decode_init,
1245     .close = ac3_decode_end,
1246     .decode = ac3_decode_frame,
1247     .long_name = "ATSC A/52 / AC-3",
1248 };