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.
28 * Possible frame sizes.
29 * Generated at runtime to match ATSC A/52 Table 5.18 Frame Size Code Table.
31 uint16_t ff_ac3_frame_sizes[38][3];
34 * Maps audio coding mode (acmod) to number of full-bandwidth channels.
35 * from ATSC A/52 Table 5.8 Audio Coding Mode
37 const uint8_t ff_ac3_channels[8] = {
38 2, 1, 2, 3, 3, 4, 4, 5
41 /* possible frequencies */
42 const uint16_t ff_ac3_freqs[3] = { 48000, 44100, 32000 };
44 /* possible bitrates */
45 const uint16_t ff_ac3_bitratetab[19] = {
46 32, 40, 48, 56, 64, 80, 96, 112, 128,
47 160, 192, 224, 256, 320, 384, 448, 512, 576, 640
53 const int16_t ff_ac3_window[256] = {
54 4, 7, 12, 16, 21, 28, 34, 42,
55 51, 61, 72, 84, 97, 111, 127, 145,
56 164, 184, 207, 231, 257, 285, 315, 347,
57 382, 419, 458, 500, 544, 591, 641, 694,
58 750, 810, 872, 937, 1007, 1079, 1155, 1235,
59 1318, 1406, 1497, 1593, 1692, 1796, 1903, 2016,
60 2132, 2253, 2379, 2509, 2644, 2783, 2927, 3076,
61 3230, 3389, 3552, 3721, 3894, 4072, 4255, 4444,
62 4637, 4835, 5038, 5246, 5459, 5677, 5899, 6127,
63 6359, 6596, 6837, 7083, 7334, 7589, 7848, 8112,
64 8380, 8652, 8927, 9207, 9491, 9778,10069,10363,
65 10660,10960,11264,11570,11879,12190,12504,12820,
66 13138,13458,13780,14103,14427,14753,15079,15407,
67 15735,16063,16392,16720,17049,17377,17705,18032,
68 18358,18683,19007,19330,19651,19970,20287,20602,
69 20914,21225,21532,21837,22139,22438,22733,23025,
70 23314,23599,23880,24157,24430,24699,24964,25225,
71 25481,25732,25979,26221,26459,26691,26919,27142,
72 27359,27572,27780,27983,28180,28373,28560,28742,
73 28919,29091,29258,29420,29577,29729,29876,30018,
74 30155,30288,30415,30538,30657,30771,30880,30985,
75 31086,31182,31274,31363,31447,31528,31605,31678,
76 31747,31814,31877,31936,31993,32046,32097,32145,
77 32190,32232,32272,32310,32345,32378,32409,32438,
78 32465,32490,32513,32535,32556,32574,32592,32608,
79 32623,32636,32649,32661,32671,32681,32690,32698,
80 32705,32712,32718,32724,32729,32733,32737,32741,
81 32744,32747,32750,32752,32754,32756,32757,32759,
82 32760,32761,32762,32763,32764,32764,32765,32765,
83 32766,32766,32766,32766,32767,32767,32767,32767,
84 32767,32767,32767,32767,32767,32767,32767,32767,
85 32767,32767,32767,32767,32767,32767,32767,32767,
88 static uint8_t masktab[253];
90 static const uint8_t latab[260]= {
91 0x0040,0x003f,0x003e,0x003d,0x003c,0x003b,0x003a,0x0039,0x0038,0x0037,
92 0x0036,0x0035,0x0034,0x0034,0x0033,0x0032,0x0031,0x0030,0x002f,0x002f,
93 0x002e,0x002d,0x002c,0x002c,0x002b,0x002a,0x0029,0x0029,0x0028,0x0027,
94 0x0026,0x0026,0x0025,0x0024,0x0024,0x0023,0x0023,0x0022,0x0021,0x0021,
95 0x0020,0x0020,0x001f,0x001e,0x001e,0x001d,0x001d,0x001c,0x001c,0x001b,
96 0x001b,0x001a,0x001a,0x0019,0x0019,0x0018,0x0018,0x0017,0x0017,0x0016,
97 0x0016,0x0015,0x0015,0x0015,0x0014,0x0014,0x0013,0x0013,0x0013,0x0012,
98 0x0012,0x0012,0x0011,0x0011,0x0011,0x0010,0x0010,0x0010,0x000f,0x000f,
99 0x000f,0x000e,0x000e,0x000e,0x000d,0x000d,0x000d,0x000d,0x000c,0x000c,
100 0x000c,0x000c,0x000b,0x000b,0x000b,0x000b,0x000a,0x000a,0x000a,0x000a,
101 0x000a,0x0009,0x0009,0x0009,0x0009,0x0009,0x0008,0x0008,0x0008,0x0008,
102 0x0008,0x0008,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0006,0x0006,
103 0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0005,0x0005,0x0005,0x0005,
104 0x0005,0x0005,0x0005,0x0005,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,
105 0x0004,0x0004,0x0004,0x0004,0x0004,0x0003,0x0003,0x0003,0x0003,0x0003,
106 0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0002,
107 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,
108 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0001,
109 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
110 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
111 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
112 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
113 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
114 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
115 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
116 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
119 static const uint16_t hth[50][3]= {
120 { 0x04d0,0x04f0,0x0580 },
121 { 0x04d0,0x04f0,0x0580 },
122 { 0x0440,0x0460,0x04b0 },
123 { 0x0400,0x0410,0x0450 },
124 { 0x03e0,0x03e0,0x0420 },
125 { 0x03c0,0x03d0,0x03f0 },
126 { 0x03b0,0x03c0,0x03e0 },
127 { 0x03b0,0x03b0,0x03d0 },
128 { 0x03a0,0x03b0,0x03c0 },
129 { 0x03a0,0x03a0,0x03b0 },
130 { 0x03a0,0x03a0,0x03b0 },
131 { 0x03a0,0x03a0,0x03b0 },
132 { 0x03a0,0x03a0,0x03a0 },
133 { 0x0390,0x03a0,0x03a0 },
134 { 0x0390,0x0390,0x03a0 },
135 { 0x0390,0x0390,0x03a0 },
136 { 0x0380,0x0390,0x03a0 },
137 { 0x0380,0x0380,0x03a0 },
138 { 0x0370,0x0380,0x03a0 },
139 { 0x0370,0x0380,0x03a0 },
140 { 0x0360,0x0370,0x0390 },
141 { 0x0360,0x0370,0x0390 },
142 { 0x0350,0x0360,0x0390 },
143 { 0x0350,0x0360,0x0390 },
144 { 0x0340,0x0350,0x0380 },
145 { 0x0340,0x0350,0x0380 },
146 { 0x0330,0x0340,0x0380 },
147 { 0x0320,0x0340,0x0370 },
148 { 0x0310,0x0320,0x0360 },
149 { 0x0300,0x0310,0x0350 },
150 { 0x02f0,0x0300,0x0340 },
151 { 0x02f0,0x02f0,0x0330 },
152 { 0x02f0,0x02f0,0x0320 },
153 { 0x02f0,0x02f0,0x0310 },
154 { 0x0300,0x02f0,0x0300 },
155 { 0x0310,0x0300,0x02f0 },
156 { 0x0340,0x0320,0x02f0 },
157 { 0x0390,0x0350,0x02f0 },
158 { 0x03e0,0x0390,0x0300 },
159 { 0x0420,0x03e0,0x0310 },
160 { 0x0460,0x0420,0x0330 },
161 { 0x0490,0x0450,0x0350 },
162 { 0x04a0,0x04a0,0x03c0 },
163 { 0x0460,0x0490,0x0410 },
164 { 0x0440,0x0460,0x0470 },
165 { 0x0440,0x0440,0x04a0 },
166 { 0x0520,0x0480,0x0460 },
167 { 0x0800,0x0630,0x0440 },
168 { 0x0840,0x0840,0x0450 },
169 { 0x0840,0x0840,0x04e0 },
172 static const uint8_t baptab[64]= {
173 0, 1, 1, 1, 1, 1, 2, 2, 3, 3,
174 3, 4, 4, 5, 5, 6, 6, 6, 6, 7,
175 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
176 9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
177 12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
178 14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
182 const uint8_t ff_sdecaytab[4]={
183 0x0f, 0x11, 0x13, 0x15,
186 const uint8_t ff_fdecaytab[4]={
187 0x3f, 0x53, 0x67, 0x7b,
190 const uint16_t ff_sgaintab[4]= {
191 0x540, 0x4d8, 0x478, 0x410,
194 const uint16_t ff_dbkneetab[4]= {
195 0x000, 0x700, 0x900, 0xb00,
198 const int16_t ff_floortab[8]= {
199 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
202 const uint16_t ff_fgaintab[8]= {
203 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
206 static const uint8_t bndsz[50]={
207 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
208 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
209 3, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 24, 24, 24, 24, 24
212 static uint8_t bndtab[51];