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