3 * copyright (c) 2001 Fabrice Bellard
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 * tables taken directly from AC3 spec.
25 /* possible frequencies */
26 static const uint16_t ac3_freqs[3] = { 48000, 44100, 32000 };
28 /* possible bitrates */
29 static const uint16_t ac3_bitratetab[19] = {
30 32, 40, 48, 56, 64, 80, 96, 112, 128,
31 160, 192, 224, 256, 320, 384, 448, 512, 576, 640
37 static const int16_t ac3_window[256] = {
38 4, 7, 12, 16, 21, 28, 34, 42,
39 51, 61, 72, 84, 97, 111, 127, 145,
40 164, 184, 207, 231, 257, 285, 315, 347,
41 382, 419, 458, 500, 544, 591, 641, 694,
42 750, 810, 872, 937, 1007, 1079, 1155, 1235,
43 1318, 1406, 1497, 1593, 1692, 1796, 1903, 2016,
44 2132, 2253, 2379, 2509, 2644, 2783, 2927, 3076,
45 3230, 3389, 3552, 3721, 3894, 4072, 4255, 4444,
46 4637, 4835, 5038, 5246, 5459, 5677, 5899, 6127,
47 6359, 6596, 6837, 7083, 7334, 7589, 7848, 8112,
48 8380, 8652, 8927, 9207, 9491, 9778,10069,10363,
49 10660,10960,11264,11570,11879,12190,12504,12820,
50 13138,13458,13780,14103,14427,14753,15079,15407,
51 15735,16063,16392,16720,17049,17377,17705,18032,
52 18358,18683,19007,19330,19651,19970,20287,20602,
53 20914,21225,21532,21837,22139,22438,22733,23025,
54 23314,23599,23880,24157,24430,24699,24964,25225,
55 25481,25732,25979,26221,26459,26691,26919,27142,
56 27359,27572,27780,27983,28180,28373,28560,28742,
57 28919,29091,29258,29420,29577,29729,29876,30018,
58 30155,30288,30415,30538,30657,30771,30880,30985,
59 31086,31182,31274,31363,31447,31528,31605,31678,
60 31747,31814,31877,31936,31993,32046,32097,32145,
61 32190,32232,32272,32310,32345,32378,32409,32438,
62 32465,32490,32513,32535,32556,32574,32592,32608,
63 32623,32636,32649,32661,32671,32681,32690,32698,
64 32705,32712,32718,32724,32729,32733,32737,32741,
65 32744,32747,32750,32752,32754,32756,32757,32759,
66 32760,32761,32762,32763,32764,32764,32765,32765,
67 32766,32766,32766,32766,32767,32767,32767,32767,
68 32767,32767,32767,32767,32767,32767,32767,32767,
69 32767,32767,32767,32767,32767,32767,32767,32767,
72 static uint8_t masktab[253];
74 static const uint8_t latab[260]= {
75 0x0040,0x003f,0x003e,0x003d,0x003c,0x003b,0x003a,0x0039,0x0038,0x0037,
76 0x0036,0x0035,0x0034,0x0034,0x0033,0x0032,0x0031,0x0030,0x002f,0x002f,
77 0x002e,0x002d,0x002c,0x002c,0x002b,0x002a,0x0029,0x0029,0x0028,0x0027,
78 0x0026,0x0026,0x0025,0x0024,0x0024,0x0023,0x0023,0x0022,0x0021,0x0021,
79 0x0020,0x0020,0x001f,0x001e,0x001e,0x001d,0x001d,0x001c,0x001c,0x001b,
80 0x001b,0x001a,0x001a,0x0019,0x0019,0x0018,0x0018,0x0017,0x0017,0x0016,
81 0x0016,0x0015,0x0015,0x0015,0x0014,0x0014,0x0013,0x0013,0x0013,0x0012,
82 0x0012,0x0012,0x0011,0x0011,0x0011,0x0010,0x0010,0x0010,0x000f,0x000f,
83 0x000f,0x000e,0x000e,0x000e,0x000d,0x000d,0x000d,0x000d,0x000c,0x000c,
84 0x000c,0x000c,0x000b,0x000b,0x000b,0x000b,0x000a,0x000a,0x000a,0x000a,
85 0x000a,0x0009,0x0009,0x0009,0x0009,0x0009,0x0008,0x0008,0x0008,0x0008,
86 0x0008,0x0008,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0006,0x0006,
87 0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0005,0x0005,0x0005,0x0005,
88 0x0005,0x0005,0x0005,0x0005,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,
89 0x0004,0x0004,0x0004,0x0004,0x0004,0x0003,0x0003,0x0003,0x0003,0x0003,
90 0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0002,
91 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,
92 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0001,
93 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
94 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
95 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
96 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
97 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
98 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
99 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
100 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
103 static const uint16_t hth[50][3]= {
104 { 0x04d0,0x04f0,0x0580 },
105 { 0x04d0,0x04f0,0x0580 },
106 { 0x0440,0x0460,0x04b0 },
107 { 0x0400,0x0410,0x0450 },
108 { 0x03e0,0x03e0,0x0420 },
109 { 0x03c0,0x03d0,0x03f0 },
110 { 0x03b0,0x03c0,0x03e0 },
111 { 0x03b0,0x03b0,0x03d0 },
112 { 0x03a0,0x03b0,0x03c0 },
113 { 0x03a0,0x03a0,0x03b0 },
114 { 0x03a0,0x03a0,0x03b0 },
115 { 0x03a0,0x03a0,0x03b0 },
116 { 0x03a0,0x03a0,0x03a0 },
117 { 0x0390,0x03a0,0x03a0 },
118 { 0x0390,0x0390,0x03a0 },
119 { 0x0390,0x0390,0x03a0 },
120 { 0x0380,0x0390,0x03a0 },
121 { 0x0380,0x0380,0x03a0 },
122 { 0x0370,0x0380,0x03a0 },
123 { 0x0370,0x0380,0x03a0 },
124 { 0x0360,0x0370,0x0390 },
125 { 0x0360,0x0370,0x0390 },
126 { 0x0350,0x0360,0x0390 },
127 { 0x0350,0x0360,0x0390 },
128 { 0x0340,0x0350,0x0380 },
129 { 0x0340,0x0350,0x0380 },
130 { 0x0330,0x0340,0x0380 },
131 { 0x0320,0x0340,0x0370 },
132 { 0x0310,0x0320,0x0360 },
133 { 0x0300,0x0310,0x0350 },
134 { 0x02f0,0x0300,0x0340 },
135 { 0x02f0,0x02f0,0x0330 },
136 { 0x02f0,0x02f0,0x0320 },
137 { 0x02f0,0x02f0,0x0310 },
138 { 0x0300,0x02f0,0x0300 },
139 { 0x0310,0x0300,0x02f0 },
140 { 0x0340,0x0320,0x02f0 },
141 { 0x0390,0x0350,0x02f0 },
142 { 0x03e0,0x0390,0x0300 },
143 { 0x0420,0x03e0,0x0310 },
144 { 0x0460,0x0420,0x0330 },
145 { 0x0490,0x0450,0x0350 },
146 { 0x04a0,0x04a0,0x03c0 },
147 { 0x0460,0x0490,0x0410 },
148 { 0x0440,0x0460,0x0470 },
149 { 0x0440,0x0440,0x04a0 },
150 { 0x0520,0x0480,0x0460 },
151 { 0x0800,0x0630,0x0440 },
152 { 0x0840,0x0840,0x0450 },
153 { 0x0840,0x0840,0x04e0 },
156 static const uint8_t baptab[64]= {
157 0, 1, 1, 1, 1, 1, 2, 2, 3, 3,
158 3, 4, 4, 5, 5, 6, 6, 6, 6, 7,
159 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
160 9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
161 12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
162 14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
166 static const uint8_t sdecaytab[4]={
167 0x0f, 0x11, 0x13, 0x15,
170 static const uint8_t fdecaytab[4]={
171 0x3f, 0x53, 0x67, 0x7b,
174 static const uint16_t sgaintab[4]= {
175 0x540, 0x4d8, 0x478, 0x410,
178 static const uint16_t dbkneetab[4]= {
179 0x000, 0x700, 0x900, 0xb00,
182 static const int16_t floortab[8]= {
183 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
186 static const uint16_t fgaintab[8]= {
187 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
190 static const uint8_t bndsz[50]={
191 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
192 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
193 3, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 24, 24, 24, 24, 24
196 static uint8_t bndtab[51];
198 /* fft & mdct sin cos tables */
199 static int16_t costab[64];
200 static int16_t sintab[64];
201 static int16_t fft_rev[512];
202 static int16_t xcos1[128];
203 static int16_t xsin1[128];