Statistics
| Branch: | Revision:

ffmpeg / libavcodec / h264data.h @ 94d85eaf

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