1 /*
2  * AC-3 Audio Decoder
3  * This code is developed as part of Google Summer of Code 2006 Program.
4  *
5  * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com).
6  * Copyright (c) 2007 Justin Ruggles
7  *
8  * Portions of this code are derived from liba52
9  * http://liba52.sourceforge.net
10  * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
11  * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
12  *
13  * This file is part of FFmpeg.
14  *
15  * FFmpeg is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU General Public
17  * License as published by the Free Software Foundation; either
18  * version 2 of the License, or (at your option) any later version.
19  *
20  * FFmpeg is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23  * General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public
26  * License along with FFmpeg; if not, write to the Free Software
27  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
28  */
29 
30 #include <stdio.h>
31 #include <stddef.h>
32 #include <math.h>
33 #include <string.h>
34 
35 #include "avcodec.h"
36 #include "ac3_parser.h"
37 #include "bitstream.h"
38 #include "crc.h"
39 #include "dsputil.h"
40 #include "random.h"
41 
42 /** Maximum possible frame size when the specification limit is ignored */
43 #define AC3_MAX_FRAME_SIZE 21695
44 
45 /**
46  * Table of bin locations for rematrixing bands
47  * reference: Section 7.5.2 Rematrixing : Frequency Band Definitions
48  */
49 static const uint8_t rematrix_band_tab[5] = { 13, 25, 37, 61, 253 };
50 
51 /** table for grouping exponents */
52 static uint8_t exp_ungroup_tab[128][3];
53 
54 
55 /** tables for ungrouping mantissas */
56 static int b1_mantissas[32][3];
57 static int b2_mantissas[128][3];
58 static int b3_mantissas[8];
59 static int b4_mantissas[128][2];
60 static int b5_mantissas[16];
61 
62 /**
63  * Quantization table: levels for symmetric. bits for asymmetric.
64  * reference: Table 7.18 Mapping of bap to Quantizer
65  */
66 static const uint8_t quantization_tab[16] = {
67     0, 3, 5, 7, 11, 15,
68     5, 6, 7, 8, 9, 10, 11, 12, 14, 16
69 };
70 
71 /** dynamic range table. converts codes to scale factors. */
72 static float dynamic_range_tab[256];
73 
74 /** Adjustments in dB gain */
75 #define LEVEL_MINUS_3DB         0.7071067811865476
76 #define LEVEL_MINUS_4POINT5DB   0.5946035575013605
77 #define LEVEL_MINUS_6DB         0.5000000000000000
78 #define LEVEL_MINUS_9DB         0.3535533905932738
79 #define LEVEL_ZERO              0.0000000000000000
80 #define LEVEL_ONE               1.0000000000000000
81 
82 static const float gain_levels[6] = {
83     LEVEL_ZERO,
84     LEVEL_ONE,
85     LEVEL_MINUS_3DB,
86     LEVEL_MINUS_4POINT5DB,
87     LEVEL_MINUS_6DB,
88     LEVEL_MINUS_9DB
89 };
90 
91 /**
92  * Table for default stereo downmixing coefficients
93  * reference: Section 7.8.2 Downmixing Into Two Channels
94  */
95 static const uint8_t ac3_default_coeffs[8][5][2] = {
96     { { 1, 0 }, { 0, 1 },                               },
97     { { 2, 2 },                                         },
98     { { 1, 0 }, { 0, 1 },                               },
99     { { 1, 0 }, { 3, 3 }, { 0, 1 },                     },
100     { { 1, 0 }, { 0, 1 }, { 4, 4 },                     },
101     { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 5, 5 },           },
102     { { 1, 0 }, { 0, 1 }, { 4, 0 }, { 0, 4 },           },
103     { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 4, 0 }, { 0, 4 }, },
104 };
105 
106 /* override ac3.h to include coupling channel */
107 #undef AC3_MAX_CHANNELS
108 #define AC3_MAX_CHANNELS 7
109 #define CPL_CH 0
110 
111 #define AC3_OUTPUT_LFEON  8
112 
113 typedef struct {
114     int channel_mode;                       ///< channel mode (acmod)
115     int block_switch[AC3_MAX_CHANNELS];     ///< block switch flags
116     int dither_flag[AC3_MAX_CHANNELS];      ///< dither flags
117     int dither_all;                         ///< true if all channels are dithered
118     int cpl_in_use;                         ///< coupling in use
119     int channel_in_cpl[AC3_MAX_CHANNELS];   ///< channel in coupling
120     int phase_flags_in_use;                 ///< phase flags in use
121     int phase_flags[18];                    ///< phase flags
122     int cpl_band_struct[18];                ///< coupling band structure
123     int num_rematrixing_bands;              ///< number of rematrixing bands
124     int rematrixing_flags[4];               ///< rematrixing flags
125     int exp_strategy[AC3_MAX_CHANNELS];     ///< exponent strategies
126     int snr_offset[AC3_MAX_CHANNELS];       ///< signal-to-noise ratio offsets
127     int fast_gain[AC3_MAX_CHANNELS];        ///< fast gain values (signal-to-mask ratio)
128     int dba_mode[AC3_MAX_CHANNELS];         ///< delta bit allocation mode
129     int dba_nsegs[AC3_MAX_CHANNELS];        ///< number of delta segments
130     uint8_t dba_offsets[AC3_MAX_CHANNELS][8]; ///< delta segment offsets
131     uint8_t dba_lengths[AC3_MAX_CHANNELS][8]; ///< delta segment lengths
132     uint8_t dba_values[AC3_MAX_CHANNELS][8];  ///< delta values for each segment
133 
134     int sample_rate;                        ///< sample frequency, in Hz
135     int bit_rate;                           ///< stream bit rate, in bits-per-second
136     int frame_size;                         ///< current frame size, in bytes
137 
138     int channels;                           ///< number of total channels
139     int fbw_channels;                       ///< number of full-bandwidth channels
140     int lfe_on;                             ///< lfe channel in use
141     int lfe_ch;                             ///< index of LFE channel
142     int output_mode;                        ///< output channel configuration
143     int out_channels;                       ///< number of output channels
144 
145     int center_mix_level;                   ///< Center mix level index
146     int surround_mix_level;                 ///< Surround mix level index
147     float downmix_coeffs[AC3_MAX_CHANNELS][2];  ///< stereo downmix coefficients
148     float downmix_coeff_adjust[2];          ///< adjustment needed for each output channel when downmixing
149     float dynamic_range[2];                 ///< dynamic range
150     int   cpl_coords[AC3_MAX_CHANNELS][18]; ///< coupling coordinates
151     int   num_cpl_bands;                    ///< number of coupling bands
152     int   num_cpl_subbands;                 ///< number of coupling sub bands
153     int   start_freq[AC3_MAX_CHANNELS];     ///< start frequency bin
154     int   end_freq[AC3_MAX_CHANNELS];       ///< end frequency bin
155     AC3BitAllocParameters bit_alloc_params; ///< bit allocation parameters
156 
157     int8_t  dexps[AC3_MAX_CHANNELS][256];   ///< decoded exponents
158     uint8_t bap[AC3_MAX_CHANNELS][256];     ///< bit allocation pointers
159     int16_t psd[AC3_MAX_CHANNELS][256];     ///< scaled exponents
160     int16_t band_psd[AC3_MAX_CHANNELS][50]; ///< interpolated exponents
161     int16_t mask[AC3_MAX_CHANNELS][50];     ///< masking curve values
162 
163     int fixed_coeffs[AC3_MAX_CHANNELS][256];    ///> fixed-point transform coefficients
164     DECLARE_ALIGNED_16(float, transform_coeffs[AC3_MAX_CHANNELS][256]);  ///< transform coefficients
165     int downmixed;                              ///< indicates if coeffs are currently downmixed
166 
167     /* For IMDCT. */
168     MDCTContext imdct_512;                  ///< for 512 sample IMDCT
169     MDCTContext imdct_256;                  ///< for 256 sample IMDCT
170     DSPContext  dsp;                        ///< for optimization
171     float       add_bias;                   ///< offset for float_to_int16 conversion
172     float       mul_bias;                   ///< scaling for float_to_int16 conversion
173 
174     DECLARE_ALIGNED_16(float, output[AC3_MAX_CHANNELS][256]);       ///< output after imdct transform and windowing
175     DECLARE_ALIGNED_16(short, int_output[AC3_MAX_CHANNELS-1][256]); ///< final 16-bit integer output
176     DECLARE_ALIGNED_16(float, delay[AC3_MAX_CHANNELS][256]);        ///< delay - added to the next block
177     DECLARE_ALIGNED_16(float, tmp_imdct[256]);                      ///< temporary storage for imdct transform
178     DECLARE_ALIGNED_16(float, tmp_output[512]);                     ///< temporary storage for output before windowing
179     DECLARE_ALIGNED_16(float, window[256]);                         ///< window coefficients
180 
181     /* Miscellaneous. */
182     GetBitContext gbc;                      ///< bitstream reader
183     AVRandomState dith_state;               ///< for dither generation
184     AVCodecContext *avctx;                  ///< parent context
185     uint8_t *input_buffer;                  ///< temp buffer to prevent overread
186 } AC3DecodeContext;
187 
188 /**
189  * Symmetrical Dequantization
190  * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
191  *            Tables 7.19 to 7.23
192  */
193 static inline int
symmetric_dequant(int code,int levels)194 symmetric_dequant(int code, int levels)
195 {
196     return ((code - (levels >> 1)) << 24) / levels;
197 }
198 
199 /*
200  * Initialize tables at runtime.
201  */
ac3_tables_init(void)202 static av_cold void ac3_tables_init(void)
203 {
204     int i;
205 
206     /* generate grouped mantissa tables
207        reference: Section 7.3.5 Ungrouping of Mantissas */
208     for(i=0; i<32; i++) {
209         /* bap=1 mantissas */
210         b1_mantissas[i][0] = symmetric_dequant( i / 9     , 3);
211         b1_mantissas[i][1] = symmetric_dequant((i % 9) / 3, 3);
212         b1_mantissas[i][2] = symmetric_dequant((i % 9) % 3, 3);
213     }
214     for(i=0; i<128; i++) {
215         /* bap=2 mantissas */
216         b2_mantissas[i][0] = symmetric_dequant( i / 25     , 5);
217         b2_mantissas[i][1] = symmetric_dequant((i % 25) / 5, 5);
218         b2_mantissas[i][2] = symmetric_dequant((i % 25) % 5, 5);
219 
220         /* bap=4 mantissas */
221         b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
222         b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
223     }
224     /* generate ungrouped mantissa tables
225        reference: Tables 7.21 and 7.23 */
226     for(i=0; i<7; i++) {
227         /* bap=3 mantissas */
228         b3_mantissas[i] = symmetric_dequant(i, 7);
229     }
230     for(i=0; i<15; i++) {
231         /* bap=5 mantissas */
232         b5_mantissas[i] = symmetric_dequant(i, 15);
233     }
234 
235     /* generate dynamic range table
236        reference: Section 7.7.1 Dynamic Range Control */
237     for(i=0; i<256; i++) {
238         int v = (i >> 5) - ((i >> 7) << 3) - 5;
239         dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
240     }
241 
242     /* generate exponent tables
243        reference: Section 7.1.3 Exponent Decoding */
244     for(i=0; i<128; i++) {
245         exp_ungroup_tab[i][0] =  i / 25;
246         exp_ungroup_tab[i][1] = (i % 25) / 5;
247         exp_ungroup_tab[i][2] = (i % 25) % 5;
248     }
249 }
250 
251 
252 /**
253  * AVCodec initialization
254  */
ac3_decode_init(AVCodecContext * avctx)255 static av_cold int ac3_decode_init(AVCodecContext *avctx)
256 {
257     AC3DecodeContext *s = avctx->priv_data;
258     s->avctx = avctx;
259 
260     ac3_common_init();
261     ac3_tables_init();
262     ff_mdct_init(&s->imdct_256, 8, 1);
263     ff_mdct_init(&s->imdct_512, 9, 1);
264     ff_kbd_window_init(s->window, 5.0, 256);
265     dsputil_init(&s->dsp, avctx);
266     av_init_random(0, &s->dith_state);
267 
268     /* set bias values for float to int16 conversion */
269     if(s->dsp.float_to_int16 == ff_float_to_int16_c) {
270         s->add_bias = 385.0f;
271         s->mul_bias = 1.0f;
272     } else {
273         s->add_bias = 0.0f;
274         s->mul_bias = 32767.0f;
275     }
276 
277     /* allow downmixing to stereo or mono */
278     if (avctx->channels > 0 && avctx->request_channels > 0 &&
279             avctx->request_channels < avctx->channels &&
280             avctx->request_channels <= 2) {
281         avctx->channels = avctx->request_channels;
282     }
283     s->downmixed = 1;
284 
285     /* allocate context input buffer */
286     if (avctx->error_resilience >= FF_ER_CAREFUL) {
287         s->input_buffer = av_mallocz(AC3_MAX_FRAME_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
288         if (!s->input_buffer)
289             return AVERROR_NOMEM;
290     }
291 
292     return 0;
293 }
294 
295 /**
296  * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
297  * GetBitContext within AC3DecodeContext must point to
298  * start of the synchronized ac3 bitstream.
299  */
ac3_parse_header(AC3DecodeContext * s)300 static int ac3_parse_header(AC3DecodeContext *s)
301 {
302     AC3HeaderInfo hdr;
303     GetBitContext *gbc = &s->gbc;
304     int err, i;
305 
306     err = ff_ac3_parse_header(gbc, &hdr);
307     if(err)
308         return err;
309 
310     if(hdr.bitstream_id > 10)
311         return AC3_PARSE_ERROR_BSID;
312 
313     /* get decoding parameters from header info */
314     s->bit_alloc_params.sr_code     = hdr.sr_code;
315     s->channel_mode                 = hdr.channel_mode;
316     s->lfe_on                       = hdr.lfe_on;
317     s->bit_alloc_params.sr_shift    = hdr.sr_shift;
318     s->sample_rate                  = hdr.sample_rate;
319     s->bit_rate                     = hdr.bit_rate;
320     s->channels                     = hdr.channels;
321     s->fbw_channels                 = s->channels - s->lfe_on;
322     s->lfe_ch                       = s->fbw_channels + 1;
323     s->frame_size                   = hdr.frame_size;
324     s->center_mix_level             = hdr.center_mix_level;
325     s->surround_mix_level           = hdr.surround_mix_level;
326 
327     /* set default output to all source channels */
328     s->out_channels = s->channels;
329     s->output_mode = s->channel_mode;
330     if(s->lfe_on)
331         s->output_mode |= AC3_OUTPUT_LFEON;
332 
333     /* read the rest of the bsi. read twice for dual mono mode. */
334     i = !(s->channel_mode);
335     do {
336         skip_bits(gbc, 5); // skip dialog normalization
337         if (get_bits1(gbc))
338             skip_bits(gbc, 8); //skip compression
339         if (get_bits1(gbc))
340             skip_bits(gbc, 8); //skip language code
341         if (get_bits1(gbc))
342             skip_bits(gbc, 7); //skip audio production information
343     } while (i--);
344 
345     skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
346 
347     /* skip the timecodes (or extra bitstream information for Alternate Syntax)
348        TODO: read & use the xbsi1 downmix levels */
349     if (get_bits1(gbc))
350         skip_bits(gbc, 14); //skip timecode1 / xbsi1
351     if (get_bits1(gbc))
352         skip_bits(gbc, 14); //skip timecode2 / xbsi2
353 
354     /* skip additional bitstream info */
355     if (get_bits1(gbc)) {
356         i = get_bits(gbc, 6);
357         do {
358             skip_bits(gbc, 8);
359         } while(i--);
360     }
361 
362     return 0;
363 }
364 
365 /**
366  * Set stereo downmixing coefficients based on frame header info.
367  * reference: Section 7.8.2 Downmixing Into Two Channels
368  */
set_downmix_coeffs(AC3DecodeContext * s)369 static void set_downmix_coeffs(AC3DecodeContext *s)
370 {
371     int i;
372     float cmix = gain_levels[s->center_mix_level];
373     float smix = gain_levels[s->surround_mix_level];
374 
375     for(i=0; i<s->fbw_channels; i++) {
376         s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
377         s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
378     }
379     if(s->channel_mode > 1 && s->channel_mode & 1) {
380         s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
381     }
382     if(s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
383         int nf = s->channel_mode - 2;
384         s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
385     }
386     if(s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
387         int nf = s->channel_mode - 4;
388         s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
389     }
390 
391     /* calculate adjustment needed for each channel to avoid clipping */
392     s->downmix_coeff_adjust[0] = s->downmix_coeff_adjust[1] = 0.0f;
393     for(i=0; i<s->fbw_channels; i++) {
394         s->downmix_coeff_adjust[0] += s->downmix_coeffs[i][0];
395         s->downmix_coeff_adjust[1] += s->downmix_coeffs[i][1];
396     }
397     s->downmix_coeff_adjust[0] = 1.0f / s->downmix_coeff_adjust[0];
398     s->downmix_coeff_adjust[1] = 1.0f / s->downmix_coeff_adjust[1];
399 }
400 
401 /**
402  * Decode the grouped exponents according to exponent strategy.
403  * reference: Section 7.1.3 Exponent Decoding
404  */
decode_exponents(GetBitContext * gbc,int exp_strategy,int ngrps,uint8_t absexp,int8_t * dexps)405 static void decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
406                              uint8_t absexp, int8_t *dexps)
407 {
408     int i, j, grp, group_size;
409     int dexp[256];
410     int expacc, prevexp;
411 
412     /* unpack groups */
413     group_size = exp_strategy + (exp_strategy == EXP_D45);
414     for(grp=0,i=0; grp<ngrps; grp++) {
415         expacc = get_bits(gbc, 7);
416         dexp[i++] = exp_ungroup_tab[expacc][0];
417         dexp[i++] = exp_ungroup_tab[expacc][1];
418         dexp[i++] = exp_ungroup_tab[expacc][2];
419     }
420 
421     /* convert to absolute exps and expand groups */
422     prevexp = absexp;
423     for(i=0; i<ngrps*3; i++) {
424         prevexp = av_clip(prevexp + dexp[i]-2, 0, 24);
425         for(j=0; j<group_size; j++) {
426             dexps[(i*group_size)+j] = prevexp;
427         }
428     }
429 }
430 
431 /**
432  * Generate transform coefficients for each coupled channel in the coupling
433  * range using the coupling coefficients and coupling coordinates.
434  * reference: Section 7.4.3 Coupling Coordinate Format
435  */
uncouple_channels(AC3DecodeContext * s)436 static void uncouple_channels(AC3DecodeContext *s)
437 {
438     int i, j, ch, bnd, subbnd;
439 
440     subbnd = -1;
441     i = s->start_freq[CPL_CH];
442     for(bnd=0; bnd<s->num_cpl_bands; bnd++) {
443         do {
444             subbnd++;
445             for(j=0; j<12; j++) {
446                 for(ch=1; ch<=s->fbw_channels; ch++) {
447                     if(s->channel_in_cpl[ch]) {
448                         s->fixed_coeffs[ch][i] = ((int64_t)s->fixed_coeffs[CPL_CH][i] * (int64_t)s->cpl_coords[ch][bnd]) >> 23;
449                         if (ch == 2 && s->phase_flags[bnd])
450                             s->fixed_coeffs[ch][i] = -s->fixed_coeffs[ch][i];
451                     }
452                 }
453                 i++;
454             }
455         } while(s->cpl_band_struct[subbnd]);
456     }
457 }
458 
459 /**
460  * Grouped mantissas for 3-level 5-level and 11-level quantization
461  */
462 typedef struct {
463     int b1_mant[3];
464     int b2_mant[3];
465     int b4_mant[2];
466     int b1ptr;
467     int b2ptr;
468     int b4ptr;
469 } mant_groups;
470 
471 /**
472  * Get the transform coefficients for a particular channel
473  * reference: Section 7.3 Quantization and Decoding of Mantissas
474  */
get_transform_coeffs_ch(AC3DecodeContext * s,int ch_index,mant_groups * m)475 static int get_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
476 {
477     GetBitContext *gbc = &s->gbc;
478     int i, gcode, tbap, start, end;
479     uint8_t *exps;
480     uint8_t *bap;
481     int *coeffs;
482 
483     exps = s->dexps[ch_index];
484     bap = s->bap[ch_index];
485     coeffs = s->fixed_coeffs[ch_index];
486     start = s->start_freq[ch_index];
487     end = s->end_freq[ch_index];
488 
489     for (i = start; i < end; i++) {
490         tbap = bap[i];
491         switch (tbap) {
492             case 0:
493                 coeffs[i] = (av_random(&s->dith_state) & 0x7FFFFF) - 4194304;
494                 break;
495 
496             case 1:
497                 if(m->b1ptr > 2) {
498                     gcode = get_bits(gbc, 5);
499                     m->b1_mant[0] = b1_mantissas[gcode][0];
500                     m->b1_mant[1] = b1_mantissas[gcode][1];
501                     m->b1_mant[2] = b1_mantissas[gcode][2];
502                     m->b1ptr = 0;
503                 }
504                 coeffs[i] = m->b1_mant[m->b1ptr++];
505                 break;
506 
507             case 2:
508                 if(m->b2ptr > 2) {
509                     gcode = get_bits(gbc, 7);
510                     m->b2_mant[0] = b2_mantissas[gcode][0];
511                     m->b2_mant[1] = b2_mantissas[gcode][1];
512                     m->b2_mant[2] = b2_mantissas[gcode][2];
513                     m->b2ptr = 0;
514                 }
515                 coeffs[i] = m->b2_mant[m->b2ptr++];
516                 break;
517 
518             case 3:
519                 coeffs[i] = b3_mantissas[get_bits(gbc, 3)];
520                 break;
521 
522             case 4:
523                 if(m->b4ptr > 1) {
524                     gcode = get_bits(gbc, 7);
525                     m->b4_mant[0] = b4_mantissas[gcode][0];
526                     m->b4_mant[1] = b4_mantissas[gcode][1];
527                     m->b4ptr = 0;
528                 }
529                 coeffs[i] = m->b4_mant[m->b4ptr++];
530                 break;
531 
532             case 5:
533                 coeffs[i] = b5_mantissas[get_bits(gbc, 4)];
534                 break;
535 
536             default: {
537                 /* asymmetric dequantization */
538                 int qlevel = quantization_tab[tbap];
539                 coeffs[i] = get_sbits(gbc, qlevel) << (24 - qlevel);
540                 break;
541             }
542         }
543         coeffs[i] >>= exps[i];
544     }
545 
546     return 0;
547 }
548 
549 /**
550  * Remove random dithering from coefficients with zero-bit mantissas
551  * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
552  */
remove_dithering(AC3DecodeContext * s)553 static void remove_dithering(AC3DecodeContext *s) {
554     int ch, i;
555     int end=0;
556     int *coeffs;
557     uint8_t *bap;
558 
559     for(ch=1; ch<=s->fbw_channels; ch++) {
560         if(!s->dither_flag[ch]) {
561             coeffs = s->fixed_coeffs[ch];
562             bap = s->bap[ch];
563             if(s->channel_in_cpl[ch])
564                 end = s->start_freq[CPL_CH];
565             else
566                 end = s->end_freq[ch];
567             for(i=0; i<end; i++) {
568                 if(!bap[i])
569                     coeffs[i] = 0;
570             }
571             if(s->channel_in_cpl[ch]) {
572                 bap = s->bap[CPL_CH];
573                 for(; i<s->end_freq[CPL_CH]; i++) {
574                     if(!bap[i])
575                         coeffs[i] = 0;
576                 }
577             }
578         }
579     }
580 }
581 
582 /**
583  * Get the transform coefficients.
584  */
get_transform_coeffs(AC3DecodeContext * s)585 static int get_transform_coeffs(AC3DecodeContext *s)
586 {
587     int ch, end;
588     int got_cplchan = 0;
589     mant_groups m;
590 
591     m.b1ptr = m.b2ptr = m.b4ptr = 3;
592 
593     for (ch = 1; ch <= s->channels; ch++) {
594         /* transform coefficients for full-bandwidth channel */
595         if (get_transform_coeffs_ch(s, ch, &m))
596             return -1;
597         /* tranform coefficients for coupling channel come right after the
598            coefficients for the first coupled channel*/
599         if (s->channel_in_cpl[ch])  {
600             if (!got_cplchan) {
601                 if (get_transform_coeffs_ch(s, CPL_CH, &m)) {
602                     av_log(s->avctx, AV_LOG_ERROR, "error in decoupling channels\n");
603                     return -1;
604                 }
605                 uncouple_channels(s);
606                 got_cplchan = 1;
607             }
608             end = s->end_freq[CPL_CH];
609         } else {
610             end = s->end_freq[ch];
611         }
612         do
613             s->transform_coeffs[ch][end] = 0;
614         while(++end < 256);
615     }
616 
617     /* if any channel doesn't use dithering, zero appropriate coefficients */
618     if(!s->dither_all)
619         remove_dithering(s);
620 
621     return 0;
622 }
623 
624 /**
625  * Stereo rematrixing.
626  * reference: Section 7.5.4 Rematrixing : Decoding Technique
627  */
do_rematrixing(AC3DecodeContext * s)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  */
do_imdct_256(AC3DecodeContext * s,int chindex)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  */
do_imdct(AC3DecodeContext * s,int channels)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  */
ac3_downmix(AC3DecodeContext * s,float samples[AC3_MAX_CHANNELS][256],int ch_offset)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  */
ac3_upmix_delay(AC3DecodeContext * s)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  */
ac3_parse_audio_block(AC3DecodeContext * s,int blk)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             /* determine which channels are coupled */
822             for (ch = 1; ch <= fbw_channels; ch++)
823                 s->channel_in_cpl[ch] = get_bits1(gbc);
824 
825             /* phase flags in use */
826             if (channel_mode == AC3_CHMODE_STEREO)
827                 s->phase_flags_in_use = get_bits1(gbc);
828 
829             /* coupling frequency range and band structure */
830             cpl_begin_freq = get_bits(gbc, 4);
831             cpl_end_freq = get_bits(gbc, 4);
832             if (3 + cpl_end_freq - cpl_begin_freq < 0) {
833                 av_log(s->avctx, AV_LOG_ERROR, "3+cplendf = %d < cplbegf = %d\n", 3+cpl_end_freq, cpl_begin_freq);
834                 return -1;
835             }
836             s->num_cpl_bands = s->num_cpl_subbands = 3 + cpl_end_freq - cpl_begin_freq;
837             s->start_freq[CPL_CH] = cpl_begin_freq * 12 + 37;
838             s->end_freq[CPL_CH] = cpl_end_freq * 12 + 73;
839             for (bnd = 0; bnd < s->num_cpl_subbands - 1; bnd++) {
840                 if (get_bits1(gbc)) {
841                     s->cpl_band_struct[bnd] = 1;
842                     s->num_cpl_bands--;
843                 }
844             }
845             s->cpl_band_struct[s->num_cpl_subbands-1] = 0;
846         } else {
847             /* coupling not in use */
848             for (ch = 1; ch <= fbw_channels; ch++)
849                 s->channel_in_cpl[ch] = 0;
850         }
851     }
852 
853     /* coupling coordinates */
854     if (s->cpl_in_use) {
855         int cpl_coords_exist = 0;
856 
857         for (ch = 1; ch <= fbw_channels; ch++) {
858             if (s->channel_in_cpl[ch]) {
859                 if (get_bits1(gbc)) {
860                     int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
861                     cpl_coords_exist = 1;
862                     master_cpl_coord = 3 * get_bits(gbc, 2);
863                     for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
864                         cpl_coord_exp = get_bits(gbc, 4);
865                         cpl_coord_mant = get_bits(gbc, 4);
866                         if (cpl_coord_exp == 15)
867                             s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
868                         else
869                             s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
870                         s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
871                     }
872                 }
873             }
874         }
875         /* phase flags */
876         if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
877             for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
878                 s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
879             }
880         }
881     }
882 
883     /* stereo rematrixing strategy and band structure */
884     if (channel_mode == AC3_CHMODE_STEREO) {
885         if (get_bits1(gbc)) {
886             s->num_rematrixing_bands = 4;
887             if(s->cpl_in_use && s->start_freq[CPL_CH] <= 61)
888                 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
889             for(bnd=0; bnd<s->num_rematrixing_bands; bnd++)
890                 s->rematrixing_flags[bnd] = get_bits1(gbc);
891         }
892     }
893 
894     /* exponent strategies for each channel */
895     s->exp_strategy[CPL_CH] = EXP_REUSE;
896     s->exp_strategy[s->lfe_ch] = EXP_REUSE;
897     for (ch = !s->cpl_in_use; ch <= s->channels; ch++) {
898         if(ch == s->lfe_ch)
899             s->exp_strategy[ch] = get_bits(gbc, 1);
900         else
901             s->exp_strategy[ch] = get_bits(gbc, 2);
902         if(s->exp_strategy[ch] != EXP_REUSE)
903             bit_alloc_stages[ch] = 3;
904     }
905 
906     /* channel bandwidth */
907     for (ch = 1; ch <= fbw_channels; ch++) {
908         s->start_freq[ch] = 0;
909         if (s->exp_strategy[ch] != EXP_REUSE) {
910             int prev = s->end_freq[ch];
911             if (s->channel_in_cpl[ch])
912                 s->end_freq[ch] = s->start_freq[CPL_CH];
913             else {
914                 int bandwidth_code = get_bits(gbc, 6);
915                 if (bandwidth_code > 60) {
916                     av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60", bandwidth_code);
917                     return -1;
918                 }
919                 s->end_freq[ch] = bandwidth_code * 3 + 73;
920             }
921             if(blk > 0 && s->end_freq[ch] != prev)
922                 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
923         }
924     }
925     s->start_freq[s->lfe_ch] = 0;
926     s->end_freq[s->lfe_ch] = 7;
927 
928     /* decode exponents for each channel */
929     for (ch = !s->cpl_in_use; ch <= s->channels; ch++) {
930         if (s->exp_strategy[ch] != EXP_REUSE) {
931             int group_size, num_groups;
932             group_size = 3 << (s->exp_strategy[ch] - 1);
933             if(ch == CPL_CH)
934                 num_groups = (s->end_freq[ch] - s->start_freq[ch]) / group_size;
935             else if(ch == s->lfe_ch)
936                 num_groups = 2;
937             else
938                 num_groups = (s->end_freq[ch] + group_size - 4) / group_size;
939             s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
940             decode_exponents(gbc, s->exp_strategy[ch], num_groups, s->dexps[ch][0],
941                              &s->dexps[ch][s->start_freq[ch]+!!ch]);
942             if(ch != CPL_CH && ch != s->lfe_ch)
943                 skip_bits(gbc, 2); /* skip gainrng */
944         }
945     }
946 
947     /* bit allocation information */
948     if (get_bits1(gbc)) {
949         s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
950         s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
951         s->bit_alloc_params.slow_gain  = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
952         s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
953         s->bit_alloc_params.floor  = ff_ac3_floor_tab[get_bits(gbc, 3)];
954         for(ch=!s->cpl_in_use; ch<=s->channels; ch++) {
955             bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
956         }
957     }
958 
959     /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
960     if (get_bits1(gbc)) {
961         int csnr;
962         csnr = (get_bits(gbc, 6) - 15) << 4;
963         for (ch = !s->cpl_in_use; ch <= s->channels; ch++) { /* snr offset and fast gain */
964             s->snr_offset[ch] = (csnr + get_bits(gbc, 4)) << 2;
965             s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
966         }
967         memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
968     }
969 
970     /* coupling leak information */
971     if (s->cpl_in_use && get_bits1(gbc)) {
972         s->bit_alloc_params.cpl_fast_leak = get_bits(gbc, 3);
973         s->bit_alloc_params.cpl_slow_leak = get_bits(gbc, 3);
974         bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
975     }
976 
977     /* delta bit allocation information */
978     if (get_bits1(gbc)) {
979         /* delta bit allocation exists (strategy) */
980         for (ch = !s->cpl_in_use; ch <= fbw_channels; ch++) {
981             s->dba_mode[ch] = get_bits(gbc, 2);
982             if (s->dba_mode[ch] == DBA_RESERVED) {
983                 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
984                 return -1;
985             }
986             bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
987         }
988         /* channel delta offset, len and bit allocation */
989         for (ch = !s->cpl_in_use; ch <= fbw_channels; ch++) {
990             if (s->dba_mode[ch] == DBA_NEW) {
991                 s->dba_nsegs[ch] = get_bits(gbc, 3);
992                 for (seg = 0; seg <= s->dba_nsegs[ch]; seg++) {
993                     s->dba_offsets[ch][seg] = get_bits(gbc, 5);
994                     s->dba_lengths[ch][seg] = get_bits(gbc, 4);
995                     s->dba_values[ch][seg] = get_bits(gbc, 3);
996                 }
997             }
998         }
999     } else if(blk == 0) {
1000         for(ch=0; ch<=s->channels; ch++) {
1001             s->dba_mode[ch] = DBA_NONE;
1002         }
1003     }
1004 
1005     /* Bit allocation */
1006     for(ch=!s->cpl_in_use; ch<=s->channels; ch++) {
1007         if(bit_alloc_stages[ch] > 2) {
1008             /* Exponent mapping into PSD and PSD integration */
1009             ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
1010                                       s->start_freq[ch], s->end_freq[ch],
1011                                       s->psd[ch], s->band_psd[ch]);
1012         }
1013         if(bit_alloc_stages[ch] > 1) {
1014             /* Compute excitation function, Compute masking curve, and
1015                Apply delta bit allocation */
1016             ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1017                                        s->start_freq[ch], s->end_freq[ch],
1018                                        s->fast_gain[ch], (ch == s->lfe_ch),
1019                                        s->dba_mode[ch], s->dba_nsegs[ch],
1020                                        s->dba_offsets[ch], s->dba_lengths[ch],
1021                                        s->dba_values[ch], s->mask[ch]);
1022         }
1023         if(bit_alloc_stages[ch] > 0) {
1024             /* Compute bit allocation */
1025             ff_ac3_bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1026                                       s->start_freq[ch], s->end_freq[ch],
1027                                       s->snr_offset[ch],
1028                                       s->bit_alloc_params.floor,
1029                                       s->bap[ch]);
1030         }
1031     }
1032 
1033     /* unused dummy data */
1034     if (get_bits1(gbc)) {
1035         int skipl = get_bits(gbc, 9);
1036         while(skipl--)
1037             skip_bits(gbc, 8);
1038     }
1039 
1040     /* unpack the transform coefficients
1041        this also uncouples channels if coupling is in use. */
1042     if (get_transform_coeffs(s)) {
1043         av_log(s->avctx, AV_LOG_ERROR, "Error in routine get_transform_coeffs\n");
1044         return -1;
1045     }
1046 
1047     /* recover coefficients if rematrixing is in use */
1048     if(s->channel_mode == AC3_CHMODE_STEREO)
1049         do_rematrixing(s);
1050 
1051     /* apply scaling to coefficients (headroom, dynrng) */
1052     for(ch=1; ch<=s->channels; ch++) {
1053         float gain = s->mul_bias / 4194304.0f;
1054         if(s->channel_mode == AC3_CHMODE_DUALMONO) {
1055             gain *= s->dynamic_range[ch-1];
1056         } else {
1057             gain *= s->dynamic_range[0];
1058         }
1059         for(i=0; i<256; i++) {
1060             s->transform_coeffs[ch][i] = s->fixed_coeffs[ch][i] * gain;
1061         }
1062     }
1063 
1064     /* downmix and MDCT. order depends on whether block switching is used for
1065        any channel in this block. this is because coefficients for the long
1066        and short transforms cannot be mixed. */
1067     downmix_output = s->channels != s->out_channels &&
1068                      !((s->output_mode & AC3_OUTPUT_LFEON) &&
1069                      s->fbw_channels == s->out_channels);
1070     if(different_transforms) {
1071         /* the delay samples have already been downmixed, so we upmix the delay
1072            samples in order to reconstruct all channels before downmixing. */
1073         if(s->downmixed) {
1074             s->downmixed = 0;
1075             ac3_upmix_delay(s);
1076         }
1077 
1078         do_imdct(s, s->channels);
1079 
1080         if(downmix_output) {
1081             ac3_downmix(s, s->output, 0);
1082         }
1083     } else {
1084         if(downmix_output) {
1085             ac3_downmix(s, s->transform_coeffs, 1);
1086         }
1087 
1088         if(!s->downmixed) {
1089             s->downmixed = 1;
1090             ac3_downmix(s, s->delay, 0);
1091         }
1092 
1093         do_imdct(s, s->out_channels);
1094     }
1095 
1096     /* convert float to 16-bit integer */
1097     for(ch=0; ch<s->out_channels; ch++) {
1098         for(i=0; i<256; i++) {
1099             s->output[ch][i] += s->add_bias;
1100         }
1101         s->dsp.float_to_int16(s->int_output[ch], s->output[ch], 256);
1102     }
1103 
1104     return 0;
1105 }
1106 
1107 /**
1108  * Decode a single AC-3 frame.
1109  */
ac3_decode_frame(AVCodecContext * avctx,void * data,int * data_size,const uint8_t * buf,int buf_size)1110 static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
1111                             const uint8_t *buf, int buf_size)
1112 {
1113     AC3DecodeContext *s = avctx->priv_data;
1114     int16_t *out_samples = (int16_t *)data;
1115     int i, blk, ch, err;
1116 
1117     /* initialize the GetBitContext with the start of valid AC-3 Frame */
1118     if (s->input_buffer) {
1119         /* copy input buffer to decoder context to avoid reading past the end
1120            of the buffer, which can be caused by a damaged input stream. */
1121         memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_MAX_FRAME_SIZE));
1122         init_get_bits(&s->gbc, s->input_buffer, buf_size * 8);
1123     } else {
1124         init_get_bits(&s->gbc, buf, buf_size * 8);
1125     }
1126 
1127     /* parse the syncinfo */
1128     err = ac3_parse_header(s);
1129     if(err) {
1130         switch(err) {
1131             case AC3_PARSE_ERROR_SYNC:
1132                 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1133                 break;
1134             case AC3_PARSE_ERROR_BSID:
1135                 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1136                 break;
1137             case AC3_PARSE_ERROR_SAMPLE_RATE:
1138                 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1139                 break;
1140             case AC3_PARSE_ERROR_FRAME_SIZE:
1141                 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1142                 break;
1143             case AC3_PARSE_ERROR_FRAME_TYPE:
1144                 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1145                 break;
1146             default:
1147                 av_log(avctx, AV_LOG_ERROR, "invalid header\n");
1148                 break;
1149         }
1150         return -1;
1151     }
1152 
1153     /* check that reported frame size fits in input buffer */
1154     if(s->frame_size > buf_size) {
1155         av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1156         return -1;
1157     }
1158 
1159     /* check for crc mismatch */
1160     if(avctx->error_resilience >= FF_ER_CAREFUL) {
1161         if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) {
1162             av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1163             return -1;
1164         }
1165         /* TODO: error concealment */
1166     }
1167 
1168     avctx->sample_rate = s->sample_rate;
1169     avctx->bit_rate = s->bit_rate;
1170 
1171     /* channel config */
1172     s->out_channels = s->channels;
1173     if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
1174             avctx->request_channels < s->channels) {
1175         s->out_channels = avctx->request_channels;
1176         s->output_mode  = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
1177     }
1178     avctx->channels = s->out_channels;
1179 
1180     /* set downmixing coefficients if needed */
1181     if(s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1182             s->fbw_channels == s->out_channels)) {
1183         set_downmix_coeffs(s);
1184     }
1185 
1186     /* parse the audio blocks */
1187     for (blk = 0; blk < NB_BLOCKS; blk++) {
1188         if (ac3_parse_audio_block(s, blk)) {
1189             av_log(avctx, AV_LOG_ERROR, "error parsing the audio block\n");
1190             *data_size = 0;
1191             return s->frame_size;
1192         }
1193         for (i = 0; i < 256; i++)
1194             for (ch = 0; ch < s->out_channels; ch++)
1195                 *(out_samples++) = s->int_output[ch][i];
1196     }
1197     *data_size = NB_BLOCKS * 256 * avctx->channels * sizeof (int16_t);
1198     return s->frame_size;
1199 }
1200 
1201 /**
1202  * Uninitialize the AC-3 decoder.
1203  */
ac3_decode_end(AVCodecContext * avctx)1204 static av_cold int ac3_decode_end(AVCodecContext *avctx)
1205 {
1206     AC3DecodeContext *s = avctx->priv_data;
1207     ff_mdct_end(&s->imdct_512);
1208     ff_mdct_end(&s->imdct_256);
1209 
1210     av_freep(&s->input_buffer);
1211 
1212     return 0;
1213 }
1214 
1215 AVCodec ac3_decoder = {
1216     .name = "ac3",
1217     .type = CODEC_TYPE_AUDIO,
1218     .id = CODEC_ID_AC3,
1219     .priv_data_size = sizeof (AC3DecodeContext),
1220     .init = ac3_decode_init,
1221     .close = ac3_decode_end,
1222     .decode = ac3_decode_frame,
1223     .long_name = "ATSC A/52 / AC-3",
1224 };
1225