Change license headers to say 'FFmpeg' instead of 'this program/this library'
[ffmpeg.git] / libavcodec / ac3tab.h
1 /*
2  * AC3 tables
3  * copyright (c) 2001 Fabrice Bellard
4  *
5  * This file is part of FFmpeg.
6  *
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.
11  *
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.
16  *
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
20  */
21
22 /**
23  * @file ac3tab.h
24  * tables taken directly from AC3 spec.
25  */
26
27 /* possible frequencies */
28 static const uint16_t ac3_freqs[3] = { 48000, 44100, 32000 };
29
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
34 };
35
36 /* AC3 MDCT window */
37
38 /* MDCT window */
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,
72 };
73
74 static uint8_t masktab[253];
75
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,
103 };
104
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 },
156 };
157
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,
165     15, 15, 15, 15,
166 };
167
168 static const uint8_t sdecaytab[4]={
169     0x0f, 0x11, 0x13, 0x15,
170 };
171
172 static const uint8_t fdecaytab[4]={
173     0x3f, 0x53, 0x67, 0x7b,
174 };
175
176 static const uint16_t sgaintab[4]= {
177     0x540, 0x4d8, 0x478, 0x410,
178 };
179
180 static const uint16_t dbkneetab[4]= {
181     0x000, 0x700, 0x900, 0xb00,
182 };
183
184 static const int16_t floortab[8]= {
185     0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
186 };
187
188 static const uint16_t fgaintab[8]= {
189     0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
190 };
191
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
196 };
197
198 static uint8_t bndtab[51];
199
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];