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