add multiple inclusion guards to headers
[libav.git] / libavcodec / h264data.h
CommitLineData
0da71265
MN
1/*
2 * H26L/H264/AVC/JVT/14496-10/... encoder/decoder
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4 *
b78e7197
DB
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
0da71265
MN
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
b78e7197 10 * version 2.1 of the License, or (at your option) any later version.
0da71265 11 *
b78e7197 12 * FFmpeg is distributed in the hope that it will be useful,
0da71265
MN
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
b78e7197 18 * License along with FFmpeg; if not, write to the Free Software
5509bffa 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0da71265
MN
20 *
21 */
22
23/**
24 * @file h264data.h
115329f1 25 * @brief
0da71265
MN
26 * H264 / AVC / MPEG4 part10 codec data table
27 * @author Michael Niedermayer <michaelni@gmx.at>
28 */
29
699b3f99
MR
30#ifndef AVCODEC_H264DATA_H
31#define AVCODEC_H264DATA_H
32
99545457
MR
33#include <stdint.h>
34#include "mpegvideo.h"
35#include "rational.h"
36
0da71265
MN
37#define VERT_PRED 0
38#define HOR_PRED 1
39#define DC_PRED 2
40#define DIAG_DOWN_LEFT_PRED 3
41#define DIAG_DOWN_RIGHT_PRED 4
42#define VERT_RIGHT_PRED 5
43#define HOR_DOWN_PRED 6
44#define VERT_LEFT_PRED 7
45#define HOR_UP_PRED 8
46
47#define LEFT_DC_PRED 9
48#define TOP_DC_PRED 10
49#define DC_128_PRED 11
50
51
52#define DC_PRED8x8 0
53#define HOR_PRED8x8 1
54#define VERT_PRED8x8 2
55#define PLANE_PRED8x8 3
56
57#define LEFT_DC_PRED8x8 4
58#define TOP_DC_PRED8x8 5
59#define DC_128_PRED8x8 6
60
61#define EXTENDED_SAR 255
62
550e66cb
PI
63/* NAL unit types */
64enum {
65NAL_SLICE=1,
66NAL_DPA,
67NAL_DPB,
68NAL_DPC,
69NAL_IDR_SLICE,
70NAL_SEI,
71NAL_SPS,
72NAL_PPS,
73NAL_AUD,
74NAL_END_SEQUENCE,
75NAL_END_STREAM,
76NAL_FILLER_DATA,
77NAL_SPS_EXT,
78NAL_AUXILIARY_SLICE=19
79};
80
5ff85f1d
MN
81static const AVRational pixel_aspect[14]={
82 {0, 1},
0da71265
MN
83 {1, 1},
84 {12, 11},
85 {10, 11},
86 {16, 11},
87 {40, 33},
88 {24, 11},
89 {20, 11},
90 {32, 11},
91 {80, 33},
92 {18, 11},
93 {15, 11},
94 {64, 33},
95 {160,99},
96};
97
98static const uint8_t golomb_to_pict_type[5]=
99{P_TYPE, B_TYPE, I_TYPE, SP_TYPE, SI_TYPE};
100
101static const uint8_t pict_type_to_golomb[7]=
102{-1, 2, 0, 1, -1, 4, 3};
103
104static const uint8_t chroma_qp[52]={
105 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,
106 12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,
107 28,29,29,30,31,32,32,33,34,34,35,35,36,36,37,37,
108 37,38,38,38,39,39,39,39
109
110};
111
112static const uint8_t golomb_to_intra4x4_cbp[48]={
113 47, 31, 15, 0, 23, 27, 29, 30, 7, 11, 13, 14, 39, 43, 45, 46,
114 16, 3, 5, 10, 12, 19, 21, 26, 28, 35, 37, 42, 44, 1, 2, 4,
115 8, 17, 18, 20, 24, 6, 9, 22, 25, 32, 33, 34, 36, 40, 38, 41
116};
115329f1 117
0da71265
MN
118static const uint8_t golomb_to_inter_cbp[48]={
119 0, 16, 1, 2, 4, 8, 32, 3, 5, 10, 12, 15, 47, 7, 11, 13,
120 14, 6, 9, 31, 35, 37, 42, 44, 33, 34, 36, 40, 39, 43, 45, 46,
121 17, 18, 20, 24, 19, 21, 26, 28, 23, 27, 29, 30, 22, 25, 38, 41
122};
123
124static const uint8_t intra4x4_cbp_to_golomb[48]={
125 3, 29, 30, 17, 31, 18, 37, 8, 32, 38, 19, 9, 20, 10, 11, 2,
126 16, 33, 34, 21, 35, 22, 39, 4, 36, 40, 23, 5, 24, 6, 7, 1,
127 41, 42, 43, 25, 44, 26, 46, 12, 45, 47, 27, 13, 28, 14, 15, 0
128};
115329f1 129
0da71265
MN
130static const uint8_t inter_cbp_to_golomb[48]={
131 0, 2, 3, 7, 4, 8, 17, 13, 5, 18, 9, 14, 10, 15, 16, 11,
132 1, 32, 33, 36, 34, 37, 44, 40, 35, 45, 38, 41, 39, 42, 43, 19,
133 6, 24, 25, 20, 26, 21, 46, 28, 27, 47, 22, 29, 23, 30, 31, 12
134};
135
136static const uint8_t chroma_dc_coeff_token_len[4*5]={
137 2, 0, 0, 0,
138 6, 1, 0, 0,
139 6, 6, 3, 0,
140 6, 7, 7, 6,
141 6, 8, 8, 7,
142};
143
144static const uint8_t chroma_dc_coeff_token_bits[4*5]={
145 1, 0, 0, 0,
146 7, 1, 0, 0,
147 4, 6, 1, 0,
148 3, 3, 2, 5,
149 2, 3, 2, 0,
150};
151
152static const uint8_t coeff_token_len[4][4*17]={
153{
154 1, 0, 0, 0,
155 6, 2, 0, 0, 8, 6, 3, 0, 9, 8, 7, 5, 10, 9, 8, 6,
156 11,10, 9, 7, 13,11,10, 8, 13,13,11, 9, 13,13,13,10,
157 14,14,13,11, 14,14,14,13, 15,15,14,14, 15,15,15,14,
158 16,15,15,15, 16,16,16,15, 16,16,16,16, 16,16,16,16,
159},
160{
161 2, 0, 0, 0,
162 6, 2, 0, 0, 6, 5, 3, 0, 7, 6, 6, 4, 8, 6, 6, 4,
163 8, 7, 7, 5, 9, 8, 8, 6, 11, 9, 9, 6, 11,11,11, 7,
164 12,11,11, 9, 12,12,12,11, 12,12,12,11, 13,13,13,12,
165 13,13,13,13, 13,14,13,13, 14,14,14,13, 14,14,14,14,
166},
167{
168 4, 0, 0, 0,
169 6, 4, 0, 0, 6, 5, 4, 0, 6, 5, 5, 4, 7, 5, 5, 4,
170 7, 5, 5, 4, 7, 6, 6, 4, 7, 6, 6, 4, 8, 7, 7, 5,
171 8, 8, 7, 6, 9, 8, 8, 7, 9, 9, 8, 8, 9, 9, 9, 8,
172 10, 9, 9, 9, 10,10,10,10, 10,10,10,10, 10,10,10,10,
173},
174{
175 6, 0, 0, 0,
176 6, 6, 0, 0, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6,
177 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
178 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
179 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
180}
181};
182
183static const uint8_t coeff_token_bits[4][4*17]={
184{
185 1, 0, 0, 0,
186 5, 1, 0, 0, 7, 4, 1, 0, 7, 6, 5, 3, 7, 6, 5, 3,
187 7, 6, 5, 4, 15, 6, 5, 4, 11,14, 5, 4, 8,10,13, 4,
188 15,14, 9, 4, 11,10,13,12, 15,14, 9,12, 11,10,13, 8,
189 15, 1, 9,12, 11,14,13, 8, 7,10, 9,12, 4, 6, 5, 8,
190},
191{
192 3, 0, 0, 0,
193 11, 2, 0, 0, 7, 7, 3, 0, 7,10, 9, 5, 7, 6, 5, 4,
194 4, 6, 5, 6, 7, 6, 5, 8, 15, 6, 5, 4, 11,14,13, 4,
195 15,10, 9, 4, 11,14,13,12, 8,10, 9, 8, 15,14,13,12,
196 11,10, 9,12, 7,11, 6, 8, 9, 8,10, 1, 7, 6, 5, 4,
197},
198{
199 15, 0, 0, 0,
200 15,14, 0, 0, 11,15,13, 0, 8,12,14,12, 15,10,11,11,
201 11, 8, 9,10, 9,14,13, 9, 8,10, 9, 8, 15,14,13,13,
202 11,14,10,12, 15,10,13,12, 11,14, 9,12, 8,10,13, 8,
203 13, 7, 9,12, 9,12,11,10, 5, 8, 7, 6, 1, 4, 3, 2,
204},
205{
206 3, 0, 0, 0,
207 0, 1, 0, 0, 4, 5, 6, 0, 8, 9,10,11, 12,13,14,15,
208 16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31,
209 32,33,34,35, 36,37,38,39, 40,41,42,43, 44,45,46,47,
210 48,49,50,51, 52,53,54,55, 56,57,58,59, 60,61,62,63,
211}
212};
213
214static const uint8_t total_zeros_len[16][16]= {
115329f1
DB
215 {1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},
216 {3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},
217 {4,3,3,3,4,4,3,3,4,5,5,6,5,6},
218 {5,3,4,4,3,3,3,4,3,4,5,5,5},
219 {4,4,4,3,3,3,3,3,4,5,4,5},
220 {6,5,3,3,3,3,3,3,4,3,6},
221 {6,5,3,3,3,2,3,4,3,6},
222 {6,4,5,3,2,2,3,3,6},
223 {6,6,4,2,2,3,2,5},
224 {5,5,3,2,2,2,4},
225 {4,4,3,3,1,3},
226 {4,4,2,1,3},
227 {3,3,1,2},
228 {2,2,1},
229 {1,1},
0da71265
MN
230};
231
232static const uint8_t total_zeros_bits[16][16]= {
233 {1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},
234 {7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},
235 {5,7,6,5,4,3,4,3,2,3,2,1,1,0},
236 {3,7,5,4,6,5,4,3,3,2,2,1,0},
237 {5,4,3,7,6,5,4,3,2,1,1,0},
238 {1,1,7,6,5,4,3,2,1,1,0},
239 {1,1,5,4,3,3,2,1,1,0},
240 {1,1,1,3,3,2,2,1,0},
241 {1,0,1,3,2,1,1,1},
242 {1,0,1,3,2,1,1},
243 {0,1,1,2,1,3},
244 {0,1,1,1,1},
245 {0,1,1,1},
246 {0,1,1},
247 {0,1},
248};
249
250static const uint8_t chroma_dc_total_zeros_len[3][4]= {
251 { 1, 2, 3, 3,},
252 { 1, 2, 2, 0,},
115329f1 253 { 1, 1, 0, 0,},
0da71265
MN
254};
255
256static const uint8_t chroma_dc_total_zeros_bits[3][4]= {
257 { 1, 1, 1, 0,},
258 { 1, 1, 0, 0,},
259 { 1, 0, 0, 0,},
260};
261
262static const uint8_t run_len[7][16]={
263 {1,1},
264 {1,2,2},
265 {2,2,2,2},
266 {2,2,2,3,3},
267 {2,2,3,3,3,3},
268 {2,3,3,3,3,3,3},
269 {3,3,3,3,3,3,3,4,5,6,7,8,9,10,11},
270};
271
272static const uint8_t run_bits[7][16]={
273 {1,0},
274 {1,1,0},
275 {3,2,1,0},
276 {3,2,1,1,0},
277 {3,2,3,2,1,0},
278 {3,0,1,3,2,5,4},
279 {7,6,5,4,3,2,1,1,1,1,1,1,1,1,1},
280};
281
282/*
283o-o o-o
284 / / /
285o-o o-o
286 ,---'
287o-o o-o
288 / / /
289o-o o-o
290*/
291
292static const uint8_t scan8[16 + 2*4]={
293 4+1*8, 5+1*8, 4+2*8, 5+2*8,
294 6+1*8, 7+1*8, 6+2*8, 7+2*8,
295 4+3*8, 5+3*8, 4+4*8, 5+4*8,
296 6+3*8, 7+3*8, 6+4*8, 7+4*8,
297 1+1*8, 2+1*8,
298 1+2*8, 2+2*8,
299 1+4*8, 2+4*8,
300 1+5*8, 2+5*8,
301};
302
303static const uint8_t zigzag_scan[16]={
115329f1
DB
304 0+0*4, 1+0*4, 0+1*4, 0+2*4,
305 1+1*4, 2+0*4, 3+0*4, 2+1*4,
306 1+2*4, 0+3*4, 1+3*4, 2+2*4,
307 3+1*4, 3+2*4, 2+3*4, 3+3*4,
0da71265
MN
308};
309
310static const uint8_t field_scan[16]={
115329f1 311 0+0*4, 0+1*4, 1+0*4, 0+2*4,
0da71265 312 0+3*4, 1+1*4, 1+2*4, 1+3*4,
115329f1 313 2+0*4, 2+1*4, 2+2*4, 2+3*4,
0da71265
MN
314 3+0*4, 3+1*4, 3+2*4, 3+3*4,
315};
316
317static const uint8_t luma_dc_zigzag_scan[16]={
318 0*16 + 0*64, 1*16 + 0*64, 2*16 + 0*64, 0*16 + 2*64,
319 3*16 + 0*64, 0*16 + 1*64, 1*16 + 1*64, 2*16 + 1*64,
320 1*16 + 2*64, 2*16 + 2*64, 3*16 + 2*64, 0*16 + 3*64,
321 3*16 + 1*64, 1*16 + 3*64, 2*16 + 3*64, 3*16 + 3*64,
322};
323
324static const uint8_t luma_dc_field_scan[16]={
115329f1
DB
325 0*16 + 0*64, 2*16 + 0*64, 1*16 + 0*64, 0*16 + 2*64,
326 2*16 + 2*64, 3*16 + 0*64, 1*16 + 2*64, 3*16 + 2*64,
327 0*16 + 1*64, 2*16 + 1*64, 0*16 + 3*64, 2*16 + 3*64,
0da71265
MN
328 1*16 + 1*64, 3*16 + 1*64, 1*16 + 3*64, 3*16 + 3*64,
329};
330
331static const uint8_t chroma_dc_scan[4]={
115329f1 332 (0+0*2)*16, (1+0*2)*16,
0da71265
MN
333 (0+1*2)*16, (1+1*2)*16, //FIXME
334};
335
43efd19a
LM
336static const uint8_t zigzag_scan8x8[64]={
337 0+0*8, 1+0*8, 0+1*8, 0+2*8,
338 1+1*8, 2+0*8, 3+0*8, 2+1*8,
339 1+2*8, 0+3*8, 0+4*8, 1+3*8,
340 2+2*8, 3+1*8, 4+0*8, 5+0*8,
341 4+1*8, 3+2*8, 2+3*8, 1+4*8,
342 0+5*8, 0+6*8, 1+5*8, 2+4*8,
343 3+3*8, 4+2*8, 5+1*8, 6+0*8,
344 7+0*8, 6+1*8, 5+2*8, 4+3*8,
345 3+4*8, 2+5*8, 1+6*8, 0+7*8,
346 1+7*8, 2+6*8, 3+5*8, 4+4*8,
347 5+3*8, 6+2*8, 7+1*8, 7+2*8,
348 6+3*8, 5+4*8, 4+5*8, 3+6*8,
349 2+7*8, 3+7*8, 4+6*8, 5+5*8,
350 6+4*8, 7+3*8, 7+4*8, 6+5*8,
351 5+6*8, 4+7*8, 5+7*8, 6+6*8,
352 7+5*8, 7+6*8, 6+7*8, 7+7*8,
353};
354
355// zigzag_scan8x8_cavlc[i] = zigzag_scan8x8[(i/4) + 16*(i%4)]
356static const uint8_t zigzag_scan8x8_cavlc[64]={
357 0+0*8, 1+1*8, 1+2*8, 2+2*8,
358 4+1*8, 0+5*8, 3+3*8, 7+0*8,
359 3+4*8, 1+7*8, 5+3*8, 6+3*8,
360 2+7*8, 6+4*8, 5+6*8, 7+5*8,
361 1+0*8, 2+0*8, 0+3*8, 3+1*8,
362 3+2*8, 0+6*8, 4+2*8, 6+1*8,
363 2+5*8, 2+6*8, 6+2*8, 5+4*8,
364 3+7*8, 7+3*8, 4+7*8, 7+6*8,
365 0+1*8, 3+0*8, 0+4*8, 4+0*8,
366 2+3*8, 1+5*8, 5+1*8, 5+2*8,
367 1+6*8, 3+5*8, 7+1*8, 4+5*8,
368 4+6*8, 7+4*8, 5+7*8, 6+7*8,
369 0+2*8, 2+1*8, 1+3*8, 5+0*8,
370 1+4*8, 2+4*8, 6+0*8, 4+3*8,
371 0+7*8, 4+4*8, 7+2*8, 3+6*8,
372 5+5*8, 6+5*8, 6+6*8, 7+7*8,
373};
374
5d18eaad
LM
375static const uint8_t field_scan8x8[64]={
376 0+0*8, 0+1*8, 0+2*8, 1+0*8,
377 1+1*8, 0+3*8, 0+4*8, 1+2*8,
378 2+0*8, 1+3*8, 0+5*8, 0+6*8,
379 0+7*8, 1+4*8, 2+1*8, 3+0*8,
380 2+2*8, 1+5*8, 1+6*8, 1+7*8,
381 2+3*8, 3+1*8, 4+0*8, 3+2*8,
382 2+4*8, 2+5*8, 2+6*8, 2+7*8,
383 3+3*8, 4+1*8, 5+0*8, 4+2*8,
384 3+4*8, 3+5*8, 3+6*8, 3+7*8,
385 4+3*8, 5+1*8, 6+0*8, 5+2*8,
386 4+4*8, 4+5*8, 4+6*8, 4+7*8,
387 5+3*8, 6+1*8, 6+2*8, 5+4*8,
388 5+5*8, 5+6*8, 5+7*8, 6+3*8,
389 7+0*8, 7+1*8, 6+4*8, 6+5*8,
390 6+6*8, 6+7*8, 7+2*8, 7+3*8,
391 7+4*8, 7+5*8, 7+6*8, 7+7*8,
392};
393
394static const uint8_t field_scan8x8_cavlc[64]={
395 0+0*8, 1+1*8, 2+0*8, 0+7*8,
396 2+2*8, 2+3*8, 2+4*8, 3+3*8,
397 3+4*8, 4+3*8, 4+4*8, 5+3*8,
398 5+5*8, 7+0*8, 6+6*8, 7+4*8,
399 0+1*8, 0+3*8, 1+3*8, 1+4*8,
400 1+5*8, 3+1*8, 2+5*8, 4+1*8,
401 3+5*8, 5+1*8, 4+5*8, 6+1*8,
402 5+6*8, 7+1*8, 6+7*8, 7+5*8,
403 0+2*8, 0+4*8, 0+5*8, 2+1*8,
404 1+6*8, 4+0*8, 2+6*8, 5+0*8,
405 3+6*8, 6+0*8, 4+6*8, 6+2*8,
406 5+7*8, 6+4*8, 7+2*8, 7+6*8,
407 1+0*8, 1+2*8, 0+6*8, 3+0*8,
408 1+7*8, 3+2*8, 2+7*8, 4+2*8,
409 3+7*8, 5+2*8, 4+7*8, 5+4*8,
410 6+3*8, 6+5*8, 7+3*8, 7+7*8,
411};
412
8a3b6f92 413#define MB_TYPE_REF0 MB_TYPE_ACPRED //dirty but it fits in 16bit
43efd19a 414#define MB_TYPE_8x8DCT 0x01000000
7bc9090a 415#define IS_REF0(a) ((a)&MB_TYPE_REF0)
43efd19a
LM
416#define IS_8x8DCT(a) ((a)&MB_TYPE_8x8DCT)
417
7bc9090a 418
0da71265
MN
419typedef struct IMbInfo{
420 uint16_t type;
421 uint8_t pred_mode;
422 uint8_t cbp;
423} IMbInfo;
424
425static const IMbInfo i_mb_type_info[26]={
426{MB_TYPE_INTRA4x4 , -1, -1},
427{MB_TYPE_INTRA16x16, 2, 0},
428{MB_TYPE_INTRA16x16, 1, 0},
429{MB_TYPE_INTRA16x16, 0, 0},
430{MB_TYPE_INTRA16x16, 3, 0},
431{MB_TYPE_INTRA16x16, 2, 16},
432{MB_TYPE_INTRA16x16, 1, 16},
433{MB_TYPE_INTRA16x16, 0, 16},
434{MB_TYPE_INTRA16x16, 3, 16},
435{MB_TYPE_INTRA16x16, 2, 32},
436{MB_TYPE_INTRA16x16, 1, 32},
437{MB_TYPE_INTRA16x16, 0, 32},
438{MB_TYPE_INTRA16x16, 3, 32},
439{MB_TYPE_INTRA16x16, 2, 15+0},
440{MB_TYPE_INTRA16x16, 1, 15+0},
441{MB_TYPE_INTRA16x16, 0, 15+0},
442{MB_TYPE_INTRA16x16, 3, 15+0},
443{MB_TYPE_INTRA16x16, 2, 15+16},
444{MB_TYPE_INTRA16x16, 1, 15+16},
445{MB_TYPE_INTRA16x16, 0, 15+16},
446{MB_TYPE_INTRA16x16, 3, 15+16},
447{MB_TYPE_INTRA16x16, 2, 15+32},
448{MB_TYPE_INTRA16x16, 1, 15+32},
449{MB_TYPE_INTRA16x16, 0, 15+32},
450{MB_TYPE_INTRA16x16, 3, 15+32},
451{MB_TYPE_INTRA_PCM , -1, -1},
452};
453
454typedef struct PMbInfo{
455 uint16_t type;
456 uint8_t partition_count;
457} PMbInfo;
458
459static const PMbInfo p_mb_type_info[5]={
460{MB_TYPE_16x16|MB_TYPE_P0L0 , 1},
461{MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P1L0, 2},
462{MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P1L0, 2},
b75e10d5
LM
463{MB_TYPE_8x8 |MB_TYPE_P0L0|MB_TYPE_P1L0, 4},
464{MB_TYPE_8x8 |MB_TYPE_P0L0|MB_TYPE_P1L0|MB_TYPE_REF0, 4},
0da71265
MN
465};
466
467static const PMbInfo p_sub_mb_type_info[4]={
468{MB_TYPE_16x16|MB_TYPE_P0L0 , 1},
469{MB_TYPE_16x8 |MB_TYPE_P0L0 , 2},
470{MB_TYPE_8x16 |MB_TYPE_P0L0 , 2},
471{MB_TYPE_8x8 |MB_TYPE_P0L0 , 4},
472};
473
474static const PMbInfo b_mb_type_info[23]={
7bc9090a 475{MB_TYPE_DIRECT2 , 1, },
0da71265
MN
476{MB_TYPE_16x16|MB_TYPE_P0L0 , 1, },
477{MB_TYPE_16x16 |MB_TYPE_P0L1 , 1, },
478{MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1 , 1, },
479{MB_TYPE_16x8 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 2, },
480{MB_TYPE_8x16 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 2, },
481{MB_TYPE_16x8 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
482{MB_TYPE_8x16 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
483{MB_TYPE_16x8 |MB_TYPE_P0L0 |MB_TYPE_P1L1, 2, },
484{MB_TYPE_8x16 |MB_TYPE_P0L0 |MB_TYPE_P1L1, 2, },
485{MB_TYPE_16x8 |MB_TYPE_P0L1|MB_TYPE_P1L0 , 2, },
486{MB_TYPE_8x16 |MB_TYPE_P0L1|MB_TYPE_P1L0 , 2, },
487{MB_TYPE_16x8 |MB_TYPE_P0L0 |MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
488{MB_TYPE_8x16 |MB_TYPE_P0L0 |MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
489{MB_TYPE_16x8 |MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
490{MB_TYPE_8x16 |MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
491{MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0 , 2, },
492{MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0 , 2, },
493{MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
494{MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
495{MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
496{MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
b75e10d5 497{MB_TYPE_8x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 4, },
0da71265
MN
498};
499
500static const PMbInfo b_sub_mb_type_info[13]={
7bc9090a 501{MB_TYPE_DIRECT2 , 1, },
0da71265
MN
502{MB_TYPE_16x16|MB_TYPE_P0L0 , 1, },
503{MB_TYPE_16x16 |MB_TYPE_P0L1 , 1, },
504{MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1 , 1, },
505{MB_TYPE_16x8 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 2, },
506{MB_TYPE_8x16 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 2, },
507{MB_TYPE_16x8 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
508{MB_TYPE_8x16 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
509{MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
510{MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
511{MB_TYPE_8x8 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 4, },
512{MB_TYPE_8x8 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 4, },
513{MB_TYPE_8x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 4, },
514};
515
239ea04c
LM
516static const uint8_t default_scaling4[2][16]={
517{ 6,13,20,28,
518 13,20,28,32,
519 20,28,32,37,
520 28,32,37,42
521},{
522 10,14,20,24,
523 14,20,24,27,
524 20,24,27,30,
525 24,27,30,34
526}};
527
528static const uint8_t default_scaling8[2][64]={
529{ 6,10,13,16,18,23,25,27,
530 10,11,16,18,23,25,27,29,
531 13,16,18,23,25,27,29,31,
532 16,18,23,25,27,29,31,33,
533 18,23,25,27,29,31,33,36,
534 23,25,27,29,31,33,36,38,
535 25,27,29,31,33,36,38,40,
536 27,29,31,33,36,38,40,42
537},{
538 9,13,15,17,19,21,22,24,
539 13,13,17,19,21,22,24,25,
540 15,17,19,21,22,24,25,27,
541 17,19,21,22,24,25,27,28,
542 19,21,22,24,25,27,28,30,
543 21,22,24,25,27,28,30,32,
544 22,24,25,27,28,30,32,33,
545 24,25,27,28,30,32,33,35
546}};
547
548static const int dequant4_coeff_init[6][3]={
549 {10,13,16},
550 {11,14,18},
551 {13,16,20},
552 {14,18,23},
553 {16,20,25},
554 {18,23,29},
0da71265
MN
555};
556
43efd19a
LM
557static const int dequant8_coeff_init_scan[16] = {
558 0,3,4,3, 3,1,5,1, 4,5,2,5, 3,1,5,1
559};
560static const int dequant8_coeff_init[6][6]={
561 {20,18,32,19,25,24},
562 {22,19,35,21,28,26},
563 {26,23,42,24,33,31},
564 {28,25,45,26,35,33},
565 {32,28,51,30,40,38},
566 {36,32,58,34,46,43},
567};
568
0da71265
MN
569#define QUANT_SHIFT 22
570
571static const int quant_coeff[52][16]={
572 { 419430,258111,419430,258111,258111,167772,258111,167772,419430,258111,419430,258111,258111,167772,258111,167772,},
573 { 381300,239675,381300,239675,239675,149131,239675,149131,381300,239675,381300,239675,239675,149131,239675,149131,},
574 { 322639,209715,322639,209715,209715,134218,209715,134218,322639,209715,322639,209715,209715,134218,209715,134218,},
575 { 299593,186414,299593,186414,186414,116711,186414,116711,299593,186414,299593,186414,186414,116711,186414,116711,},
576 { 262144,167772,262144,167772,167772,107374,167772,107374,262144,167772,262144,167772,167772,107374,167772,107374,},
577 { 233017,145889,233017,145889,145889, 92564,145889, 92564,233017,145889,233017,145889,145889, 92564,145889, 92564,},
578 { 209715,129056,209715,129056,129056, 83886,129056, 83886,209715,129056,209715,129056,129056, 83886,129056, 83886,},
579 { 190650,119837,190650,119837,119837, 74565,119837, 74565,190650,119837,190650,119837,119837, 74565,119837, 74565,},
580 { 161319,104858,161319,104858,104858, 67109,104858, 67109,161319,104858,161319,104858,104858, 67109,104858, 67109,},
581 { 149797, 93207,149797, 93207, 93207, 58356, 93207, 58356,149797, 93207,149797, 93207, 93207, 58356, 93207, 58356,},
582 { 131072, 83886,131072, 83886, 83886, 53687, 83886, 53687,131072, 83886,131072, 83886, 83886, 53687, 83886, 53687,},
583 { 116508, 72944,116508, 72944, 72944, 46282, 72944, 46282,116508, 72944,116508, 72944, 72944, 46282, 72944, 46282,},
584 { 104858, 64528,104858, 64528, 64528, 41943, 64528, 41943,104858, 64528,104858, 64528, 64528, 41943, 64528, 41943,},
585 { 95325, 59919, 95325, 59919, 59919, 37283, 59919, 37283, 95325, 59919, 95325, 59919, 59919, 37283, 59919, 37283,},
586 { 80660, 52429, 80660, 52429, 52429, 33554, 52429, 33554, 80660, 52429, 80660, 52429, 52429, 33554, 52429, 33554,},
587 { 74898, 46603, 74898, 46603, 46603, 29178, 46603, 29178, 74898, 46603, 74898, 46603, 46603, 29178, 46603, 29178,},
588 { 65536, 41943, 65536, 41943, 41943, 26844, 41943, 26844, 65536, 41943, 65536, 41943, 41943, 26844, 41943, 26844,},
589 { 58254, 36472, 58254, 36472, 36472, 23141, 36472, 23141, 58254, 36472, 58254, 36472, 36472, 23141, 36472, 23141,},
590 { 52429, 32264, 52429, 32264, 32264, 20972, 32264, 20972, 52429, 32264, 52429, 32264, 32264, 20972, 32264, 20972,},
591 { 47663, 29959, 47663, 29959, 29959, 18641, 29959, 18641, 47663, 29959, 47663, 29959, 29959, 18641, 29959, 18641,},
592 { 40330, 26214, 40330, 26214, 26214, 16777, 26214, 16777, 40330, 26214, 40330, 26214, 26214, 16777, 26214, 16777,},
593 { 37449, 23302, 37449, 23302, 23302, 14589, 23302, 14589, 37449, 23302, 37449, 23302, 23302, 14589, 23302, 14589,},
594 { 32768, 20972, 32768, 20972, 20972, 13422, 20972, 13422, 32768, 20972, 32768, 20972, 20972, 13422, 20972, 13422,},
595 { 29127, 18236, 29127, 18236, 18236, 11570, 18236, 11570, 29127, 18236, 29127, 18236, 18236, 11570, 18236, 11570,},
596 { 26214, 16132, 26214, 16132, 16132, 10486, 16132, 10486, 26214, 16132, 26214, 16132, 16132, 10486, 16132, 10486,},
597 { 23831, 14980, 23831, 14980, 14980, 9321, 14980, 9321, 23831, 14980, 23831, 14980, 14980, 9321, 14980, 9321,},
598 { 20165, 13107, 20165, 13107, 13107, 8389, 13107, 8389, 20165, 13107, 20165, 13107, 13107, 8389, 13107, 8389,},
599 { 18725, 11651, 18725, 11651, 11651, 7294, 11651, 7294, 18725, 11651, 18725, 11651, 11651, 7294, 11651, 7294,},
600 { 16384, 10486, 16384, 10486, 10486, 6711, 10486, 6711, 16384, 10486, 16384, 10486, 10486, 6711, 10486, 6711,},
601 { 14564, 9118, 14564, 9118, 9118, 5785, 9118, 5785, 14564, 9118, 14564, 9118, 9118, 5785, 9118, 5785,},
602 { 13107, 8066, 13107, 8066, 8066, 5243, 8066, 5243, 13107, 8066, 13107, 8066, 8066, 5243, 8066, 5243,},
603 { 11916, 7490, 11916, 7490, 7490, 4660, 7490, 4660, 11916, 7490, 11916, 7490, 7490, 4660, 7490, 4660,},
604 { 10082, 6554, 10082, 6554, 6554, 4194, 6554, 4194, 10082, 6554, 10082, 6554, 6554, 4194, 6554, 4194,},
605 { 9362, 5825, 9362, 5825, 5825, 3647, 5825, 3647, 9362, 5825, 9362, 5825, 5825, 3647, 5825, 3647,},
606 { 8192, 5243, 8192, 5243, 5243, 3355, 5243, 3355, 8192, 5243, 8192, 5243, 5243, 3355, 5243, 3355,},
607 { 7282, 4559, 7282, 4559, 4559, 2893, 4559, 2893, 7282, 4559, 7282, 4559, 4559, 2893, 4559, 2893,},
608 { 6554, 4033, 6554, 4033, 4033, 2621, 4033, 2621, 6554, 4033, 6554, 4033, 4033, 2621, 4033, 2621,},
609 { 5958, 3745, 5958, 3745, 3745, 2330, 3745, 2330, 5958, 3745, 5958, 3745, 3745, 2330, 3745, 2330,},
610 { 5041, 3277, 5041, 3277, 3277, 2097, 3277, 2097, 5041, 3277, 5041, 3277, 3277, 2097, 3277, 2097,},
611 { 4681, 2913, 4681, 2913, 2913, 1824, 2913, 1824, 4681, 2913, 4681, 2913, 2913, 1824, 2913, 1824,},
612 { 4096, 2621, 4096, 2621, 2621, 1678, 2621, 1678, 4096, 2621, 4096, 2621, 2621, 1678, 2621, 1678,},
613 { 3641, 2280, 3641, 2280, 2280, 1446, 2280, 1446, 3641, 2280, 3641, 2280, 2280, 1446, 2280, 1446,},
614 { 3277, 2016, 3277, 2016, 2016, 1311, 2016, 1311, 3277, 2016, 3277, 2016, 2016, 1311, 2016, 1311,},
615 { 2979, 1872, 2979, 1872, 1872, 1165, 1872, 1165, 2979, 1872, 2979, 1872, 1872, 1165, 1872, 1165,},
616 { 2521, 1638, 2521, 1638, 1638, 1049, 1638, 1049, 2521, 1638, 2521, 1638, 1638, 1049, 1638, 1049,},
617 { 2341, 1456, 2341, 1456, 1456, 912, 1456, 912, 2341, 1456, 2341, 1456, 1456, 912, 1456, 912,},
618 { 2048, 1311, 2048, 1311, 1311, 839, 1311, 839, 2048, 1311, 2048, 1311, 1311, 839, 1311, 839,},
619 { 1820, 1140, 1820, 1140, 1140, 723, 1140, 723, 1820, 1140, 1820, 1140, 1140, 723, 1140, 723,},
620 { 1638, 1008, 1638, 1008, 1008, 655, 1008, 655, 1638, 1008, 1638, 1008, 1008, 655, 1008, 655,},
621 { 1489, 936, 1489, 936, 936, 583, 936, 583, 1489, 936, 1489, 936, 936, 583, 936, 583,},
622 { 1260, 819, 1260, 819, 819, 524, 819, 524, 1260, 819, 1260, 819, 819, 524, 819, 524,},
623 { 1170, 728, 1170, 728, 728, 456, 728, 456, 1170, 728, 1170, 728, 728, 456, 728, 456,},
624};
980a82b7
MN
625
626
627/* Deblocking filter (p153) */
65342b2b
MN
628static const int alpha_table[52*3] = {
629 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
630 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
631 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
980a82b7
MN
633 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
634 0, 0, 0, 0, 0, 0, 4, 4, 5, 6,
635 7, 8, 9, 10, 12, 13, 15, 17, 20, 22,
636 25, 28, 32, 36, 40, 45, 50, 56, 63, 71,
637 80, 90,101,113,127,144,162,182,203,226,
65342b2b
MN
638 255,255,
639 255,255,255,255,255,255,255,255,255,255,255,255,255,
640 255,255,255,255,255,255,255,255,255,255,255,255,255,
641 255,255,255,255,255,255,255,255,255,255,255,255,255,
642 255,255,255,255,255,255,255,255,255,255,255,255,255,
643};
644static const int beta_table[52*3] = {
645 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
646 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
647 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
648 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
980a82b7
MN
649 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
650 0, 0, 0, 0, 0, 0, 2, 2, 2, 3,
651 3, 3, 3, 4, 4, 4, 6, 6, 7, 7,
652 8, 8, 9, 9, 10, 10, 11, 11, 12, 12,
653 13, 13, 14, 14, 15, 15, 16, 16, 17, 17,
65342b2b
MN
654 18, 18,
655 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
656 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
657 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
658 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
980a82b7 659};
65342b2b
MN
660static const int tc0_table[52*3][3] = {
661 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
662 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
663 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
664 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
665 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
666 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
667 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
668 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
669 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
980a82b7
MN
670 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
671 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
672 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 1 },
673 { 0, 0, 1 }, { 0, 0, 1 }, { 0, 0, 1 }, { 0, 1, 1 }, { 0, 1, 1 }, { 1, 1, 1 },
674 { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 2 }, { 1, 1, 2 }, { 1, 1, 2 },
675 { 1, 1, 2 }, { 1, 2, 3 }, { 1, 2, 3 }, { 2, 2, 3 }, { 2, 2, 4 }, { 2, 3, 4 },
676 { 2, 3, 4 }, { 3, 3, 5 }, { 3, 4, 6 }, { 3, 4, 6 }, { 4, 5, 7 }, { 4, 5, 8 },
677 { 4, 6, 9 }, { 5, 7,10 }, { 6, 8,11 }, { 6, 8,13 }, { 7,10,14 }, { 8,11,16 },
65342b2b
MN
678 { 9,12,18 }, {10,13,20 }, {11,15,23 }, {13,17,25 },
679 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
680 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
681 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
682 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
683 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
684 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
685 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
686 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
687 {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
980a82b7 688};
e5017ab8
LA
689
690/* Cabac pre state table */
691
43efd19a 692static const int cabac_context_init_I[460][2] =
e5017ab8
LA
693{
694 /* 0 - 10 */
695 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
696 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
697 { -6, 53 }, { -1, 54 }, { 7, 51 },
698
699 /* 11 - 23 unsused for I */
700 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
701 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
702 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
703 { 0, 0 },
704
705 /* 24- 39 */
706 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
707 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
708 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
709 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
710
711 /* 40 - 53 */
712 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
713 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
714 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
715 { 0, 0 }, { 0, 0 },
716
717 /* 54 - 59 */
718 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
719 { 0, 0 }, { 0, 0 },
720
721 /* 60 - 69 */
722 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
723 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
724 { 13, 41 }, { 3, 62 },
725
726 /* 70 -> 87 */
727 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
728 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
729 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
730 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
731 { -12, 115 },{ -16, 122 },
732
733 /* 88 -> 104 */
734 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
735 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
736 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
737 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
738 { -22, 125 },
739
740 /* 105 -> 135 */
741 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
742 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
743 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
744 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
745 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
746 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
747 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
748 { 14, 62 }, { -13, 108 },{ -15, 100 },
749
750 /* 136 -> 165 */
751 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
752 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
753 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
754 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
755 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
756 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
757 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
758 { 0, 62 }, { 12, 72 },
759
760 /* 166 -> 196 */
761 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
762 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
763 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
764 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
765 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
766 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
767 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
768 { 0, 89 }, { 26, -19 }, { 22, -17 },
769
770 /* 197 -> 226 */
771 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
772 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
773 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
774 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
775 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
776 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
777 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
778 { 12, 68 }, { 2, 97 },
779
780 /* 227 -> 251 */
781 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
782 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
783 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
784 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
785 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
786 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
787 { -4, 65 },
788
789 /* 252 -> 275 */
790 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
791 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
792 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
793 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
794 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
795 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
796
797 /* 276 a bit special (not used, bypass is used instead) */
798 { 0, 0 },
799
800 /* 277 -> 307 */
801 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
802 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
803 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
804 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
805 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
806 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
807 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
808 { 9, 64 }, { -12, 104 },{ -11, 97 },
809
810 /* 308 -> 337 */
811 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
812 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
813 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
814 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
815 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
816 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
817 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
818 { 5, 64 }, { 12, 70 },
819
820 /* 338 -> 368 */
821 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
822 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
823 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
824 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
825 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
826 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
827 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
828 { -12, 109 },{ 36, -35 }, { 36, -34 },
829
830 /* 369 -> 398 */
831 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
832 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
833 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
834 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
835 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
836 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
837 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
43efd19a
LM
838 { 29, 39 }, { 19, 66 },
839
840 /* 399 -> 435 */
841 { 31, 21 }, { 31, 31 }, { 25, 50 },
842 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
843 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
844 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
845 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
846 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
847 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
848 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
849 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
850 { 0, 68 }, { -9, 92 },
851
852 /* 436 -> 459 */
853 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
854 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
855 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
856 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
857 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
858 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 }
e5017ab8
LA
859};
860
43efd19a 861static const int cabac_context_init_PB[3][460][2] =
e5017ab8
LA
862{
863 /* i_cabac_init_idc == 0 */
864 {
865 /* 0 - 10 */
866 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
867 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
868 { -6, 53 }, { -1, 54 }, { 7, 51 },
869
870 /* 11 - 23 */
871 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
872 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
873 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
874 { 17, 50 },
875
876 /* 24 - 39 */
877 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
878 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
879 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
880 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
881
882 /* 40 - 53 */
883 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
884 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
885 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
886 { -3, 81 }, { 0, 88 },
887
888 /* 54 - 59 */
889 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
890 { -7, 72 }, { 1, 58 },
891
892 /* 60 - 69 */
893 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
894 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
895 { 13, 41 }, { 3, 62 },
896
897 /* 70 - 87 */
898 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
899 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
900 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
901 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
902 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
903 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
904 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
905 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
906 { 0, 68 }, { -4, 69 }, { -8, 88 },
907
908 /* 105 -> 165 */
909 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
910 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
911 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
912 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
913 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
914 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
915 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
916 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
917 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
918 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
919 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
920 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
921 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
922 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
923 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
924 { 9, 69 },
925
926 /* 166 - 226 */
927 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
928 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
929 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
930 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
931 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
932 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
933 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
934 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
935 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
936 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
937 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
938 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
939 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
940 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
941 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
942 { -9, 108 },
943
944 /* 227 - 275 */
945 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
946 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
947 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
948 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
949 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
950 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
951 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
952 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
953 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
954 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
955 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
956 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
957 { -8, 85 },
958
959 /* 276 a bit special (not used, bypass is used instead) */
960 { 0, 0 },
961
962 /* 277 - 337 */
963 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
964 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
965 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
966 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
967 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
968 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
969 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
970 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
971 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
972 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
973 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
974 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
975 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
976 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
977 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
978 { 26, 43 },
979
980 /* 338 - 398 */
981 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
982 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
983 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
984 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
985 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
986 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
987 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
988 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
989 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
990 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
991 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
992 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
993 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
994 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
995 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
996 { 11, 86 },
997
43efd19a
LM
998 /* 399 - 435 */
999 { 12, 40 }, { 11, 51 }, { 14, 59 },
1000 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
1001 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
1002 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
1003 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
1004 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
1005 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
1006 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
1007 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
1008 { -8, 66 }, { -8, 76 },
1009
1010 /* 436 - 459 */
1011 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
1012 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
1013 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
1014 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
1015 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
1016 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
e5017ab8
LA
1017 },
1018
1019 /* i_cabac_init_idc == 1 */
1020 {
1021 /* 0 - 10 */
1022 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
1023 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
1024 { -6, 53 }, { -1, 54 }, { 7, 51 },
1025
1026 /* 11 - 23 */
1027 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
1028 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
1029 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
1030 { 10, 54 },
1031
1032 /* 24 - 39 */
1033 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
1034 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
1035 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
1036 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
1037
1038 /* 40 - 53 */
1039 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
1040 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
1041 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
1042 { -7, 86 },{ -5, 95 },
1043
1044 /* 54 - 59 */
1045 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
1046 { -5, 72 },{ 0, 61 },
1047
1048 /* 60 - 69 */
1049 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
1050 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
1051 { 13, 41 }, { 3, 62 },
1052
1053 /* 70 - 104 */
1054 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
1055 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
1056 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
1057 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
1058 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
1059 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
1060 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
1061 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
1062 { 0, 68 }, { -7, 74 }, { -9, 88 },
1063
1064 /* 105 -> 165 */
1065 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
1066 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
1067 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
1068 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
1069 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
1070 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
1071 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
1072 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
1073 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
1074 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
1075 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
1076 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
1077 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
1078 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
1079 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
1080 { 0, 89 },
1081
1082 /* 166 - 226 */
1083 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
1084 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
1085 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
1086 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
1087 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
1088 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
1089 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
1090 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
1091 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
1092 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
1093 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
1094 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
1095 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
1096 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
1097 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
1098 { -10, 116 },
1099
1100 /* 227 - 275 */
1101 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
1102 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
1103 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
1104 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
1105 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
1106 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
1107 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
1108 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
1109 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
1110 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
1111 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
1112 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
1113 { -4, 78 },
1114
1115 /* 276 a bit special (not used, bypass is used instead) */
1116 { 0, 0 },
1117
1118 /* 277 - 337 */
1119 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
1120 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
1121 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
1122 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
1123 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
1124 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
1125 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
1126 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
1127 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
1128 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
1129 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
1130 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
1131 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
1132 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
1133 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
1134 { 18, 50 },
1135
1136 /* 338 - 398 */
1137 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
1138 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
1139 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
1140 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
1141 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
1142 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
1143 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
1144 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
1145 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
1146 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
1147 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
1148 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
1149 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
1150 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
1151 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
1152 { 11, 83 },
1153
43efd19a 1154 /* 399 - 435 */
1b7576e7 1155 { 25, 32 }, { 21, 49 }, { 21, 54 },
43efd19a 1156 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
1b7576e7 1157 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
43efd19a
LM
1158 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
1159 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
1160 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
1161 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
1162 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
1b7576e7 1163 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
43efd19a
LM
1164 { -4, 67 }, { -7, 82 },
1165
1166 /* 436 - 459 */
1167 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
1168 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
1169 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
1170 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
1171 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
1172 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
e5017ab8
LA
1173 },
1174
1175 /* i_cabac_init_idc == 2 */
1176 {
1177 /* 0 - 10 */
1178 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
1179 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
1180 { -6, 53 }, { -1, 54 }, { 7, 51 },
1181
1182 /* 11 - 23 */
1183 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
1184 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
1185 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
1186 { 14, 57 },
1187
1188 /* 24 - 39 */
1189 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
1190 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
1191 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
1192 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
1193
1194 /* 40 - 53 */
1195 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
1196 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
1197 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
1198 { -3, 90 },{ -1, 101 },
1199
1200 /* 54 - 59 */
1201 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
1202 { -7, 50 },{ 1, 60 },
1203
1204 /* 60 - 69 */
1205 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
1206 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
1207 { 13, 41 }, { 3, 62 },
1208
1209 /* 70 - 104 */
1210 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
1211 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
1212 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
1213 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
1214 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1215 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1216 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1217 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1218 { 3, 68 }, { -8, 71 }, { -13, 98 },
1219
1220 /* 105 -> 165 */
1221 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1222 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1223 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1224 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1225 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1226 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1227 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1228 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1229 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1230 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1231 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1232 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1233 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1234 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1235 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1236 { -22, 127 },
1237
1238 /* 166 - 226 */
1239 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1240 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1241 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1242 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1243 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1244 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1245 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1246 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1247 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1248 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1249 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1250 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1251 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1252 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1253 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1254 { -24, 127 },
1255
1256 /* 227 - 275 */
1257 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1258 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1259 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1260 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1261 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1262 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1263 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1264 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1265 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1266 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1267 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1268 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1269 { -10, 87 },
1270
1271 /* 276 a bit special (not used, bypass is used instead) */
1272 { 0, 0 },
1273
1274 /* 277 - 337 */
1275 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1276 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1277 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1278 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1279 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1280 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1281 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1282 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1283 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1284 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1285 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1286 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1287 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1288 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1289 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1290 { 25, 42 },
1291
1292 /* 338 - 398 */
1293 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1294 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1295 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1296 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1297 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1298 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1299 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1300 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1301 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1302 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1303 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1304 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1305 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1306 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1307 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1308 { 25, 61 },
43efd19a
LM
1309
1310 /* 399 - 435 */
1311 { 21, 33 }, { 19, 50 }, { 17, 61 },
1312 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1313 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1314 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1315 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1316 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1317 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1318 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1319 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1320 { -6, 68 }, { -10, 79 },
1321
1322 /* 436 - 459 */
1323 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1324 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1325 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1326 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1327 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1328 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
e5017ab8
LA
1329 }
1330};
699b3f99
MR
1331
1332#endif