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