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