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