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