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