1use symphonia_core::io::vlc::*;
9
10use lazy_static::lazy_static;
11
12#[rustfmt::skip]
13const MPEG_CODES_0: [u32; 0] = [ ];
14
15#[rustfmt::skip]
16const MPEG_BITS_0: [u8; 0] = [ ];
17
18#[rustfmt::skip]
19const MPEG_CODES_1: [u32; 4] = [
20 0x0001, 0x0001, 0x0001, 0x0000,
21];
22
23#[rustfmt::skip]
24const MPEG_BITS_1: [u8; 4] = [
25 1, 3, 2, 3,
26];
27
28#[rustfmt::skip]
29const MPEG_CODES_2: [u32; 9] = [
30 0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002,
31 0x0000,
32];
33
34#[rustfmt::skip]
35const MPEG_BITS_2: [u8; 9] = [
36 1, 3, 6, 3, 3, 5, 5, 5,
37 6,
38];
39
40#[rustfmt::skip]
41const MPEG_CODES_3: [u32; 9] = [
42 0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002,
43 0x0000,
44];
45
46#[rustfmt::skip]
47const MPEG_BITS_3: [u8; 9] = [
48 2, 2, 6, 3, 2, 5, 5, 5,
49 6,
50];
51
52#[rustfmt::skip]
53const MPEG_CODES_5: [u32; 16] = [
54 0x0001, 0x0002, 0x0006, 0x0005, 0x0003, 0x0001, 0x0004, 0x0004,
55 0x0007, 0x0005, 0x0007, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000,
56];
57
58#[rustfmt::skip]
59const MPEG_BITS_5: [u8; 16] = [
60 1, 3, 6, 7, 3, 3, 6, 7,
61 6, 6, 7, 8, 7, 6, 7, 8,
62];
63
64#[rustfmt::skip]
65const MPEG_CODES_6: [u32; 16] = [
66 0x0007, 0x0003, 0x0005, 0x0001, 0x0006, 0x0002, 0x0003, 0x0002,
67 0x0005, 0x0004, 0x0004, 0x0001, 0x0003, 0x0003, 0x0002, 0x0000,
68];
69
70#[rustfmt::skip]
71const MPEG_BITS_6: [u8; 16] = [
72 3, 3, 5, 7, 3, 2, 4, 5,
73 4, 4, 5, 6, 6, 5, 6, 7,
74];
75
76#[rustfmt::skip]
77const MPEG_CODES_7: [u32; 36] = [
78 0x0001, 0x0002, 0x000a, 0x0013, 0x0010, 0x000a, 0x0003, 0x0003,
79 0x0007, 0x000a, 0x0005, 0x0003, 0x000b, 0x0004, 0x000d, 0x0011,
80 0x0008, 0x0004, 0x000c, 0x000b, 0x0012, 0x000f, 0x000b, 0x0002,
81 0x0007, 0x0006, 0x0009, 0x000e, 0x0003, 0x0001, 0x0006, 0x0004,
82 0x0005, 0x0003, 0x0002, 0x0000,
83];
84
85#[rustfmt::skip]
86const MPEG_BITS_7: [u8; 36] = [
87 1, 3, 6, 8, 8, 9, 3, 4,
88 6, 7, 7, 8, 6, 5, 7, 8,
89 8, 9, 7, 7, 8, 9, 9, 9,
90 7, 7, 8, 9, 9, 10, 8, 8,
91 9, 10, 10, 10,
92];
93
94#[rustfmt::skip]
95const MPEG_CODES_8: [u32; 36] = [
96 0x0003, 0x0004, 0x0006, 0x0012, 0x000c, 0x0005, 0x0005, 0x0001,
97 0x0002, 0x0010, 0x0009, 0x0003, 0x0007, 0x0003, 0x0005, 0x000e,
98 0x0007, 0x0003, 0x0013, 0x0011, 0x000f, 0x000d, 0x000a, 0x0004,
99 0x000d, 0x0005, 0x0008, 0x000b, 0x0005, 0x0001, 0x000c, 0x0004,
100 0x0004, 0x0001, 0x0001, 0x0000,
101];
102
103#[rustfmt::skip]
104const MPEG_BITS_8: [u8; 36] = [
105 2, 3, 6, 8, 8, 9, 3, 2,
106 4, 8, 8, 8, 6, 4, 6, 8,
107 8, 9, 8, 8, 8, 9, 9, 10,
108 8, 7, 8, 9, 10, 10, 9, 8,
109 9, 9, 11, 11,
110];
111
112#[rustfmt::skip]
113const MPEG_CODES_9: [u32; 36] = [
114 0x0007, 0x0005, 0x0009, 0x000e, 0x000f, 0x0007, 0x0006, 0x0004,
115 0x0005, 0x0005, 0x0006, 0x0007, 0x0007, 0x0006, 0x0008, 0x0008,
116 0x0008, 0x0005, 0x000f, 0x0006, 0x0009, 0x000a, 0x0005, 0x0001,
117 0x000b, 0x0007, 0x0009, 0x0006, 0x0004, 0x0001, 0x000e, 0x0004,
118 0x0006, 0x0002, 0x0006, 0x0000,
119];
120
121#[rustfmt::skip]
122const MPEG_BITS_9: [u8; 36] = [
123 3, 3, 5, 6, 8, 9, 3, 3,
124 4, 5, 6, 8, 4, 4, 5, 6,
125 7, 8, 6, 5, 6, 7, 7, 8,
126 7, 6, 7, 7, 8, 9, 8, 7,
127 8, 8, 9, 9,
128];
129
130#[rustfmt::skip]
131const MPEG_CODES_10: [u32; 64] = [
132 0x0001, 0x0002, 0x000a, 0x0017, 0x0023, 0x001e, 0x000c, 0x0011,
133 0x0003, 0x0003, 0x0008, 0x000c, 0x0012, 0x0015, 0x000c, 0x0007,
134 0x000b, 0x0009, 0x000f, 0x0015, 0x0020, 0x0028, 0x0013, 0x0006,
135 0x000e, 0x000d, 0x0016, 0x0022, 0x002e, 0x0017, 0x0012, 0x0007,
136 0x0014, 0x0013, 0x0021, 0x002f, 0x001b, 0x0016, 0x0009, 0x0003,
137 0x001f, 0x0016, 0x0029, 0x001a, 0x0015, 0x0014, 0x0005, 0x0003,
138 0x000e, 0x000d, 0x000a, 0x000b, 0x0010, 0x0006, 0x0005, 0x0001,
139 0x0009, 0x0008, 0x0007, 0x0008, 0x0004, 0x0004, 0x0002, 0x0000,
140];
141
142#[rustfmt::skip]
143const MPEG_BITS_10: [u8; 64] = [
144 1, 3, 6, 8, 9, 9, 9, 10,
145 3, 4, 6, 7, 8, 9, 8, 8,
146 6, 6, 7, 8, 9, 10, 9, 9,
147 7, 7, 8, 9, 10, 10, 9, 10,
148 8, 8, 9, 10, 10, 10, 10, 10,
149 9, 9, 10, 10, 11, 11, 10, 11,
150 8, 8, 9, 10, 10, 10, 11, 11,
151 9, 8, 9, 10, 10, 11, 11, 11,
152];
153
154#[rustfmt::skip]
155const MPEG_CODES_11: [u32; 64] = [
156 0x0003, 0x0004, 0x000a, 0x0018, 0x0022, 0x0021, 0x0015, 0x000f,
157 0x0005, 0x0003, 0x0004, 0x000a, 0x0020, 0x0011, 0x000b, 0x000a,
158 0x000b, 0x0007, 0x000d, 0x0012, 0x001e, 0x001f, 0x0014, 0x0005,
159 0x0019, 0x000b, 0x0013, 0x003b, 0x001b, 0x0012, 0x000c, 0x0005,
160 0x0023, 0x0021, 0x001f, 0x003a, 0x001e, 0x0010, 0x0007, 0x0005,
161 0x001c, 0x001a, 0x0020, 0x0013, 0x0011, 0x000f, 0x0008, 0x000e,
162 0x000e, 0x000c, 0x0009, 0x000d, 0x000e, 0x0009, 0x0004, 0x0001,
163 0x000b, 0x0004, 0x0006, 0x0006, 0x0006, 0x0003, 0x0002, 0x0000,
164];
165
166#[rustfmt::skip]
167const MPEG_BITS_11: [u8; 64] = [
168 2, 3, 5, 7, 8, 9, 8, 9,
169 3, 3, 4, 6, 8, 8, 7, 8,
170 5, 5, 6, 7, 8, 9, 8, 8,
171 7, 6, 7, 9, 8, 10, 8, 9,
172 8, 8, 8, 9, 9, 10, 9, 10,
173 8, 8, 9, 10, 10, 11, 10, 11,
174 8, 7, 7, 8, 9, 10, 10, 10,
175 8, 7, 8, 9, 10, 10, 10, 10,
176];
177
178#[rustfmt::skip]
179const MPEG_CODES_12: [u32; 64] = [
180 0x0009, 0x0006, 0x0010, 0x0021, 0x0029, 0x0027, 0x0026, 0x001a,
181 0x0007, 0x0005, 0x0006, 0x0009, 0x0017, 0x0010, 0x001a, 0x000b,
182 0x0011, 0x0007, 0x000b, 0x000e, 0x0015, 0x001e, 0x000a, 0x0007,
183 0x0011, 0x000a, 0x000f, 0x000c, 0x0012, 0x001c, 0x000e, 0x0005,
184 0x0020, 0x000d, 0x0016, 0x0013, 0x0012, 0x0010, 0x0009, 0x0005,
185 0x0028, 0x0011, 0x001f, 0x001d, 0x0011, 0x000d, 0x0004, 0x0002,
186 0x001b, 0x000c, 0x000b, 0x000f, 0x000a, 0x0007, 0x0004, 0x0001,
187 0x001b, 0x000c, 0x0008, 0x000c, 0x0006, 0x0003, 0x0001, 0x0000,
188];
189
190#[rustfmt::skip]
191const MPEG_BITS_12: [u8; 64] = [
192 4, 3, 5, 7, 8, 9, 9, 9,
193 3, 3, 4, 5, 7, 7, 8, 8,
194 5, 4, 5, 6, 7, 8, 7, 8,
195 6, 5, 6, 6, 7, 8, 8, 8,
196 7, 6, 7, 7, 8, 8, 8, 9,
197 8, 7, 8, 8, 8, 9, 8, 9,
198 8, 7, 7, 8, 8, 9, 9, 10,
199 9, 8, 8, 9, 9, 9, 9, 10,
200];
201
202#[rustfmt::skip]
203const MPEG_CODES_13: [u32; 256] = [
204 0x0001, 0x0005, 0x000e, 0x0015, 0x0022, 0x0033, 0x002e, 0x0047,
205 0x002a, 0x0034, 0x0044, 0x0034, 0x0043, 0x002c, 0x002b, 0x0013,
206 0x0003, 0x0004, 0x000c, 0x0013, 0x001f, 0x001a, 0x002c, 0x0021,
207 0x001f, 0x0018, 0x0020, 0x0018, 0x001f, 0x0023, 0x0016, 0x000e,
208 0x000f, 0x000d, 0x0017, 0x0024, 0x003b, 0x0031, 0x004d, 0x0041,
209 0x001d, 0x0028, 0x001e, 0x0028, 0x001b, 0x0021, 0x002a, 0x0010,
210 0x0016, 0x0014, 0x0025, 0x003d, 0x0038, 0x004f, 0x0049, 0x0040,
211 0x002b, 0x004c, 0x0038, 0x0025, 0x001a, 0x001f, 0x0019, 0x000e,
212 0x0023, 0x0010, 0x003c, 0x0039, 0x0061, 0x004b, 0x0072, 0x005b,
213 0x0036, 0x0049, 0x0037, 0x0029, 0x0030, 0x0035, 0x0017, 0x0018,
214 0x003a, 0x001b, 0x0032, 0x0060, 0x004c, 0x0046, 0x005d, 0x0054,
215 0x004d, 0x003a, 0x004f, 0x001d, 0x004a, 0x0031, 0x0029, 0x0011,
216 0x002f, 0x002d, 0x004e, 0x004a, 0x0073, 0x005e, 0x005a, 0x004f,
217 0x0045, 0x0053, 0x0047, 0x0032, 0x003b, 0x0026, 0x0024, 0x000f,
218 0x0048, 0x0022, 0x0038, 0x005f, 0x005c, 0x0055, 0x005b, 0x005a,
219 0x0056, 0x0049, 0x004d, 0x0041, 0x0033, 0x002c, 0x002b, 0x002a,
220 0x002b, 0x0014, 0x001e, 0x002c, 0x0037, 0x004e, 0x0048, 0x0057,
221 0x004e, 0x003d, 0x002e, 0x0036, 0x0025, 0x001e, 0x0014, 0x0010,
222 0x0035, 0x0019, 0x0029, 0x0025, 0x002c, 0x003b, 0x0036, 0x0051,
223 0x0042, 0x004c, 0x0039, 0x0036, 0x0025, 0x0012, 0x0027, 0x000b,
224 0x0023, 0x0021, 0x001f, 0x0039, 0x002a, 0x0052, 0x0048, 0x0050,
225 0x002f, 0x003a, 0x0037, 0x0015, 0x0016, 0x001a, 0x0026, 0x0016,
226 0x0035, 0x0019, 0x0017, 0x0026, 0x0046, 0x003c, 0x0033, 0x0024,
227 0x0037, 0x001a, 0x0022, 0x0017, 0x001b, 0x000e, 0x0009, 0x0007,
228 0x0022, 0x0020, 0x001c, 0x0027, 0x0031, 0x004b, 0x001e, 0x0034,
229 0x0030, 0x0028, 0x0034, 0x001c, 0x0012, 0x0011, 0x0009, 0x0005,
230 0x002d, 0x0015, 0x0022, 0x0040, 0x0038, 0x0032, 0x0031, 0x002d,
231 0x001f, 0x0013, 0x000c, 0x000f, 0x000a, 0x0007, 0x0006, 0x0003,
232 0x0030, 0x0017, 0x0014, 0x0027, 0x0024, 0x0023, 0x0035, 0x0015,
233 0x0010, 0x0017, 0x000d, 0x000a, 0x0006, 0x0001, 0x0004, 0x0002,
234 0x0010, 0x000f, 0x0011, 0x001b, 0x0019, 0x0014, 0x001d, 0x000b,
235 0x0011, 0x000c, 0x0010, 0x0008, 0x0001, 0x0001, 0x0000, 0x0001,
236];
237
238#[rustfmt::skip]
239const MPEG_BITS_13: [u8; 256] = [
240 1, 4, 6, 7, 8, 9, 9, 10,
241 9, 10, 11, 11, 12, 12, 13, 13,
242 3, 4, 6, 7, 8, 8, 9, 9,
243 9, 9, 10, 10, 11, 12, 12, 12,
244 6, 6, 7, 8, 9, 9, 10, 10,
245 9, 10, 10, 11, 11, 12, 13, 13,
246 7, 7, 8, 9, 9, 10, 10, 10,
247 10, 11, 11, 11, 11, 12, 13, 13,
248 8, 7, 9, 9, 10, 10, 11, 11,
249 10, 11, 11, 12, 12, 13, 13, 14,
250 9, 8, 9, 10, 10, 10, 11, 11,
251 11, 11, 12, 11, 13, 13, 14, 14,
252 9, 9, 10, 10, 11, 11, 11, 11,
253 11, 12, 12, 12, 13, 13, 14, 14,
254 10, 9, 10, 11, 11, 11, 12, 12,
255 12, 12, 13, 13, 13, 14, 16, 16,
256 9, 8, 9, 10, 10, 11, 11, 12,
257 12, 12, 12, 13, 13, 14, 15, 15,
258 10, 9, 10, 10, 11, 11, 11, 13,
259 12, 13, 13, 14, 14, 14, 16, 15,
260 10, 10, 10, 11, 11, 12, 12, 13,
261 12, 13, 14, 13, 14, 15, 16, 17,
262 11, 10, 10, 11, 12, 12, 12, 12,
263 13, 13, 13, 14, 15, 15, 15, 16,
264 11, 11, 11, 12, 12, 13, 12, 13,
265 14, 14, 15, 15, 15, 16, 16, 16,
266 12, 11, 12, 13, 13, 13, 14, 14,
267 14, 14, 14, 15, 16, 15, 16, 16,
268 13, 12, 12, 13, 13, 13, 15, 14,
269 14, 17, 15, 15, 15, 17, 16, 16,
270 12, 12, 13, 14, 14, 14, 15, 14,
271 15, 15, 16, 16, 19, 18, 19, 16,
272];
273
274#[rustfmt::skip]
275const MPEG_CODES_15: [u32; 256] = [
276 0x0007, 0x000c, 0x0012, 0x0035, 0x002f, 0x004c, 0x007c, 0x006c,
277 0x0059, 0x007b, 0x006c, 0x0077, 0x006b, 0x0051, 0x007a, 0x003f,
278 0x000d, 0x0005, 0x0010, 0x001b, 0x002e, 0x0024, 0x003d, 0x0033,
279 0x002a, 0x0046, 0x0034, 0x0053, 0x0041, 0x0029, 0x003b, 0x0024,
280 0x0013, 0x0011, 0x000f, 0x0018, 0x0029, 0x0022, 0x003b, 0x0030,
281 0x0028, 0x0040, 0x0032, 0x004e, 0x003e, 0x0050, 0x0038, 0x0021,
282 0x001d, 0x001c, 0x0019, 0x002b, 0x0027, 0x003f, 0x0037, 0x005d,
283 0x004c, 0x003b, 0x005d, 0x0048, 0x0036, 0x004b, 0x0032, 0x001d,
284 0x0034, 0x0016, 0x002a, 0x0028, 0x0043, 0x0039, 0x005f, 0x004f,
285 0x0048, 0x0039, 0x0059, 0x0045, 0x0031, 0x0042, 0x002e, 0x001b,
286 0x004d, 0x0025, 0x0023, 0x0042, 0x003a, 0x0034, 0x005b, 0x004a,
287 0x003e, 0x0030, 0x004f, 0x003f, 0x005a, 0x003e, 0x0028, 0x0026,
288 0x007d, 0x0020, 0x003c, 0x0038, 0x0032, 0x005c, 0x004e, 0x0041,
289 0x0037, 0x0057, 0x0047, 0x0033, 0x0049, 0x0033, 0x0046, 0x001e,
290 0x006d, 0x0035, 0x0031, 0x005e, 0x0058, 0x004b, 0x0042, 0x007a,
291 0x005b, 0x0049, 0x0038, 0x002a, 0x0040, 0x002c, 0x0015, 0x0019,
292 0x005a, 0x002b, 0x0029, 0x004d, 0x0049, 0x003f, 0x0038, 0x005c,
293 0x004d, 0x0042, 0x002f, 0x0043, 0x0030, 0x0035, 0x0024, 0x0014,
294 0x0047, 0x0022, 0x0043, 0x003c, 0x003a, 0x0031, 0x0058, 0x004c,
295 0x0043, 0x006a, 0x0047, 0x0036, 0x0026, 0x0027, 0x0017, 0x000f,
296 0x006d, 0x0035, 0x0033, 0x002f, 0x005a, 0x0052, 0x003a, 0x0039,
297 0x0030, 0x0048, 0x0039, 0x0029, 0x0017, 0x001b, 0x003e, 0x0009,
298 0x0056, 0x002a, 0x0028, 0x0025, 0x0046, 0x0040, 0x0034, 0x002b,
299 0x0046, 0x0037, 0x002a, 0x0019, 0x001d, 0x0012, 0x000b, 0x000b,
300 0x0076, 0x0044, 0x001e, 0x0037, 0x0032, 0x002e, 0x004a, 0x0041,
301 0x0031, 0x0027, 0x0018, 0x0010, 0x0016, 0x000d, 0x000e, 0x0007,
302 0x005b, 0x002c, 0x0027, 0x0026, 0x0022, 0x003f, 0x0034, 0x002d,
303 0x001f, 0x0034, 0x001c, 0x0013, 0x000e, 0x0008, 0x0009, 0x0003,
304 0x007b, 0x003c, 0x003a, 0x0035, 0x002f, 0x002b, 0x0020, 0x0016,
305 0x0025, 0x0018, 0x0011, 0x000c, 0x000f, 0x000a, 0x0002, 0x0001,
306 0x0047, 0x0025, 0x0022, 0x001e, 0x001c, 0x0014, 0x0011, 0x001a,
307 0x0015, 0x0010, 0x000a, 0x0006, 0x0008, 0x0006, 0x0002, 0x0000,
308];
309
310#[rustfmt::skip]
311const MPEG_BITS_15: [u8; 256] = [
312 3, 4, 5, 7, 7, 8, 9, 9,
313 9, 10, 10, 11, 11, 11, 12, 13,
314 4, 3, 5, 6, 7, 7, 8, 8,
315 8, 9, 9, 10, 10, 10, 11, 11,
316 5, 5, 5, 6, 7, 7, 8, 8,
317 8, 9, 9, 10, 10, 11, 11, 11,
318 6, 6, 6, 7, 7, 8, 8, 9,
319 9, 9, 10, 10, 10, 11, 11, 11,
320 7, 6, 7, 7, 8, 8, 9, 9,
321 9, 9, 10, 10, 10, 11, 11, 11,
322 8, 7, 7, 8, 8, 8, 9, 9,
323 9, 9, 10, 10, 11, 11, 11, 12,
324 9, 7, 8, 8, 8, 9, 9, 9,
325 9, 10, 10, 10, 11, 11, 12, 12,
326 9, 8, 8, 9, 9, 9, 9, 10,
327 10, 10, 10, 10, 11, 11, 11, 12,
328 9, 8, 8, 9, 9, 9, 9, 10,
329 10, 10, 10, 11, 11, 12, 12, 12,
330 9, 8, 9, 9, 9, 9, 10, 10,
331 10, 11, 11, 11, 11, 12, 12, 12,
332 10, 9, 9, 9, 10, 10, 10, 10,
333 10, 11, 11, 11, 11, 12, 13, 12,
334 10, 9, 9, 9, 10, 10, 10, 10,
335 11, 11, 11, 11, 12, 12, 12, 13,
336 11, 10, 9, 10, 10, 10, 11, 11,
337 11, 11, 11, 11, 12, 12, 13, 13,
338 11, 10, 10, 10, 10, 11, 11, 11,
339 11, 12, 12, 12, 12, 12, 13, 13,
340 12, 11, 11, 11, 11, 11, 11, 11,
341 12, 12, 12, 12, 13, 13, 12, 13,
342 12, 11, 11, 11, 11, 11, 11, 12,
343 12, 12, 12, 12, 13, 13, 13, 13,
344];
345
346#[rustfmt::skip]
347const MPEG_CODES_16: [u32; 256] = [
348 0x0001, 0x0005, 0x000e, 0x002c, 0x004a, 0x003f, 0x006e, 0x005d,
349 0x00ac, 0x0095, 0x008a, 0x00f2, 0x00e1, 0x00c3, 0x0178, 0x0011,
350 0x0003, 0x0004, 0x000c, 0x0014, 0x0023, 0x003e, 0x0035, 0x002f,
351 0x0053, 0x004b, 0x0044, 0x0077, 0x00c9, 0x006b, 0x00cf, 0x0009,
352 0x000f, 0x000d, 0x0017, 0x0026, 0x0043, 0x003a, 0x0067, 0x005a,
353 0x00a1, 0x0048, 0x007f, 0x0075, 0x006e, 0x00d1, 0x00ce, 0x0010,
354 0x002d, 0x0015, 0x0027, 0x0045, 0x0040, 0x0072, 0x0063, 0x0057,
355 0x009e, 0x008c, 0x00fc, 0x00d4, 0x00c7, 0x0183, 0x016d, 0x001a,
356 0x004b, 0x0024, 0x0044, 0x0041, 0x0073, 0x0065, 0x00b3, 0x00a4,
357 0x009b, 0x0108, 0x00f6, 0x00e2, 0x018b, 0x017e, 0x016a, 0x0009,
358 0x0042, 0x001e, 0x003b, 0x0038, 0x0066, 0x00b9, 0x00ad, 0x0109,
359 0x008e, 0x00fd, 0x00e8, 0x0190, 0x0184, 0x017a, 0x01bd, 0x0010,
360 0x006f, 0x0036, 0x0034, 0x0064, 0x00b8, 0x00b2, 0x00a0, 0x0085,
361 0x0101, 0x00f4, 0x00e4, 0x00d9, 0x0181, 0x016e, 0x02cb, 0x000a,
362 0x0062, 0x0030, 0x005b, 0x0058, 0x00a5, 0x009d, 0x0094, 0x0105,
363 0x00f8, 0x0197, 0x018d, 0x0174, 0x017c, 0x0379, 0x0374, 0x0008,
364 0x0055, 0x0054, 0x0051, 0x009f, 0x009c, 0x008f, 0x0104, 0x00f9,
365 0x01ab, 0x0191, 0x0188, 0x017f, 0x02d7, 0x02c9, 0x02c4, 0x0007,
366 0x009a, 0x004c, 0x0049, 0x008d, 0x0083, 0x0100, 0x00f5, 0x01aa,
367 0x0196, 0x018a, 0x0180, 0x02df, 0x0167, 0x02c6, 0x0160, 0x000b,
368 0x008b, 0x0081, 0x0043, 0x007d, 0x00f7, 0x00e9, 0x00e5, 0x00db,
369 0x0189, 0x02e7, 0x02e1, 0x02d0, 0x0375, 0x0372, 0x01b7, 0x0004,
370 0x00f3, 0x0078, 0x0076, 0x0073, 0x00e3, 0x00df, 0x018c, 0x02ea,
371 0x02e6, 0x02e0, 0x02d1, 0x02c8, 0x02c2, 0x00df, 0x01b4, 0x0006,
372 0x00ca, 0x00e0, 0x00de, 0x00da, 0x00d8, 0x0185, 0x0182, 0x017d,
373 0x016c, 0x0378, 0x01bb, 0x02c3, 0x01b8, 0x01b5, 0x06c0, 0x0004,
374 0x02eb, 0x00d3, 0x00d2, 0x00d0, 0x0172, 0x017b, 0x02de, 0x02d3,
375 0x02ca, 0x06c7, 0x0373, 0x036d, 0x036c, 0x0d83, 0x0361, 0x0002,
376 0x0179, 0x0171, 0x0066, 0x00bb, 0x02d6, 0x02d2, 0x0166, 0x02c7,
377 0x02c5, 0x0362, 0x06c6, 0x0367, 0x0d82, 0x0366, 0x01b2, 0x0000,
378 0x000c, 0x000a, 0x0007, 0x000b, 0x000a, 0x0011, 0x000b, 0x0009,
379 0x000d, 0x000c, 0x000a, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
380];
381
382#[rustfmt::skip]
383const MPEG_BITS_16: [u8; 256] = [
384 1, 4, 6, 8, 9, 9, 10, 10,
385 11, 11, 11, 12, 12, 12, 13, 9,
386 3, 4, 6, 7, 8, 9, 9, 9,
387 10, 10, 10, 11, 12, 11, 12, 8,
388 6, 6, 7, 8, 9, 9, 10, 10,
389 11, 10, 11, 11, 11, 12, 12, 9,
390 8, 7, 8, 9, 9, 10, 10, 10,
391 11, 11, 12, 12, 12, 13, 13, 10,
392 9, 8, 9, 9, 10, 10, 11, 11,
393 11, 12, 12, 12, 13, 13, 13, 9,
394 9, 8, 9, 9, 10, 11, 11, 12,
395 11, 12, 12, 13, 13, 13, 14, 10,
396 10, 9, 9, 10, 11, 11, 11, 11,
397 12, 12, 12, 12, 13, 13, 14, 10,
398 10, 9, 10, 10, 11, 11, 11, 12,
399 12, 13, 13, 13, 13, 15, 15, 10,
400 10, 10, 10, 11, 11, 11, 12, 12,
401 13, 13, 13, 13, 14, 14, 14, 10,
402 11, 10, 10, 11, 11, 12, 12, 13,
403 13, 13, 13, 14, 13, 14, 13, 11,
404 11, 11, 10, 11, 12, 12, 12, 12,
405 13, 14, 14, 14, 15, 15, 14, 10,
406 12, 11, 11, 11, 12, 12, 13, 14,
407 14, 14, 14, 14, 14, 13, 14, 11,
408 12, 12, 12, 12, 12, 13, 13, 13,
409 13, 15, 14, 14, 14, 14, 16, 11,
410 14, 12, 12, 12, 13, 13, 14, 14,
411 14, 16, 15, 15, 15, 17, 15, 11,
412 13, 13, 11, 12, 14, 14, 13, 14,
413 14, 15, 16, 15, 17, 15, 14, 11,
414 9, 8, 8, 9, 9, 10, 10, 10,
415 11, 11, 11, 11, 11, 11, 11, 8,
416];
417
418#[rustfmt::skip]
419const MPEG_CODES_24: [u32; 256] = [
420 0x000f, 0x000d, 0x002e, 0x0050, 0x0092, 0x0106, 0x00f8, 0x01b2,
421 0x01aa, 0x029d, 0x028d, 0x0289, 0x026d, 0x0205, 0x0408, 0x0058,
422 0x000e, 0x000c, 0x0015, 0x0026, 0x0047, 0x0082, 0x007a, 0x00d8,
423 0x00d1, 0x00c6, 0x0147, 0x0159, 0x013f, 0x0129, 0x0117, 0x002a,
424 0x002f, 0x0016, 0x0029, 0x004a, 0x0044, 0x0080, 0x0078, 0x00dd,
425 0x00cf, 0x00c2, 0x00b6, 0x0154, 0x013b, 0x0127, 0x021d, 0x0012,
426 0x0051, 0x0027, 0x004b, 0x0046, 0x0086, 0x007d, 0x0074, 0x00dc,
427 0x00cc, 0x00be, 0x00b2, 0x0145, 0x0137, 0x0125, 0x010f, 0x0010,
428 0x0093, 0x0048, 0x0045, 0x0087, 0x007f, 0x0076, 0x0070, 0x00d2,
429 0x00c8, 0x00bc, 0x0160, 0x0143, 0x0132, 0x011d, 0x021c, 0x000e,
430 0x0107, 0x0042, 0x0081, 0x007e, 0x0077, 0x0072, 0x00d6, 0x00ca,
431 0x00c0, 0x00b4, 0x0155, 0x013d, 0x012d, 0x0119, 0x0106, 0x000c,
432 0x00f9, 0x007b, 0x0079, 0x0075, 0x0071, 0x00d7, 0x00ce, 0x00c3,
433 0x00b9, 0x015b, 0x014a, 0x0134, 0x0123, 0x0110, 0x0208, 0x000a,
434 0x01b3, 0x0073, 0x006f, 0x006d, 0x00d3, 0x00cb, 0x00c4, 0x00bb,
435 0x0161, 0x014c, 0x0139, 0x012a, 0x011b, 0x0213, 0x017d, 0x0011,
436 0x01ab, 0x00d4, 0x00d0, 0x00cd, 0x00c9, 0x00c1, 0x00ba, 0x00b1,
437 0x00a9, 0x0140, 0x012f, 0x011e, 0x010c, 0x0202, 0x0179, 0x0010,
438 0x014f, 0x00c7, 0x00c5, 0x00bf, 0x00bd, 0x00b5, 0x00ae, 0x014d,
439 0x0141, 0x0131, 0x0121, 0x0113, 0x0209, 0x017b, 0x0173, 0x000b,
440 0x029c, 0x00b8, 0x00b7, 0x00b3, 0x00af, 0x0158, 0x014b, 0x013a,
441 0x0130, 0x0122, 0x0115, 0x0212, 0x017f, 0x0175, 0x016e, 0x000a,
442 0x028c, 0x015a, 0x00ab, 0x00a8, 0x00a4, 0x013e, 0x0135, 0x012b,
443 0x011f, 0x0114, 0x0107, 0x0201, 0x0177, 0x0170, 0x016a, 0x0006,
444 0x0288, 0x0142, 0x013c, 0x0138, 0x0133, 0x012e, 0x0124, 0x011c,
445 0x010d, 0x0105, 0x0200, 0x0178, 0x0172, 0x016c, 0x0167, 0x0004,
446 0x026c, 0x012c, 0x0128, 0x0126, 0x0120, 0x011a, 0x0111, 0x010a,
447 0x0203, 0x017c, 0x0176, 0x0171, 0x016d, 0x0169, 0x0165, 0x0002,
448 0x0409, 0x0118, 0x0116, 0x0112, 0x010b, 0x0108, 0x0103, 0x017e,
449 0x017a, 0x0174, 0x016f, 0x016b, 0x0168, 0x0166, 0x0164, 0x0000,
450 0x002b, 0x0014, 0x0013, 0x0011, 0x000f, 0x000d, 0x000b, 0x0009,
451 0x0007, 0x0006, 0x0004, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
452];
453
454#[rustfmt::skip]
455const MPEG_BITS_24: [u8; 256] = [
456 4, 4, 6, 7, 8, 9, 9, 10,
457 10, 11, 11, 11, 11, 11, 12, 9,
458 4, 4, 5, 6, 7, 8, 8, 9,
459 9, 9, 10, 10, 10, 10, 10, 8,
460 6, 5, 6, 7, 7, 8, 8, 9,
461 9, 9, 9, 10, 10, 10, 11, 7,
462 7, 6, 7, 7, 8, 8, 8, 9,
463 9, 9, 9, 10, 10, 10, 10, 7,
464 8, 7, 7, 8, 8, 8, 8, 9,
465 9, 9, 10, 10, 10, 10, 11, 7,
466 9, 7, 8, 8, 8, 8, 9, 9,
467 9, 9, 10, 10, 10, 10, 10, 7,
468 9, 8, 8, 8, 8, 9, 9, 9,
469 9, 10, 10, 10, 10, 10, 11, 7,
470 10, 8, 8, 8, 9, 9, 9, 9,
471 10, 10, 10, 10, 10, 11, 11, 8,
472 10, 9, 9, 9, 9, 9, 9, 9,
473 9, 10, 10, 10, 10, 11, 11, 8,
474 10, 9, 9, 9, 9, 9, 9, 10,
475 10, 10, 10, 10, 11, 11, 11, 8,
476 11, 9, 9, 9, 9, 10, 10, 10,
477 10, 10, 10, 11, 11, 11, 11, 8,
478 11, 10, 9, 9, 9, 10, 10, 10,
479 10, 10, 10, 11, 11, 11, 11, 8,
480 11, 10, 10, 10, 10, 10, 10, 10,
481 10, 10, 11, 11, 11, 11, 11, 8,
482 11, 10, 10, 10, 10, 10, 10, 10,
483 11, 11, 11, 11, 11, 11, 11, 8,
484 12, 10, 10, 10, 10, 10, 10, 11,
485 11, 11, 11, 11, 11, 11, 11, 8,
486 8, 7, 7, 7, 7, 7, 7, 7,
487 7, 7, 7, 8, 8, 8, 8, 4,
488];
489
490const MPEG_QUADS_CODES_A: [u32; 16] = [1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1];
491const MPEG_QUADS_BITS_A: [u8; 16] = [1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6];
492
493const MPEG_QUADS_CODES_B: [u32; 16] = [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
494const MPEG_QUADS_BITS_B: [u8; 16] = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4];
495
496struct MpegTable {
497 codes: &'static [u32],
498 lens: &'static [u8],
499 wrap: u16,
500}
501struct MpegQuadsTable {
502 codes: &'static [u32],
503 lens: &'static [u8],
504 wrap: u16,
505}
506
507const MPEG_TABLES: [MpegTable; 18] = [
508 MpegTable { codes: &MPEG_CODES_0, lens: &MPEG_BITS_0, wrap: 0x0 },
510 MpegTable { codes: &MPEG_CODES_1, lens: &MPEG_BITS_1, wrap: 0x2 },
512 MpegTable { codes: &MPEG_CODES_2, lens: &MPEG_BITS_2, wrap: 0x3 },
514 MpegTable { codes: &MPEG_CODES_3, lens: &MPEG_BITS_3, wrap: 0x3 },
516 MpegTable { codes: &MPEG_CODES_0, lens: &MPEG_BITS_0, wrap: 0x0 },
518 MpegTable { codes: &MPEG_CODES_5, lens: &MPEG_BITS_5, wrap: 0x4 },
520 MpegTable { codes: &MPEG_CODES_6, lens: &MPEG_BITS_6, wrap: 0x4 },
522 MpegTable { codes: &MPEG_CODES_7, lens: &MPEG_BITS_7, wrap: 0x6 },
524 MpegTable { codes: &MPEG_CODES_8, lens: &MPEG_BITS_8, wrap: 0x6 },
526 MpegTable { codes: &MPEG_CODES_9, lens: &MPEG_BITS_9, wrap: 0x6 },
528 MpegTable { codes: &MPEG_CODES_10, lens: &MPEG_BITS_10, wrap: 0x8 },
530 MpegTable { codes: &MPEG_CODES_11, lens: &MPEG_BITS_11, wrap: 0x8 },
532 MpegTable { codes: &MPEG_CODES_12, lens: &MPEG_BITS_12, wrap: 0x8 },
534 MpegTable { codes: &MPEG_CODES_13, lens: &MPEG_BITS_13, wrap: 0x10 },
536 MpegTable { codes: &MPEG_CODES_0, lens: &MPEG_BITS_0, wrap: 0x0 },
538 MpegTable { codes: &MPEG_CODES_15, lens: &MPEG_BITS_15, wrap: 0x10 },
540 MpegTable { codes: &MPEG_CODES_16, lens: &MPEG_BITS_16, wrap: 0x10 },
542 MpegTable { codes: &MPEG_CODES_24, lens: &MPEG_BITS_24, wrap: 0x10 },
544];
545
546const MPEG_QUADS_TABLES: [MpegQuadsTable; 2] = [
547 MpegQuadsTable { codes: &MPEG_QUADS_CODES_A, lens: &MPEG_QUADS_BITS_A, wrap: 0x10 },
549 MpegQuadsTable { codes: &MPEG_QUADS_CODES_B, lens: &MPEG_QUADS_BITS_B, wrap: 0x10 },
551];
552
553pub const CODEBOOK_LINBITS: [u32; 32] = [
554 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 8, 10, 13, 4, 5, 6, 7, 8, 9, 11,
555 13,
556];
557
558fn mpeg_gen_value(i: u16, wrap: u16) -> u16 {
559 ((i / wrap) << 4) | (i % wrap)
560}
561
562lazy_static! {
563 pub static ref CODEBOOK_TABLES: [Codebook<Entry16x16>; 18] = {
564 let mut codebooks: [Codebook<Entry16x16>; 18] = Default::default();
565
566 for (codebook, table) in codebooks.iter_mut().zip(&MPEG_TABLES) {
567 assert!(table.codes.len() == table.lens.len());
568
569 let len = table.codes.len() as u16;
570
571 let values: Vec<u16> = (0..len).map(|i| mpeg_gen_value(i, table.wrap))
573 .collect();
574
575 let mut builder = CodebookBuilder::new(BitOrder::Verbatim);
577
578 builder.bits_per_read(8);
580
581 *codebook = builder.make(table.codes, table.lens, &values).unwrap();
582 }
583
584 codebooks
585 };
586}
587
588lazy_static! {
589 pub static ref QUADS_CODEBOOK_TABLE: [Codebook<Entry16x16>; 2] = {
590 let mut codebooks: [Codebook<Entry16x16>; 2] = Default::default();
591
592 for (codebook, table) in codebooks.iter_mut().zip(&MPEG_QUADS_TABLES) {
593 assert!(table.codes.len() == table.lens.len());
594
595 let len = table.codes.len() as u16;
596
597 let values: Vec<u16> = (0..len).map(|i| mpeg_gen_value(i, table.wrap))
599 .collect();
600
601 let mut builder = CodebookBuilder::new(BitOrder::Verbatim);
603
604 builder.bits_per_read(8);
606
607 *codebook = builder.make(table.codes, table.lens, &values).unwrap();
608 }
609
610 codebooks
611 };
612}