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