Statistics
| Branch: | Revision:

ffmpeg / libavcodec / h264data.h @ 5509bffa

History | View | Annotate | Download (52.8 KB)

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