]> git.sesse.net Git - ffmpeg/blob - libavcodec/ac3tab.h
fix decoding of ED-small-sample-file.ogg
[ffmpeg] / libavcodec / ac3tab.h
1 /*
2  * AC3 tables
3  * copyright (c) 2001 Fabrice Bellard
4  *
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.
9  *
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.
14  *
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
18  */
19
20 /**
21  * @file ac3tab.h
22  * tables taken directly from AC3 spec.
23  */
24
25 /* possible frequencies */
26 static const uint16_t ac3_freqs[3] = { 48000, 44100, 32000 };
27
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
32 };
33
34 /* AC3 MDCT window */
35
36 /* MDCT window */
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,
70 };
71
72 static uint8_t masktab[253];
73
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,
101 };
102
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 },
154 };
155
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,
163     15, 15, 15, 15,
164 };
165
166 static const uint8_t sdecaytab[4]={
167     0x0f, 0x11, 0x13, 0x15,
168 };
169
170 static const uint8_t fdecaytab[4]={
171     0x3f, 0x53, 0x67, 0x7b,
172 };
173
174 static const uint16_t sgaintab[4]= {
175     0x540, 0x4d8, 0x478, 0x410,
176 };
177
178 static const uint16_t dbkneetab[4]= {
179     0x000, 0x700, 0x900, 0xb00,
180 };
181
182 static const int16_t floortab[8]= {
183     0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
184 };
185
186 static const uint16_t fgaintab[8]= {
187     0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
188 };
189
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
194 };
195
196 static uint8_t bndtab[51];
197
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];