Mercurial > libavcodec.hg
annotate ac3dec.c @ 5542:b0a566346fb1 libavcodec
Add attribute that forces alignment of stack to functions that need it.
Necessary for systems that don't align by default to 16 bytes, required by some
SSE instructions.
Requires GCC >= 4.2.
Based on patch by Ga¸«³l Chardon.
author | ramiro |
---|---|
date | Mon, 13 Aug 2007 15:28:29 +0000 |
parents | da33495f0621 |
children | b031d95d8fae |
rev | line source |
---|---|
5328 | 1 /* |
2 * AC-3 Audio Decoder | |
5316
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
3 * This code is developed as part of Google Summer of Code 2006 Program. |
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
4 * |
5328 | 5 * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com). |
5377
2020fab0e37a
update license header. add copyright for myself. correct and complete the statement about liba52.
jbr
parents:
5376
diff
changeset
|
6 * Copyright (c) 2007 Justin Ruggles |
5316
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
7 * |
5377
2020fab0e37a
update license header. add copyright for myself. correct and complete the statement about liba52.
jbr
parents:
5376
diff
changeset
|
8 * Portions of this code are derived from liba52 |
5316
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
9 * http://liba52.sourceforge.net |
5377
2020fab0e37a
update license header. add copyright for myself. correct and complete the statement about liba52.
jbr
parents:
5376
diff
changeset
|
10 * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org> |
2020fab0e37a
update license header. add copyright for myself. correct and complete the statement about liba52.
jbr
parents:
5376
diff
changeset
|
11 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca> |
5316
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
12 * |
5328 | 13 * This file is part of FFmpeg. |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
14 * |
5328 | 15 * FFmpeg is free software; you can redistribute it and/or |
5329 | 16 * modify it under the terms of the GNU General Public |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
17 * License as published by the Free Software Foundation; either |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
18 * version 2 of the License, or (at your option) any later version. |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
19 * |
5328 | 20 * FFmpeg is distributed in the hope that it will be useful, |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
5326 | 23 * General Public License for more details. |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
24 * |
5326 | 25 * You should have received a copy of the GNU General Public |
5328 | 26 * License along with FFmpeg; if not, write to the Free Software |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
27 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
28 */ |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
29 |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
30 #include <stdio.h> |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
31 #include <stddef.h> |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
32 #include <math.h> |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
33 #include <string.h> |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
34 |
5315
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
35 #include "avcodec.h" |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
36 #include "ac3_parser.h" |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
37 #include "bitstream.h" |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
38 #include "dsputil.h" |
5330 | 39 #include "random.h" |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
40 |
5415 | 41 /** |
42 * Table of bin locations for rematrixing bands | |
43 * reference: Section 7.5.2 Rematrixing : Frequency Band Definitions | |
44 */ | |
45 static const uint8_t rematrix_band_tbl[5] = { 13, 25, 37, 61, 253 }; | |
46 | |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
47 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
48 * table for exponent to scale_factor mapping |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
49 * scale_factors[i] = 2 ^ -i |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
50 */ |
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
51 static float scale_factors[25]; |
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
52 |
5375 | 53 /** table for grouping exponents */ |
54 static uint8_t exp_ungroup_tbl[128][3]; | |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
55 |
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
56 |
5456 | 57 /** tables for ungrouping mantissas */ |
58 static float b1_mantissas[32][3]; | |
59 static float b2_mantissas[128][3]; | |
60 static float b3_mantissas[8]; | |
61 static float b4_mantissas[128][2]; | |
62 static float b5_mantissas[16]; | |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
63 |
5456 | 64 /** |
65 * Quantization table: levels for symmetric. bits for asymmetric. | |
66 * reference: Table 7.18 Mapping of bap to Quantizer | |
67 */ | |
68 static const uint8_t qntztab[16] = { | |
69 0, 3, 5, 7, 11, 15, | |
70 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 | |
71 }; | |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
72 |
5457
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
73 /** dynamic range table. converts codes to scale factors. */ |
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
74 static float dynrng_tbl[256]; |
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
75 |
5495 | 76 /** dialogue normalization table */ |
77 static float dialnorm_tbl[32]; | |
78 | |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
79 /** Adjustments in dB gain */ |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
80 #define LEVEL_MINUS_3DB 0.7071067811865476 |
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
81 #define LEVEL_MINUS_4POINT5DB 0.5946035575013605 |
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
82 #define LEVEL_MINUS_6DB 0.5000000000000000 |
5480 | 83 #define LEVEL_MINUS_9DB 0.3535533905932738 |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
84 #define LEVEL_ZERO 0.0000000000000000 |
5480 | 85 #define LEVEL_ONE 1.0000000000000000 |
86 | |
87 static const float gain_levels[6] = { | |
88 LEVEL_ZERO, | |
89 LEVEL_ONE, | |
90 LEVEL_MINUS_3DB, | |
91 LEVEL_MINUS_4POINT5DB, | |
92 LEVEL_MINUS_6DB, | |
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 clevs[4] = { 2, 3, 4, 3 }; | |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
101 |
5480 | 102 /** |
103 * Table for surround mix levels | |
104 * reference: Section 5.4.2.5 surmixlev | |
105 */ | |
106 static const uint8_t slevs[4] = { 2, 4, 0, 4 }; | |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
107 |
5480 | 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 { { 1, 0 }, { 0, 1 }, }, | |
114 { { 2, 2 }, }, | |
115 { { 1, 0 }, { 0, 1 }, }, | |
116 { { 1, 0 }, { 3, 3 }, { 0, 1 }, }, | |
117 { { 1, 0 }, { 0, 1 }, { 4, 4 }, }, | |
118 { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 5, 5 }, }, | |
119 { { 1, 0 }, { 0, 1 }, { 4, 0 }, { 0, 4 }, }, | |
120 { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 4, 0 }, { 0, 4 }, }, | |
121 }; | |
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
122 |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
123 /* override ac3.h to include coupling channel */ |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
124 #undef AC3_MAX_CHANNELS |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
125 #define AC3_MAX_CHANNELS 7 |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
126 #define CPL_CH 0 |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
127 |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
128 #define AC3_OUTPUT_LFEON 8 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
129 |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
130 typedef struct { |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
131 int acmod; ///< audio coding mode |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
132 int dsurmod; ///< dolby surround mode |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
133 int blksw[AC3_MAX_CHANNELS]; ///< block switch flags |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
134 int dithflag[AC3_MAX_CHANNELS]; ///< dither flags |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
135 int dither_all; ///< true if all channels are dithered |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
136 int cplinu; ///< coupling in use |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
137 int chincpl[AC3_MAX_CHANNELS]; ///< channel in coupling |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
138 int phsflginu; ///< phase flags in use |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
139 int cplbndstrc[18]; ///< coupling band structure |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
140 int rematstr; ///< rematrixing strategy |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
141 int nrematbnd; ///< number of rematrixing bands |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
142 int rematflg[4]; ///< rematrixing flags |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
143 int expstr[AC3_MAX_CHANNELS]; ///< exponent strategies |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
144 int snroffst[AC3_MAX_CHANNELS]; ///< signal-to-noise ratio offsets |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
145 int fgain[AC3_MAX_CHANNELS]; ///< fast gain values (signal-to-mask ratio) |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
146 int deltbae[AC3_MAX_CHANNELS]; ///< delta bit allocation exists |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
147 int deltnseg[AC3_MAX_CHANNELS]; ///< number of delta segments |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
148 uint8_t deltoffst[AC3_MAX_CHANNELS][8]; ///< delta segment offsets |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
149 uint8_t deltlen[AC3_MAX_CHANNELS][8]; ///< delta segment lengths |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
150 uint8_t deltba[AC3_MAX_CHANNELS][8]; ///< delta values for each segment |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
151 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
152 int sampling_rate; ///< sample frequency, in Hz |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
153 int bit_rate; ///< stream bit rate, in bits-per-second |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
154 int frame_size; ///< current frame size, in bytes |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
155 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
156 int nchans; ///< number of total channels |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
157 int nfchans; ///< number of full-bandwidth channels |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
158 int lfeon; ///< lfe channel in use |
5516 | 159 int lfe_ch; ///< index of LFE channel |
160 int output_mode; ///< output channel configuration | |
161 int out_channels; ///< number of output channels | |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
162 |
5516 | 163 float downmix_coeffs[AC3_MAX_CHANNELS][2]; ///< stereo downmix coefficients |
164 float dialnorm[2]; ///< dialogue normalization | |
165 float dynrng[2]; ///< dynamic range | |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
166 float cplco[AC3_MAX_CHANNELS][18]; ///< coupling coordinates |
5516 | 167 int ncplbnd; ///< number of coupling bands |
168 int ncplsubnd; ///< number of coupling sub bands | |
169 int startmant[AC3_MAX_CHANNELS]; ///< start frequency bin | |
170 int endmant[AC3_MAX_CHANNELS]; ///< end frequency bin | |
5335 | 171 AC3BitAllocParameters bit_alloc_params; ///< bit allocation parameters |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
172 |
5516 | 173 int8_t dexps[AC3_MAX_CHANNELS][256]; ///< decoded exponents |
174 uint8_t bap[AC3_MAX_CHANNELS][256]; ///< bit allocation pointers | |
175 int16_t psd[AC3_MAX_CHANNELS][256]; ///< scaled exponents | |
176 int16_t bndpsd[AC3_MAX_CHANNELS][50]; ///< interpolated exponents | |
177 int16_t mask[AC3_MAX_CHANNELS][50]; ///< masking curve values | |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
178 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
179 DECLARE_ALIGNED_16(float, transform_coeffs[AC3_MAX_CHANNELS][256]); ///< transform coefficients |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
180 |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
181 /* For IMDCT. */ |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
182 MDCTContext imdct_512; ///< for 512 sample IMDCT |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
183 MDCTContext imdct_256; ///< for 256 sample IMDCT |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
184 DSPContext dsp; ///< for optimization |
5516 | 185 float add_bias; ///< offset for float_to_int16 conversion |
186 float mul_bias; ///< scaling for float_to_int16 conversion | |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
187 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
188 DECLARE_ALIGNED_16(float, output[AC3_MAX_CHANNELS-1][256]); ///< output after imdct transform and windowing |
5479
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
189 DECLARE_ALIGNED_16(short, int_output[AC3_MAX_CHANNELS-1][256]); ///< final 16-bit integer output |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
190 DECLARE_ALIGNED_16(float, delay[AC3_MAX_CHANNELS-1][256]); ///< delay - added to the next block |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
191 DECLARE_ALIGNED_16(float, tmp_imdct[256]); ///< temporary storage for imdct transform |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
192 DECLARE_ALIGNED_16(float, tmp_output[512]); ///< temporary storage for output before windowing |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
193 DECLARE_ALIGNED_16(float, window[256]); ///< window coefficients |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
194 |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
195 /* Miscellaneous. */ |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
196 GetBitContext gb; ///< bitstream reader |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
197 AVRandomState dith_state; ///< for dither generation |
5516 | 198 AVCodecContext *avctx; ///< parent context |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
199 } AC3DecodeContext; |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
200 |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
201 /** |
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
202 * Generate a Kaiser-Bessel Derived Window. |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
203 */ |
5320
3348a76efb67
AC-3 decoder, soc revision 70, Aug 31 18:04:23 2006 UTC by banan
jbr
parents:
5319
diff
changeset
|
204 static void ac3_window_init(float *window) |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
205 { |
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
206 int i, j; |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
207 double sum = 0.0, bessel, tmp; |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
208 double local_window[256]; |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
209 double alpha2 = (5.0 * M_PI / 256.0) * (5.0 * M_PI / 256.0); |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
210 |
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
211 for (i = 0; i < 256; i++) { |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
212 tmp = i * (256 - i) * alpha2; |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
213 bessel = 1.0; |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
214 for (j = 100; j > 0; j--) /* default to 100 iterations */ |
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
215 bessel = bessel * tmp / (j * j) + 1; |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
216 sum += bessel; |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
217 local_window[i] = sum; |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
218 } |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
219 |
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
220 sum++; |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
221 for (i = 0; i < 256; i++) |
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
222 window[i] = sqrt(local_window[i] / sum); |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
223 } |
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
224 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
225 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
226 * Symmetrical Dequantization |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
227 * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
228 * Tables 7.19 to 7.23 |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
229 */ |
5456 | 230 static inline float |
231 symmetric_dequant(int code, int levels) | |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
232 { |
5456 | 233 return (code - (levels >> 1)) * (2.0f / levels); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
234 } |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
235 |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
236 /* |
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
237 * Initialize tables at runtime. |
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
238 */ |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
239 static void ac3_tables_init(void) |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
240 { |
5375 | 241 int i; |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
242 |
5456 | 243 /* generate grouped mantissa tables |
244 reference: Section 7.3.5 Ungrouping of Mantissas */ | |
245 for(i=0; i<32; i++) { | |
246 /* bap=1 mantissas */ | |
247 b1_mantissas[i][0] = symmetric_dequant( i / 9 , 3); | |
248 b1_mantissas[i][1] = symmetric_dequant((i % 9) / 3, 3); | |
249 b1_mantissas[i][2] = symmetric_dequant((i % 9) % 3, 3); | |
250 } | |
251 for(i=0; i<128; i++) { | |
252 /* bap=2 mantissas */ | |
253 b2_mantissas[i][0] = symmetric_dequant( i / 25 , 5); | |
254 b2_mantissas[i][1] = symmetric_dequant((i % 25) / 5, 5); | |
255 b2_mantissas[i][2] = symmetric_dequant((i % 25) % 5, 5); | |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
256 |
5456 | 257 /* bap=4 mantissas */ |
258 b4_mantissas[i][0] = symmetric_dequant(i / 11, 11); | |
259 b4_mantissas[i][1] = symmetric_dequant(i % 11, 11); | |
260 } | |
261 /* generate ungrouped mantissa tables | |
262 reference: Tables 7.21 and 7.23 */ | |
263 for(i=0; i<7; i++) { | |
264 /* bap=3 mantissas */ | |
265 b3_mantissas[i] = symmetric_dequant(i, 7); | |
266 } | |
267 for(i=0; i<15; i++) { | |
268 /* bap=5 mantissas */ | |
269 b5_mantissas[i] = symmetric_dequant(i, 15); | |
270 } | |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
271 |
5457
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
272 /* generate dynamic range table |
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
273 reference: Section 7.7.1 Dynamic Range Control */ |
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
274 for(i=0; i<256; i++) { |
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
275 int v = (i >> 5) - ((i >> 7) << 3) - 5; |
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
276 dynrng_tbl[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20); |
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
277 } |
0a5849a4858b
use table for converting dynamic range codes to scale factors
jbr
parents:
5456
diff
changeset
|
278 |
5495 | 279 /* generate dialogue normalization table |
280 references: Section 5.4.2.8 dialnorm | |
281 Section 7.6 Dialogue Normalization */ | |
282 for(i=1; i<32; i++) { | |
283 dialnorm_tbl[i] = expf((i-31) * M_LN10 / 20.0f); | |
284 } | |
285 dialnorm_tbl[0] = dialnorm_tbl[31]; | |
286 | |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
287 /* generate scale factors for exponents and asymmetrical dequantization |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
288 reference: Section 7.3.2 Expansion of Mantissas for Asymmetric Quantization */ |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
289 for (i = 0; i < 25; i++) |
5456 | 290 scale_factors[i] = pow(2.0, -i); |
5375 | 291 |
292 /* generate exponent tables | |
293 reference: Section 7.1.3 Exponent Decoding */ | |
294 for(i=0; i<128; i++) { | |
295 exp_ungroup_tbl[i][0] = i / 25; | |
296 exp_ungroup_tbl[i][1] = (i % 25) / 5; | |
297 exp_ungroup_tbl[i][2] = (i % 25) % 5; | |
298 } | |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
299 } |
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
300 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
301 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
302 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
303 * AVCodec initialization |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
304 */ |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
305 static int ac3_decode_init(AVCodecContext *avctx) |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
306 { |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
307 AC3DecodeContext *ctx = avctx->priv_data; |
5498
9971ba9c30a3
add pointer to the parent context for use with av_log()
jbr
parents:
5497
diff
changeset
|
308 ctx->avctx = avctx; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
309 |
5331 | 310 ac3_common_init(); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
311 ac3_tables_init(); |
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
312 ff_mdct_init(&ctx->imdct_256, 8, 1); |
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
313 ff_mdct_init(&ctx->imdct_512, 9, 1); |
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
314 ac3_window_init(ctx->window); |
5317
6d81881f257f
AC-3 decoder, soc revision 57, Aug 19 12:44:38 2006 UTC by cloud9
jbr
parents:
5316
diff
changeset
|
315 dsputil_init(&ctx->dsp, avctx); |
5330 | 316 av_init_random(0, &ctx->dith_state); |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
317 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
318 /* set bias values for float to int16 conversion */ |
5479
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
319 if(ctx->dsp.float_to_int16 == ff_float_to_int16_c) { |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
320 ctx->add_bias = 385.0f; |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
321 ctx->mul_bias = 1.0f; |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
322 } else { |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
323 ctx->add_bias = 0.0f; |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
324 ctx->mul_bias = 32767.0f; |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
325 } |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
326 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
327 return 0; |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
328 } |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
329 |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
330 /** |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
331 * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream. |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
332 * GetBitContext within AC3DecodeContext must point to |
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
333 * start of the synchronized ac3 bitstream. |
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
334 */ |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
335 static int ac3_parse_header(AC3DecodeContext *ctx) |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
336 { |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
337 AC3HeaderInfo hdr; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
338 GetBitContext *gb = &ctx->gb; |
5480 | 339 float cmixlev, surmixlev; |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
340 int err, i; |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
341 |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
342 err = ff_ac3_parse_header(gb->buffer, &hdr); |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
343 if(err) |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
344 return err; |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
345 |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
346 /* get decoding parameters from header info */ |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
347 ctx->bit_alloc_params.fscod = hdr.fscod; |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
348 ctx->acmod = hdr.acmod; |
5480 | 349 cmixlev = gain_levels[clevs[hdr.cmixlev]]; |
350 surmixlev = gain_levels[slevs[hdr.surmixlev]]; | |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
351 ctx->dsurmod = hdr.dsurmod; |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
352 ctx->lfeon = hdr.lfeon; |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
353 ctx->bit_alloc_params.halfratecod = hdr.halfratecod; |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
354 ctx->sampling_rate = hdr.sample_rate; |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
355 ctx->bit_rate = hdr.bit_rate; |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
356 ctx->nchans = hdr.channels; |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
357 ctx->nfchans = ctx->nchans - ctx->lfeon; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
358 ctx->lfe_ch = ctx->nfchans + 1; |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
359 ctx->frame_size = hdr.frame_size; |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
360 |
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
361 /* set default output to all source channels */ |
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
362 ctx->out_channels = ctx->nchans; |
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
363 ctx->output_mode = ctx->acmod; |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
364 if(ctx->lfeon) |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
365 ctx->output_mode |= AC3_OUTPUT_LFEON; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
366 |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
367 /* skip over portion of header which has already been read */ |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
368 skip_bits(gb, 16); // skip the sync_word |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
369 skip_bits(gb, 16); // skip crc1 |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
370 skip_bits(gb, 8); // skip fscod and frmsizecod |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
371 skip_bits(gb, 11); // skip bsid, bsmod, and acmod |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
372 if(ctx->acmod == AC3_ACMOD_STEREO) { |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
373 skip_bits(gb, 2); // skip dsurmod |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
374 } else { |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
375 if((ctx->acmod & 1) && ctx->acmod != AC3_ACMOD_MONO) |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
376 skip_bits(gb, 2); // skip cmixlev |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
377 if(ctx->acmod & 4) |
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
378 skip_bits(gb, 2); // skip surmixlev |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
379 } |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
380 skip_bits1(gb); // skip lfeon |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
381 |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
382 /* read the rest of the bsi. read twice for dual mono mode. */ |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
383 i = !(ctx->acmod); |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
384 do { |
5495 | 385 ctx->dialnorm[i] = dialnorm_tbl[get_bits(gb, 5)]; // dialogue normalization |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
386 if (get_bits1(gb)) |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
387 skip_bits(gb, 8); //skip compression |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
388 if (get_bits1(gb)) |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
389 skip_bits(gb, 8); //skip language code |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
390 if (get_bits1(gb)) |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
391 skip_bits(gb, 7); //skip audio production information |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
392 } while (i--); |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
393 |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
394 skip_bits(gb, 2); //skip copyright bit and original bitstream bit |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
395 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
396 /* skip the timecodes (or extra bitstream information for Alternate Syntax) |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
397 TODO: read & use the xbsi1 downmix levels */ |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
398 if (get_bits1(gb)) |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
399 skip_bits(gb, 14); //skip timecode1 / xbsi1 |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
400 if (get_bits1(gb)) |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
401 skip_bits(gb, 14); //skip timecode2 / xbsi2 |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
402 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
403 /* skip additional bitstream info */ |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
404 if (get_bits1(gb)) { |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
405 i = get_bits(gb, 6); |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
406 do { |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
407 skip_bits(gb, 8); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
408 } while(i--); |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
409 } |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
410 |
5480 | 411 /* set stereo downmixing coefficients |
412 reference: Section 7.8.2 Downmixing Into Two Channels */ | |
413 for(i=0; i<ctx->nfchans; i++) { | |
414 ctx->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[ctx->acmod][i][0]]; | |
415 ctx->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[ctx->acmod][i][1]]; | |
416 } | |
417 if(ctx->acmod > 1 && ctx->acmod & 1) { | |
418 ctx->downmix_coeffs[1][0] = ctx->downmix_coeffs[1][1] = cmixlev; | |
419 } | |
420 if(ctx->acmod == AC3_ACMOD_2F1R || ctx->acmod == AC3_ACMOD_3F1R) { | |
421 int nf = ctx->acmod - 2; | |
422 ctx->downmix_coeffs[nf][0] = ctx->downmix_coeffs[nf][1] = surmixlev * LEVEL_MINUS_3DB; | |
423 } | |
424 if(ctx->acmod == AC3_ACMOD_2F2R || ctx->acmod == AC3_ACMOD_3F2R) { | |
425 int nf = ctx->acmod - 4; | |
426 ctx->downmix_coeffs[nf][0] = ctx->downmix_coeffs[nf+1][1] = surmixlev; | |
427 } | |
428 | |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
429 return 0; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
430 } |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
431 |
5376 | 432 /** |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
433 * Decode the grouped exponents according to exponent strategy. |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
434 * reference: Section 7.1.3 Exponent Decoding |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
435 */ |
5375 | 436 static void decode_exponents(GetBitContext *gb, int expstr, int ngrps, |
5389
cf99cf2d3af9
use consistent data type for exponents. needs to be int8_t to pass to bit allocation.
jbr
parents:
5388
diff
changeset
|
437 uint8_t absexp, int8_t *dexps) |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
438 { |
5375 | 439 int i, j, grp, grpsize; |
440 int dexp[256]; | |
441 int expacc, prevexp; | |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
442 |
5375 | 443 /* unpack groups */ |
444 grpsize = expstr + (expstr == EXP_D45); | |
445 for(grp=0,i=0; grp<ngrps; grp++) { | |
446 expacc = get_bits(gb, 7); | |
447 dexp[i++] = exp_ungroup_tbl[expacc][0]; | |
448 dexp[i++] = exp_ungroup_tbl[expacc][1]; | |
449 dexp[i++] = exp_ungroup_tbl[expacc][2]; | |
450 } | |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
451 |
5375 | 452 /* convert to absolute exps and expand groups */ |
453 prevexp = absexp; | |
454 for(i=0; i<ngrps*3; i++) { | |
455 prevexp = av_clip(prevexp + dexp[i]-2, 0, 24); | |
456 for(j=0; j<grpsize; j++) { | |
457 dexps[(i*grpsize)+j] = prevexp; | |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
458 } |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
459 } |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
460 } |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
461 |
5451
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
462 /** |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
463 * Generate transform coefficients for each coupled channel in the coupling |
5451
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
464 * range using the coupling coefficients and coupling coordinates. |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
465 * reference: Section 7.4.3 Coupling Coordinate Format |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
466 */ |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
467 static void uncouple_channels(AC3DecodeContext *ctx) |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
468 { |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
469 int i, j, ch, bnd, subbnd; |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
470 |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
471 subbnd = -1; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
472 i = ctx->startmant[CPL_CH]; |
5451
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
473 for(bnd=0; bnd<ctx->ncplbnd; bnd++) { |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
474 do { |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
475 subbnd++; |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
476 for(j=0; j<12; j++) { |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
477 for(ch=1; ch<=ctx->nfchans; ch++) { |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
478 if(ctx->chincpl[ch]) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
479 ctx->transform_coeffs[ch][i] = ctx->transform_coeffs[CPL_CH][i] * ctx->cplco[ch][bnd] * 8.0f; |
5451
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
480 } |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
481 i++; |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
482 } |
5459 | 483 } while(ctx->cplbndstrc[subbnd]); |
5451
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
484 } |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
485 } |
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
486 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
487 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
488 * Grouped mantissas for 3-level 5-level and 11-level quantization |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
489 */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
490 typedef struct { |
5456 | 491 float b1_mant[3]; |
492 float b2_mant[3]; | |
493 float b4_mant[2]; | |
494 int b1ptr; | |
495 int b2ptr; | |
496 int b4ptr; | |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
497 } mant_groups; |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
498 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
499 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
500 * Get the transform coefficients for a particular channel |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
501 * reference: Section 7.3 Quantization and Decoding of Mantissas |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
502 */ |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
503 static int get_transform_coeffs_ch(AC3DecodeContext *ctx, int ch_index, mant_groups *m) |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
504 { |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
505 GetBitContext *gb = &ctx->gb; |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
506 int i, gcode, tbap, start, end; |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
507 uint8_t *exps; |
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
508 uint8_t *bap; |
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
509 float *coeffs; |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
510 |
5477 | 511 exps = ctx->dexps[ch_index]; |
512 bap = ctx->bap[ch_index]; | |
513 coeffs = ctx->transform_coeffs[ch_index]; | |
514 start = ctx->startmant[ch_index]; | |
515 end = ctx->endmant[ch_index]; | |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
516 |
5452
190d793a22e7
merge decoding of coupling channel coefficients and regular channel coefficients
jbr
parents:
5451
diff
changeset
|
517 for (i = start; i < end; i++) { |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
518 tbap = bap[i]; |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
519 switch (tbap) { |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
520 case 0: |
5456 | 521 coeffs[i] = ((av_random(&ctx->dith_state) & 0xFFFF) * LEVEL_MINUS_3DB) / 32768.0f; |
5453 | 522 break; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
523 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
524 case 1: |
5456 | 525 if(m->b1ptr > 2) { |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
526 gcode = get_bits(gb, 5); |
5456 | 527 m->b1_mant[0] = b1_mantissas[gcode][0]; |
528 m->b1_mant[1] = b1_mantissas[gcode][1]; | |
529 m->b1_mant[2] = b1_mantissas[gcode][2]; | |
530 m->b1ptr = 0; | |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
531 } |
5456 | 532 coeffs[i] = m->b1_mant[m->b1ptr++]; |
5453 | 533 break; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
534 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
535 case 2: |
5456 | 536 if(m->b2ptr > 2) { |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
537 gcode = get_bits(gb, 7); |
5456 | 538 m->b2_mant[0] = b2_mantissas[gcode][0]; |
539 m->b2_mant[1] = b2_mantissas[gcode][1]; | |
540 m->b2_mant[2] = b2_mantissas[gcode][2]; | |
541 m->b2ptr = 0; | |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
542 } |
5456 | 543 coeffs[i] = m->b2_mant[m->b2ptr++]; |
5453 | 544 break; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
545 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
546 case 3: |
5456 | 547 coeffs[i] = b3_mantissas[get_bits(gb, 3)]; |
5453 | 548 break; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
549 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
550 case 4: |
5456 | 551 if(m->b4ptr > 1) { |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
552 gcode = get_bits(gb, 7); |
5456 | 553 m->b4_mant[0] = b4_mantissas[gcode][0]; |
554 m->b4_mant[1] = b4_mantissas[gcode][1]; | |
555 m->b4ptr = 0; | |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
556 } |
5456 | 557 coeffs[i] = m->b4_mant[m->b4ptr++]; |
5453 | 558 break; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
559 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
560 case 5: |
5456 | 561 coeffs[i] = b5_mantissas[get_bits(gb, 4)]; |
5453 | 562 break; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
563 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
564 default: |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
565 /* asymmetric dequantization */ |
5456 | 566 coeffs[i] = get_sbits(gb, qntztab[tbap]) * scale_factors[qntztab[tbap]-1]; |
5453 | 567 break; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
568 } |
5453 | 569 coeffs[i] *= scale_factors[exps[i]]; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
570 } |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
571 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
572 return 0; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
573 } |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
574 |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
575 /** |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
576 * Remove random dithering from coefficients with zero-bit mantissas |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
577 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0) |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
578 */ |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
579 static void remove_dithering(AC3DecodeContext *ctx) { |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
580 int ch, i; |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
581 int end=0; |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
582 float *coeffs; |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
583 uint8_t *bap; |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
584 |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
585 for(ch=1; ch<=ctx->nfchans; ch++) { |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
586 if(!ctx->dithflag[ch]) { |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
587 coeffs = ctx->transform_coeffs[ch]; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
588 bap = ctx->bap[ch]; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
589 if(ctx->chincpl[ch]) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
590 end = ctx->startmant[CPL_CH]; |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
591 else |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
592 end = ctx->endmant[ch]; |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
593 for(i=0; i<end; i++) { |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
594 if(bap[i] == 0) |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
595 coeffs[i] = 0.0f; |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
596 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
597 if(ctx->chincpl[ch]) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
598 bap = ctx->bap[CPL_CH]; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
599 for(; i<ctx->endmant[CPL_CH]; i++) { |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
600 if(bap[i] == 0) |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
601 coeffs[i] = 0.0f; |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
602 } |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
603 } |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
604 } |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
605 } |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
606 } |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
607 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
608 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
609 * Get the transform coefficients. |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
610 */ |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
611 static int get_transform_coeffs(AC3DecodeContext * ctx) |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
612 { |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
613 int ch, end; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
614 int got_cplchan = 0; |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
615 mant_groups m; |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
616 |
5456 | 617 m.b1ptr = m.b2ptr = m.b4ptr = 3; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
618 |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
619 for (ch = 1; ch <= ctx->nchans; ch++) { |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
620 /* transform coefficients for full-bandwidth channel */ |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
621 if (get_transform_coeffs_ch(ctx, ch, &m)) |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
622 return -1; |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
623 /* tranform coefficients for coupling channel come right after the |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
624 coefficients for the first coupled channel*/ |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
625 if (ctx->chincpl[ch]) { |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
626 if (!got_cplchan) { |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
627 if (get_transform_coeffs_ch(ctx, CPL_CH, &m)) { |
5498
9971ba9c30a3
add pointer to the parent context for use with av_log()
jbr
parents:
5497
diff
changeset
|
628 av_log(ctx->avctx, AV_LOG_ERROR, "error in decoupling channels\n"); |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
629 return -1; |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
630 } |
5451
19bb5e64a57c
split out coupling coefficient reconstruction into a separate function
jbr
parents:
5435
diff
changeset
|
631 uncouple_channels(ctx); |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
632 got_cplchan = 1; |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
633 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
634 end = ctx->endmant[CPL_CH]; |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
635 } else { |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
636 end = ctx->endmant[ch]; |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
637 } |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
638 do |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
639 ctx->transform_coeffs[ch][end] = 0; |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
640 while(++end < 256); |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
641 } |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
642 |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
643 /* if any channel doesn't use dithering, zero appropriate coefficients */ |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
644 if(!ctx->dither_all) |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
645 remove_dithering(ctx); |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
646 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
647 return 0; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
648 } |
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
649 |
5415 | 650 /** |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
651 * Stereo rematrixing. |
5415 | 652 * reference: Section 7.5.4 Rematrixing : Decoding Technique |
653 */ | |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
654 static void do_rematrixing(AC3DecodeContext *ctx) |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
655 { |
5415 | 656 int bnd, i; |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
657 int end, bndend; |
5415 | 658 float tmp0, tmp1; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
659 |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
660 end = FFMIN(ctx->endmant[1], ctx->endmant[2]); |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
661 |
5415 | 662 for(bnd=0; bnd<ctx->nrematbnd; bnd++) { |
663 if(ctx->rematflg[bnd]) { | |
664 bndend = FFMIN(end, rematrix_band_tbl[bnd+1]); | |
665 for(i=rematrix_band_tbl[bnd]; i<bndend; i++) { | |
666 tmp0 = ctx->transform_coeffs[1][i]; | |
667 tmp1 = ctx->transform_coeffs[2][i]; | |
668 ctx->transform_coeffs[1][i] = tmp0 + tmp1; | |
669 ctx->transform_coeffs[2][i] = tmp0 - tmp1; | |
670 } | |
671 } | |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
672 } |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
673 } |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
674 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
675 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
676 * Perform the 256-point IMDCT |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
677 */ |
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
678 static void do_imdct_256(AC3DecodeContext *ctx, int chindex) |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
679 { |
5336 | 680 int i, k; |
5435 | 681 DECLARE_ALIGNED_16(float, x[128]); |
5336 | 682 FFTComplex z[2][64]; |
683 float *o_ptr = ctx->tmp_output; | |
684 | |
685 for(i=0; i<2; i++) { | |
686 /* de-interleave coefficients */ | |
687 for(k=0; k<128; k++) { | |
688 x[k] = ctx->transform_coeffs[chindex][2*k+i]; | |
689 } | |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
690 |
5336 | 691 /* run standard IMDCT */ |
692 ctx->imdct_256.fft.imdct_calc(&ctx->imdct_256, o_ptr, x, ctx->tmp_imdct); | |
693 | |
694 /* reverse the post-rotation & reordering from standard IMDCT */ | |
695 for(k=0; k<32; k++) { | |
696 z[i][32+k].re = -o_ptr[128+2*k]; | |
697 z[i][32+k].im = -o_ptr[2*k]; | |
698 z[i][31-k].re = o_ptr[2*k+1]; | |
699 z[i][31-k].im = o_ptr[128+2*k+1]; | |
700 } | |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
701 } |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
702 |
5336 | 703 /* apply AC-3 post-rotation & reordering */ |
704 for(k=0; k<64; k++) { | |
705 o_ptr[ 2*k ] = -z[0][ k].im; | |
706 o_ptr[ 2*k+1] = z[0][63-k].re; | |
707 o_ptr[128+2*k ] = -z[0][ k].re; | |
708 o_ptr[128+2*k+1] = z[0][63-k].im; | |
709 o_ptr[256+2*k ] = -z[1][ k].re; | |
710 o_ptr[256+2*k+1] = z[1][63-k].im; | |
711 o_ptr[384+2*k ] = z[1][ k].im; | |
712 o_ptr[384+2*k+1] = -z[1][63-k].re; | |
5322
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
713 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
714 } |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
715 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
716 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
717 * Inverse MDCT Transform. |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
718 * Convert frequency domain coefficients to time-domain audio samples. |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
719 * reference: Section 7.9.4 Transformation Equations |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
720 */ |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
721 static inline void do_imdct(AC3DecodeContext *ctx) |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
722 { |
5336 | 723 int ch; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
724 int nchans; |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
725 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
726 /* Don't perform the IMDCT on the LFE channel unless it's used in the output */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
727 nchans = ctx->nfchans; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
728 if(ctx->output_mode & AC3_OUTPUT_LFEON) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
729 nchans++; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
730 |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
731 for (ch=1; ch<=nchans; ch++) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
732 if (ctx->blksw[ch]) { |
5336 | 733 do_imdct_256(ctx, ch); |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
734 } else { |
5336 | 735 ctx->imdct_512.fft.imdct_calc(&ctx->imdct_512, ctx->tmp_output, |
736 ctx->transform_coeffs[ch], | |
737 ctx->tmp_imdct); | |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
738 } |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
739 /* For the first half of the block, apply the window, add the delay |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
740 from the previous block, and send to output */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
741 ctx->dsp.vector_fmul_add_add(ctx->output[ch-1], ctx->tmp_output, |
5480 | 742 ctx->window, ctx->delay[ch-1], 0, 256, 1); |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
743 /* For the second half of the block, apply the window and store the |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
744 samples to delay, to be combined with the next block */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
745 ctx->dsp.vector_fmul_reverse(ctx->delay[ch-1], ctx->tmp_output+256, |
5336 | 746 ctx->window, 256); |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
747 } |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
748 } |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
749 |
5480 | 750 /** |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
751 * Downmix the output to mono or stereo. |
5480 | 752 */ |
753 static void ac3_downmix(float samples[AC3_MAX_CHANNELS][256], int nfchans, | |
754 int output_mode, float coef[AC3_MAX_CHANNELS][2]) | |
755 { | |
756 int i, j; | |
757 float v0, v1, s0, s1; | |
758 | |
759 for(i=0; i<256; i++) { | |
760 v0 = v1 = s0 = s1 = 0.0f; | |
761 for(j=0; j<nfchans; j++) { | |
762 v0 += samples[j][i] * coef[j][0]; | |
763 v1 += samples[j][i] * coef[j][1]; | |
764 s0 += coef[j][0]; | |
765 s1 += coef[j][1]; | |
766 } | |
767 v0 /= s0; | |
768 v1 /= s1; | |
769 if(output_mode == AC3_ACMOD_MONO) { | |
770 samples[0][i] = (v0 + v1) * LEVEL_MINUS_3DB; | |
771 } else if(output_mode == AC3_ACMOD_STEREO) { | |
772 samples[0][i] = v0; | |
773 samples[1][i] = v1; | |
774 } | |
775 } | |
776 } | |
777 | |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
778 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
779 * Parse an audio block from AC-3 bitstream. |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
780 */ |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
781 static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
782 { |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
783 int nfchans = ctx->nfchans; |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
784 int acmod = ctx->acmod; |
5471
37c1944ca4ee
make exponent decoding consistent (prepare for merging coupling and lfe code with normal channel code).
jbr
parents:
5461
diff
changeset
|
785 int i, bnd, seg, ch; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
786 GetBitContext *gb = &ctx->gb; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
787 uint8_t bit_alloc_stages[AC3_MAX_CHANNELS]; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
788 |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
789 memset(bit_alloc_stages, 0, AC3_MAX_CHANNELS); |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
790 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
791 /* block switch flags */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
792 for (ch = 1; ch <= nfchans; ch++) |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
793 ctx->blksw[ch] = get_bits1(gb); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
794 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
795 /* dithering flags */ |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
796 ctx->dither_all = 1; |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
797 for (ch = 1; ch <= nfchans; ch++) { |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
798 ctx->dithflag[ch] = get_bits1(gb); |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
799 if(!ctx->dithflag[ch]) |
5454
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
800 ctx->dither_all = 0; |
5b497d971546
dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents:
5453
diff
changeset
|
801 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
802 |
5497 | 803 /* dynamic range */ |
804 i = !(ctx->acmod); | |
805 do { | |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
806 if(get_bits1(gb)) { |
5497 | 807 ctx->dynrng[i] = dynrng_tbl[get_bits(gb, 8)]; |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
808 } else if(blk == 0) { |
5497 | 809 ctx->dynrng[i] = 1.0f; |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
810 } |
5497 | 811 } while(i--); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
812 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
813 /* coupling strategy */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
814 if (get_bits1(gb)) { |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
815 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
816 ctx->cplinu = get_bits1(gb); |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
817 if (ctx->cplinu) { |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
818 /* coupling in use */ |
5414 | 819 int cplbegf, cplendf; |
820 | |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
821 /* determine which channels are coupled */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
822 for (ch = 1; ch <= nfchans; ch++) |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
823 ctx->chincpl[ch] = get_bits1(gb); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
824 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
825 /* phase flags in use */ |
5390 | 826 if (acmod == AC3_ACMOD_STEREO) |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
827 ctx->phsflginu = get_bits1(gb); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
828 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
829 /* coupling frequency range and band structure */ |
5414 | 830 cplbegf = get_bits(gb, 4); |
831 cplendf = get_bits(gb, 4); | |
832 if (3 + cplendf - cplbegf < 0) { | |
5498
9971ba9c30a3
add pointer to the parent context for use with av_log()
jbr
parents:
5497
diff
changeset
|
833 av_log(ctx->avctx, AV_LOG_ERROR, "cplendf = %d < cplbegf = %d\n", cplendf, cplbegf); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
834 return -1; |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
835 } |
5414 | 836 ctx->ncplbnd = ctx->ncplsubnd = 3 + cplendf - cplbegf; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
837 ctx->startmant[CPL_CH] = cplbegf * 12 + 37; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
838 ctx->endmant[CPL_CH] = cplendf * 12 + 73; |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
839 for (bnd = 0; bnd < ctx->ncplsubnd - 1; bnd++) { |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
840 if (get_bits1(gb)) { |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
841 ctx->cplbndstrc[bnd] = 1; |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
842 ctx->ncplbnd--; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
843 } |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
844 } |
5388 | 845 } else { |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
846 /* coupling not in use */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
847 for (ch = 1; ch <= nfchans; ch++) |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
848 ctx->chincpl[ch] = 0; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
849 } |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
850 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
851 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
852 /* coupling coordinates */ |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
853 if (ctx->cplinu) { |
5460 | 854 int cplcoe = 0; |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
855 |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
856 for (ch = 1; ch <= nfchans; ch++) { |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
857 if (ctx->chincpl[ch]) { |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
858 if (get_bits1(gb)) { |
5472 | 859 int mstrcplco, cplcoexp, cplcomant; |
5460 | 860 cplcoe = 1; |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
861 mstrcplco = 3 * get_bits(gb, 2); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
862 for (bnd = 0; bnd < ctx->ncplbnd; bnd++) { |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
863 cplcoexp = get_bits(gb, 4); |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
864 cplcomant = get_bits(gb, 4); |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
865 if (cplcoexp == 15) |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
866 ctx->cplco[ch][bnd] = cplcomant / 16.0f; |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
867 else |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
868 ctx->cplco[ch][bnd] = (cplcomant + 16.0f) / 32.0f; |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
869 ctx->cplco[ch][bnd] *= scale_factors[cplcoexp + mstrcplco]; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
870 } |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
871 } |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
872 } |
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
873 } |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
874 /* phase flags */ |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
875 if (acmod == AC3_ACMOD_STEREO && ctx->phsflginu && cplcoe) { |
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
876 for (bnd = 0; bnd < ctx->ncplbnd; bnd++) { |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
877 if (get_bits1(gb)) |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
878 ctx->cplco[2][bnd] = -ctx->cplco[2][bnd]; |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
879 } |
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
880 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
881 } |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
882 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
883 /* stereo rematrixing strategy and band structure */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
884 if (acmod == AC3_ACMOD_STEREO) { |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
885 ctx->rematstr = get_bits1(gb); |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
886 if (ctx->rematstr) { |
5415 | 887 ctx->nrematbnd = 4; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
888 if(ctx->cplinu && ctx->startmant[CPL_CH] <= 61) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
889 ctx->nrematbnd -= 1 + (ctx->startmant[CPL_CH] == 37); |
5415 | 890 for(bnd=0; bnd<ctx->nrematbnd; bnd++) |
891 ctx->rematflg[bnd] = get_bits1(gb); | |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
892 } |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
893 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
894 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
895 /* exponent strategies for each channel */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
896 ctx->expstr[CPL_CH] = EXP_REUSE; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
897 ctx->expstr[ctx->lfe_ch] = EXP_REUSE; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
898 for (ch = !ctx->cplinu; ch <= ctx->nchans; ch++) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
899 if(ch == ctx->lfe_ch) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
900 ctx->expstr[ch] = get_bits(gb, 1); |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
901 else |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
902 ctx->expstr[ch] = get_bits(gb, 2); |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
903 if(ctx->expstr[ch] != EXP_REUSE) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
904 bit_alloc_stages[ch] = 3; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
905 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
906 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
907 /* channel bandwidth */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
908 for (ch = 1; ch <= nfchans; ch++) { |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
909 ctx->startmant[ch] = 0; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
910 if (ctx->expstr[ch] != EXP_REUSE) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
911 int prev = ctx->endmant[ch]; |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
912 if (ctx->chincpl[ch]) |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
913 ctx->endmant[ch] = ctx->startmant[CPL_CH]; |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
914 else { |
5472 | 915 int chbwcod = get_bits(gb, 6); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
916 if (chbwcod > 60) { |
5498
9971ba9c30a3
add pointer to the parent context for use with av_log()
jbr
parents:
5497
diff
changeset
|
917 av_log(ctx->avctx, AV_LOG_ERROR, "chbwcod = %d > 60", chbwcod); |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
918 return -1; |
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
919 } |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
920 ctx->endmant[ch] = chbwcod * 3 + 73; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
921 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
922 if(blk > 0 && ctx->endmant[ch] != prev) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
923 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS); |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
924 } |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
925 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
926 ctx->startmant[ctx->lfe_ch] = 0; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
927 ctx->endmant[ctx->lfe_ch] = 7; |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
928 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
929 /* decode exponents for each channel */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
930 for (ch = !ctx->cplinu; ch <= ctx->nchans; ch++) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
931 if (ctx->expstr[ch] != EXP_REUSE) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
932 int grpsize, ngrps; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
933 grpsize = 3 << (ctx->expstr[ch] - 1); |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
934 if(ch == CPL_CH) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
935 ngrps = (ctx->endmant[ch] - ctx->startmant[ch]) / grpsize; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
936 else if(ch == ctx->lfe_ch) |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
937 ngrps = 2; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
938 else |
5477 | 939 ngrps = (ctx->endmant[ch] + grpsize - 4) / grpsize; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
940 ctx->dexps[ch][0] = get_bits(gb, 4) << !ch; |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
941 decode_exponents(gb, ctx->expstr[ch], ngrps, ctx->dexps[ch][0], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
942 &ctx->dexps[ch][ctx->startmant[ch]+!!ch]); |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
943 if(ch != CPL_CH && ch != ctx->lfe_ch) |
5477 | 944 skip_bits(gb, 2); /* skip gainrng */ |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
945 } |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
946 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
947 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
948 /* bit allocation information */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
949 if (get_bits1(gb)) { |
5391
6c1633a8dbc3
set bit allocation parameters directly instead of copying
jbr
parents:
5390
diff
changeset
|
950 ctx->bit_alloc_params.sdecay = ff_sdecaytab[get_bits(gb, 2)]; |
6c1633a8dbc3
set bit allocation parameters directly instead of copying
jbr
parents:
5390
diff
changeset
|
951 ctx->bit_alloc_params.fdecay = ff_fdecaytab[get_bits(gb, 2)]; |
6c1633a8dbc3
set bit allocation parameters directly instead of copying
jbr
parents:
5390
diff
changeset
|
952 ctx->bit_alloc_params.sgain = ff_sgaintab[get_bits(gb, 2)]; |
6c1633a8dbc3
set bit allocation parameters directly instead of copying
jbr
parents:
5390
diff
changeset
|
953 ctx->bit_alloc_params.dbknee = ff_dbkneetab[get_bits(gb, 2)]; |
6c1633a8dbc3
set bit allocation parameters directly instead of copying
jbr
parents:
5390
diff
changeset
|
954 ctx->bit_alloc_params.floor = ff_floortab[get_bits(gb, 3)]; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
955 for(ch=!ctx->cplinu; ch<=ctx->nchans; ch++) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
956 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
957 } |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
958 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
959 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
960 /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
961 if (get_bits1(gb)) { |
5393 | 962 int csnr; |
963 csnr = (get_bits(gb, 6) - 15) << 4; | |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
964 for (ch = !ctx->cplinu; ch <= ctx->nchans; ch++) { /* snr offset and fast gain */ |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
965 ctx->snroffst[ch] = (csnr + get_bits(gb, 4)) << 2; |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
966 ctx->fgain[ch] = ff_fgaintab[get_bits(gb, 3)]; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
967 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
968 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS); |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
969 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
970 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
971 /* coupling leak information */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
972 if (ctx->cplinu && get_bits1(gb)) { |
5391
6c1633a8dbc3
set bit allocation parameters directly instead of copying
jbr
parents:
5390
diff
changeset
|
973 ctx->bit_alloc_params.cplfleak = get_bits(gb, 3); |
6c1633a8dbc3
set bit allocation parameters directly instead of copying
jbr
parents:
5390
diff
changeset
|
974 ctx->bit_alloc_params.cplsleak = get_bits(gb, 3); |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
975 bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
976 } |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
977 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
978 /* delta bit allocation information */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
979 if (get_bits1(gb)) { |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
980 /* delta bit allocation exists (strategy) */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
981 for (ch = !ctx->cplinu; ch <= nfchans; ch++) { |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
982 ctx->deltbae[ch] = get_bits(gb, 2); |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
983 if (ctx->deltbae[ch] == DBA_RESERVED) { |
5498
9971ba9c30a3
add pointer to the parent context for use with av_log()
jbr
parents:
5497
diff
changeset
|
984 av_log(ctx->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n"); |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
985 return -1; |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
986 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
987 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
988 } |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
989 /* channel delta offset, len and bit allocation */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
990 for (ch = !ctx->cplinu; ch <= nfchans; ch++) { |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
991 if (ctx->deltbae[ch] == DBA_NEW) { |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
992 ctx->deltnseg[ch] = get_bits(gb, 3); |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
993 for (seg = 0; seg <= ctx->deltnseg[ch]; seg++) { |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
994 ctx->deltoffst[ch][seg] = get_bits(gb, 5); |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
995 ctx->deltlen[ch][seg] = get_bits(gb, 4); |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
996 ctx->deltba[ch][seg] = get_bits(gb, 3); |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
997 } |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
998 } |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
999 } |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
1000 } else if(blk == 0) { |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1001 for(ch=0; ch<=ctx->nchans; ch++) { |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
1002 ctx->deltbae[ch] = DBA_NONE; |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
1003 } |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1004 } |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1005 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1006 /* Bit allocation */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1007 for(ch=!ctx->cplinu; ch<=ctx->nchans; ch++) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1008 if(bit_alloc_stages[ch] > 2) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1009 /* Exponent mapping into PSD and PSD integration */ |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1010 ff_ac3_bit_alloc_calc_psd(ctx->dexps[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1011 ctx->startmant[ch], ctx->endmant[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1012 ctx->psd[ch], ctx->bndpsd[ch]); |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
1013 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1014 if(bit_alloc_stages[ch] > 1) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1015 /* Compute excitation function, Compute masking curve, and |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1016 Apply delta bit allocation */ |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1017 ff_ac3_bit_alloc_calc_mask(&ctx->bit_alloc_params, ctx->bndpsd[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1018 ctx->startmant[ch], ctx->endmant[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1019 ctx->fgain[ch], (ch == ctx->lfe_ch), |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1020 ctx->deltbae[ch], ctx->deltnseg[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1021 ctx->deltoffst[ch], ctx->deltlen[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1022 ctx->deltba[ch], ctx->mask[ch]); |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
1023 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1024 if(bit_alloc_stages[ch] > 0) { |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1025 /* Compute bit allocation */ |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1026 ff_ac3_bit_alloc_calc_bap(ctx->mask[ch], ctx->psd[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1027 ctx->startmant[ch], ctx->endmant[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1028 ctx->snroffst[ch], |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1029 ctx->bit_alloc_params.floor, |
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1030 ctx->bap[ch]); |
5461
c427d8950769
cosmetics: use braces when it makes the code easier to read.
jbr
parents:
5460
diff
changeset
|
1031 } |
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1032 } |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1033 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1034 /* unused dummy data */ |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1035 if (get_bits1(gb)) { |
5472 | 1036 int skipl = get_bits(gb, 9); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1037 while(skipl--) |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1038 skip_bits(gb, 8); |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1039 } |
5499 | 1040 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1041 /* unpack the transform coefficients |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1042 this also uncouples channels if coupling is in use. */ |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1043 if (get_transform_coeffs(ctx)) { |
5498
9971ba9c30a3
add pointer to the parent context for use with av_log()
jbr
parents:
5497
diff
changeset
|
1044 av_log(ctx->avctx, AV_LOG_ERROR, "Error in routine get_transform_coeffs\n"); |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1045 return -1; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1046 } |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1047 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1048 /* recover coefficients if rematrixing is in use */ |
5388 | 1049 if(ctx->acmod == AC3_ACMOD_STEREO) |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1050 do_rematrixing(ctx); |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1051 |
5495 | 1052 /* apply scaling to coefficients (headroom, dialnorm, dynrng) */ |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1053 for(ch=1; ch<=ctx->nchans; ch++) { |
5479
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
1054 float gain = 2.0f * ctx->mul_bias; |
5497 | 1055 if(ctx->acmod == AC3_ACMOD_DUALMONO) { |
1056 gain *= ctx->dialnorm[ch-1] * ctx->dynrng[ch-1]; | |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
1057 } else { |
5497 | 1058 gain *= ctx->dialnorm[0] * ctx->dynrng[0]; |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
1059 } |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1060 for(i=0; i<ctx->endmant[ch]; i++) { |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
1061 ctx->transform_coeffs[ch][i] *= gain; |
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
1062 } |
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
1063 } |
5318
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
1064 |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1065 do_imdct(ctx); |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1066 |
5480 | 1067 /* downmix output if needed */ |
1068 if(ctx->nchans != ctx->out_channels && !((ctx->output_mode & AC3_OUTPUT_LFEON) && | |
1069 ctx->nfchans == ctx->out_channels)) { | |
1070 ac3_downmix(ctx->output, ctx->nfchans, ctx->output_mode, | |
1071 ctx->downmix_coeffs); | |
1072 } | |
1073 | |
5479
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
1074 /* convert float to 16-bit integer */ |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
1075 for(ch=0; ch<ctx->out_channels; ch++) { |
5480 | 1076 for(i=0; i<256; i++) { |
1077 ctx->output[ch][i] += ctx->add_bias; | |
1078 } | |
5479
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
1079 ctx->dsp.float_to_int16(ctx->int_output[ch], ctx->output[ch], 256); |
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
1080 } |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1081 |
5479
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
1082 return 0; |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1083 } |
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1084 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1085 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1086 * Decode a single AC-3 frame. |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1087 */ |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1088 static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, uint8_t *buf, int buf_size) |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1089 { |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1090 AC3DecodeContext *ctx = (AC3DecodeContext *)avctx->priv_data; |
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1091 int16_t *out_samples = (int16_t *)data; |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1092 int i, blk, ch; |
5318
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
1093 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1094 /* initialize the GetBitContext with the start of valid AC-3 Frame */ |
5385
bc14cca988aa
don't need to synchronize in the decoder. the parser does that already.
jbr
parents:
5384
diff
changeset
|
1095 init_get_bits(&ctx->gb, buf, buf_size * 8); |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1096 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1097 /* parse the syncinfo */ |
5386
d6347c3cb329
Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents:
5385
diff
changeset
|
1098 if (ac3_parse_header(ctx)) { |
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1099 av_log(avctx, AV_LOG_ERROR, "\n"); |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1100 *data_size = 0; |
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1101 return buf_size; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1102 } |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1103 |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1104 avctx->sample_rate = ctx->sampling_rate; |
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1105 avctx->bit_rate = ctx->bit_rate; |
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1106 |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
1107 /* channel config */ |
5480 | 1108 ctx->out_channels = ctx->nchans; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1109 if (avctx->channels == 0) { |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
1110 avctx->channels = ctx->out_channels; |
5480 | 1111 } else if(ctx->out_channels < avctx->channels) { |
1112 av_log(avctx, AV_LOG_ERROR, "Cannot upmix AC3 from %d to %d channels.\n", | |
1113 ctx->out_channels, avctx->channels); | |
5412
3f6a6dda6b2d
remove broken downmixing. will add new implementation later.
jbr
parents:
5393
diff
changeset
|
1114 return -1; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1115 } |
5480 | 1116 if(avctx->channels == 2) { |
1117 ctx->output_mode = AC3_ACMOD_STEREO; | |
1118 } else if(avctx->channels == 1) { | |
1119 ctx->output_mode = AC3_ACMOD_MONO; | |
1120 } else if(avctx->channels != ctx->out_channels) { | |
1121 av_log(avctx, AV_LOG_ERROR, "Cannot downmix AC3 from %d to %d channels.\n", | |
1122 ctx->out_channels, avctx->channels); | |
1123 return -1; | |
1124 } | |
1125 ctx->out_channels = avctx->channels; | |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1126 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1127 /* parse the audio blocks */ |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
1128 for (blk = 0; blk < NB_BLOCKS; blk++) { |
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
1129 if (ac3_parse_audio_block(ctx, blk)) { |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1130 av_log(avctx, AV_LOG_ERROR, "error parsing the audio block\n"); |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1131 *data_size = 0; |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1132 return ctx->frame_size; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1133 } |
5474
3e07472540c6
cosmetics: use more appropriate names for iterator variables.
jbr
parents:
5472
diff
changeset
|
1134 for (i = 0; i < 256; i++) |
5476
e50f0d583a36
consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents:
5475
diff
changeset
|
1135 for (ch = 0; ch < ctx->out_channels; ch++) |
5479
943c732c905d
use dsputil for float to signed 16-bit sample conversion
jbr
parents:
5477
diff
changeset
|
1136 *(out_samples++) = ctx->int_output[ch][i]; |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1137 } |
5413
28c20633db55
BLOCK_SIZE is not used properly, just use numbers instead to avoid confusion
jbr
parents:
5412
diff
changeset
|
1138 *data_size = NB_BLOCKS * 256 * avctx->channels * sizeof (int16_t); |
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1139 return ctx->frame_size; |
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1140 } |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1141 |
5515
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1142 /** |
b499866a3397
comments modification: add, clean up, Doxygenize, and reword
jbr
parents:
5499
diff
changeset
|
1143 * Uninitialize the AC-3 decoder. |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1144 */ |
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1145 static int ac3_decode_end(AVCodecContext *avctx) |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1146 { |
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1147 AC3DecodeContext *ctx = (AC3DecodeContext *)avctx->priv_data; |
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1148 ff_mdct_end(&ctx->imdct_512); |
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1149 ff_mdct_end(&ctx->imdct_256); |
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1150 |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1151 return 0; |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1152 } |
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1153 |
5334
d406baea3275
no need for the decoder to have the license as a prefix
jbr
parents:
5333
diff
changeset
|
1154 AVCodec ac3_decoder = { |
5315
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1155 .name = "ac3", |
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1156 .type = CODEC_TYPE_AUDIO, |
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1157 .id = CODEC_ID_AC3, |
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1158 .priv_data_size = sizeof (AC3DecodeContext), |
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1159 .init = ac3_decode_init, |
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1160 .close = ac3_decode_end, |
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1161 .decode = ac3_decode_frame, |
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1162 }; |