3 * copyright (c) 2001 Fabrice Bellard
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * tables taken directly from AC3 spec.
30 * Possible frame sizes.
31 * from ATSC A/52 Table 5.18 Frame Size Code Table.
33 const uint16_t ff_ac3_frame_sizes[38][3] = {
75 * Maps audio coding mode (acmod) to number of full-bandwidth channels.
76 * from ATSC A/52 Table 5.8 Audio Coding Mode
78 const uint8_t ff_ac3_channels[8] = {
79 2, 1, 2, 3, 3, 4, 4, 5
82 /* possible frequencies */
83 const uint16_t ff_ac3_freqs[3] = { 48000, 44100, 32000 };
85 /* possible bitrates */
86 const uint16_t ff_ac3_bitratetab[19] = {
87 32, 40, 48, 56, 64, 80, 96, 112, 128,
88 160, 192, 224, 256, 320, 384, 448, 512, 576, 640
94 const int16_t ff_ac3_window[256] = {
95 4, 7, 12, 16, 21, 28, 34, 42,
96 51, 61, 72, 84, 97, 111, 127, 145,
97 164, 184, 207, 231, 257, 285, 315, 347,
98 382, 419, 458, 500, 544, 591, 641, 694,
99 750, 810, 872, 937, 1007, 1079, 1155, 1235,
100 1318, 1406, 1497, 1593, 1692, 1796, 1903, 2016,
101 2132, 2253, 2379, 2509, 2644, 2783, 2927, 3076,
102 3230, 3389, 3552, 3721, 3894, 4072, 4255, 4444,
103 4637, 4835, 5038, 5246, 5459, 5677, 5899, 6127,
104 6359, 6596, 6837, 7083, 7334, 7589, 7848, 8112,
105 8380, 8652, 8927, 9207, 9491, 9778,10069,10363,
106 10660,10960,11264,11570,11879,12190,12504,12820,
107 13138,13458,13780,14103,14427,14753,15079,15407,
108 15735,16063,16392,16720,17049,17377,17705,18032,
109 18358,18683,19007,19330,19651,19970,20287,20602,
110 20914,21225,21532,21837,22139,22438,22733,23025,
111 23314,23599,23880,24157,24430,24699,24964,25225,
112 25481,25732,25979,26221,26459,26691,26919,27142,
113 27359,27572,27780,27983,28180,28373,28560,28742,
114 28919,29091,29258,29420,29577,29729,29876,30018,
115 30155,30288,30415,30538,30657,30771,30880,30985,
116 31086,31182,31274,31363,31447,31528,31605,31678,
117 31747,31814,31877,31936,31993,32046,32097,32145,
118 32190,32232,32272,32310,32345,32378,32409,32438,
119 32465,32490,32513,32535,32556,32574,32592,32608,
120 32623,32636,32649,32661,32671,32681,32690,32698,
121 32705,32712,32718,32724,32729,32733,32737,32741,
122 32744,32747,32750,32752,32754,32756,32757,32759,
123 32760,32761,32762,32763,32764,32764,32765,32765,
124 32766,32766,32766,32766,32767,32767,32767,32767,
125 32767,32767,32767,32767,32767,32767,32767,32767,
126 32767,32767,32767,32767,32767,32767,32767,32767,
129 const uint8_t ff_ac3_latab[260]= {
130 0x0040,0x003f,0x003e,0x003d,0x003c,0x003b,0x003a,0x0039,0x0038,0x0037,
131 0x0036,0x0035,0x0034,0x0034,0x0033,0x0032,0x0031,0x0030,0x002f,0x002f,
132 0x002e,0x002d,0x002c,0x002c,0x002b,0x002a,0x0029,0x0029,0x0028,0x0027,
133 0x0026,0x0026,0x0025,0x0024,0x0024,0x0023,0x0023,0x0022,0x0021,0x0021,
134 0x0020,0x0020,0x001f,0x001e,0x001e,0x001d,0x001d,0x001c,0x001c,0x001b,
135 0x001b,0x001a,0x001a,0x0019,0x0019,0x0018,0x0018,0x0017,0x0017,0x0016,
136 0x0016,0x0015,0x0015,0x0015,0x0014,0x0014,0x0013,0x0013,0x0013,0x0012,
137 0x0012,0x0012,0x0011,0x0011,0x0011,0x0010,0x0010,0x0010,0x000f,0x000f,
138 0x000f,0x000e,0x000e,0x000e,0x000d,0x000d,0x000d,0x000d,0x000c,0x000c,
139 0x000c,0x000c,0x000b,0x000b,0x000b,0x000b,0x000a,0x000a,0x000a,0x000a,
140 0x000a,0x0009,0x0009,0x0009,0x0009,0x0009,0x0008,0x0008,0x0008,0x0008,
141 0x0008,0x0008,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0006,0x0006,
142 0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0005,0x0005,0x0005,0x0005,
143 0x0005,0x0005,0x0005,0x0005,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,
144 0x0004,0x0004,0x0004,0x0004,0x0004,0x0003,0x0003,0x0003,0x0003,0x0003,
145 0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0002,
146 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,
147 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0001,
148 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
149 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
150 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
151 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
152 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
153 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
154 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
155 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
158 const uint16_t ff_ac3_hth[50][3]= {
159 { 0x04d0,0x04f0,0x0580 },
160 { 0x04d0,0x04f0,0x0580 },
161 { 0x0440,0x0460,0x04b0 },
162 { 0x0400,0x0410,0x0450 },
163 { 0x03e0,0x03e0,0x0420 },
164 { 0x03c0,0x03d0,0x03f0 },
165 { 0x03b0,0x03c0,0x03e0 },
166 { 0x03b0,0x03b0,0x03d0 },
167 { 0x03a0,0x03b0,0x03c0 },
168 { 0x03a0,0x03a0,0x03b0 },
169 { 0x03a0,0x03a0,0x03b0 },
170 { 0x03a0,0x03a0,0x03b0 },
171 { 0x03a0,0x03a0,0x03a0 },
172 { 0x0390,0x03a0,0x03a0 },
173 { 0x0390,0x0390,0x03a0 },
174 { 0x0390,0x0390,0x03a0 },
175 { 0x0380,0x0390,0x03a0 },
176 { 0x0380,0x0380,0x03a0 },
177 { 0x0370,0x0380,0x03a0 },
178 { 0x0370,0x0380,0x03a0 },
179 { 0x0360,0x0370,0x0390 },
180 { 0x0360,0x0370,0x0390 },
181 { 0x0350,0x0360,0x0390 },
182 { 0x0350,0x0360,0x0390 },
183 { 0x0340,0x0350,0x0380 },
184 { 0x0340,0x0350,0x0380 },
185 { 0x0330,0x0340,0x0380 },
186 { 0x0320,0x0340,0x0370 },
187 { 0x0310,0x0320,0x0360 },
188 { 0x0300,0x0310,0x0350 },
189 { 0x02f0,0x0300,0x0340 },
190 { 0x02f0,0x02f0,0x0330 },
191 { 0x02f0,0x02f0,0x0320 },
192 { 0x02f0,0x02f0,0x0310 },
193 { 0x0300,0x02f0,0x0300 },
194 { 0x0310,0x0300,0x02f0 },
195 { 0x0340,0x0320,0x02f0 },
196 { 0x0390,0x0350,0x02f0 },
197 { 0x03e0,0x0390,0x0300 },
198 { 0x0420,0x03e0,0x0310 },
199 { 0x0460,0x0420,0x0330 },
200 { 0x0490,0x0450,0x0350 },
201 { 0x04a0,0x04a0,0x03c0 },
202 { 0x0460,0x0490,0x0410 },
203 { 0x0440,0x0460,0x0470 },
204 { 0x0440,0x0440,0x04a0 },
205 { 0x0520,0x0480,0x0460 },
206 { 0x0800,0x0630,0x0440 },
207 { 0x0840,0x0840,0x0450 },
208 { 0x0840,0x0840,0x04e0 },
211 const uint8_t ff_ac3_baptab[64]= {
212 0, 1, 1, 1, 1, 1, 2, 2, 3, 3,
213 3, 4, 4, 5, 5, 6, 6, 6, 6, 7,
214 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
215 9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
216 12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
217 14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
221 const uint8_t ff_sdecaytab[4]={
222 0x0f, 0x11, 0x13, 0x15,
225 const uint8_t ff_fdecaytab[4]={
226 0x3f, 0x53, 0x67, 0x7b,
229 const uint16_t ff_sgaintab[4]= {
230 0x540, 0x4d8, 0x478, 0x410,
233 const uint16_t ff_dbkneetab[4]= {
234 0x000, 0x700, 0x900, 0xb00,
237 const int16_t ff_floortab[8]= {
238 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
241 const uint16_t ff_fgaintab[8]= {
242 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
245 const uint8_t ff_ac3_bndsz[50]={
246 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
247 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
248 3, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 24, 24, 24, 24, 24