OSDN Git Service

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