]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - libavcodec/ac3tab.h
remove redundancy in AC-3 parser by using common tables from ac3tab.h
[frescor/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 /**
28  * Possible frame sizes.
29  * Generated at runtime to match ATSC A/52 Table 5.18 Frame Size Code Table.
30  */
31 uint16_t ff_ac3_frame_sizes[38][3];
32
33 /**
34  * Maps audio coding mode (acmod) to number of full-bandwidth channels.
35  * from ATSC A/52 Table 5.8 Audio Coding Mode
36  */
37 const uint8_t ff_ac3_channels[8] = {
38     2, 1, 2, 3, 3, 4, 4, 5
39 };
40
41 /* possible frequencies */
42 const uint16_t ff_ac3_freqs[3] = { 48000, 44100, 32000 };
43
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
48 };
49
50 /* AC3 MDCT window */
51
52 /* MDCT window */
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,
86 };
87
88 static uint8_t masktab[253];
89
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,
117 };
118
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 },
170 };
171
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,
179     15, 15, 15, 15,
180 };
181
182 const uint8_t ff_sdecaytab[4]={
183     0x0f, 0x11, 0x13, 0x15,
184 };
185
186 const uint8_t ff_fdecaytab[4]={
187     0x3f, 0x53, 0x67, 0x7b,
188 };
189
190 const uint16_t ff_sgaintab[4]= {
191     0x540, 0x4d8, 0x478, 0x410,
192 };
193
194 const uint16_t ff_dbkneetab[4]= {
195     0x000, 0x700, 0x900, 0xb00,
196 };
197
198 const int16_t ff_floortab[8]= {
199     0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
200 };
201
202 const uint16_t ff_fgaintab[8]= {
203     0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
204 };
205
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
210 };
211
212 static uint8_t bndtab[51];