]> git.sesse.net Git - x264/blob - common/vlc.c
Correct X header path usage in configure
[x264] / common / vlc.c
1 /*****************************************************************************
2  * vlc.c : vlc table
3  *****************************************************************************
4  * Copyright (C) 2003 Laurent Aimar <fenrir@via.ecp.fr>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
19  *****************************************************************************/
20
21 #include "common.h"
22
23 const vlc_t x264_coeff0_token[5] =
24 {
25     { 0x1, 1 }, /* str=1 */
26     { 0x3, 2 }, /* str=11 */
27     { 0xf, 4 }, /* str=1111 */
28     { 0x3, 6 }, /* str=000011 */
29     { 0x1, 2 }, /* str=01 */
30 };
31
32 const vlc_t x264_coeff_token[5][16][4] =
33 {
34     { /* table 0 */
35         { /* i_total 1 */
36             { 0x5, 6 }, /* str=000101 */
37             { 0x1, 2 }, /* str=01 */
38         },
39         { /* i_total 2 */
40             { 0x7, 8 }, /* str=00000111 */
41             { 0x4, 6 }, /* str=000100 */
42             { 0x1, 3 }, /* str=001 */
43         },
44         { /* i_total 3 */
45             { 0x7, 9 }, /* str=000000111 */
46             { 0x6, 8 }, /* str=00000110 */
47             { 0x5, 7 }, /* str=0000101 */
48             { 0x3, 5 }, /* str=00011 */
49         },
50         { /* i_total 4 */
51             { 0x7, 10 }, /* str=0000000111 */
52             { 0x6, 9 },  /* str=000000110 */
53             { 0x5, 8 },  /* str=00000101 */
54             { 0x3, 6 },  /* str=000011 */
55         },
56         { /* i_total 5 */
57             { 0x7, 11 }, /* str=00000000111 */
58             { 0x6, 10 }, /* str=0000000110 */
59             { 0x5, 9 },  /* str=000000101 */
60             { 0x4, 7 },  /* str=0000100 */
61         },
62         { /* i_total 6 */
63             { 0xf, 13 }, /* str=0000000001111 */
64             { 0x6, 11 }, /* str=00000000110 */
65             { 0x5, 10 }, /* str=0000000101 */
66             { 0x4, 8 },  /* str=00000100 */
67         },
68         { /* i_total 7 */
69             { 0xb, 13 }, /* str=0000000001011 */
70             { 0xe, 13 }, /* str=0000000001110 */
71             { 0x5, 11 }, /* str=00000000101 */
72             { 0x4, 9 },  /* str=000000100 */
73         },
74         { /* i_total 8 */
75             { 0x8, 13 }, /* str=0000000001000 */
76             { 0xa, 13 }, /* str=0000000001010 */
77             { 0xd, 13 }, /* str=0000000001101 */
78             { 0x4, 10 }, /* str=0000000100 */
79         },
80         { /* i_total 9 */
81             { 0xf, 14 }, /* str=00000000001111 */
82             { 0xe, 14 }, /* str=00000000001110 */
83             { 0x9, 13 }, /* str=0000000001001 */
84             { 0x4, 11 }, /* str=00000000100 */
85         },
86         { /* i_total 10 */
87             { 0xb, 14 }, /* str=00000000001011 */
88             { 0xa, 14 }, /* str=00000000001010 */
89             { 0xd, 14 }, /* str=00000000001101 */
90             { 0xc, 13 }, /* str=0000000001100 */
91         },
92         { /* i_total 14 */
93             { 0xf, 15 }, /* str=000000000001111 */
94             { 0xe, 15 }, /* str=000000000001110 */
95             { 0x9, 14 }, /* str=00000000001001 */
96             { 0xc, 14 }, /* str=00000000001100 */
97         },
98         { /* i_total 12 */
99             { 0xb, 15 }, /* str=000000000001011 */
100             { 0xa, 15 }, /* str=000000000001010 */
101             { 0xd, 15 }, /* str=000000000001101 */
102             { 0x8, 14 }, /* str=00000000001000 */
103         },
104         { /* i_total 13 */
105             { 0xf, 16 }, /* str=0000000000001111 */
106             { 0x1, 15 }, /* str=000000000000001 */
107             { 0x9, 15 }, /* str=000000000001001 */
108             { 0xc, 15 }, /* str=000000000001100 */
109         },
110         { /* i_total 14 */
111             { 0xb, 16 }, /* str=0000000000001011 */
112             { 0xe, 16 }, /* str=0000000000001110 */
113             { 0xd, 16 }, /* str=0000000000001101 */
114             { 0x8, 15 }, /* str=000000000001000 */
115         },
116         { /* i_total 15 */
117             { 0x7, 16 }, /* str=0000000000000111 */
118             { 0xa, 16 }, /* str=0000000000001010 */
119             { 0x9, 16 }, /* str=0000000000001001 */
120             { 0xc, 16 }, /* str=0000000000001100 */
121         },
122         { /* i_total 16 */
123             { 0x4, 16 }, /* str=0000000000000100 */
124             { 0x6, 16 }, /* str=0000000000000110 */
125             { 0x5, 16 }, /* str=0000000000000101 */
126             { 0x8, 16 }, /* str=0000000000001000 */
127         },
128     },
129     { /* table 1 */
130         { /* i_total 1 */
131             { 0xb, 6 }, /* str=001011 */
132             { 0x2, 2 }, /* str=10 */
133         },
134         { /* i_total 2 */
135             { 0x7, 6 }, /* str=000111 */
136             { 0x7, 5 }, /* str=00111 */
137             { 0x3, 3 }, /* str=011 */
138         },
139         { /* i_total 3 */
140             { 0x7, 7 }, /* str=0000111 */
141             { 0xa, 6 }, /* str=001010 */
142             { 0x9, 6 }, /* str=001001 */
143             { 0x5, 4 }, /* str=0101 */
144         },
145         { /* i_total 4 */
146             { 0x7, 8 }, /* str=00000111 */
147             { 0x6, 6 }, /* str=000110 */
148             { 0x5, 6 }, /* str=000101 */
149             { 0x4, 4 }, /* str=0100 */
150         },
151         { /* i_total 5 */
152             { 0x4, 8 }, /* str=00000100 */
153             { 0x6, 7 }, /* str=0000110 */
154             { 0x5, 7 }, /* str=0000101 */
155             { 0x6, 5 }, /* str=00110 */
156         },
157         { /* i_total 6 */
158             { 0x7, 9 }, /* str=000000111 */
159             { 0x6, 8 }, /* str=00000110 */
160             { 0x5, 8 }, /* str=00000101 */
161             { 0x8, 6 }, /* str=001000 */
162         },
163         { /* i_total 7 */
164             { 0xf, 11 }, /* str=00000001111 */
165             { 0x6, 9 },  /* str=000000110 */
166             { 0x5, 9 },  /* str=000000101 */
167             { 0x4, 6 },  /* str=000100 */
168         },
169         { /* i_total 8 */
170             { 0xb, 11 }, /* str=00000001011 */
171             { 0xe, 11 }, /* str=00000001110 */
172             { 0xd, 11 }, /* str=00000001101 */
173             { 0x4, 7 },  /* str=0000100 */
174         },
175         { /* i_total 9 */
176             { 0xf, 12 }, /* str=000000001111 */
177             { 0xa, 11 }, /* str=00000001010 */
178             { 0x9, 11 }, /* str=00000001001 */
179             { 0x4, 9 },  /* str=000000100 */
180         },
181         { /* i_total 10 */
182             { 0xb, 12 }, /* str=000000001011 */
183             { 0xe, 12 }, /* str=000000001110 */
184             { 0xd, 12 }, /* str=000000001101 */
185             { 0xc, 11 }, /* str=00000001100 */
186         },
187         { /* i_total 11 */
188             { 0x8, 12 }, /* str=000000001000 */
189             { 0xa, 12 }, /* str=000000001010 */
190             { 0x9, 12 }, /* str=000000001001 */
191             { 0x8, 11 }, /* str=00000001000 */
192         },
193         { /* i_total 12 */
194             { 0xf, 13 }, /* str=0000000001111 */
195             { 0xe, 13 }, /* str=0000000001110 */
196             { 0xd, 13 }, /* str=0000000001101 */
197             { 0xc, 12 }, /* str=000000001100 */
198         },
199         { /* i_total 13 */
200             { 0xb, 13 }, /* str=0000000001011 */
201             { 0xa, 13 }, /* str=0000000001010 */
202             { 0x9, 13 }, /* str=0000000001001 */
203             { 0xc, 13 }, /* str=0000000001100 */
204         },
205         { /* i_total 14 */
206             { 0x7, 13 }, /* str=0000000000111 */
207             { 0xb, 14 }, /* str=00000000001011 */
208             { 0x6, 13 }, /* str=0000000000110 */
209             { 0x8, 13 }, /* str=0000000001000 */
210         },
211         { /* i_total 15 */
212             { 0x9, 14 }, /* str=00000000001001 */
213             { 0x8, 14 }, /* str=00000000001000 */
214             { 0xa, 14 }, /* str=00000000001010 */
215             { 0x1, 13 }, /* str=0000000000001 */
216         },
217         { /* i_total 16 */
218             { 0x7, 14 }, /* str=00000000000111 */
219             { 0x6, 14 }, /* str=00000000000110 */
220             { 0x5, 14 }, /* str=00000000000101 */
221             { 0x4, 14 }, /* str=00000000000100 */
222         },
223     },
224     { /* table 2 */
225         { /* i_total 1 */
226             { 0xf, 6 }, /* str=001111 */
227             { 0xe, 4 }, /* str=1110 */
228         },
229         { /* i_total 2 */
230             { 0xb, 6 }, /* str=001011 */
231             { 0xf, 5 }, /* str=01111 */
232             { 0xd, 4 }, /* str=1101 */
233         },
234         { /* i_total 3 */
235             { 0x8, 6 }, /* str=001000 */
236             { 0xc, 5 }, /* str=01100 */
237             { 0xe, 5 }, /* str=01110 */
238             { 0xc, 4 }, /* str=1100 */
239         },
240         { /* i_total 4 */
241             { 0xf, 7 }, /* str=0001111 */
242             { 0xa, 5 }, /* str=01010 */
243             { 0xb, 5 }, /* str=01011 */
244             { 0xb, 4 }, /* str=1011 */
245         },
246         { /* i_total 5 */
247             { 0xb, 7 }, /* str=0001011 */
248             { 0x8, 5 }, /* str=01000 */
249             { 0x9, 5 }, /* str=01001 */
250             { 0xa, 4 }, /* str=1010 */
251         },
252         { /* i_total 6 */
253             { 0x9, 7 }, /* str=0001001 */
254             { 0xe, 6 }, /* str=001110 */
255             { 0xd, 6 }, /* str=001101 */
256             { 0x9, 4 }, /* str=1001 */
257         },
258         { /* i_total 7 */
259             { 0x8, 7 }, /* str=0001000 */
260             { 0xa, 6 }, /* str=001010 */
261             { 0x9, 6 }, /* str=001001 */
262             { 0x8, 4 }, /* str=1000 */
263         },
264         { /* i_total 8 */
265             { 0xf, 8 }, /* str=00001111 */
266             { 0xe, 7 }, /* str=0001110 */
267             { 0xd, 7 }, /* str=0001101 */
268             { 0xd, 5 }, /* str=01101 */
269         },
270         { /* i_total 9 */
271             { 0xb, 8 }, /* str=00001011 */
272             { 0xe, 8 }, /* str=00001110 */
273             { 0xa, 7 }, /* str=0001010 */
274             { 0xc, 6 }, /* str=001100 */
275         },
276         { /* i_total 10 */
277             { 0xf, 9 }, /* str=000001111 */
278             { 0xa, 8 }, /* str=00001010 */
279             { 0xd, 8 }, /* str=00001101 */
280             { 0xc, 7 }, /* str=0001100 */
281         },
282         { /* i_total 11 */
283             { 0xb, 9 }, /* str=000001011 */
284             { 0xe, 9 }, /* str=000001110 */
285             { 0x9, 8 }, /* str=00001001 */
286             { 0xc, 8 }, /* str=00001100 */
287         },
288         { /* i_total 12 */
289             { 0x8, 9 }, /* str=000001000 */
290             { 0xa, 9 }, /* str=000001010 */
291             { 0xd, 9 }, /* str=000001101 */
292             { 0x8, 8 }, /* str=00001000 */
293         },
294         { /* i_total 13 */
295             { 0xd, 10 }, /* str=0000001101 */
296             { 0x7, 9 },  /* str=000000111 */
297             { 0x9, 9 },  /* str=000001001 */
298             { 0xc, 9 },  /* str=000001100 */
299         },
300         { /* i_total 14 */
301             { 0x9, 10 }, /* str=0000001001 */
302             { 0xc, 10 }, /* str=0000001100 */
303             { 0xb, 10 }, /* str=0000001011 */
304             { 0xa, 10 }, /* str=0000001010 */
305         },
306         { /* i_total 15 */
307             { 0x5, 10 }, /* str=0000000101 */
308             { 0x8, 10 }, /* str=0000001000 */
309             { 0x7, 10 }, /* str=0000000111 */
310             { 0x6, 10 }, /* str=0000000110 */
311         },
312         { /* i_total 16 */
313             { 0x1, 10 }, /* str=0000000001 */
314             { 0x4, 10 }, /* str=0000000100 */
315             { 0x3, 10 }, /* str=0000000011 */
316             { 0x2, 10 }, /* str=0000000010 */
317         },
318     },
319     { /* table 3 */
320         { /* i_total 1 */
321             { 0x0, 6 }, /* str=000000 */
322             { 0x1, 6 }, /* str=000001 */
323         },
324         { /* i_total 2 */
325             { 0x4, 6 }, /* str=000100 */
326             { 0x5, 6 }, /* str=000101 */
327             { 0x6, 6 }, /* str=000110 */
328         },
329         { /* i_total 3 */
330             { 0x8, 6 }, /* str=001000 */
331             { 0x9, 6 }, /* str=001001 */
332             { 0xa, 6 }, /* str=001010 */
333             { 0xb, 6 }, /* str=001011 */
334         },
335         { /* i_total 4 */
336             { 0xc, 6 }, /* str=001100 */
337             { 0xd, 6 }, /* str=001101 */
338             { 0xe, 6 }, /* str=001110 */
339             { 0xf, 6 }, /* str=001111 */
340         },
341         { /* i_total 5 */
342             { 0x10, 6 }, /* str=010000 */
343             { 0x11, 6 }, /* str=010001 */
344             { 0x12, 6 }, /* str=010010 */
345             { 0x13, 6 }, /* str=010011 */
346         },
347         { /* i_total 6 */
348             { 0x14, 6 }, /* str=010100 */
349             { 0x15, 6 }, /* str=010101 */
350             { 0x16, 6 }, /* str=010110 */
351             { 0x17, 6 }, /* str=010111 */
352         },
353         { /* i_total 7 */
354             { 0x18, 6 }, /* str=011000 */
355             { 0x19, 6 }, /* str=011001 */
356             { 0x1a, 6 }, /* str=011010 */
357             { 0x1b, 6 }, /* str=011011 */
358         },
359         { /* i_total 8 */
360             { 0x1c, 6 }, /* str=011100 */
361             { 0x1d, 6 }, /* str=011101 */
362             { 0x1e, 6 }, /* str=011110 */
363             { 0x1f, 6 }, /* str=011111 */
364         },
365         { /* i_total 9 */
366             { 0x20, 6 }, /* str=100000 */
367             { 0x21, 6 }, /* str=100001 */
368             { 0x22, 6 }, /* str=100010 */
369             { 0x23, 6 }, /* str=100011 */
370         },
371         { /* i_total 10 */
372             { 0x24, 6 }, /* str=100100 */
373             { 0x25, 6 }, /* str=100101 */
374             { 0x26, 6 }, /* str=100110 */
375             { 0x27, 6 }, /* str=100111 */
376         },
377         { /* i_total 11 */
378             { 0x28, 6 }, /* str=101000 */
379             { 0x29, 6 }, /* str=101001 */
380             { 0x2a, 6 }, /* str=101010 */
381             { 0x2b, 6 }, /* str=101011 */
382         },
383         { /* i_total 12 */
384             { 0x2c, 6 }, /* str=101100 */
385             { 0x2d, 6 }, /* str=101101 */
386             { 0x2e, 6 }, /* str=101110 */
387             { 0x2f, 6 }, /* str=101111 */
388         },
389         { /* i_total 13 */
390             { 0x30, 6 }, /* str=110000 */
391             { 0x31, 6 }, /* str=110001 */
392             { 0x32, 6 }, /* str=110010 */
393             { 0x33, 6 }, /* str=110011 */
394         },
395         { /* i_total 14 */
396             { 0x34, 6 }, /* str=110100 */
397             { 0x35, 6 }, /* str=110101 */
398             { 0x36, 6 }, /* str=110110 */
399             { 0x37, 6 }, /* str=110111 */
400         },
401         { /* i_total 15 */
402             { 0x38, 6 }, /* str=111000 */
403             { 0x39, 6 }, /* str=111001 */
404             { 0x3a, 6 }, /* str=111010 */
405             { 0x3b, 6 }, /* str=111011 */
406         },
407         { /* i_total 16 */
408             { 0x3c, 6 }, /* str=111100 */
409             { 0x3d, 6 }, /* str=111101 */
410             { 0x3e, 6 }, /* str=111110 */
411             { 0x3f, 6 }, /* str=111111 */
412         },
413     },
414     { /* table 4 */
415         { /* i_total 1 */
416             { 0x7, 6 }, /* str=000111 */
417             { 0x1, 1 }, /* str=1 */
418         },
419         { /* i_total 2 */
420             { 0x4, 6 }, /* str=000100 */
421             { 0x6, 6 }, /* str=000110 */
422             { 0x1, 3 }, /* str=001 */
423         },
424         { /* i_total 3 */
425             { 0x3, 6 }, /* str=000011 */
426             { 0x3, 7 }, /* str=0000011 */
427             { 0x2, 7 }, /* str=0000010 */
428             { 0x5, 6 }, /* str=000101 */
429         },
430         { /* i_total 4 */
431             { 0x2, 6 }, /* str=000010 */
432             { 0x3, 8 }, /* str=00000011 */
433             { 0x2, 8 }, /* str=00000010 */
434             { 0x0, 7 }, /* str=0000000 */
435         },
436     },
437 };
438
439 /* [i_total_coeff-1][i_total_zeros] */
440 const vlc_t x264_total_zeros[15][16] =
441 {
442     { /* i_total 1 */
443         { 0x1, 1 }, /* str=1 */
444         { 0x3, 3 }, /* str=011 */
445         { 0x2, 3 }, /* str=010 */
446         { 0x3, 4 }, /* str=0011 */
447         { 0x2, 4 }, /* str=0010 */
448         { 0x3, 5 }, /* str=00011 */
449         { 0x2, 5 }, /* str=00010 */
450         { 0x3, 6 }, /* str=000011 */
451         { 0x2, 6 }, /* str=000010 */
452         { 0x3, 7 }, /* str=0000011 */
453         { 0x2, 7 }, /* str=0000010 */
454         { 0x3, 8 }, /* str=00000011 */
455         { 0x2, 8 }, /* str=00000010 */
456         { 0x3, 9 }, /* str=000000011 */
457         { 0x2, 9 }, /* str=000000010 */
458         { 0x1, 9 }, /* str=000000001 */
459     },
460     { /* i_total 2 */
461         { 0x7, 3 }, /* str=111 */
462         { 0x6, 3 }, /* str=110 */
463         { 0x5, 3 }, /* str=101 */
464         { 0x4, 3 }, /* str=100 */
465         { 0x3, 3 }, /* str=011 */
466         { 0x5, 4 }, /* str=0101 */
467         { 0x4, 4 }, /* str=0100 */
468         { 0x3, 4 }, /* str=0011 */
469         { 0x2, 4 }, /* str=0010 */
470         { 0x3, 5 }, /* str=00011 */
471         { 0x2, 5 }, /* str=00010 */
472         { 0x3, 6 }, /* str=000011 */
473         { 0x2, 6 }, /* str=000010 */
474         { 0x1, 6 }, /* str=000001 */
475         { 0x0, 6 }, /* str=000000 */
476     },
477     { /* i_total 3 */
478         { 0x5, 4 }, /* str=0101 */
479         { 0x7, 3 }, /* str=111 */
480         { 0x6, 3 }, /* str=110 */
481         { 0x5, 3 }, /* str=101 */
482         { 0x4, 4 }, /* str=0100 */
483         { 0x3, 4 }, /* str=0011 */
484         { 0x4, 3 }, /* str=100 */
485         { 0x3, 3 }, /* str=011 */
486         { 0x2, 4 }, /* str=0010 */
487         { 0x3, 5 }, /* str=00011 */
488         { 0x2, 5 }, /* str=00010 */
489         { 0x1, 6 }, /* str=000001 */
490         { 0x1, 5 }, /* str=00001 */
491         { 0x0, 6 }, /* str=000000 */
492     },
493     { /* i_total 4 */
494         { 0x3, 5 }, /* str=00011 */
495         { 0x7, 3 }, /* str=111 */
496         { 0x5, 4 }, /* str=0101 */
497         { 0x4, 4 }, /* str=0100 */
498         { 0x6, 3 }, /* str=110 */
499         { 0x5, 3 }, /* str=101 */
500         { 0x4, 3 }, /* str=100 */
501         { 0x3, 4 }, /* str=0011 */
502         { 0x3, 3 }, /* str=011 */
503         { 0x2, 4 }, /* str=0010 */
504         { 0x2, 5 }, /* str=00010 */
505         { 0x1, 5 }, /* str=00001 */
506         { 0x0, 5 }, /* str=00000 */
507     },
508     { /* i_total 5 */
509         { 0x5, 4 }, /* str=0101 */
510         { 0x4, 4 }, /* str=0100 */
511         { 0x3, 4 }, /* str=0011 */
512         { 0x7, 3 }, /* str=111 */
513         { 0x6, 3 }, /* str=110 */
514         { 0x5, 3 }, /* str=101 */
515         { 0x4, 3 }, /* str=100 */
516         { 0x3, 3 }, /* str=011 */
517         { 0x2, 4 }, /* str=0010 */
518         { 0x1, 5 }, /* str=00001 */
519         { 0x1, 4 }, /* str=0001 */
520         { 0x0, 5 }, /* str=00000 */
521     },
522     { /* i_total 6 */
523         { 0x1, 6 }, /* str=000001 */
524         { 0x1, 5 }, /* str=00001 */
525         { 0x7, 3 }, /* str=111 */
526         { 0x6, 3 }, /* str=110 */
527         { 0x5, 3 }, /* str=101 */
528         { 0x4, 3 }, /* str=100 */
529         { 0x3, 3 }, /* str=011 */
530         { 0x2, 3 }, /* str=010 */
531         { 0x1, 4 }, /* str=0001 */
532         { 0x1, 3 }, /* str=001 */
533         { 0x0, 6 }, /* str=000000 */
534     },
535     { /* i_total 7 */
536         { 0x1, 6 }, /* str=000001 */
537         { 0x1, 5 }, /* str=00001 */
538         { 0x5, 3 }, /* str=101 */
539         { 0x4, 3 }, /* str=100 */
540         { 0x3, 3 }, /* str=011 */
541         { 0x3, 2 }, /* str=11 */
542         { 0x2, 3 }, /* str=010 */
543         { 0x1, 4 }, /* str=0001 */
544         { 0x1, 3 }, /* str=001 */
545         { 0x0, 6 }, /* str=000000 */
546     },
547     { /* i_total 8 */
548         { 0x1, 6 }, /* str=000001 */
549         { 0x1, 4 }, /* str=0001 */
550         { 0x1, 5 }, /* str=00001 */
551         { 0x3, 3 }, /* str=011 */
552         { 0x3, 2 }, /* str=11 */
553         { 0x2, 2 }, /* str=10 */
554         { 0x2, 3 }, /* str=010 */
555         { 0x1, 3 }, /* str=001 */
556         { 0x0, 6 }, /* str=000000 */
557     },
558     { /* i_total 9 */
559         { 0x1, 6 }, /* str=000001 */
560         { 0x0, 6 }, /* str=000000 */
561         { 0x1, 4 }, /* str=0001 */
562         { 0x3, 2 }, /* str=11 */
563         { 0x2, 2 }, /* str=10 */
564         { 0x1, 3 }, /* str=001 */
565         { 0x1, 2 }, /* str=01 */
566         { 0x1, 5 }, /* str=00001 */
567     },
568     { /* i_total 10 */
569         { 0x1, 5 }, /* str=00001 */
570         { 0x0, 5 }, /* str=00000 */
571         { 0x1, 3 }, /* str=001 */
572         { 0x3, 2 }, /* str=11 */
573         { 0x2, 2 }, /* str=10 */
574         { 0x1, 2 }, /* str=01 */
575         { 0x1, 4 }, /* str=0001 */
576     },
577     { /* i_total 11 */
578         { 0x0, 4 }, /* str=0000 */
579         { 0x1, 4 }, /* str=0001 */
580         { 0x1, 3 }, /* str=001 */
581         { 0x2, 3 }, /* str=010 */
582         { 0x1, 1 }, /* str=1 */
583         { 0x3, 3 }, /* str=011 */
584     },
585     { /* i_total 12 */
586         { 0x0, 4 }, /* str=0000 */
587         { 0x1, 4 }, /* str=0001 */
588         { 0x1, 2 }, /* str=01 */
589         { 0x1, 1 }, /* str=1 */
590         { 0x1, 3 }, /* str=001 */
591     },
592     { /* i_total 13 */
593         { 0x0, 3 }, /* str=000 */
594         { 0x1, 3 }, /* str=001 */
595         { 0x1, 1 }, /* str=1 */
596         { 0x1, 2 }, /* str=01 */
597     },
598     { /* i_total 14 */
599         { 0x0, 2 }, /* str=00 */
600         { 0x1, 2 }, /* str=01 */
601         { 0x1, 1 }, /* str=1 */
602     },
603     { /* i_total 15 */
604         { 0x0, 1 }, /* str=0 */
605         { 0x1, 1 }, /* str=1 */
606     },
607 };
608
609 /* [i_total_coeff-1][i_total_zeros] */
610 const vlc_t x264_total_zeros_dc[3][4] =
611 {
612     { /* i_total 1 */
613         { 0x1, 1 }, /* str=1 */
614         { 0x1, 2 }, /* str=01 */
615         { 0x1, 3 }, /* str=001 */
616         { 0x0, 3 }  /* str=000 */
617     },
618     { /* i_total 2 */
619         { 0x1, 1 }, /* str=1 */
620         { 0x1, 2 }, /* str=01 */
621         { 0x0, 2 }, /* str=00 */
622     },
623     { /* i_total 3 */
624         { 0x1, 1 }, /* str=1 */
625         { 0x0, 1 }, /* str=0 */
626     },
627 };
628
629 /* x264_run_before[__MIN( i_zero_left -1, 6 )][run_before] */
630 const vlc_t x264_run_before[7][16] =
631 {
632     { /* i_zero_left 1 */
633         { 0x1, 1 }, /* str=1 */
634         { 0x0, 1 }, /* str=0 */
635     },
636     { /* i_zero_left 2 */
637         { 0x1, 1 }, /* str=1 */
638         { 0x1, 2 }, /* str=01 */
639         { 0x0, 2 }, /* str=00 */
640     },
641     { /* i_zero_left 3 */
642         { 0x3, 2 }, /* str=11 */
643         { 0x2, 2 }, /* str=10 */
644         { 0x1, 2 }, /* str=01 */
645         { 0x0, 2 }, /* str=00 */
646     },
647     { /* i_zero_left 4 */
648         { 0x3, 2 }, /* str=11 */
649         { 0x2, 2 }, /* str=10 */
650         { 0x1, 2 }, /* str=01 */
651         { 0x1, 3 }, /* str=001 */
652         { 0x0, 3 }, /* str=000 */
653     },
654     { /* i_zero_left 5 */
655         { 0x3, 2 }, /* str=11 */
656         { 0x2, 2 }, /* str=10 */
657         { 0x3, 3 }, /* str=011 */
658         { 0x2, 3 }, /* str=010 */
659         { 0x1, 3 }, /* str=001 */
660         { 0x0, 3 }, /* str=000 */
661     },
662     { /* i_zero_left 6 */
663         { 0x3, 2 }, /* str=11 */
664         { 0x0, 3 }, /* str=000 */
665         { 0x1, 3 }, /* str=001 */
666         { 0x3, 3 }, /* str=011 */
667         { 0x2, 3 }, /* str=010 */
668         { 0x5, 3 }, /* str=101 */
669         { 0x4, 3 }, /* str=100 */
670     },
671     { /* i_zero_left 7 */
672         { 0x7, 3 }, /* str=111 */
673         { 0x6, 3 }, /* str=110 */
674         { 0x5, 3 }, /* str=101 */
675         { 0x4, 3 }, /* str=100 */
676         { 0x3, 3 }, /* str=011 */
677         { 0x2, 3 }, /* str=010 */
678         { 0x1, 3 }, /* str=001 */
679         { 0x1, 4 }, /* str=0001 */
680         { 0x1, 5 }, /* str=00001 */
681         { 0x1, 6 }, /* str=000001 */
682         { 0x1, 7 }, /* str=0000001 */
683         { 0x1, 8 }, /* str=00000001 */
684         { 0x1, 9 }, /* str=000000001 */
685         { 0x1, 10 }, /* str=0000000001 */
686         { 0x1, 11 }, /* str=00000000001 */
687     },
688 };
689
690 vlc_large_t x264_level_token[7][LEVEL_TABLE_SIZE];
691
692 void x264_init_vlc_tables()
693 {
694     for( int i_suffix = 0; i_suffix < 7; i_suffix++ )
695         for( int16_t level = -LEVEL_TABLE_SIZE/2; level < LEVEL_TABLE_SIZE/2; level++ )
696         {
697             int mask = level >> 15;
698             int abs_level = (level^mask)-mask;
699             int i_level_code = abs_level*2-mask-2;
700             int i_next = i_suffix;
701             vlc_large_t *vlc = &x264_level_token[i_suffix][level+LEVEL_TABLE_SIZE/2];
702
703             if( ( i_level_code >> i_suffix ) < 14 )
704             {
705                 vlc->i_size = (i_level_code >> i_suffix) + 1 + i_suffix;
706                 vlc->i_bits = (1<<i_suffix) + (i_level_code & ((1<<i_suffix)-1));
707             }
708             else if( i_suffix == 0 && i_level_code < 30 )
709             {
710                 vlc->i_size = 19;
711                 vlc->i_bits = (1<<4) + (i_level_code - 14);
712             }
713             else if( i_suffix > 0 && ( i_level_code >> i_suffix ) == 14 )
714             {
715                 vlc->i_size = 15 + i_suffix;
716                 vlc->i_bits = (1<<i_suffix) + (i_level_code & ((1<<i_suffix)-1));
717             }
718             else
719             {
720                 i_level_code -= 15 << i_suffix;
721                 if( i_suffix == 0 )
722                     i_level_code -= 15;
723                 vlc->i_size = 28;
724                 vlc->i_bits = (1<<12) + i_level_code;
725             }
726             if( i_next == 0 )
727                 i_next++;
728             if( abs_level > (3 << (i_next-1)) && i_next < 6 )
729                 i_next++;
730             vlc->i_next = i_next;
731         }
732 }