GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/h264_cabac.c Lines: 625 642 97.4 %
Date: 2019-11-22 03:34:36 Branches: 514 542 94.8 %

Line Branch Exec Source
1
/*
2
 * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
3
 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
22
/**
23
 * @file
24
 * H.264 / AVC / MPEG-4 part10 cabac decoding.
25
 * @author Michael Niedermayer <michaelni@gmx.at>
26
 */
27
28
#define CABAC(h) 1
29
#define UNCHECKED_BITSTREAM_READER 1
30
#define INT_BIT (CHAR_BIT * sizeof(int))
31
32
#include "libavutil/attributes.h"
33
#include "libavutil/avassert.h"
34
#include "libavutil/timer.h"
35
#include "config.h"
36
#include "cabac.h"
37
#include "cabac_functions.h"
38
#include "internal.h"
39
#include "avcodec.h"
40
#include "h264dec.h"
41
#include "h264data.h"
42
#include "h264_mvpred.h"
43
#include "mpegutils.h"
44
45
#if ARCH_X86
46
#include "x86/h264_cabac.c"
47
#endif
48
49
/* Cabac pre state table */
50
51
static const int8_t cabac_context_init_I[1024][2] =
52
{
53
    /* 0 - 10 */
54
    { 20, -15 }, {  2, 54 },  {  3,  74 }, { 20, -15 },
55
    {  2,  54 }, {  3, 74 },  { -28,127 }, { -23, 104 },
56
    { -6,  53 }, { -1, 54 },  {  7,  51 },
57
58
    /* 11 - 23 unused for I */
59
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
60
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
61
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
62
    { 0, 0 },
63
64
    /* 24- 39 */
65
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
66
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
67
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
68
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
69
70
    /* 40 - 53 */
71
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
72
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
73
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
74
    { 0, 0 },    { 0, 0 },
75
76
    /* 54 - 59 */
77
    { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
78
    { 0, 0 },    { 0, 0 },
79
80
    /* 60 - 69 */
81
    { 0, 41 },   { 0, 63 },   { 0, 63 },     { 0, 63 },
82
    { -9, 83 },  { 4, 86 },   { 0, 97 },     { -7, 72 },
83
    { 13, 41 },  { 3, 62 },
84
85
    /* 70 -> 87 */
86
    { 0, 11 },   { 1, 55 },   { 0, 69 },     { -17, 127 },
87
    { -13, 102 },{ 0, 82 },   { -7, 74 },    { -21, 107 },
88
    { -27, 127 },{ -31, 127 },{ -24, 127 },  { -18, 95 },
89
    { -27, 127 },{ -21, 114 },{ -30, 127 },  { -17, 123 },
90
    { -12, 115 },{ -16, 122 },
91
92
    /* 88 -> 104 */
93
    { -11, 115 },{ -12, 63 }, { -2, 68 },    { -15, 84 },
94
    { -13, 104 },{ -3, 70 },  { -8, 93 },    { -10, 90 },
95
    { -30, 127 },{ -1, 74 },  { -6, 97 },    { -7, 91 },
96
    { -20, 127 },{ -4, 56 },  { -5, 82 },    { -7, 76 },
97
    { -22, 125 },
98
99
    /* 105 -> 135 */
100
    { -7, 93 },  { -11, 87 }, { -3, 77 },    { -5, 71 },
101
    { -4, 63 },  { -4, 68 },  { -12, 84 },   { -7, 62 },
102
    { -7, 65 },  { 8, 61 },   { 5, 56 },     { -2, 66 },
103
    { 1, 64 },   { 0, 61 },   { -2, 78 },    { 1, 50 },
104
    { 7, 52 },   { 10, 35 },  { 0, 44 },     { 11, 38 },
105
    { 1, 45 },   { 0, 46 },   { 5, 44 },     { 31, 17 },
106
    { 1, 51 },   { 7, 50 },   { 28, 19 },    { 16, 33 },
107
    { 14, 62 },  { -13, 108 },{ -15, 100 },
108
109
    /* 136 -> 165 */
110
    { -13, 101 },{ -13, 91 }, { -12, 94 },   { -10, 88 },
111
    { -16, 84 }, { -10, 86 }, { -7, 83 },    { -13, 87 },
112
    { -19, 94 }, { 1, 70 },   { 0, 72 },     { -5, 74 },
113
    { 18, 59 },  { -8, 102 }, { -15, 100 },  { 0, 95 },
114
    { -4, 75 },  { 2, 72 },   { -11, 75 },   { -3, 71 },
115
    { 15, 46 },  { -13, 69 }, { 0, 62 },     { 0, 65 },
116
    { 21, 37 },  { -15, 72 }, { 9, 57 },     { 16, 54 },
117
    { 0, 62 },   { 12, 72 },
118
119
    /* 166 -> 196 */
120
    { 24, 0 },   { 15, 9 },   { 8, 25 },     { 13, 18 },
121
    { 15, 9 },   { 13, 19 },  { 10, 37 },    { 12, 18 },
122
    { 6, 29 },   { 20, 33 },  { 15, 30 },    { 4, 45 },
123
    { 1, 58 },   { 0, 62 },   { 7, 61 },     { 12, 38 },
124
    { 11, 45 },  { 15, 39 },  { 11, 42 },    { 13, 44 },
125
    { 16, 45 },  { 12, 41 },  { 10, 49 },    { 30, 34 },
126
    { 18, 42 },  { 10, 55 },  { 17, 51 },    { 17, 46 },
127
    { 0, 89 },   { 26, -19 }, { 22, -17 },
128
129
    /* 197 -> 226 */
130
    { 26, -17 }, { 30, -25 }, { 28, -20 },   { 33, -23 },
131
    { 37, -27 }, { 33, -23 }, { 40, -28 },   { 38, -17 },
132
    { 33, -11 }, { 40, -15 }, { 41, -6 },    { 38, 1 },
133
    { 41, 17 },  { 30, -6 },  { 27, 3 },     { 26, 22 },
134
    { 37, -16 }, { 35, -4 },  { 38, -8 },    { 38, -3 },
135
    { 37, 3 },   { 38, 5 },   { 42, 0 },     { 35, 16 },
136
    { 39, 22 },  { 14, 48 },  { 27, 37 },    { 21, 60 },
137
    { 12, 68 },  { 2, 97 },
138
139
    /* 227 -> 251 */
140
    { -3, 71 },  { -6, 42 },  { -5, 50 },    { -3, 54 },
141
    { -2, 62 },  { 0, 58 },   { 1, 63 },     { -2, 72 },
142
    { -1, 74 },  { -9, 91 },  { -5, 67 },    { -5, 27 },
143
    { -3, 39 },  { -2, 44 },  { 0, 46 },     { -16, 64 },
144
    { -8, 68 },  { -10, 78 }, { -6, 77 },    { -10, 86 },
145
    { -12, 92 }, { -15, 55 }, { -10, 60 },   { -6, 62 },
146
    { -4, 65 },
147
148
    /* 252 -> 275 */
149
    { -12, 73 }, { -8, 76 },  { -7, 80 },    { -9, 88 },
150
    { -17, 110 },{ -11, 97 }, { -20, 84 },   { -11, 79 },
151
    { -6, 73 },  { -4, 74 },  { -13, 86 },   { -13, 96 },
152
    { -11, 97 }, { -19, 117 },{ -8, 78 },    { -5, 33 },
153
    { -4, 48 },  { -2, 53 },  { -3, 62 },    { -13, 71 },
154
    { -10, 79 }, { -12, 86 }, { -13, 90 },   { -14, 97 },
155
156
    /* 276 a bit special (not used, bypass is used instead) */
157
    { 0, 0 },
158
159
    /* 277 -> 307 */
160
    { -6, 93 },  { -6, 84 },  { -8, 79 },    { 0, 66 },
161
    { -1, 71 },  { 0, 62 },   { -2, 60 },    { -2, 59 },
162
    { -5, 75 },  { -3, 62 },  { -4, 58 },    { -9, 66 },
163
    { -1, 79 },  { 0, 71 },   { 3, 68 },     { 10, 44 },
164
    { -7, 62 },  { 15, 36 },  { 14, 40 },    { 16, 27 },
165
    { 12, 29 },  { 1, 44 },   { 20, 36 },    { 18, 32 },
166
    { 5, 42 },   { 1, 48 },   { 10, 62 },    { 17, 46 },
167
    { 9, 64 },   { -12, 104 },{ -11, 97 },
168
169
    /* 308 -> 337 */
170
    { -16, 96 }, { -7, 88 },  { -8, 85 },    { -7, 85 },
171
    { -9, 85 },  { -13, 88 }, { 4, 66 },     { -3, 77 },
172
    { -3, 76 },  { -6, 76 },  { 10, 58 },    { -1, 76 },
173
    { -1, 83 },  { -7, 99 },  { -14, 95 },   { 2, 95 },
174
    { 0, 76 },   { -5, 74 },  { 0, 70 },     { -11, 75 },
175
    { 1, 68 },   { 0, 65 },   { -14, 73 },   { 3, 62 },
176
    { 4, 62 },   { -1, 68 },  { -13, 75 },   { 11, 55 },
177
    { 5, 64 },   { 12, 70 },
178
179
    /* 338 -> 368 */
180
    { 15, 6 },   { 6, 19 },   { 7, 16 },     { 12, 14 },
181
    { 18, 13 },  { 13, 11 },  { 13, 15 },    { 15, 16 },
182
    { 12, 23 },  { 13, 23 },  { 15, 20 },    { 14, 26 },
183
    { 14, 44 },  { 17, 40 },  { 17, 47 },    { 24, 17 },
184
    { 21, 21 },  { 25, 22 },  { 31, 27 },    { 22, 29 },
185
    { 19, 35 },  { 14, 50 },  { 10, 57 },    { 7, 63 },
186
    { -2, 77 },  { -4, 82 },  { -3, 94 },    { 9, 69 },
187
    { -12, 109 },{ 36, -35 }, { 36, -34 },
188
189
    /* 369 -> 398 */
190
    { 32, -26 }, { 37, -30 }, { 44, -32 },   { 34, -18 },
191
    { 34, -15 }, { 40, -15 }, { 33, -7 },    { 35, -5 },
192
    { 33, 0 },   { 38, 2 },   { 33, 13 },    { 23, 35 },
193
    { 13, 58 },  { 29, -3 },  { 26, 0 },     { 22, 30 },
194
    { 31, -7 },  { 35, -15 }, { 34, -3 },    { 34, 3 },
195
    { 36, -1 },  { 34, 5 },   { 32, 11 },    { 35, 5 },
196
    { 34, 12 },  { 39, 11 },  { 30, 29 },    { 34, 26 },
197
    { 29, 39 },  { 19, 66 },
198
199
    /* 399 -> 435 */
200
    {  31,  21 }, {  31,  31 }, {  25,  50 },
201
    { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11,  85 },
202
    { -15,  92 }, { -14,  89 }, { -26,  71 }, { -15,  81 },
203
    { -14,  80 }, {   0,  68 }, { -14,  70 }, { -24,  56 },
204
    { -23,  68 }, { -24,  50 }, { -11,  74 }, {  23, -13 },
205
    {  26, -13 }, {  40, -15 }, {  49, -14 }, {  44,   3 },
206
    {  45,   6 }, {  44,  34 }, {  33,  54 }, {  19,  82 },
207
    {  -3,  75 }, {  -1,  23 }, {   1,  34 }, {   1,  43 },
208
    {   0,  54 }, {  -2,  55 }, {   0,  61 }, {   1,  64 },
209
    {   0,  68 }, {  -9,  92 },
210
211
    /* 436 -> 459 */
212
    { -14, 106 }, { -13,  97 }, { -15,  90 }, { -12,  90 },
213
    { -18,  88 }, { -10,  73 }, {  -9,  79 }, { -14,  86 },
214
    { -10,  73 }, { -10,  70 }, { -10,  69 }, {  -5,  66 },
215
    {  -9,  64 }, {  -5,  58 }, {   2,  59 }, {  21, -10 },
216
    {  24, -11 }, {  28,  -8 }, {  28,  -1 }, {  29,   3 },
217
    {  29,   9 }, {  35,  20 }, {  29,  36 }, {  14,  67 },
218
219
    /* 460 -> 1024 */
220
    { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
221
    { -12,  63 }, {  -2,  68 }, { -15,  84 }, { -13, 104 },
222
    {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 },
223
    { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
224
    { -12,  63 }, {  -2,  68 }, { -15,  84 }, { -13, 104 },
225
    {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 },
226
    {  -7,  93 }, { -11,  87 }, {  -3,  77 }, {  -5,  71 },
227
    {  -4,  63 }, {  -4,  68 }, { -12,  84 }, {  -7,  62 },
228
    {  -7,  65 }, {   8,  61 }, {   5,  56 }, {  -2,  66 },
229
    {   1,  64 }, {   0,  61 }, {  -2,  78 }, {   1,  50 },
230
    {   7,  52 }, {  10,  35 }, {   0,  44 }, {  11,  38 },
231
    {   1,  45 }, {   0,  46 }, {   5,  44 }, {  31,  17 },
232
    {   1,  51 }, {   7,  50 }, {  28,  19 }, {  16,  33 },
233
    {  14,  62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
234
    { -13,  91 }, { -12,  94 }, { -10,  88 }, { -16,  84 },
235
    { -10,  86 }, {  -7,  83 }, { -13,  87 }, { -19,  94 },
236
    {   1,  70 }, {   0,  72 }, {  -5,  74 }, {  18,  59 },
237
    {  -7,  93 }, { -11,  87 }, {  -3,  77 }, {  -5,  71 },
238
    {  -4,  63 }, {  -4,  68 }, { -12,  84 }, {  -7,  62 },
239
    {  -7,  65 }, {   8,  61 }, {   5,  56 }, {  -2,  66 },
240
    {   1,  64 }, {   0,  61 }, {  -2,  78 }, {   1,  50 },
241
    {   7,  52 }, {  10,  35 }, {   0,  44 }, {  11,  38 },
242
    {   1,  45 }, {   0,  46 }, {   5,  44 }, {  31,  17 },
243
    {   1,  51 }, {   7,  50 }, {  28,  19 }, {  16,  33 },
244
    {  14,  62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
245
    { -13,  91 }, { -12,  94 }, { -10,  88 }, { -16,  84 },
246
    { -10,  86 }, {  -7,  83 }, { -13,  87 }, { -19,  94 },
247
    {   1,  70 }, {   0,  72 }, {  -5,  74 }, {  18,  59 },
248
    {  24,   0 }, {  15,   9 }, {   8,  25 }, {  13,  18 },
249
    {  15,   9 }, {  13,  19 }, {  10,  37 }, {  12,  18 },
250
    {   6,  29 }, {  20,  33 }, {  15,  30 }, {   4,  45 },
251
    {   1,  58 }, {   0,  62 }, {   7,  61 }, {  12,  38 },
252
    {  11,  45 }, {  15,  39 }, {  11,  42 }, {  13,  44 },
253
    {  16,  45 }, {  12,  41 }, {  10,  49 }, {  30,  34 },
254
    {  18,  42 }, {  10,  55 }, {  17,  51 }, {  17,  46 },
255
    {   0,  89 }, {  26, -19 }, {  22, -17 }, {  26, -17 },
256
    {  30, -25 }, {  28, -20 }, {  33, -23 }, {  37, -27 },
257
    {  33, -23 }, {  40, -28 }, {  38, -17 }, {  33, -11 },
258
    {  40, -15 }, {  41,  -6 }, {  38,   1 }, {  41,  17 },
259
    {  24,   0 }, {  15,   9 }, {   8,  25 }, {  13,  18 },
260
    {  15,   9 }, {  13,  19 }, {  10,  37 }, {  12,  18 },
261
    {   6,  29 }, {  20,  33 }, {  15,  30 }, {   4,  45 },
262
    {   1,  58 }, {   0,  62 }, {   7,  61 }, {  12,  38 },
263
    {  11,  45 }, {  15,  39 }, {  11,  42 }, {  13,  44 },
264
    {  16,  45 }, {  12,  41 }, {  10,  49 }, {  30,  34 },
265
    {  18,  42 }, {  10,  55 }, {  17,  51 }, {  17,  46 },
266
    {   0,  89 }, {  26, -19 }, {  22, -17 }, {  26, -17 },
267
    {  30, -25 }, {  28, -20 }, {  33, -23 }, {  37, -27 },
268
    {  33, -23 }, {  40, -28 }, {  38, -17 }, {  33, -11 },
269
    {  40, -15 }, {  41,  -6 }, {  38,   1 }, {  41,  17 },
270
    { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11,  85 },
271
    { -15,  92 }, { -14,  89 }, { -26,  71 }, { -15,  81 },
272
    { -14,  80 }, {   0,  68 }, { -14,  70 }, { -24,  56 },
273
    { -23,  68 }, { -24,  50 }, { -11,  74 }, { -14, 106 },
274
    { -13,  97 }, { -15,  90 }, { -12,  90 }, { -18,  88 },
275
    { -10,  73 }, {  -9,  79 }, { -14,  86 }, { -10,  73 },
276
    { -10,  70 }, { -10,  69 }, {  -5,  66 }, {  -9,  64 },
277
    {  -5,  58 }, {   2,  59 }, {  23, -13 }, {  26, -13 },
278
    {  40, -15 }, {  49, -14 }, {  44,   3 }, {  45,   6 },
279
    {  44,  34 }, {  33,  54 }, {  19,  82 }, {  21, -10 },
280
    {  24, -11 }, {  28,  -8 }, {  28,  -1 }, {  29,   3 },
281
    {  29,   9 }, {  35,  20 }, {  29,  36 }, {  14,  67 },
282
    {  -3,  75 }, {  -1,  23 }, {   1,  34 }, {   1,  43 },
283
    {   0,  54 }, {  -2,  55 }, {   0,  61 }, {   1,  64 },
284
    {   0,  68 }, {  -9,  92 }, { -17, 120 }, { -20, 112 },
285
    { -18, 114 }, { -11,  85 }, { -15,  92 }, { -14,  89 },
286
    { -26,  71 }, { -15,  81 }, { -14,  80 }, {   0,  68 },
287
    { -14,  70 }, { -24,  56 }, { -23,  68 }, { -24,  50 },
288
    { -11,  74 }, { -14, 106 }, { -13,  97 }, { -15,  90 },
289
    { -12,  90 }, { -18,  88 }, { -10,  73 }, {  -9,  79 },
290
    { -14,  86 }, { -10,  73 }, { -10,  70 }, { -10,  69 },
291
    {  -5,  66 }, {  -9,  64 }, {  -5,  58 }, {   2,  59 },
292
    {  23, -13 }, {  26, -13 }, {  40, -15 }, {  49, -14 },
293
    {  44,   3 }, {  45,   6 }, {  44,  34 }, {  33,  54 },
294
    {  19,  82 }, {  21, -10 }, {  24, -11 }, {  28,  -8 },
295
    {  28,  -1 }, {  29,   3 }, {  29,   9 }, {  35,  20 },
296
    {  29,  36 }, {  14,  67 }, {  -3,  75 }, {  -1,  23 },
297
    {   1,  34 }, {   1,  43 }, {   0,  54 }, {  -2,  55 },
298
    {   0,  61 }, {   1,  64 }, {   0,  68 }, {  -9,  92 },
299
    {  -6,  93 }, {  -6,  84 }, {  -8,  79 }, {   0,  66 },
300
    {  -1,  71 }, {   0,  62 }, {  -2,  60 }, {  -2,  59 },
301
    {  -5,  75 }, {  -3,  62 }, {  -4,  58 }, {  -9,  66 },
302
    {  -1,  79 }, {   0,  71 }, {   3,  68 }, {  10,  44 },
303
    {  -7,  62 }, {  15,  36 }, {  14,  40 }, {  16,  27 },
304
    {  12,  29 }, {   1,  44 }, {  20,  36 }, {  18,  32 },
305
    {   5,  42 }, {   1,  48 }, {  10,  62 }, {  17,  46 },
306
    {   9,  64 }, { -12, 104 }, { -11,  97 }, { -16,  96 },
307
    {  -7,  88 }, {  -8,  85 }, {  -7,  85 }, {  -9,  85 },
308
    { -13,  88 }, {   4,  66 }, {  -3,  77 }, {  -3,  76 },
309
    {  -6,  76 }, {  10,  58 }, {  -1,  76 }, {  -1,  83 },
310
    {  -6,  93 }, {  -6,  84 }, {  -8,  79 }, {   0,  66 },
311
    {  -1,  71 }, {   0,  62 }, {  -2,  60 }, {  -2,  59 },
312
    {  -5,  75 }, {  -3,  62 }, {  -4,  58 }, {  -9,  66 },
313
    {  -1,  79 }, {   0,  71 }, {   3,  68 }, {  10,  44 },
314
    {  -7,  62 }, {  15,  36 }, {  14,  40 }, {  16,  27 },
315
    {  12,  29 }, {   1,  44 }, {  20,  36 }, {  18,  32 },
316
    {   5,  42 }, {   1,  48 }, {  10,  62 }, {  17,  46 },
317
    {   9,  64 }, { -12, 104 }, { -11,  97 }, { -16,  96 },
318
    {  -7,  88 }, {  -8,  85 }, {  -7,  85 }, {  -9,  85 },
319
    { -13,  88 }, {   4,  66 }, {  -3,  77 }, {  -3,  76 },
320
    {  -6,  76 }, {  10,  58 }, {  -1,  76 }, {  -1,  83 },
321
    {  15,   6 }, {   6,  19 }, {   7,  16 }, {  12,  14 },
322
    {  18,  13 }, {  13,  11 }, {  13,  15 }, {  15,  16 },
323
    {  12,  23 }, {  13,  23 }, {  15,  20 }, {  14,  26 },
324
    {  14,  44 }, {  17,  40 }, {  17,  47 }, {  24,  17 },
325
    {  21,  21 }, {  25,  22 }, {  31,  27 }, {  22,  29 },
326
    {  19,  35 }, {  14,  50 }, {  10,  57 }, {   7,  63 },
327
    {  -2,  77 }, {  -4,  82 }, {  -3,  94 }, {   9,  69 },
328
    { -12, 109 }, {  36, -35 }, {  36, -34 }, {  32, -26 },
329
    {  37, -30 }, {  44, -32 }, {  34, -18 }, {  34, -15 },
330
    {  40, -15 }, {  33,  -7 }, {  35,  -5 }, {  33,   0 },
331
    {  38,   2 }, {  33,  13 }, {  23,  35 }, {  13,  58 },
332
    {  15,   6 }, {   6,  19 }, {   7,  16 }, {  12,  14 },
333
    {  18,  13 }, {  13,  11 }, {  13,  15 }, {  15,  16 },
334
    {  12,  23 }, {  13,  23 }, {  15,  20 }, {  14,  26 },
335
    {  14,  44 }, {  17,  40 }, {  17,  47 }, {  24,  17 },
336
    {  21,  21 }, {  25,  22 }, {  31,  27 }, {  22,  29 },
337
    {  19,  35 }, {  14,  50 }, {  10,  57 }, {   7,  63 },
338
    {  -2,  77 }, {  -4,  82 }, {  -3,  94 }, {   9,  69 },
339
    { -12, 109 }, {  36, -35 }, {  36, -34 }, {  32, -26 },
340
    {  37, -30 }, {  44, -32 }, {  34, -18 }, {  34, -15 },
341
    {  40, -15 }, {  33,  -7 }, {  35,  -5 }, {  33,   0 },
342
    {  38,   2 }, {  33,  13 }, {  23,  35 }, {  13,  58 },
343
    {  -3,  71 }, {  -6,  42 }, {  -5,  50 }, {  -3,  54 },
344
    {  -2,  62 }, {   0,  58 }, {   1,  63 }, {  -2,  72 },
345
    {  -1,  74 }, {  -9,  91 }, {  -5,  67 }, {  -5,  27 },
346
    {  -3,  39 }, {  -2,  44 }, {   0,  46 }, { -16,  64 },
347
    {  -8,  68 }, { -10,  78 }, {  -6,  77 }, { -10,  86 },
348
    { -12,  92 }, { -15,  55 }, { -10,  60 }, {  -6,  62 },
349
    {  -4,  65 }, { -12,  73 }, {  -8,  76 }, {  -7,  80 },
350
    {  -9,  88 }, { -17, 110 }, {  -3,  71 }, {  -6,  42 },
351
    {  -5,  50 }, {  -3,  54 }, {  -2,  62 }, {   0,  58 },
352
    {   1,  63 }, {  -2,  72 }, {  -1,  74 }, {  -9,  91 },
353
    {  -5,  67 }, {  -5,  27 }, {  -3,  39 }, {  -2,  44 },
354
    {   0,  46 }, { -16,  64 }, {  -8,  68 }, { -10,  78 },
355
    {  -6,  77 }, { -10,  86 }, { -12,  92 }, { -15,  55 },
356
    { -10,  60 }, {  -6,  62 }, {  -4,  65 }, { -12,  73 },
357
    {  -8,  76 }, {  -7,  80 }, {  -9,  88 }, { -17, 110 },
358
    {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 },
359
    {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 },
360
    {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 }
361
};
362
363
static const int8_t cabac_context_init_PB[3][1024][2] =
364
{
365
    /* i_cabac_init_idc == 0 */
366
    {
367
        /* 0 - 10 */
368
        {  20, -15 }, {   2,  54 }, {   3,  74 }, {  20, -15 },
369
        {   2,  54 }, {   3,  74 }, { -28, 127 }, { -23, 104 },
370
        {  -6,  53 }, {  -1,  54 }, {   7,  51 },
371
372
        /* 11 - 23 */
373
        {  23,  33 }, {  23,   2 }, {  21,   0 }, {   1,   9 },
374
        {   0,  49 }, { -37, 118 }, {   5,  57 }, { -13,  78 },
375
        { -11,  65 }, {   1,  62 }, {  12,  49 }, {  -4,  73 },
376
        {  17,  50 },
377
378
        /* 24 - 39 */
379
        {  18,  64 }, {   9,  43 }, {  29,   0 }, {  26,  67 },
380
        {  16,  90 }, {   9, 104 }, { -46, 127 }, { -20, 104 },
381
        {   1,  67 }, { -13,  78 }, { -11,  65 }, {   1,  62 },
382
        {  -6,  86 }, { -17,  95 }, {  -6,  61 }, {   9,  45 },
383
384
        /* 40 - 53 */
385
        {  -3,  69 }, {  -6,  81 }, { -11,  96 }, {   6,  55 },
386
        {   7,  67 }, {  -5,  86 }, {   2,  88 }, {   0,  58 },
387
        {  -3,  76 }, { -10,  94 }, {   5,  54 }, {   4,  69 },
388
        {  -3,  81 }, {   0,  88 },
389
390
        /* 54 - 59 */
391
        {  -7,  67 }, {  -5,  74 }, {  -4,  74 }, {  -5,  80 },
392
        {  -7,  72 }, {   1,  58 },
393
394
        /* 60 - 69 */
395
        {   0,  41 }, {   0,  63 }, {   0,  63 }, { 0, 63 },
396
        {  -9,  83 }, {   4,  86 }, {   0,  97 }, { -7, 72 },
397
        {  13,  41 }, {   3,  62 },
398
399
        /* 70 - 87 */
400
        {   0,  45 }, {  -4,  78 }, {  -3,  96 }, { -27,  126 },
401
        { -28,  98 }, { -25, 101 }, { -23,  67 }, { -28,  82 },
402
        { -20,  94 }, { -16,  83 }, { -22, 110 }, { -21,  91 },
403
        { -18, 102 }, { -13,  93 }, { -29, 127 }, {  -7,  92 },
404
        {  -5,  89 }, {  -7,  96 }, { -13, 108 }, {  -3,  46 },
405
        {  -1,  65 }, {  -1,  57 }, {  -9,  93 }, {  -3,  74 },
406
        {  -9,  92 }, {  -8,  87 }, { -23, 126 }, {   5,  54 },
407
        {   6,  60 }, {   6,  59 }, {   6,  69 }, {  -1,  48 },
408
        {   0,  68 }, {  -4,  69 }, {  -8,  88 },
409
410
        /* 105 -> 165 */
411
        {  -2,  85 }, {  -6,  78 }, {  -1,  75 }, {  -7,  77 },
412
        {   2,  54 }, {   5,  50 }, {  -3,  68 }, {   1,  50 },
413
        {   6,  42 }, {  -4,  81 }, {   1,  63 }, {  -4,  70 },
414
        {   0,  67 }, {   2,  57 }, {  -2,  76 }, {  11,  35 },
415
        {   4,  64 }, {   1,  61 }, {  11,  35 }, {  18,  25 },
416
        {  12,  24 }, {  13,  29 }, {  13,  36 }, { -10,  93 },
417
        {  -7,  73 }, {  -2,  73 }, {  13,  46 }, {   9,  49 },
418
        {  -7, 100 }, {   9,  53 }, {   2,  53 }, {   5,  53 },
419
        {  -2,  61 }, {   0,  56 }, {   0,  56 }, { -13,  63 },
420
        {  -5,  60 }, {  -1,  62 }, {   4,  57 }, {  -6,  69 },
421
        {   4,  57 }, {  14,  39 }, {   4,  51 }, {  13,  68 },
422
        {   3,  64 }, {   1,  61 }, {   9,  63 }, {   7,  50 },
423
        {  16,  39 }, {   5,  44 }, {   4,  52 }, {  11,  48 },
424
        {  -5,  60 }, {  -1,  59 }, {   0,  59 }, {  22,  33 },
425
        {   5,  44 }, {  14,  43 }, {  -1,  78 }, {   0,  60 },
426
        {   9,  69 },
427
428
        /* 166 - 226 */
429
        {  11,  28 }, {   2,  40 }, {   3,  44 }, {   0,  49 },
430
        {   0,  46 }, {   2,  44 }, {   2,  51 }, {   0,  47 },
431
        {   4,  39 }, {   2,  62 }, {   6,  46 }, {   0,  54 },
432
        {   3,  54 }, {   2,  58 }, {   4,  63 }, {   6,  51 },
433
        {   6,  57 }, {   7,  53 }, {   6,  52 }, {   6,  55 },
434
        {  11,  45 }, {  14,  36 }, {   8,  53 }, {  -1,  82 },
435
        {   7,  55 }, {  -3,  78 }, {  15,  46 }, {  22,  31 },
436
        {  -1,  84 }, {  25,   7 }, {  30,  -7 }, {  28,   3 },
437
        {  28,   4 }, {  32,   0 }, {  34,  -1 }, {  30,   6 },
438
        {  30,   6 }, {  32,   9 }, {  31,  19 }, {  26,  27 },
439
        {  26,  30 }, {  37,  20 }, {  28,  34 }, {  17,  70 },
440
        {   1,  67 }, {   5,  59 }, {   9,  67 }, {  16,  30 },
441
        {  18,  32 }, {  18,  35 }, {  22,  29 }, {  24,  31 },
442
        {  23,  38 }, {  18,  43 }, {  20,  41 }, {  11,  63 },
443
        {   9,  59 }, {   9,  64 }, {  -1,  94 }, {  -2,  89 },
444
        {  -9, 108 },
445
446
        /* 227 - 275 */
447
        {  -6,  76 }, {  -2,  44 }, {   0,  45 }, {   0,  52 },
448
        {  -3,  64 }, {  -2,  59 }, {  -4,  70 }, {  -4,  75 },
449
        {  -8,  82 }, { -17, 102 }, {  -9,  77 }, {   3,  24 },
450
        {   0,  42 }, {   0,  48 }, {   0,  55 }, {  -6,  59 },
451
        {  -7,  71 }, { -12,  83 }, { -11,  87 }, { -30, 119 },
452
        {   1,  58 }, {  -3,  29 }, {  -1,  36 }, {   1,  38 },
453
        {   2,  43 }, {  -6,  55 }, {   0,  58 }, {   0,  64 },
454
        {  -3,  74 }, { -10,  90 }, {   0,  70 }, {  -4,  29 },
455
        {   5,  31 }, {   7,  42 }, {   1,  59 }, {  -2,  58 },
456
        {  -3,  72 }, {  -3,  81 }, { -11,  97 }, {   0,  58 },
457
        {   8,   5 }, {  10,  14 }, {  14,  18 }, {  13,  27 },
458
        {   2,  40 }, {   0,  58 }, {  -3,  70 }, {  -6,  79 },
459
        {  -8,  85 },
460
461
        /* 276 a bit special (not used, bypass is used instead) */
462
        { 0, 0 },
463
464
        /* 277 - 337 */
465
        { -13, 106 }, { -16, 106 }, { -10,  87 }, { -21, 114 },
466
        { -18, 110 }, { -14,  98 }, { -22, 110 }, { -21, 106 },
467
        { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
468
        { -10,  96 }, { -12,  95 }, {  -5,  91 }, {  -9,  93 },
469
        { -22,  94 }, {  -5,  86 }, {   9,  67 }, {  -4,  80 },
470
        { -10,  85 }, {  -1,  70 }, {   7,  60 }, {   9,  58 },
471
        {   5,  61 }, {  12,  50 }, {  15,  50 }, {  18,  49 },
472
        {  17,  54 }, {  10,  41 }, {   7,  46 }, {  -1,  51 },
473
        {   7,  49 }, {   8,  52 }, {   9,  41 }, {   6,  47 },
474
        {   2,  55 }, {  13,  41 }, {  10,  44 }, {   6,  50 },
475
        {   5,  53 }, {  13,  49 }, {   4,  63 }, {   6,  64 },
476
        {  -2,  69 }, {  -2,  59 }, {   6,  70 }, {  10,  44 },
477
        {   9,  31 }, {  12,  43 }, {   3,  53 }, {  14,  34 },
478
        {  10,  38 }, {  -3,  52 }, {  13,  40 }, {  17,  32 },
479
        {   7,  44 }, {   7,  38 }, {  13,  50 }, {  10,  57 },
480
        {  26,  43 },
481
482
        /* 338 - 398 */
483
        {  14,  11 }, {  11,  14 }, {   9,  11 }, {  18,  11 },
484
        {  21,   9 }, {  23,  -2 }, {  32, -15 }, {  32, -15 },
485
        {  34, -21 }, {  39, -23 }, {  42, -33 }, {  41, -31 },
486
        {  46, -28 }, {  38, -12 }, {  21,  29 }, {  45, -24 },
487
        {  53, -45 }, {  48, -26 }, {  65, -43 }, {  43, -19 },
488
        {  39, -10 }, {  30,   9 }, {  18,  26 }, {  20,  27 },
489
        {   0,  57 }, { -14,  82 }, {  -5,  75 }, { -19,  97 },
490
        { -35, 125 }, {  27,   0 }, {  28,   0 }, {  31,  -4 },
491
        {  27,   6 }, {  34,   8 }, {  30,  10 }, {  24,  22 },
492
        {  33,  19 }, {  22,  32 }, {  26,  31 }, {  21,  41 },
493
        {  26,  44 }, {  23,  47 }, {  16,  65 }, {  14,  71 },
494
        {   8,  60 }, {   6,  63 }, {  17,  65 }, {  21,  24 },
495
        {  23,  20 }, {  26,  23 }, {  27,  32 }, {  28,  23 },
496
        {  28,  24 }, {  23,  40 }, {  24,  32 }, {  28,  29 },
497
        {  23,  42 }, {  19,  57 }, {  22,  53 }, {  22,  61 },
498
        {  11,  86 },
499
500
        /* 399 - 435 */
501
        {  12,  40 }, {  11,  51 }, {  14,  59 },
502
        {  -4,  79 }, {  -7,  71 }, {  -5,  69 }, {  -9,  70 },
503
        {  -8,  66 }, { -10,  68 }, { -19,  73 }, { -12,  69 },
504
        { -16,  70 }, { -15,  67 }, { -20,  62 }, { -19,  70 },
505
        { -16,  66 }, { -22,  65 }, { -20,  63 }, {   9,  -2 },
506
        {  26,  -9 }, {  33,  -9 }, {  39,  -7 }, {  41,  -2 },
507
        {  45,   3 }, {  49,   9 }, {  45,  27 }, {  36,  59 },
508
        {  -6,  66 }, {  -7,  35 }, {  -7,  42 }, {  -8,  45 },
509
        {  -5,  48 }, { -12,  56 }, {  -6,  60 }, {  -5,  62 },
510
        {  -8,  66 }, {  -8,  76 },
511
512
        /* 436 - 459 */
513
        {  -5,  85 }, {  -6,  81 }, { -10,  77 }, {  -7,  81 },
514
        { -17,  80 }, { -18,  73 }, {  -4,  74 }, { -10,  83 },
515
        {  -9,  71 }, {  -9,  67 }, {  -1,  61 }, {  -8,  66 },
516
        { -14,  66 }, {   0,  59 }, {   2,  59 }, {  21, -13 },
517
        {  33, -14 }, {  39,  -7 }, {  46,  -2 }, {  51,   2 },
518
        {  60,   6 }, {  61,  17 }, {  55,  34 }, {  42,  62 },
519
520
        /* 460 - 1024 */
521
        {  -7,  92 }, {  -5,  89 }, {  -7,  96 }, { -13, 108 },
522
        {  -3,  46 }, {  -1,  65 }, {  -1,  57 }, {  -9,  93 },
523
        {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 },
524
        {  -7,  92 }, {  -5,  89 }, {  -7,  96 }, { -13, 108 },
525
        {  -3,  46 }, {  -1,  65 }, {  -1,  57 }, {  -9,  93 },
526
        {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 },
527
        {  -2,  85 }, {  -6,  78 }, {  -1,  75 }, {  -7,  77 },
528
        {   2,  54 }, {   5,  50 }, {  -3,  68 }, {   1,  50 },
529
        {   6,  42 }, {  -4,  81 }, {   1,  63 }, {  -4,  70 },
530
        {   0,  67 }, {   2,  57 }, {  -2,  76 }, {  11,  35 },
531
        {   4,  64 }, {   1,  61 }, {  11,  35 }, {  18,  25 },
532
        {  12,  24 }, {  13,  29 }, {  13,  36 }, { -10,  93 },
533
        {  -7,  73 }, {  -2,  73 }, {  13,  46 }, {   9,  49 },
534
        {  -7, 100 }, {   9,  53 }, {   2,  53 }, {   5,  53 },
535
        {  -2,  61 }, {   0,  56 }, {   0,  56 }, { -13,  63 },
536
        {  -5,  60 }, {  -1,  62 }, {   4,  57 }, {  -6,  69 },
537
        {   4,  57 }, {  14,  39 }, {   4,  51 }, {  13,  68 },
538
        {  -2,  85 }, {  -6,  78 }, {  -1,  75 }, {  -7,  77 },
539
        {   2,  54 }, {   5,  50 }, {  -3,  68 }, {   1,  50 },
540
        {   6,  42 }, {  -4,  81 }, {   1,  63 }, {  -4,  70 },
541
        {   0,  67 }, {   2,  57 }, {  -2,  76 }, {  11,  35 },
542
        {   4,  64 }, {   1,  61 }, {  11,  35 }, {  18,  25 },
543
        {  12,  24 }, {  13,  29 }, {  13,  36 }, { -10,  93 },
544
        {  -7,  73 }, {  -2,  73 }, {  13,  46 }, {   9,  49 },
545
        {  -7, 100 }, {   9,  53 }, {   2,  53 }, {   5,  53 },
546
        {  -2,  61 }, {   0,  56 }, {   0,  56 }, { -13,  63 },
547
        {  -5,  60 }, {  -1,  62 }, {   4,  57 }, {  -6,  69 },
548
        {   4,  57 }, {  14,  39 }, {   4,  51 }, {  13,  68 },
549
        {  11,  28 }, {   2,  40 }, {   3,  44 }, {   0,  49 },
550
        {   0,  46 }, {   2,  44 }, {   2,  51 }, {   0,  47 },
551
        {   4,  39 }, {   2,  62 }, {   6,  46 }, {   0,  54 },
552
        {   3,  54 }, {   2,  58 }, {   4,  63 }, {   6,  51 },
553
        {   6,  57 }, {   7,  53 }, {   6,  52 }, {   6,  55 },
554
        {  11,  45 }, {  14,  36 }, {   8,  53 }, {  -1,  82 },
555
        {   7,  55 }, {  -3,  78 }, {  15,  46 }, {  22,  31 },
556
        {  -1,  84 }, {  25,   7 }, {  30,  -7 }, {  28,   3 },
557
        {  28,   4 }, {  32,   0 }, {  34,  -1 }, {  30,   6 },
558
        {  30,   6 }, {  32,   9 }, {  31,  19 }, {  26,  27 },
559
        {  26,  30 }, {  37,  20 }, {  28,  34 }, {  17,  70 },
560
        {  11,  28 }, {   2,  40 }, {   3,  44 }, {   0,  49 },
561
        {   0,  46 }, {   2,  44 }, {   2,  51 }, {   0,  47 },
562
        {   4,  39 }, {   2,  62 }, {   6,  46 }, {   0,  54 },
563
        {   3,  54 }, {   2,  58 }, {   4,  63 }, {   6,  51 },
564
        {   6,  57 }, {   7,  53 }, {   6,  52 }, {   6,  55 },
565
        {  11,  45 }, {  14,  36 }, {   8,  53 }, {  -1,  82 },
566
        {   7,  55 }, {  -3,  78 }, {  15,  46 }, {  22,  31 },
567
        {  -1,  84 }, {  25,   7 }, {  30,  -7 }, {  28,   3 },
568
        {  28,   4 }, {  32,   0 }, {  34,  -1 }, {  30,   6 },
569
        {  30,   6 }, {  32,   9 }, {  31,  19 }, {  26,  27 },
570
        {  26,  30 }, {  37,  20 }, {  28,  34 }, {  17,  70 },
571
        {  -4,  79 }, {  -7,  71 }, {  -5,  69 }, {  -9,  70 },
572
        {  -8,  66 }, { -10,  68 }, { -19,  73 }, { -12,  69 },
573
        { -16,  70 }, { -15,  67 }, { -20,  62 }, { -19,  70 },
574
        { -16,  66 }, { -22,  65 }, { -20,  63 }, {  -5,  85 },
575
        {  -6,  81 }, { -10,  77 }, {  -7,  81 }, { -17,  80 },
576
        { -18,  73 }, {  -4,  74 }, { -10,  83 }, {  -9,  71 },
577
        {  -9,  67 }, {  -1,  61 }, {  -8,  66 }, { -14,  66 },
578
        {   0,  59 }, {   2,  59 }, {   9,  -2 }, {  26,  -9 },
579
        {  33,  -9 }, {  39,  -7 }, {  41,  -2 }, {  45,   3 },
580
        {  49,   9 }, {  45,  27 }, {  36,  59 }, {  21, -13 },
581
        {  33, -14 }, {  39,  -7 }, {  46,  -2 }, {  51,   2 },
582
        {  60,   6 }, {  61,  17 }, {  55,  34 }, {  42,  62 },
583
        {  -6,  66 }, {  -7,  35 }, {  -7,  42 }, {  -8,  45 },
584
        {  -5,  48 }, { -12,  56 }, {  -6,  60 }, {  -5,  62 },
585
        {  -8,  66 }, {  -8,  76 }, {  -4,  79 }, {  -7,  71 },
586
        {  -5,  69 }, {  -9,  70 }, {  -8,  66 }, { -10,  68 },
587
        { -19,  73 }, { -12,  69 }, { -16,  70 }, { -15,  67 },
588
        { -20,  62 }, { -19,  70 }, { -16,  66 }, { -22,  65 },
589
        { -20,  63 }, {  -5,  85 }, {  -6,  81 }, { -10,  77 },
590
        {  -7,  81 }, { -17,  80 }, { -18,  73 }, {  -4,  74 },
591
        { -10,  83 }, {  -9,  71 }, {  -9,  67 }, {  -1,  61 },
592
        {  -8,  66 }, { -14,  66 }, {   0,  59 }, {   2,  59 },
593
        {   9,  -2 }, {  26,  -9 }, {  33,  -9 }, {  39,  -7 },
594
        {  41,  -2 }, {  45,   3 }, {  49,   9 }, {  45,  27 },
595
        {  36,  59 }, {  21, -13 }, {  33, -14 }, {  39,  -7 },
596
        {  46,  -2 }, {  51,   2 }, {  60,   6 }, {  61,  17 },
597
        {  55,  34 }, {  42,  62 }, {  -6,  66 }, {  -7,  35 },
598
        {  -7,  42 }, {  -8,  45 }, {  -5,  48 }, { -12,  56 },
599
        {  -6,  60 }, {  -5,  62 }, {  -8,  66 }, {  -8,  76 },
600
        { -13, 106 }, { -16, 106 }, { -10,  87 }, { -21, 114 },
601
        { -18, 110 }, { -14,  98 }, { -22, 110 }, { -21, 106 },
602
        { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
603
        { -10,  96 }, { -12,  95 }, {  -5,  91 }, {  -9,  93 },
604
        { -22,  94 }, {  -5,  86 }, {   9,  67 }, {  -4,  80 },
605
        { -10,  85 }, {  -1,  70 }, {   7,  60 }, {   9,  58 },
606
        {   5,  61 }, {  12,  50 }, {  15,  50 }, {  18,  49 },
607
        {  17,  54 }, {  10,  41 }, {   7,  46 }, {  -1,  51 },
608
        {   7,  49 }, {   8,  52 }, {   9,  41 }, {   6,  47 },
609
        {   2,  55 }, {  13,  41 }, {  10,  44 }, {   6,  50 },
610
        {   5,  53 }, {  13,  49 }, {   4,  63 }, {   6,  64 },
611
        { -13, 106 }, { -16, 106 }, { -10,  87 }, { -21, 114 },
612
        { -18, 110 }, { -14,  98 }, { -22, 110 }, { -21, 106 },
613
        { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
614
        { -10,  96 }, { -12,  95 }, {  -5,  91 }, {  -9,  93 },
615
        { -22,  94 }, {  -5,  86 }, {   9,  67 }, {  -4,  80 },
616
        { -10,  85 }, {  -1,  70 }, {   7,  60 }, {   9,  58 },
617
        {   5,  61 }, {  12,  50 }, {  15,  50 }, {  18,  49 },
618
        {  17,  54 }, {  10,  41 }, {   7,  46 }, {  -1,  51 },
619
        {   7,  49 }, {   8,  52 }, {   9,  41 }, {   6,  47 },
620
        {   2,  55 }, {  13,  41 }, {  10,  44 }, {   6,  50 },
621
        {   5,  53 }, {  13,  49 }, {   4,  63 }, {   6,  64 },
622
        {  14,  11 }, {  11,  14 }, {   9,  11 }, {  18,  11 },
623
        {  21,   9 }, {  23,  -2 }, {  32, -15 }, {  32, -15 },
624
        {  34, -21 }, {  39, -23 }, {  42, -33 }, {  41, -31 },
625
        {  46, -28 }, {  38, -12 }, {  21,  29 }, {  45, -24 },
626
        {  53, -45 }, {  48, -26 }, {  65, -43 }, {  43, -19 },
627
        {  39, -10 }, {  30,   9 }, {  18,  26 }, {  20,  27 },
628
        {   0,  57 }, { -14,  82 }, {  -5,  75 }, { -19,  97 },
629
        { -35, 125 }, {  27,   0 }, {  28,   0 }, {  31,  -4 },
630
        {  27,   6 }, {  34,   8 }, {  30,  10 }, {  24,  22 },
631
        {  33,  19 }, {  22,  32 }, {  26,  31 }, {  21,  41 },
632
        {  26,  44 }, {  23,  47 }, {  16,  65 }, {  14,  71 },
633
        {  14,  11 }, {  11,  14 }, {   9,  11 }, {  18,  11 },
634
        {  21,   9 }, {  23,  -2 }, {  32, -15 }, {  32, -15 },
635
        {  34, -21 }, {  39, -23 }, {  42, -33 }, {  41, -31 },
636
        {  46, -28 }, {  38, -12 }, {  21,  29 }, {  45, -24 },
637
        {  53, -45 }, {  48, -26 }, {  65, -43 }, {  43, -19 },
638
        {  39, -10 }, {  30,   9 }, {  18,  26 }, {  20,  27 },
639
        {   0,  57 }, { -14,  82 }, {  -5,  75 }, { -19,  97 },
640
        { -35, 125 }, {  27,   0 }, {  28,   0 }, {  31,  -4 },
641
        {  27,   6 }, {  34,   8 }, {  30,  10 }, {  24,  22 },
642
        {  33,  19 }, {  22,  32 }, {  26,  31 }, {  21,  41 },
643
        {  26,  44 }, {  23,  47 }, {  16,  65 }, {  14,  71 },
644
        {  -6,  76 }, {  -2,  44 }, {   0,  45 }, {   0,  52 },
645
        {  -3,  64 }, {  -2,  59 }, {  -4,  70 }, {  -4,  75 },
646
        {  -8,  82 }, { -17, 102 }, {  -9,  77 }, {   3,  24 },
647
        {   0,  42 }, {   0,  48 }, {   0,  55 }, {  -6,  59 },
648
        {  -7,  71 }, { -12,  83 }, { -11,  87 }, { -30, 119 },
649
        {   1,  58 }, {  -3,  29 }, {  -1,  36 }, {   1,  38 },
650
        {   2,  43 }, {  -6,  55 }, {   0,  58 }, {   0,  64 },
651
        {  -3,  74 }, { -10,  90 }, {  -6,  76 }, {  -2,  44 },
652
        {   0,  45 }, {   0,  52 }, {  -3,  64 }, {  -2,  59 },
653
        {  -4,  70 }, {  -4,  75 }, {  -8,  82 }, { -17, 102 },
654
        {  -9,  77 }, {   3,  24 }, {   0,  42 }, {   0,  48 },
655
        {   0,  55 }, {  -6,  59 }, {  -7,  71 }, { -12,  83 },
656
        { -11,  87 }, { -30, 119 }, {   1,  58 }, {  -3,  29 },
657
        {  -1,  36 }, {   1,  38 }, {   2,  43 }, {  -6,  55 },
658
        {   0,  58 }, {   0,  64 }, {  -3,  74 }, { -10,  90 },
659
        {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 },
660
        {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 },
661
        {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 }
662
    },
663
664
    /* i_cabac_init_idc == 1 */
665
    {
666
        /* 0 - 10 */
667
        {  20, -15 }, {   2,  54 }, {   3,  74 }, {  20, -15 },
668
        {   2,  54 }, {   3,  74 }, { -28, 127 }, { -23, 104 },
669
        {  -6,  53 }, {  -1,  54 }, {   7,  51 },
670
671
        /* 11 - 23 */
672
        {  22,  25 }, {  34,   0 }, {  16,   0 }, {  -2,   9 },
673
        {   4,  41 }, { -29, 118 }, {   2,  65 }, {  -6,  71 },
674
        { -13,  79 }, {   5,  52 }, {   9,  50 }, {  -3,  70 },
675
        {  10,  54 },
676
677
        /* 24 - 39 */
678
        {  26,  34 }, {  19,  22 }, {  40,   0 }, {  57,   2 },
679
        {  41,  36 }, {  26,  69 }, { -45, 127 }, { -15, 101 },
680
        {  -4,  76 }, {  -6,  71 }, { -13,  79 }, {   5,  52 },
681
        {   6,  69 }, { -13,  90 }, {   0,  52 }, {   8,  43 },
682
683
        /* 40 - 53 */
684
        {  -2,  69 },{  -5,  82 },{ -10,  96 },{   2,  59 },
685
        {   2,  75 },{  -3,  87 },{  -3,  100 },{   1,  56 },
686
        {  -3,  74 },{  -6,  85 },{   0,  59 },{  -3,  81 },
687
        {  -7,  86 },{  -5,  95 },
688
689
        /* 54 - 59 */
690
        {  -1,  66 },{  -1,  77 },{   1,  70 },{  -2,  86 },
691
        {  -5,  72 },{   0,  61 },
692
693
        /* 60 - 69 */
694
        { 0, 41 },   { 0, 63 },   { 0, 63 },     { 0, 63 },
695
        { -9, 83 },  { 4, 86 },   { 0, 97 },     { -7, 72 },
696
        { 13, 41 },  { 3, 62 },
697
698
        /* 70 - 104 */
699
        {  13,  15 }, {   7,  51 }, {   2,  80 }, { -39, 127 },
700
        { -18,  91 }, { -17,  96 }, { -26,  81 }, { -35,  98 },
701
        { -24, 102 }, { -23,  97 }, { -27, 119 }, { -24,  99 },
702
        { -21, 110 }, { -18, 102 }, { -36, 127 }, {   0,  80 },
703
        {  -5,  89 }, {  -7,  94 }, {  -4,  92 }, {   0,  39 },
704
        {   0,  65 }, { -15,  84 }, { -35, 127 }, {  -2,  73 },
705
        { -12, 104 }, {  -9,  91 }, { -31, 127 }, {   3,  55 },
706
        {   7,  56 }, {   7,  55 }, {   8,  61 }, {  -3,  53 },
707
        {   0,  68 }, {  -7,  74 }, {  -9,  88 },
708
709
        /* 105 -> 165 */
710
        { -13, 103 }, { -13,  91 }, {  -9,  89 }, { -14,  92 },
711
        {  -8,  76 }, { -12,  87 }, { -23, 110 }, { -24, 105 },
712
        { -10,  78 }, { -20, 112 }, { -17,  99 }, { -78, 127 },
713
        { -70, 127 }, { -50, 127 }, { -46, 127 }, {  -4,  66 },
714
        {  -5,  78 }, {  -4,  71 }, {  -8,  72 }, {   2,  59 },
715
        {  -1,  55 }, {  -7,  70 }, {  -6,  75 }, {  -8,  89 },
716
        { -34, 119 }, {  -3,  75 }, {  32,  20 }, {  30,  22 },
717
        { -44, 127 }, {   0,  54 }, {  -5,  61 }, {   0,  58 },
718
        {  -1,  60 }, {  -3,  61 }, {  -8,  67 }, { -25,  84 },
719
        { -14,  74 }, {  -5,  65 }, {   5,  52 }, {   2,  57 },
720
        {   0,  61 }, {  -9,  69 }, { -11,  70 }, {  18,  55 },
721
        {  -4,  71 }, {   0,  58 }, {   7,  61 }, {   9,  41 },
722
        {  18,  25 }, {   9,  32 }, {   5,  43 }, {   9,  47 },
723
        {   0,  44 }, {   0,  51 }, {   2,  46 }, {  19,  38 },
724
        {  -4,  66 }, {  15,  38 }, {  12,  42 }, {   9,  34 },
725
        {   0,  89 },
726
727
        /* 166 - 226 */
728
        {   4,  45 }, {  10,  28 }, {  10,  31 }, {  33, -11 },
729
        {  52, -43 }, {  18,  15 }, {  28,   0 }, {  35, -22 },
730
        {  38, -25 }, {  34,   0 }, {  39, -18 }, {  32, -12 },
731
        { 102, -94 }, {   0,   0 }, {  56, -15 }, {  33,  -4 },
732
        {  29,  10 }, {  37,  -5 }, {  51, -29 }, {  39,  -9 },
733
        {  52, -34 }, {  69, -58 }, {  67, -63 }, {  44,  -5 },
734
        {  32,   7 }, {  55, -29 }, {  32,   1 }, {   0,   0 },
735
        {  27,  36 }, {  33, -25 }, {  34, -30 }, {  36, -28 },
736
        {  38, -28 }, {  38, -27 }, {  34, -18 }, {  35, -16 },
737
        {  34, -14 }, {  32,  -8 }, {  37,  -6 }, {  35,   0 },
738
        {  30,  10 }, {  28,  18 }, {  26,  25 }, {  29,  41 },
739
        {   0,  75 }, {   2,  72 }, {   8,  77 }, {  14,  35 },
740
        {  18,  31 }, {  17,  35 }, {  21,  30 }, {  17,  45 },
741
        {  20,  42 }, {  18,  45 }, {  27,  26 }, {  16,  54 },
742
        {   7,  66 }, {  16,  56 }, {  11,  73 }, {  10,  67 },
743
        { -10, 116 },
744
745
        /* 227 - 275 */
746
        { -23, 112 }, { -15,  71 }, {  -7,  61 }, {   0,  53 },
747
        {  -5,  66 }, { -11,  77 }, {  -9,  80 }, {  -9,  84 },
748
        { -10,  87 }, { -34, 127 }, { -21, 101 }, {  -3,  39 },
749
        {  -5,  53 }, {  -7,  61 }, { -11,  75 }, { -15,  77 },
750
        { -17,  91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
751
        { -11,  76 }, { -10,  44 }, { -10,  52 }, { -10,  57 },
752
        {  -9,  58 }, { -16,  72 }, {  -7,  69 }, {  -4,  69 },
753
        {  -5,  74 }, {  -9,  86 }, {   2,  66 }, {  -9,  34 },
754
        {   1,  32 }, {  11,  31 }, {   5,  52 }, {  -2,  55 },
755
        {  -2,  67 }, {   0,  73 }, {  -8,  89 }, {   3,  52 },
756
        {   7,   4 }, {  10,   8 }, {  17,   8 }, {  16,  19 },
757
        {   3,  37 }, {  -1,  61 }, {  -5,  73 }, {  -1,  70 },
758
        {  -4,  78 },
759
760
        /* 276 a bit special (not used, bypass is used instead) */
761
        { 0, 0 },
762
763
        /* 277 - 337 */
764
        { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
765
        { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
766
        { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
767
        { -10,  95 }, { -14, 100 }, {  -8,  95 }, { -17, 111 },
768
        { -28, 114 }, {  -6,  89 }, {  -2,  80 }, {  -4,  82 },
769
        {  -9,  85 }, {  -8,  81 }, {  -1,  72 }, {   5,  64 },
770
        {   1,  67 }, {   9,  56 }, {   0,  69 }, {   1,  69 },
771
        {   7,  69 }, {  -7,  69 }, {  -6,  67 }, { -16,  77 },
772
        {  -2,  64 }, {   2,  61 }, {  -6,  67 }, {  -3,  64 },
773
        {   2,  57 }, {  -3,  65 }, {  -3,  66 }, {   0,  62 },
774
        {   9,  51 }, {  -1,  66 }, {  -2,  71 }, {  -2,  75 },
775
        {  -1,  70 }, {  -9,  72 }, {  14,  60 }, {  16,  37 },
776
        {   0,  47 }, {  18,  35 }, {  11,  37 }, {  12,  41 },
777
        {  10,  41 }, {   2,  48 }, {  12,  41 }, {  13,  41 },
778
        {   0,  59 }, {   3,  50 }, {  19,  40 }, {   3,  66 },
779
        {  18,  50 },
780
781
        /* 338 - 398 */
782
        {  19,  -6 }, {  18,  -6 }, {  14,   0 }, {  26, -12 },
783
        {  31, -16 }, {  33, -25 }, {  33, -22 }, {  37, -28 },
784
        {  39, -30 }, {  42, -30 }, {  47, -42 }, {  45, -36 },
785
        {  49, -34 }, {  41, -17 }, {  32,   9 }, {  69, -71 },
786
        {  63, -63 }, {  66, -64 }, {  77, -74 }, {  54, -39 },
787
        {  52, -35 }, {  41, -10 }, {  36,   0 }, {  40,  -1 },
788
        {  30,  14 }, {  28,  26 }, {  23,  37 }, {  12,  55 },
789
        {  11,  65 }, {  37, -33 }, {  39, -36 }, {  40, -37 },
790
        {  38, -30 }, {  46, -33 }, {  42, -30 }, {  40, -24 },
791
        {  49, -29 }, {  38, -12 }, {  40, -10 }, {  38,  -3 },
792
        {  46,  -5 }, {  31,  20 }, {  29,  30 }, {  25,  44 },
793
        {  12,  48 }, {  11,  49 }, {  26,  45 }, {  22,  22 },
794
        {  23,  22 }, {  27,  21 }, {  33,  20 }, {  26,  28 },
795
        {  30,  24 }, {  27,  34 }, {  18,  42 }, {  25,  39 },
796
        {  18,  50 }, {  12,  70 }, {  21,  54 }, {  14,  71 },
797
        {  11,  83 },
798
799
        /* 399 - 435 */
800
        {  25,  32 }, {  21,  49 }, {  21,  54 },
801
        {  -5,  85 }, {  -6,  81 }, { -10,  77 }, {  -7,  81 },
802
        { -17,  80 }, { -18,  73 }, {  -4,  74 }, { -10,  83 },
803
        {  -9,  71 }, {  -9,  67 }, {  -1,  61 }, {  -8,  66 },
804
        { -14,  66 }, {   0,  59 }, {   2,  59 }, {  17, -10 },
805
        {  32, -13 }, {  42,  -9 }, {  49,  -5 }, {  53,   0 },
806
        {  64,   3 }, {  68,  10 }, {  66,  27 }, {  47,  57 },
807
        {  -5,  71 }, {   0,  24 }, {  -1,  36 }, {  -2,  42 },
808
        {  -2,  52 }, {  -9,  57 }, {  -6,  63 }, {  -4,  65 },
809
        {  -4,  67 }, {  -7,  82 },
810
811
        /* 436 - 459 */
812
        {  -3,  81 }, {  -3,  76 }, {  -7,  72 }, {  -6,  78 },
813
        { -12,  72 }, { -14,  68 }, {  -3,  70 }, {  -6,  76 },
814
        {  -5,  66 }, {  -5,  62 }, {   0,  57 }, {  -4,  61 },
815
        {  -9,  60 }, {   1,  54 }, {   2,  58 }, {  17, -10 },
816
        {  32, -13 }, {  42,  -9 }, {  49,  -5 }, {  53,   0 },
817
        {  64,   3 }, {  68,  10 }, {  66,  27 }, {  47,  57 },
818
819
        /* 460 - 1024 */
820
        {   0,  80 }, {  -5,  89 }, {  -7,  94 }, {  -4,  92 },
821
        {   0,  39 }, {   0,  65 }, { -15,  84 }, { -35, 127 },
822
        {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 },
823
        {   0,  80 }, {  -5,  89 }, {  -7,  94 }, {  -4,  92 },
824
        {   0,  39 }, {   0,  65 }, { -15,  84 }, { -35, 127 },
825
        {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 },
826
        { -13, 103 }, { -13,  91 }, {  -9,  89 }, { -14,  92 },
827
        {  -8,  76 }, { -12,  87 }, { -23, 110 }, { -24, 105 },
828
        { -10,  78 }, { -20, 112 }, { -17,  99 }, { -78, 127 },
829
        { -70, 127 }, { -50, 127 }, { -46, 127 }, {  -4,  66 },
830
        {  -5,  78 }, {  -4,  71 }, {  -8,  72 }, {   2,  59 },
831
        {  -1,  55 }, {  -7,  70 }, {  -6,  75 }, {  -8,  89 },
832
        { -34, 119 }, {  -3,  75 }, {  32,  20 }, {  30,  22 },
833
        { -44, 127 }, {   0,  54 }, {  -5,  61 }, {   0,  58 },
834
        {  -1,  60 }, {  -3,  61 }, {  -8,  67 }, { -25,  84 },
835
        { -14,  74 }, {  -5,  65 }, {   5,  52 }, {   2,  57 },
836
        {   0,  61 }, {  -9,  69 }, { -11,  70 }, {  18,  55 },
837
        { -13, 103 }, { -13,  91 }, {  -9,  89 }, { -14,  92 },
838
        {  -8,  76 }, { -12,  87 }, { -23, 110 }, { -24, 105 },
839
        { -10,  78 }, { -20, 112 }, { -17,  99 }, { -78, 127 },
840
        { -70, 127 }, { -50, 127 }, { -46, 127 }, {  -4,  66 },
841
        {  -5,  78 }, {  -4,  71 }, {  -8,  72 }, {   2,  59 },
842
        {  -1,  55 }, {  -7,  70 }, {  -6,  75 }, {  -8,  89 },
843
        { -34, 119 }, {  -3,  75 }, {  32,  20 }, {  30,  22 },
844
        { -44, 127 }, {   0,  54 }, {  -5,  61 }, {   0,  58 },
845
        {  -1,  60 }, {  -3,  61 }, {  -8,  67 }, { -25,  84 },
846
        { -14,  74 }, {  -5,  65 }, {   5,  52 }, {   2,  57 },
847
        {   0,  61 }, {  -9,  69 }, { -11,  70 }, {  18,  55 },
848
        {   4,  45 }, {  10,  28 }, {  10,  31 }, {  33, -11 },
849
        {  52, -43 }, {  18,  15 }, {  28,   0 }, {  35, -22 },
850
        {  38, -25 }, {  34,   0 }, {  39, -18 }, {  32, -12 },
851
        { 102, -94 }, {   0,   0 }, {  56, -15 }, {  33,  -4 },
852
        {  29,  10 }, {  37,  -5 }, {  51, -29 }, {  39,  -9 },
853
        {  52, -34 }, {  69, -58 }, {  67, -63 }, {  44,  -5 },
854
        {  32,   7 }, {  55, -29 }, {  32,   1 }, {   0,   0 },
855
        {  27,  36 }, {  33, -25 }, {  34, -30 }, {  36, -28 },
856
        {  38, -28 }, {  38, -27 }, {  34, -18 }, {  35, -16 },
857
        {  34, -14 }, {  32,  -8 }, {  37,  -6 }, {  35,   0 },
858
        {  30,  10 }, {  28,  18 }, {  26,  25 }, {  29,  41 },
859
        {   4,  45 }, {  10,  28 }, {  10,  31 }, {  33, -11 },
860
        {  52, -43 }, {  18,  15 }, {  28,   0 }, {  35, -22 },
861
        {  38, -25 }, {  34,   0 }, {  39, -18 }, {  32, -12 },
862
        { 102, -94 }, {   0,   0 }, {  56, -15 }, {  33,  -4 },
863
        {  29,  10 }, {  37,  -5 }, {  51, -29 }, {  39,  -9 },
864
        {  52, -34 }, {  69, -58 }, {  67, -63 }, {  44,  -5 },
865
        {  32,   7 }, {  55, -29 }, {  32,   1 }, {   0,   0 },
866
        {  27,  36 }, {  33, -25 }, {  34, -30 }, {  36, -28 },
867
        {  38, -28 }, {  38, -27 }, {  34, -18 }, {  35, -16 },
868
        {  34, -14 }, {  32,  -8 }, {  37,  -6 }, {  35,   0 },
869
        {  30,  10 }, {  28,  18 }, {  26,  25 }, {  29,  41 },
870
        {  -5,  85 }, {  -6,  81 }, { -10,  77 }, {  -7,  81 },
871
        { -17,  80 }, { -18,  73 }, {  -4,  74 }, { -10,  83 },
872
        {  -9,  71 }, {  -9,  67 }, {  -1,  61 }, {  -8,  66 },
873
        { -14,  66 }, {   0,  59 }, {   2,  59 }, {  -3,  81 },
874
        {  -3,  76 }, {  -7,  72 }, {  -6,  78 }, { -12,  72 },
875
        { -14,  68 }, {  -3,  70 }, {  -6,  76 }, {  -5,  66 },
876
        {  -5,  62 }, {   0,  57 }, {  -4,  61 }, {  -9,  60 },
877
        {   1,  54 }, {   2,  58 }, {  17, -10 }, {  32, -13 },
878
        {  42,  -9 }, {  49,  -5 }, {  53,   0 }, {  64,   3 },
879
        {  68,  10 }, {  66,  27 }, {  47,  57 }, {  17, -10 },
880
        {  32, -13 }, {  42,  -9 }, {  49,  -5 }, {  53,   0 },
881
        {  64,   3 }, {  68,  10 }, {  66,  27 }, {  47,  57 },
882
        {  -5,  71 }, {   0,  24 }, {  -1,  36 }, {  -2,  42 },
883
        {  -2,  52 }, {  -9,  57 }, {  -6,  63 }, {  -4,  65 },
884
        {  -4,  67 }, {  -7,  82 }, {  -5,  85 }, {  -6,  81 },
885
        { -10,  77 }, {  -7,  81 }, { -17,  80 }, { -18,  73 },
886
        {  -4,  74 }, { -10,  83 }, {  -9,  71 }, {  -9,  67 },
887
        {  -1,  61 }, {  -8,  66 }, { -14,  66 }, {   0,  59 },
888
        {   2,  59 }, {  -3,  81 }, {  -3,  76 }, {  -7,  72 },
889
        {  -6,  78 }, { -12,  72 }, { -14,  68 }, {  -3,  70 },
890
        {  -6,  76 }, {  -5,  66 }, {  -5,  62 }, {   0,  57 },
891
        {  -4,  61 }, {  -9,  60 }, {   1,  54 }, {   2,  58 },
892
        {  17, -10 }, {  32, -13 }, {  42,  -9 }, {  49,  -5 },
893
        {  53,   0 }, {  64,   3 }, {  68,  10 }, {  66,  27 },
894
        {  47,  57 }, {  17, -10 }, {  32, -13 }, {  42,  -9 },
895
        {  49,  -5 }, {  53,   0 }, {  64,   3 }, {  68,  10 },
896
        {  66,  27 }, {  47,  57 }, {  -5,  71 }, {   0,  24 },
897
        {  -1,  36 }, {  -2,  42 }, {  -2,  52 }, {  -9,  57 },
898
        {  -6,  63 }, {  -4,  65 }, {  -4,  67 }, {  -7,  82 },
899
        { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
900
        { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
901
        { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
902
        { -10,  95 }, { -14, 100 }, {  -8,  95 }, { -17, 111 },
903
        { -28, 114 }, {  -6,  89 }, {  -2,  80 }, {  -4,  82 },
904
        {  -9,  85 }, {  -8,  81 }, {  -1,  72 }, {   5,  64 },
905
        {   1,  67 }, {   9,  56 }, {   0,  69 }, {   1,  69 },
906
        {   7,  69 }, {  -7,  69 }, {  -6,  67 }, { -16,  77 },
907
        {  -2,  64 }, {   2,  61 }, {  -6,  67 }, {  -3,  64 },
908
        {   2,  57 }, {  -3,  65 }, {  -3,  66 }, {   0,  62 },
909
        {   9,  51 }, {  -1,  66 }, {  -2,  71 }, {  -2,  75 },
910
        { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
911
        { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
912
        { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
913
        { -10,  95 }, { -14, 100 }, {  -8,  95 }, { -17, 111 },
914
        { -28, 114 }, {  -6,  89 }, {  -2,  80 }, {  -4,  82 },
915
        {  -9,  85 }, {  -8,  81 }, {  -1,  72 }, {   5,  64 },
916
        {   1,  67 }, {   9,  56 }, {   0,  69 }, {   1,  69 },
917
        {   7,  69 }, {  -7,  69 }, {  -6,  67 }, { -16,  77 },
918
        {  -2,  64 }, {   2,  61 }, {  -6,  67 }, {  -3,  64 },
919
        {   2,  57 }, {  -3,  65 }, {  -3,  66 }, {   0,  62 },
920
        {   9,  51 }, {  -1,  66 }, {  -2,  71 }, {  -2,  75 },
921
        {  19,  -6 }, {  18,  -6 }, {  14,   0 }, {  26, -12 },
922
        {  31, -16 }, {  33, -25 }, {  33, -22 }, {  37, -28 },
923
        {  39, -30 }, {  42, -30 }, {  47, -42 }, {  45, -36 },
924
        {  49, -34 }, {  41, -17 }, {  32,   9 }, {  69, -71 },
925
        {  63, -63 }, {  66, -64 }, {  77, -74 }, {  54, -39 },
926
        {  52, -35 }, {  41, -10 }, {  36,   0 }, {  40,  -1 },
927
        {  30,  14 }, {  28,  26 }, {  23,  37 }, {  12,  55 },
928
        {  11,  65 }, {  37, -33 }, {  39, -36 }, {  40, -37 },
929
        {  38, -30 }, {  46, -33 }, {  42, -30 }, {  40, -24 },
930
        {  49, -29 }, {  38, -12 }, {  40, -10 }, {  38,  -3 },
931
        {  46,  -5 }, {  31,  20 }, {  29,  30 }, {  25,  44 },
932
        {  19,  -6 }, {  18,  -6 }, {  14,   0 }, {  26, -12 },
933
        {  31, -16 }, {  33, -25 }, {  33, -22 }, {  37, -28 },
934
        {  39, -30 }, {  42, -30 }, {  47, -42 }, {  45, -36 },
935
        {  49, -34 }, {  41, -17 }, {  32,   9 }, {  69, -71 },
936
        {  63, -63 }, {  66, -64 }, {  77, -74 }, {  54, -39 },
937
        {  52, -35 }, {  41, -10 }, {  36,   0 }, {  40,  -1 },
938
        {  30,  14 }, {  28,  26 }, {  23,  37 }, {  12,  55 },
939
        {  11,  65 }, {  37, -33 }, {  39, -36 }, {  40, -37 },
940
        {  38, -30 }, {  46, -33 }, {  42, -30 }, {  40, -24 },
941
        {  49, -29 }, {  38, -12 }, {  40, -10 }, {  38,  -3 },
942
        {  46,  -5 }, {  31,  20 }, {  29,  30 }, {  25,  44 },
943
        { -23, 112 }, { -15,  71 }, {  -7,  61 }, {   0,  53 },
944
        {  -5,  66 }, { -11,  77 }, {  -9,  80 }, {  -9,  84 },
945
        { -10,  87 }, { -34, 127 }, { -21, 101 }, {  -3,  39 },
946
        {  -5,  53 }, {  -7,  61 }, { -11,  75 }, { -15,  77 },
947
        { -17,  91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
948
        { -11,  76 }, { -10,  44 }, { -10,  52 }, { -10,  57 },
949
        {  -9,  58 }, { -16,  72 }, {  -7,  69 }, {  -4,  69 },
950
        {  -5,  74 }, {  -9,  86 }, { -23, 112 }, { -15,  71 },
951
        {  -7,  61 }, {   0,  53 }, {  -5,  66 }, { -11,  77 },
952
        {  -9,  80 }, {  -9,  84 }, { -10,  87 }, { -34, 127 },
953
        { -21, 101 }, {  -3,  39 }, {  -5,  53 }, {  -7,  61 },
954
        { -11,  75 }, { -15,  77 }, { -17,  91 }, { -25, 107 },
955
        { -25, 111 }, { -28, 122 }, { -11,  76 }, { -10,  44 },
956
        { -10,  52 }, { -10,  57 }, {  -9,  58 }, { -16,  72 },
957
        {  -7,  69 }, {  -4,  69 }, {  -5,  74 }, {  -9,  86 },
958
        {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 },
959
        {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 },
960
        {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 }
961
    },
962
963
    /* i_cabac_init_idc == 2 */
964
    {
965
        /* 0 - 10 */
966
        {  20, -15 }, {   2,  54 }, {   3,  74 }, {  20, -15 },
967
        {   2,  54 }, {   3,  74 }, { -28, 127 }, { -23, 104 },
968
        {  -6,  53 }, {  -1,  54 }, {   7,  51 },
969
970
        /* 11 - 23 */
971
        {  29,  16 }, {  25,   0 }, {  14,   0 }, { -10,  51 },
972
        {  -3,  62 }, { -27,  99 }, {  26,  16 }, {  -4,  85 },
973
        { -24, 102 }, {   5,  57 }, {   6,  57 }, { -17,  73 },
974
        {  14,  57 },
975
976
        /* 24 - 39 */
977
        {  20,  40 }, {  20,  10 }, {  29,   0 }, {  54,   0 },
978
        {  37,  42 }, {  12,  97 }, { -32, 127 }, { -22, 117 },
979
        {  -2,  74 }, {  -4,  85 }, { -24, 102 }, {   5,  57 },
980
        {  -6,  93 }, { -14,  88 }, {  -6,  44 }, {   4,  55 },
981
982
        /* 40 - 53 */
983
        { -11,  89 },{ -15,  103 },{ -21,  116 },{  19,  57 },
984
        {  20,  58 },{   4,  84 },{   6,  96 },{   1,  63 },
985
        {  -5,  85 },{ -13,  106 },{   5,  63 },{   6,  75 },
986
        {  -3,  90 },{  -1,  101 },
987
988
        /* 54 - 59 */
989
        {   3,  55 },{  -4,  79 },{  -2,  75 },{ -12,  97 },
990
        {  -7,  50 },{   1,  60 },
991
992
        /* 60 - 69 */
993
        { 0, 41 },   { 0, 63 },   { 0, 63 },     { 0, 63 },
994
        { -9, 83 },  { 4, 86 },   { 0, 97 },     { -7, 72 },
995
        { 13, 41 },  { 3, 62 },
996
997
        /* 70 - 104 */
998
        {   7,  34 }, {  -9,  88 }, { -20, 127 }, { -36, 127 },
999
        { -17,  91 }, { -14,  95 }, { -25,  84 }, { -25,  86 },
1000
        { -12,  89 }, { -17,  91 }, { -31, 127 }, { -14,  76 },
1001
        { -18, 103 }, { -13,  90 }, { -37, 127 }, {  11,  80 },
1002
        {   5,  76 }, {   2,  84 }, {   5,  78 }, {  -6,  55 },
1003
        {   4,  61 }, { -14,  83 }, { -37, 127 }, {  -5,  79 },
1004
        { -11, 104 }, { -11,  91 }, { -30, 127 }, {   0,  65 },
1005
        {  -2,  79 }, {   0,  72 }, {  -4,  92 }, {  -6,  56 },
1006
        {   3,  68 }, {  -8,  71 }, { -13,  98 },
1007
1008
        /* 105 -> 165 */
1009
        {  -4,  86 }, { -12,  88 }, {  -5,  82 }, {  -3,  72 },
1010
        {  -4,  67 }, {  -8,  72 }, { -16,  89 }, {  -9,  69 },
1011
        {  -1,  59 }, {   5,  66 }, {   4,  57 }, {  -4,  71 },
1012
        {  -2,  71 }, {   2,  58 }, {  -1,  74 }, {  -4,  44 },
1013
        {  -1,  69 }, {   0,  62 }, {  -7,  51 }, {  -4,  47 },
1014
        {  -6,  42 }, {  -3,  41 }, {  -6,  53 }, {   8,  76 },
1015
        {  -9,  78 }, { -11,  83 }, {   9,  52 }, {   0,  67 },
1016
        {  -5,  90 }, {   1,  67 }, { -15,  72 }, {  -5,  75 },
1017
        {  -8,  80 }, { -21,  83 }, { -21,  64 }, { -13,  31 },
1018
        { -25,  64 }, { -29,  94 }, {   9,  75 }, {  17,  63 },
1019
        {  -8,  74 }, {  -5,  35 }, {  -2,  27 }, {  13,  91 },
1020
        {   3,  65 }, {  -7,  69 }, {   8,  77 }, { -10,  66 },
1021
        {   3,  62 }, {  -3,  68 }, { -20,  81 }, {   0,  30 },
1022
        {   1,   7 }, {  -3,  23 }, { -21,  74 }, {  16,  66 },
1023
        { -23, 124 }, {  17,  37 }, {  44, -18 }, {  50, -34 },
1024
        { -22, 127 },
1025
1026
        /* 166 - 226 */
1027
        {   4,  39 }, {   0,  42 }, {   7,  34 }, {  11,  29 },
1028
        {   8,  31 }, {   6,  37 }, {   7,  42 }, {   3,  40 },
1029
        {   8,  33 }, {  13,  43 }, {  13,  36 }, {   4,  47 },
1030
        {   3,  55 }, {   2,  58 }, {   6,  60 }, {   8,  44 },
1031
        {  11,  44 }, {  14,  42 }, {   7,  48 }, {   4,  56 },
1032
        {   4,  52 }, {  13,  37 }, {   9,  49 }, {  19,  58 },
1033
        {  10,  48 }, {  12,  45 }, {   0,  69 }, {  20,  33 },
1034
        {   8,  63 }, {  35, -18 }, {  33, -25 }, {  28,  -3 },
1035
        {  24,  10 }, {  27,   0 }, {  34, -14 }, {  52, -44 },
1036
        {  39, -24 }, {  19,  17 }, {  31,  25 }, {  36,  29 },
1037
        {  24,  33 }, {  34,  15 }, {  30,  20 }, {  22,  73 },
1038
        {  20,  34 }, {  19,  31 }, {  27,  44 }, {  19,  16 },
1039
        {  15,  36 }, {  15,  36 }, {  21,  28 }, {  25,  21 },
1040
        {  30,  20 }, {  31,  12 }, {  27,  16 }, {  24,  42 },
1041
        {   0,  93 }, {  14,  56 }, {  15,  57 }, {  26,  38 },
1042
        { -24, 127 },
1043
1044
        /* 227 - 275 */
1045
        { -24, 115 }, { -22,  82 }, {  -9,  62 }, {   0,  53 },
1046
        {   0,  59 }, { -14,  85 }, { -13,  89 }, { -13,  94 },
1047
        { -11,  92 }, { -29, 127 }, { -21, 100 }, { -14,  57 },
1048
        { -12,  67 }, { -11,  71 }, { -10,  77 }, { -21,  85 },
1049
        { -16,  88 }, { -23, 104 }, { -15,  98 }, { -37, 127 },
1050
        { -10,  82 }, {  -8,  48 }, {  -8,  61 }, {  -8,  66 },
1051
        {  -7,  70 }, { -14,  75 }, { -10,  79 }, {  -9,  83 },
1052
        { -12,  92 }, { -18, 108 }, {  -4,  79 }, { -22,  69 },
1053
        { -16,  75 }, {  -2,  58 }, {   1,  58 }, { -13,  78 },
1054
        {  -9,  83 }, {  -4,  81 }, { -13,  99 }, { -13,  81 },
1055
        {  -6,  38 }, { -13,  62 }, {  -6,  58 }, {  -2,  59 },
1056
        { -16,  73 }, { -10,  76 }, { -13,  86 }, {  -9,  83 },
1057
        { -10,  87 },
1058
1059
        /* 276 a bit special (not used, bypass is used instead) */
1060
        { 0, 0 },
1061
1062
        /* 277 - 337 */
1063
        { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1064
        { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1065
        { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1066
        { -10,  94 }, { -15, 102 }, { -10,  99 }, { -13, 106 },
1067
        { -50, 127 }, {  -5,  92 }, {  17,  57 }, {  -5,  86 },
1068
        { -13,  94 }, { -12,  91 }, {  -2,  77 }, {   0,  71 },
1069
        {  -1,  73 }, {   4,  64 }, {  -7,  81 }, {   5,  64 },
1070
        {  15,  57 }, {   1,  67 }, {   0,  68 }, { -10,  67 },
1071
        {   1,  68 }, {   0,  77 }, {   2,  64 }, {   0,  68 },
1072
        {  -5,  78 }, {   7,  55 }, {   5,  59 }, {   2,  65 },
1073
        {  14,  54 }, {  15,  44 }, {   5,  60 }, {   2,  70 },
1074
        {  -2,  76 }, { -18,  86 }, {  12,  70 }, {   5,  64 },
1075
        { -12,  70 }, {  11,  55 }, {   5,  56 }, {   0,  69 },
1076
        {   2,  65 }, {  -6,  74 }, {   5,  54 }, {   7,  54 },
1077
        {  -6,  76 }, { -11,  82 }, {  -2,  77 }, {  -2,  77 },
1078
        {  25,  42 },
1079
1080
        /* 338 - 398 */
1081
        {  17, -13 }, {  16,  -9 }, {  17, -12 }, {  27, -21 },
1082
        {  37, -30 }, {  41, -40 }, {  42, -41 }, {  48, -47 },
1083
        {  39, -32 }, {  46, -40 }, {  52, -51 }, {  46, -41 },
1084
        {  52, -39 }, {  43, -19 }, {  32,  11 }, {  61, -55 },
1085
        {  56, -46 }, {  62, -50 }, {  81, -67 }, {  45, -20 },
1086
        {  35,  -2 }, {  28,  15 }, {  34,   1 }, {  39,   1 },
1087
        {  30,  17 }, {  20,  38 }, {  18,  45 }, {  15,  54 },
1088
        {   0,  79 }, {  36, -16 }, {  37, -14 }, {  37, -17 },
1089
        {  32,   1 }, {  34,  15 }, {  29,  15 }, {  24,  25 },
1090
        {  34,  22 }, {  31,  16 }, {  35,  18 }, {  31,  28 },
1091
        {  33,  41 }, {  36,  28 }, {  27,  47 }, {  21,  62 },
1092
        {  18,  31 }, {  19,  26 }, {  36,  24 }, {  24,  23 },
1093
        {  27,  16 }, {  24,  30 }, {  31,  29 }, {  22,  41 },
1094
        {  22,  42 }, {  16,  60 }, {  15,  52 }, {  14,  60 },
1095
        {   3,  78 }, { -16, 123 }, {  21,  53 }, {  22,  56 },
1096
        {  25,  61 },
1097
1098
        /* 399 - 435 */
1099
        {  21,  33 }, {  19,  50 }, {  17,  61 },
1100
        {  -3,  78 }, {  -8,  74 }, {  -9,  72 }, { -10,  72 },
1101
        { -18,  75 }, { -12,  71 }, { -11,  63 }, {  -5,  70 },
1102
        { -17,  75 }, { -14,  72 }, { -16,  67 }, {  -8,  53 },
1103
        { -14,  59 }, {  -9,  52 }, { -11,  68 }, {   9,  -2 },
1104
        {  30, -10 }, {  31,  -4 }, {  33,  -1 }, {  33,   7 },
1105
        {  31,  12 }, {  37,  23 }, {  31,  38 }, {  20,  64 },
1106
        {  -9,  71 }, {  -7,  37 }, {  -8,  44 }, { -11,  49 },
1107
        { -10,  56 }, { -12,  59 }, {  -8,  63 }, {  -9,  67 },
1108
        {  -6,  68 }, { -10,  79 },
1109
1110
        /* 436 - 459 */
1111
        {  -3,  78 }, {  -8,  74 }, {  -9,  72 }, { -10,  72 },
1112
        { -18,  75 }, { -12,  71 }, { -11,  63 }, {  -5,  70 },
1113
        { -17,  75 }, { -14,  72 }, { -16,  67 }, {  -8,  53 },
1114
        { -14,  59 }, {  -9,  52 }, { -11,  68 }, {   9,  -2 },
1115
        {  30, -10 }, {  31,  -4 }, {  33,  -1 }, {  33,   7 },
1116
        {  31,  12 }, {  37,  23 }, {  31,  38 }, {  20,  64 },
1117
1118
        /* 460 - 1024 */
1119
        {  11,  80 }, {   5,  76 }, {   2,  84 }, {   5,  78 },
1120
        {  -6,  55 }, {   4,  61 }, { -14,  83 }, { -37, 127 },
1121
        {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 },
1122
        {  11,  80 }, {   5,  76 }, {   2,  84 }, {   5,  78 },
1123
        {  -6,  55 }, {   4,  61 }, { -14,  83 }, { -37, 127 },
1124
        {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 },
1125
        {  -4,  86 }, { -12,  88 }, {  -5,  82 }, {  -3,  72 },
1126
        {  -4,  67 }, {  -8,  72 }, { -16,  89 }, {  -9,  69 },
1127
        {  -1,  59 }, {   5,  66 }, {   4,  57 }, {  -4,  71 },
1128
        {  -2,  71 }, {   2,  58 }, {  -1,  74 }, {  -4,  44 },
1129
        {  -1,  69 }, {   0,  62 }, {  -7,  51 }, {  -4,  47 },
1130
        {  -6,  42 }, {  -3,  41 }, {  -6,  53 }, {   8,  76 },
1131
        {  -9,  78 }, { -11,  83 }, {   9,  52 }, {   0,  67 },
1132
        {  -5,  90 }, {   1,  67 }, { -15,  72 }, {  -5,  75 },
1133
        {  -8,  80 }, { -21,  83 }, { -21,  64 }, { -13,  31 },
1134
        { -25,  64 }, { -29,  94 }, {   9,  75 }, {  17,  63 },
1135
        {  -8,  74 }, {  -5,  35 }, {  -2,  27 }, {  13,  91 },
1136
        {  -4,  86 }, { -12,  88 }, {  -5,  82 }, {  -3,  72 },
1137
        {  -4,  67 }, {  -8,  72 }, { -16,  89 }, {  -9,  69 },
1138
        {  -1,  59 }, {   5,  66 }, {   4,  57 }, {  -4,  71 },
1139
        {  -2,  71 }, {   2,  58 }, {  -1,  74 }, {  -4,  44 },
1140
        {  -1,  69 }, {   0,  62 }, {  -7,  51 }, {  -4,  47 },
1141
        {  -6,  42 }, {  -3,  41 }, {  -6,  53 }, {   8,  76 },
1142
        {  -9,  78 }, { -11,  83 }, {   9,  52 }, {   0,  67 },
1143
        {  -5,  90 }, {   1,  67 }, { -15,  72 }, {  -5,  75 },
1144
        {  -8,  80 }, { -21,  83 }, { -21,  64 }, { -13,  31 },
1145
        { -25,  64 }, { -29,  94 }, {   9,  75 }, {  17,  63 },
1146
        {  -8,  74 }, {  -5,  35 }, {  -2,  27 }, {  13,  91 },
1147
        {   4,  39 }, {   0,  42 }, {   7,  34 }, {  11,  29 },
1148
        {   8,  31 }, {   6,  37 }, {   7,  42 }, {   3,  40 },
1149
        {   8,  33 }, {  13,  43 }, {  13,  36 }, {   4,  47 },
1150
        {   3,  55 }, {   2,  58 }, {   6,  60 }, {   8,  44 },
1151
        {  11,  44 }, {  14,  42 }, {   7,  48 }, {   4,  56 },
1152
        {   4,  52 }, {  13,  37 }, {   9,  49 }, {  19,  58 },
1153
        {  10,  48 }, {  12,  45 }, {   0,  69 }, {  20,  33 },
1154
        {   8,  63 }, {  35, -18 }, {  33, -25 }, {  28,  -3 },
1155
        {  24,  10 }, {  27,   0 }, {  34, -14 }, {  52, -44 },
1156
        {  39, -24 }, {  19,  17 }, {  31,  25 }, {  36,  29 },
1157
        {  24,  33 }, {  34,  15 }, {  30,  20 }, {  22,  73 },
1158
        {   4,  39 }, {   0,  42 }, {   7,  34 }, {  11,  29 },
1159
        {   8,  31 }, {   6,  37 }, {   7,  42 }, {   3,  40 },
1160
        {   8,  33 }, {  13,  43 }, {  13,  36 }, {   4,  47 },
1161
        {   3,  55 }, {   2,  58 }, {   6,  60 }, {   8,  44 },
1162
        {  11,  44 }, {  14,  42 }, {   7,  48 }, {   4,  56 },
1163
        {   4,  52 }, {  13,  37 }, {   9,  49 }, {  19,  58 },
1164
        {  10,  48 }, {  12,  45 }, {   0,  69 }, {  20,  33 },
1165
        {   8,  63 }, {  35, -18 }, {  33, -25 }, {  28,  -3 },
1166
        {  24,  10 }, {  27,   0 }, {  34, -14 }, {  52, -44 },
1167
        {  39, -24 }, {  19,  17 }, {  31,  25 }, {  36,  29 },
1168
        {  24,  33 }, {  34,  15 }, {  30,  20 }, {  22,  73 },
1169
        {  -3,  78 }, {  -8,  74 }, {  -9,  72 }, { -10,  72 },
1170
        { -18,  75 }, { -12,  71 }, { -11,  63 }, {  -5,  70 },
1171
        { -17,  75 }, { -14,  72 }, { -16,  67 }, {  -8,  53 },
1172
        { -14,  59 }, {  -9,  52 }, { -11,  68 }, {  -3,  78 },
1173
        {  -8,  74 }, {  -9,  72 }, { -10,  72 }, { -18,  75 },
1174
        { -12,  71 }, { -11,  63 }, {  -5,  70 }, { -17,  75 },
1175
        { -14,  72 }, { -16,  67 }, {  -8,  53 }, { -14,  59 },
1176
        {  -9,  52 }, { -11,  68 }, {   9,  -2 }, {  30, -10 },
1177
        {  31,  -4 }, {  33,  -1 }, {  33,   7 }, {  31,  12 },
1178
        {  37,  23 }, {  31,  38 }, {  20,  64 }, {   9,  -2 },
1179
        {  30, -10 }, {  31,  -4 }, {  33,  -1 }, {  33,   7 },
1180
        {  31,  12 }, {  37,  23 }, {  31,  38 }, {  20,  64 },
1181
        {  -9,  71 }, {  -7,  37 }, {  -8,  44 }, { -11,  49 },
1182
        { -10,  56 }, { -12,  59 }, {  -8,  63 }, {  -9,  67 },
1183
        {  -6,  68 }, { -10,  79 }, {  -3,  78 }, {  -8,  74 },
1184
        {  -9,  72 }, { -10,  72 }, { -18,  75 }, { -12,  71 },
1185
        { -11,  63 }, {  -5,  70 }, { -17,  75 }, { -14,  72 },
1186
        { -16,  67 }, {  -8,  53 }, { -14,  59 }, {  -9,  52 },
1187
        { -11,  68 }, {  -3,  78 }, {  -8,  74 }, {  -9,  72 },
1188
        { -10,  72 }, { -18,  75 }, { -12,  71 }, { -11,  63 },
1189
        {  -5,  70 }, { -17,  75 }, { -14,  72 }, { -16,  67 },
1190
        {  -8,  53 }, { -14,  59 }, {  -9,  52 }, { -11,  68 },
1191
        {   9,  -2 }, {  30, -10 }, {  31,  -4 }, {  33,  -1 },
1192
        {  33,   7 }, {  31,  12 }, {  37,  23 }, {  31,  38 },
1193
        {  20,  64 }, {   9,  -2 }, {  30, -10 }, {  31,  -4 },
1194
        {  33,  -1 }, {  33,   7 }, {  31,  12 }, {  37,  23 },
1195
        {  31,  38 }, {  20,  64 }, {  -9,  71 }, {  -7,  37 },
1196
        {  -8,  44 }, { -11,  49 }, { -10,  56 }, { -12,  59 },
1197
        {  -8,  63 }, {  -9,  67 }, {  -6,  68 }, { -10,  79 },
1198
        { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1199
        { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1200
        { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1201
        { -10,  94 }, { -15, 102 }, { -10,  99 }, { -13, 106 },
1202
        { -50, 127 }, {  -5,  92 }, {  17,  57 }, {  -5,  86 },
1203
        { -13,  94 }, { -12,  91 }, {  -2,  77 }, {   0,  71 },
1204
        {  -1,  73 }, {   4,  64 }, {  -7,  81 }, {   5,  64 },
1205
        {  15,  57 }, {   1,  67 }, {   0,  68 }, { -10,  67 },
1206
        {   1,  68 }, {   0,  77 }, {   2,  64 }, {   0,  68 },
1207
        {  -5,  78 }, {   7,  55 }, {   5,  59 }, {   2,  65 },
1208
        {  14,  54 }, {  15,  44 }, {   5,  60 }, {   2,  70 },
1209
        { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1210
        { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1211
        { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1212
        { -10,  94 }, { -15, 102 }, { -10,  99 }, { -13, 106 },
1213
        { -50, 127 }, {  -5,  92 }, {  17,  57 }, {  -5,  86 },
1214
        { -13,  94 }, { -12,  91 }, {  -2,  77 }, {   0,  71 },
1215
        {  -1,  73 }, {   4,  64 }, {  -7,  81 }, {   5,  64 },
1216
        {  15,  57 }, {   1,  67 }, {   0,  68 }, { -10,  67 },
1217
        {   1,  68 }, {   0,  77 }, {   2,  64 }, {   0,  68 },
1218
        {  -5,  78 }, {   7,  55 }, {   5,  59 }, {   2,  65 },
1219
        {  14,  54 }, {  15,  44 }, {   5,  60 }, {   2,  70 },
1220
        {  17, -13 }, {  16,  -9 }, {  17, -12 }, {  27, -21 },
1221
        {  37, -30 }, {  41, -40 }, {  42, -41 }, {  48, -47 },
1222
        {  39, -32 }, {  46, -40 }, {  52, -51 }, {  46, -41 },
1223
        {  52, -39 }, {  43, -19 }, {  32,  11 }, {  61, -55 },
1224
        {  56, -46 }, {  62, -50 }, {  81, -67 }, {  45, -20 },
1225
        {  35,  -2 }, {  28,  15 }, {  34,   1 }, {  39,   1 },
1226
        {  30,  17 }, {  20,  38 }, {  18,  45 }, {  15,  54 },
1227
        {   0,  79 }, {  36, -16 }, {  37, -14 }, {  37, -17 },
1228
        {  32,   1 }, {  34,  15 }, {  29,  15 }, {  24,  25 },
1229
        {  34,  22 }, {  31,  16 }, {  35,  18 }, {  31,  28 },
1230
        {  33,  41 }, {  36,  28 }, {  27,  47 }, {  21,  62 },
1231
        {  17, -13 }, {  16,  -9 }, {  17, -12 }, {  27, -21 },
1232
        {  37, -30 }, {  41, -40 }, {  42, -41 }, {  48, -47 },
1233
        {  39, -32 }, {  46, -40 }, {  52, -51 }, {  46, -41 },
1234
        {  52, -39 }, {  43, -19 }, {  32,  11 }, {  61, -55 },
1235
        {  56, -46 }, {  62, -50 }, {  81, -67 }, {  45, -20 },
1236
        {  35,  -2 }, {  28,  15 }, {  34,   1 }, {  39,   1 },
1237
        {  30,  17 }, {  20,  38 }, {  18,  45 }, {  15,  54 },
1238
        {   0,  79 }, {  36, -16 }, {  37, -14 }, {  37, -17 },
1239
        {  32,   1 }, {  34,  15 }, {  29,  15 }, {  24,  25 },
1240
        {  34,  22 }, {  31,  16 }, {  35,  18 }, {  31,  28 },
1241
        {  33,  41 }, {  36,  28 }, {  27,  47 }, {  21,  62 },
1242
        { -24, 115 }, { -22,  82 }, {  -9,  62 }, {   0,  53 },
1243
        {   0,  59 }, { -14,  85 }, { -13,  89 }, { -13,  94 },
1244
        { -11,  92 }, { -29, 127 }, { -21, 100 }, { -14,  57 },
1245
        { -12,  67 }, { -11,  71 }, { -10,  77 }, { -21,  85 },
1246
        { -16,  88 }, { -23, 104 }, { -15,  98 }, { -37, 127 },
1247
        { -10,  82 }, {  -8,  48 }, {  -8,  61 }, {  -8,  66 },
1248
        {  -7,  70 }, { -14,  75 }, { -10,  79 }, {  -9,  83 },
1249
        { -12,  92 }, { -18, 108 }, { -24, 115 }, { -22,  82 },
1250
        {  -9,  62 }, {   0,  53 }, {   0,  59 }, { -14,  85 },
1251
        { -13,  89 }, { -13,  94 }, { -11,  92 }, { -29, 127 },
1252
        { -21, 100 }, { -14,  57 }, { -12,  67 }, { -11,  71 },
1253
        { -10,  77 }, { -21,  85 }, { -16,  88 }, { -23, 104 },
1254
        { -15,  98 }, { -37, 127 }, { -10,  82 }, {  -8,  48 },
1255
        {  -8,  61 }, {  -8,  66 }, {  -7,  70 }, { -14,  75 },
1256
        { -10,  79 }, {  -9,  83 }, { -12,  92 }, { -18, 108 },
1257
        {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 },
1258
        {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 },
1259
        {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 }
1260
    }
1261
};
1262
1263
18086
void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
1264
{
1265
    int i;
1266
    const int8_t (*tab)[2];
1267
18086
    const int slice_qp = av_clip(sl->qscale - 6*(h->ps.sps->bit_depth_luma-8), 0, 51);
1268
1269
18086
    if (sl->slice_type_nos == AV_PICTURE_TYPE_I) tab = cabac_context_init_I;
1270
15645
    else                                 tab = cabac_context_init_PB[sl->cabac_init_idc];
1271
1272
    /* calculate pre-state */
1273
18538150
    for( i= 0; i < 1024; i++ ) {
1274
18520064
        int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1275
1276
18520064
        pre^= pre>>31;
1277
18520064
        if(pre > 124)
1278
331576
            pre= 124 + (pre&1);
1279
1280
18520064
        sl->cabac_state[i] =  pre;
1281
    }
1282
18086
}
1283
1284
727349
static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
1285
{
1286
727349
    const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
1287
1288
727349
    unsigned long ctx = 0;
1289
1290
727349
    ctx += sl->mb_field_decoding_flag & !!sl->mb_x; //for FMO:(s->current_picture.mb_type[mba_xy] >> 7) & (h->slice_table[mba_xy] == h->slice_num);
1291
727349
    ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
1292
1293
727349
    return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
1294
}
1295
1296
2374644
static int decode_cabac_intra_mb_type(H264SliceContext *sl,
1297
                                      int ctx_base, int intra_slice)
1298
{
1299
2374644
    uint8_t *state= &sl->cabac_state[ctx_base];
1300
    int mb_type;
1301
1302
2374644
    if(intra_slice){
1303
1449132
        int ctx=0;
1304
1449132
        if (sl->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1305
331492
            ctx++;
1306
1449132
        if (sl->top_type        & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1307
320943
            ctx++;
1308
1449132
        if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
1309
1110249
            return 0;   /* I4x4 */
1310
338883
        state += 2;
1311
    }else{
1312
925512
        if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1313
614769
            return 0;   /* I4x4 */
1314
    }
1315
1316
649626
    if( get_cabac_terminate( &sl->cabac ) )
1317
5659
        return 25;  /* PCM */
1318
1319
643967
    mb_type = 1; /* I16x16 */
1320
643967
    mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1321
643967
    if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1322
268804
        mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1323
643967
    mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1324
643967
    mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1325
643967
    return mb_type;
1326
}
1327
1328
7046351
static int decode_cabac_mb_skip(const H264Context *h, H264SliceContext *sl,
1329
                                int mb_x, int mb_y)
1330
{
1331
    int mba_xy, mbb_xy;
1332
7046351
    int ctx = 0;
1333
1334
7046351
    if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1335
1193460
        int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1336
1193460
        mba_xy = mb_xy - 1;
1337
1193460
        if( (mb_y&1)
1338
596730
            && h->slice_table[mba_xy] == sl->slice_num
1339
579650
            && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1340
462647
            mba_xy += h->mb_stride;
1341
1193460
        if (MB_FIELD(sl)) {
1342
337439
            mbb_xy = mb_xy - h->mb_stride;
1343
337439
            if( !(mb_y&1)
1344
168369
                && h->slice_table[mbb_xy] == sl->slice_num
1345
150789
                && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
1346
77422
                mbb_xy -= h->mb_stride;
1347
        }else
1348
856021
            mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1349
    }else{
1350
5852891
        int mb_xy = sl->mb_xy;
1351
5852891
        mba_xy = mb_xy - 1;
1352
5852891
        mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1353
    }
1354
1355

7046351
    if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1356
4793506
        ctx++;
1357

7046351
    if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1358
4577085
        ctx++;
1359
1360
7046351
    if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1361
3967818
        ctx += 13;
1362
7046351
    return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1363
}
1364
1365
16670664
static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
1366
{
1367
16670664
    int mode = 0;
1368
1369
16670664
    if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1370
8932735
        return pred_mode;
1371
1372
7737929
    mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1373
7737929
    mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1374
7737929
    mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1375
1376
7737929
    return mode + ( mode >= pred_mode );
1377
}
1378
1379
2316917
static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
1380
{
1381
2316917
    const int mba_xy = sl->left_mb_xy[0];
1382
2316917
    const int mbb_xy = sl->top_mb_xy;
1383
1384
2316917
    int ctx = 0;
1385
1386
    /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1387

2316917
    if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1388
859725
        ctx++;
1389
1390

2316917
    if (sl->top_type        && h->chroma_pred_mode_table[mbb_xy] != 0)
1391
782579
        ctx++;
1392
1393
2316917
    if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1394
1286638
        return 0;
1395
1396
1030279
    if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1397
566876
        return 1;
1398
463403
    if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1399
264580
        return 2;
1400
    else
1401
198823
        return 3;
1402
}
1403
1404
5738925
static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
1405
{
1406
5738925
    int cbp_b, cbp_a, ctx, cbp = 0;
1407
1408
5738925
    cbp_a = sl->left_cbp;
1409
5738925
    cbp_b = sl->top_cbp;
1410
1411
5738925
    ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1412
5738925
    cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1413
5738925
    ctx = !(cbp   & 0x01) + 2 * !(cbp_b & 0x08);
1414
5738925
    cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1415
5738925
    ctx = !(cbp_a & 0x08) + 2 * !(cbp   & 0x01);
1416
5738925
    cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1417
5738925
    ctx = !(cbp   & 0x04) + 2 * !(cbp   & 0x02);
1418
5738925
    cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1419
5738925
    return cbp;
1420
}
1421
5603677
static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
1422
{
1423
    int ctx;
1424
    int cbp_a, cbp_b;
1425
1426
5603677
    cbp_a = (sl->left_cbp>>4)&0x03;
1427
5603677
    cbp_b = (sl-> top_cbp>>4)&0x03;
1428
1429
5603677
    ctx = 0;
1430
5603677
    if( cbp_a > 0 ) ctx++;
1431
5603677
    if( cbp_b > 0 ) ctx += 2;
1432
5603677
    if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1433
2912769
        return 0;
1434
1435
2690908
    ctx = 4;
1436
2690908
    if( cbp_a == 2 ) ctx++;
1437
2690908
    if( cbp_b == 2 ) ctx += 2;
1438
2690908
    return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1439
}
1440
1441
1924976
static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
1442
{
1443
1924976
    if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1444
714009
        return 0;   /* 8x8 */
1445
1210967
    if( !get_cabac( &sl->cabac, &sl->cabac_state[22] ) )
1446
194357
        return 1;   /* 8x4 */
1447
1016610
    if( get_cabac( &sl->cabac, &sl->cabac_state[23] ) )
1448
150043
        return 2;   /* 4x8 */
1449
866567
    return 3;       /* 4x4 */
1450
}
1451
1560540
static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
1452
{
1453
    int type;
1454
1560540
    if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1455
147059
        return 0;   /* B_Direct_8x8 */
1456
1413481
    if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1457
284900
        return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1458
1128581
    type = 3;
1459
1128581
    if( get_cabac( &sl->cabac, &sl->cabac_state[38] ) ) {
1460
871434
        if( get_cabac( &sl->cabac, &sl->cabac_state[39] ) )
1461
10447
            return 11 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1462
860987
        type += 4;
1463
    }
1464
1118134
    type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1465
1118134
    type +=   get_cabac( &sl->cabac, &sl->cabac_state[39] );
1466
1118134
    return type;
1467
}
1468
1469
5229762
static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
1470
{
1471
5229762
    int refa = sl->ref_cache[list][scan8[n] - 1];
1472
5229762
    int refb = sl->ref_cache[list][scan8[n] - 8];
1473
5229762
    int ref  = 0;
1474
5229762
    int ctx  = 0;
1475
1476
5229762
    if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1477

2392728
        if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1478
679138
            ctx++;
1479

2392728
        if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1480
637096
            ctx += 2;
1481
    } else {
1482
2837034
        if( refa > 0 )
1483
1013933
            ctx++;
1484
2837034
        if( refb > 0 )
1485
986537
            ctx += 2;
1486
    }
1487
1488
8215334
    while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
1489
2985572
        ref++;
1490
2985572
        ctx = (ctx>>2)+4;
1491
2985572
        if(ref >= 32 /*h->ref_list[list]*/){
1492
            return -1;
1493
        }
1494
    }
1495
5229762
    return ref;
1496
}
1497
1498
25694692
static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
1499
{
1500
    int mvd;
1501
1502
25694692
    if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1503
//    if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1504
15173787
        *mvda= 0;
1505
15173787
        return 0;
1506
    }
1507
1508
10520905
    mvd= 1;
1509
10520905
    ctxbase+= 3;
1510

51302889
    while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1511
40781984
        if( mvd < 4 )
1512
19851387
            ctxbase++;
1513
40781984
        mvd++;
1514
    }
1515
1516
10520905
    if( mvd >= 9 ) {
1517
3534249
        int k = 3;
1518
7423570
        while( get_cabac_bypass( &sl->cabac ) ) {
1519
3889321
            mvd += 1 << k;
1520
3889321
            k++;
1521
3889321
            if(k>24){
1522
                av_log(sl->h264->avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1523
                return INT_MIN;
1524
            }
1525
        }
1526
18026317
        while( k-- ) {
1527
14492068
            mvd += get_cabac_bypass( &sl->cabac )<<k;
1528
        }
1529
3534249
        *mvda=mvd < 70 ? mvd : 70;
1530
    }else
1531
6986656
        *mvda=mvd;
1532
10520905
    return get_cabac_bypass_sign( &sl->cabac, -mvd );
1533
}
1534
1535
#define DECODE_CABAC_MB_MVD(sl, list,  n )\
1536
{\
1537
    int amvd0 = sl->mvd_cache[list][scan8[n] - 1][0] +\
1538
                sl->mvd_cache[list][scan8[n] - 8][0];\
1539
    int amvd1 = sl->mvd_cache[list][scan8[n] - 1][1] +\
1540
                sl->mvd_cache[list][scan8[n] - 8][1];\
1541
\
1542
    int mxd = decode_cabac_mb_mvd(sl, 40, amvd0, &mpx);\
1543
    int myd = decode_cabac_mb_mvd(sl, 47, amvd1, &mpy);\
1544
    if (mxd == INT_MIN || myd == INT_MIN) \
1545
        return AVERROR_INVALIDDATA; \
1546
    mx += mxd;\
1547
    my += myd;\
1548
}
1549
1550
64524276
static av_always_inline int get_cabac_cbf_ctx(H264SliceContext *sl,
1551
                                              int cat, int idx, int max_coeff,
1552
                                              int is_dc)
1553
{
1554
    int nza, nzb;
1555
64524276
    int ctx = 0;
1556
    static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1557
1558
64524276
    if( is_dc ) {
1559
6569702
        if( cat == 3 ) {
1560
5919422
            idx -= CHROMA_DC_BLOCK_INDEX;
1561
5919422
            nza = (sl->left_cbp>>(6+idx))&0x01;
1562
5919422
            nzb = (sl-> top_cbp>>(6+idx))&0x01;
1563
        } else {
1564
650280
            idx -= LUMA_DC_BLOCK_INDEX;
1565
650280
            nza = sl->left_cbp&(0x100<<idx);
1566
650280
            nzb = sl-> top_cbp&(0x100<<idx);
1567
        }
1568
    } else {
1569
57954574
        nza = sl->non_zero_count_cache[scan8[idx] - 1];
1570
57954574
        nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1571
    }
1572
1573
64524276
    if( nza > 0 )
1574
35890734
        ctx++;
1575
1576
64524276
    if( nzb > 0 )
1577
35695192
        ctx += 2;
1578
1579
64524276
    return base_ctx[cat] + ctx;
1580
}
1581
1582
static av_always_inline void
1583
44036107
decode_cabac_residual_internal(const H264Context *h, H264SliceContext *sl,
1584
                               int16_t *block,
1585
                               int cat, int n, const uint8_t *scantable,
1586
                               const uint32_t *qmul, int max_coeff,
1587
                               int is_dc, int chroma422)
1588
{
1589
    static const int significant_coeff_flag_offset[2][14] = {
1590
      { 105+0, 105+15, 105+29, 105+44, 105+47, 402, 484+0, 484+15, 484+29, 660, 528+0, 528+15, 528+29, 718 },
1591
      { 277+0, 277+15, 277+29, 277+44, 277+47, 436, 776+0, 776+15, 776+29, 675, 820+0, 820+15, 820+29, 733 }
1592
    };
1593
    static const int last_coeff_flag_offset[2][14] = {
1594
      { 166+0, 166+15, 166+29, 166+44, 166+47, 417, 572+0, 572+15, 572+29, 690, 616+0, 616+15, 616+29, 748 },
1595
      { 338+0, 338+15, 338+29, 338+44, 338+47, 451, 864+0, 864+15, 864+29, 699, 908+0, 908+15, 908+29, 757 }
1596
    };
1597
    static const int coeff_abs_level_m1_offset[14] = {
1598
        227+0, 227+10, 227+20, 227+30, 227+39, 426, 952+0, 952+10, 952+20, 708, 982+0, 982+10, 982+20, 766
1599
    };
1600
    static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1601
      { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1602
        4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1603
        7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1604
       12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1605
      { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1606
        6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1607
        9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1608
        9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1609
    };
1610
    static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1611
    /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1612
     * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1613
     * map node ctx => cabac ctx for level=1 */
1614
    static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1615
    /* map node ctx => cabac ctx for level>1 */
1616
    static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1617
        { 5, 5, 5, 5, 6, 7, 8, 9 },
1618
        { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1619
    };
1620
    static const uint8_t coeff_abs_level_transition[2][8] = {
1621
    /* update node ctx after decoding a level=1 */
1622
        { 1, 2, 3, 3, 4, 5, 6, 7 },
1623
    /* update node ctx after decoding a level>1 */
1624
        { 4, 4, 4, 4, 5, 6, 7, 7 }
1625
    };
1626
1627
    int index[64];
1628
1629
    int last;
1630
44036107
    int coeff_count = 0;
1631
44036107
    int node_ctx = 0;
1632
1633
    uint8_t *significant_coeff_ctx_base;
1634
    uint8_t *last_coeff_ctx_base;
1635
    uint8_t *abs_level_m1_ctx_base;
1636
1637
#if !ARCH_X86
1638
#define CABAC_ON_STACK
1639
#endif
1640
#ifdef CABAC_ON_STACK
1641
#define CC &cc
1642
    CABACContext cc;
1643
    cc.range     = sl->cabac.range;
1644
    cc.low       = sl->cabac.low;
1645
    cc.bytestream= sl->cabac.bytestream;
1646
#if !UNCHECKED_BITSTREAM_READER || ARCH_AARCH64
1647
    cc.bytestream_end = sl->cabac.bytestream_end;
1648
#endif
1649
#else
1650
#define CC &sl->cabac
1651
#endif
1652
1653
44036107
    significant_coeff_ctx_base = sl->cabac_state
1654
44036107
        + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1655
44036107
    last_coeff_ctx_base = sl->cabac_state
1656
44036107
        + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1657
44036107
    abs_level_m1_ctx_base = sl->cabac_state
1658
44036107
        + coeff_abs_level_m1_offset[cat];
1659
1660

49128142
    if( !is_dc && max_coeff == 64 ) {
1661
#define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1662
        for(last= 0; last < coefs; last++) { \
1663
            uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1664
            if( get_cabac( CC, sig_ctx )) { \
1665
                uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1666
                index[coeff_count++] = last; \
1667
                if( get_cabac( CC, last_ctx ) ) { \
1668
                    last= max_coeff; \
1669
                    break; \
1670
                } \
1671
            } \
1672
        }\
1673
        if( last == max_coeff -1 ) {\
1674
            index[coeff_count++] = last;\
1675
        }
1676
5092035
        const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1677
#ifdef decode_significance
1678
5092035
        coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1679
                                                 last_coeff_ctx_base, sig_off);
1680
    } else {
1681

38944072
        if (is_dc && chroma422) { // dc 422
1682


3532913
            DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1683
        } else {
1684
38289870
            coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1685
                                                 last_coeff_ctx_base-significant_coeff_ctx_base);
1686
        }
1687
#else
1688
        DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1689
    } else {
1690
        if (is_dc && chroma422) { // dc 422
1691
            DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1692
        } else {
1693
            DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1694
        }
1695
#endif
1696
    }
1697
    av_assert2(coeff_count > 0);
1698
1699
44036107
    if( is_dc ) {
1700
4604622
        if( cat == 3 )
1701
4156737
            h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1702
        else
1703
447885
            h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1704
4604622
        sl->non_zero_count_cache[scan8[n]] = coeff_count;
1705
    } else {
1706
39431485
        if( max_coeff == 64 )
1707
5092035
            fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1708
        else {
1709
            av_assert2( cat == 1 || cat ==  2 || cat ==  4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1710
34339450
            sl->non_zero_count_cache[scan8[n]] = coeff_count;
1711
        }
1712
    }
1713
1714
#define STORE_BLOCK(type) \
1715
    do { \
1716
        uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1717
 \
1718
        int j= scantable[index[--coeff_count]]; \
1719
 \
1720
        if( get_cabac( CC, ctx ) == 0 ) { \
1721
            node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1722
            if( is_dc ) { \
1723
                ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1724
            }else{ \
1725
                ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1726
            } \
1727
        } else { \
1728
            unsigned coeff_abs = 2; \
1729
            ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1730
            node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1731
\
1732
            while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1733
                coeff_abs++; \
1734
            } \
1735
\
1736
            if( coeff_abs >= 15 ) { \
1737
                int j = 0; \
1738
                while (get_cabac_bypass(CC) && j < 16+7) { \
1739
                    j++; \
1740
                } \
1741
\
1742
                coeff_abs=1; \
1743
                while( j-- ) { \
1744
                    coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1745
                } \
1746
                coeff_abs+= 14U; \
1747
            } \
1748
\
1749
            if( is_dc ) { \
1750
                ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1751
            }else{ \
1752
                ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1753
            } \
1754
        } \
1755
    } while ( coeff_count );
1756
1757
44036107
    if (h->pixel_shift) {
1758






71561124
        STORE_BLOCK(int32_t)
1759
    } else {
1760






206049348
        STORE_BLOCK(int16_t)
1761
    }
1762
#ifdef CABAC_ON_STACK
1763
            sl->cabac.range     = cc.range     ;
1764
            sl->cabac.low       = cc.low       ;
1765
            sl->cabac.bytestream= cc.bytestream;
1766
#endif
1767
1768
44036107
}
1769
1770
3950420
static av_noinline void decode_cabac_residual_dc_internal(const H264Context *h,
1771
                                                          H264SliceContext *sl,
1772
                                                          int16_t *block,
1773
                                                          int cat, int n,
1774
                                                          const uint8_t *scantable,
1775
                                                          int max_coeff)
1776
{
1777
3950420
    decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1778
3950420
}
1779
1780
654202
static av_noinline void decode_cabac_residual_dc_internal_422(const H264Context *h,
1781
                                                              H264SliceContext *sl,
1782
                                                              int16_t *block,
1783
                                                              int cat, int n,
1784
                                                              const uint8_t *scantable,
1785
                                                              int max_coeff)
1786
{
1787
654202
    decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1788
654202
}
1789
1790
39431485
static av_noinline void decode_cabac_residual_nondc_internal(const H264Context *h,
1791
                                                             H264SliceContext *sl,
1792
                                                             int16_t *block,
1793
                                                             int cat, int n,
1794
                                                             const uint8_t *scantable,
1795
                                                             const uint32_t *qmul,
1796
                                                             int max_coeff)
1797
{
1798
39431485
    decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1799
39431485
}
1800
1801
/* cat: 0-> DC 16x16  n = 0
1802
 *      1-> AC 16x16  n = luma4x4idx
1803
 *      2-> Luma4x4   n = luma4x4idx
1804
 *      3-> DC Chroma n = iCbCr
1805
 *      4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1806
 *      5-> Luma8x8   n = 4 * luma8x8idx */
1807
1808
/* Partially inline the CABAC residual decode: inline the coded block flag.
1809
 * This has very little impact on binary size and improves performance
1810
 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1811
 * as well as because most blocks have zero CBFs. */
1812
1813
5798694
static av_always_inline void decode_cabac_residual_dc(const H264Context *h,
1814
                                                      H264SliceContext *sl,
1815
                                                      int16_t *block,
1816
                                                      int cat, int n,
1817
                                                      const uint8_t *scantable,
1818
                                                      int max_coeff)
1819
{
1820
    /* read coded block flag */
1821
5798694
    if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1822
1848274
        sl->non_zero_count_cache[scan8[n]] = 0;
1823
1848274
        return;
1824
    }
1825
3950420
    decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1826
}
1827
1828
static av_always_inline void
1829
771008
decode_cabac_residual_dc_422(const H264Context *h, H264SliceContext *sl,
1830
                             int16_t *block,
1831
                             int cat, int n, const uint8_t *scantable,
1832
                             int max_coeff)
1833
{
1834
    /* read coded block flag */
1835
771008
    if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
1836
116806
        sl->non_zero_count_cache[scan8[n]] = 0;
1837
116806
        return;
1838
    }
1839
654202
    decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1840
}
1841
1842
63026642
static av_always_inline void decode_cabac_residual_nondc(const H264Context *h,
1843
                                                         H264SliceContext *sl,
1844
                                                         int16_t *block,
1845
                                                         int cat, int n,
1846
                                                         const uint8_t *scantable,
1847
                                                         const uint32_t *qmul,
1848
                                                         int max_coeff)
1849
{
1850
    /* read coded block flag */
1851

63026642
    if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1852
23595157
        if( max_coeff == 64 ) {
1853
16483
            fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1854
        } else {
1855
23578674
            sl->non_zero_count_cache[scan8[n]] = 0;
1856
        }
1857
23595157
        return;
1858
    }
1859
39431485
    decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1860
}
1861
1862
5667580
static av_always_inline void decode_cabac_luma_residual(const H264Context *h, H264SliceContext *sl,
1863
                                                        const uint8_t *scan, const uint8_t *scan8x8,
1864
                                                        int pixel_shift, int mb_type, int cbp, int p)
1865
{
1866
    static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1867
    const uint32_t *qmul;
1868
    int i8x8, i4x4;
1869
5667580
    int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1870
5667580
    if( IS_INTRA16x16( mb_type ) ) {
1871
650280
        AV_ZERO128(sl->mb_luma_dc[p]+0);
1872
650280
        AV_ZERO128(sl->mb_luma_dc[p]+8);
1873
650280
        AV_ZERO128(sl->mb_luma_dc[p]+16);
1874
650280
        AV_ZERO128(sl->mb_luma_dc[p]+24);
1875
650280
        decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1876
1877
650280
        if( cbp&15 ) {
1878
341611
            qmul = h->ps.pps->dequant4_coeff[p][qscale];
1879
5807387
            for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1880
5465776
                const int index = 16*p + i4x4;
1881
5465776
                decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1882
            }
1883
        } else {
1884
308669
            fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1885
        }
1886
    } else {
1887
5017300
        int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1888
25086500
        for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1889
20069200
            if( cbp & (1<<i8x8) ) {
1890
14341007
                if( IS_8x8DCT(mb_type) ) {
1891
5108518
                    const int index = 16*p + 4*i8x8;
1892
5108518
                    decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1893
5108518
                                                scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1894
                } else {
1895
9232489
                    qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1896
46162445
                    for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1897
36929956
                        const int index = 16*p + 4*i8x8 + i4x4;
1898
//START_TIMER
1899
36929956
                        decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1900
//STOP_TIMER("decode_residual")
1901
                    }
1902
                }
1903
            } else {
1904
5728193
                fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1905
            }
1906
        }
1907
    }
1908
5667580
}
1909
1910
/**
1911
 * Decode a macroblock.
1912
 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1913
 */
1914
8495483
int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1915
{
1916
8495483
    const SPS *sps = h->ps.sps;
1917
    int mb_xy;
1918
8495483
    int mb_type, partition_count, cbp = 0;
1919
8495483
    int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
1920

8495483
    const int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1921
8495483
    const int pixel_shift = h->pixel_shift;
1922
1923
8495483
    mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
1924
1925
    ff_tlog(h->avctx, "pic:%d mb:%d/%d\n", h->poc.frame_num, sl->mb_x, sl->mb_y);
1926
8495483
    if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1927
        int skip;
1928
        /* a skipped mb needs the aff flag from the following mb */
1929

7046351
        if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1930
108281
            skip = sl->next_mb_skipped;
1931
        else
1932
6938070
            skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1933
        /* read skip flags */
1934
7046351
        if( skip ) {
1935

2106932
            if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1936
108281
                h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1937
108281
                sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1938
108281
                if(!sl->next_mb_skipped)
1939
36910
                    sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1940
            }
1941
1942
2106932
            decode_mb_skip(h, sl);
1943
1944
2106932
            h->cbp_table[mb_xy] = 0;
1945
2106932
            h->chroma_pred_mode_table[mb_xy] = 0;
1946
2106932
            sl->last_qscale_diff = 0;
1947
1948
2106932
            return 0;
1949
1950
        }
1951
    }
1952
6388551
    if (FRAME_MBAFF(h)) {
1953
1385493
        if ((sl->mb_y & 1) == 0)
1954
690439
            sl->mb_mbaff =
1955
690439
            sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1956
    }
1957
1958
6388551
    sl->prev_mb_skipped = 0;
1959
1960
6388551
    fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1961
1962
6388551
    if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1963
2628494
        int ctx = 0;
1964
        av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1965
1966
2628494
        if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1967
1911404
            ctx++;
1968
2628494
        if (!IS_DIRECT(sl->top_type - 1))
1969
1797479
            ctx++;
1970
1971
2628494
        if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1972
450356
            mb_type= 0; /* B_Direct_16x16 */
1973
2178138
        }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1974
775995
            mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1975
        }else{
1976
            int bits;
1977
1402143
            bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1978
1402143
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1979
1402143
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1980
1402143
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1981
1402143
            if( bits < 8 ){
1982
419925
                mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1983
982218
            }else if( bits == 13 ){
1984
444807
                mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1985
444807
                goto decode_intra_mb;
1986
537411
            }else if( bits == 14 ){
1987
14765
                mb_type= 11; /* B_L1_L0_8x16 */
1988
522646
            }else if( bits == 15 ){
1989
390135
                mb_type= 22; /* B_8x8 */
1990
            }else{
1991
132511
                bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1992
132511
                mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1993
            }
1994
        }
1995
2183687
            partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
1996
2183687
            mb_type         = ff_h264_b_mb_type_info[mb_type].type;
1997
3760057
    } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1998
2310925
        if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
1999
            /* P-type */
2000
1830220
            if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
2001
                /* P_L0_D16x16, P_8x8 */
2002
1535656
                mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2003
            } else {
2004
                /* P_L0_D8x16, P_L0_D16x8 */
2005
294564
                mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2006
            }
2007
1830220
            partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2008
1830220
            mb_type         = ff_h264_p_mb_type_info[mb_type].type;
2009
        } else {
2010
480705
            mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2011
480705
            goto decode_intra_mb;
2012
        }
2013
    } else {
2014
1449132
        mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2015

1449132
        if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2016
            mb_type--;
2017
        av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_I);
2018
1449132
decode_intra_mb:
2019
2374644
        partition_count = 0;
2020
2374644
        cbp                      = ff_h264_i_mb_type_info[mb_type].cbp;
2021
2374644
        sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2022
2374644
        mb_type                  = ff_h264_i_mb_type_info[mb_type].type;
2023
    }
2024
6388551
    if (MB_FIELD(sl))
2025
2428425
        mb_type |= MB_TYPE_INTERLACED;
2026
2027
6388551
    h->slice_table[mb_xy] = sl->slice_num;
2028
2029
6388551
    if(IS_INTRA_PCM(mb_type)) {
2030
5659
        const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2031
5659
                            sps->bit_depth_luma >> 3;
2032
        const uint8_t *ptr;
2033
        int ret;
2034
2035
        // We assume these blocks are very rare so we do not optimize it.
2036
        // FIXME The two following lines get the bitstream position in the cabac
2037
        // decode, I think it should be done by a function in cabac.h (or cabac.c).
2038
5659
        ptr= sl->cabac.bytestream;
2039
5659
        if(sl->cabac.low&0x1) ptr--;
2040
        if(CABAC_BITS==16){
2041
5659
            if(sl->cabac.low&0x1FF) ptr--;
2042
        }
2043
2044
        // The pixels are stored in the same order as levels in h->mb array.
2045
5659
        if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2046
            return -1;
2047
5659
        sl->intra_pcm_ptr = ptr;
2048
5659
        ptr += mb_size;
2049
2050
5659
        ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2051
5659
        if (ret < 0)
2052
            return ret;
2053
2054
        // All blocks are present
2055
5659
        h->cbp_table[mb_xy] = 0xf7ef;
2056
5659
        h->chroma_pred_mode_table[mb_xy] = 0;
2057
        // In deblocking, the quantizer is 0
2058
5659
        h->cur_pic.qscale_table[mb_xy] = 0;
2059
        // All coeffs are present
2060
5659
        memset(h->non_zero_count[mb_xy], 16, 48);
2061
5659
        h->cur_pic.mb_type[mb_xy] = mb_type;
2062
5659
        sl->last_qscale_diff = 0;
2063
5659
        return 0;
2064
    }
2065
2066
6382892
    fill_decode_caches(h, sl, mb_type);
2067
2068
6382892
    if( IS_INTRA( mb_type ) ) {
2069
        int i, pred_mode;
2070
2368985
        if( IS_INTRA4x4( mb_type ) ) {
2071

1725018
            if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2072
910802
                mb_type |= MB_TYPE_8x8DCT;
2073
4554010
                for( i = 0; i < 16; i+=4 ) {
2074
3643208
                    int pred = pred_intra_mode(h, sl, i);
2075
3643208
                    int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2076
3643208
                    fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2077
                }
2078
            } else {
2079
13841672
                for( i = 0; i < 16; i++ ) {
2080
13027456
                    int pred = pred_intra_mode(h, sl, i);
2081
13027456
                    sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2082
2083
                    ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2084
                            sl->intra4x4_pred_mode_cache[scan8[i]]);
2085
                }
2086
            }
2087
1725018
            write_back_intra_pred_mode(h, sl);
2088
1725018
            if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2089
1725018
                                                 sl->top_samples_available, sl->left_samples_available) < 0 )
2090
                return -1;
2091
        } else {
2092
1287934
            sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2093
643967
                                                                     sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2094
643967
            if (sl->intra16x16_pred_mode < 0) return -1;
2095
        }
2096
2368985
        if(decode_chroma){
2097
2316917
            h->chroma_pred_mode_table[mb_xy] =
2098
2316917
            pred_mode                        = decode_cabac_mb_chroma_pre_mode(h, sl);
2099
2100
2316917
            pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2101
2316917
                                                     sl->left_samples_available, pred_mode, 1 );
2102
2316917
            if( pred_mode < 0 ) return -1;
2103
2316917
            sl->chroma_pred_mode = pred_mode;
2104
        } else {
2105
52068
            sl->chroma_pred_mode = DC_128_PRED8x8;
2106
        }
2107
4013907
    } else if( partition_count == 4 ) {
2108
        int i, j, sub_partition_count[4], list, ref[2][4];
2109
2110
871379
        if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2111
1950675
            for( i = 0; i < 4; i++ ) {
2112
1560540
                sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2113
1560540
                sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2114
1560540
                sl->sub_mb_type[i]     = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2115
            }
2116
390135
            if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2117
                          sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2118
73312
                ff_h264_pred_direct_motion(h, sl, &mb_type);
2119
73312
                sl->ref_cache[0][scan8[4]] =
2120
73312
                sl->ref_cache[1][scan8[4]] =
2121
73312
                sl->ref_cache[0][scan8[12]] =
2122
73312
                sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2123
366560
                    for( i = 0; i < 4; i++ )
2124
293248
                        fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2125
            }
2126
        } else {
2127
2406220
            for( i = 0; i < 4; i++ ) {
2128
1924976
                sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2129
1924976
                sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2130
1924976
                sl->sub_mb_type[i]     = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2131
            }
2132
        }
2133
2134
2132893
        for( list = 0; list < sl->list_count; list++ ) {
2135
6307570
                for( i = 0; i < 4; i++ ) {
2136
5046056
                    if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2137
4751938
                    if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2138
4333480
                        unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2139
4333480
                        if (rc > 1) {
2140
2937343
                            ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2141
2937343
                            if (ref[list][i] >= rc) {
2142
                                av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2143
                                return -1;
2144
                            }
2145
                        }else
2146
1396137
                            ref[list][i] = 0;
2147
                    } else {
2148
418458
                        ref[list][i] = -1;
2149
                    }
2150
4751938
                    sl->ref_cache[list][scan8[4 * i] + 1] =
2151
4751938
                    sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2152
                }
2153
        }
2154
2155
871379
        if(dct8x8_allowed)
2156
209719
            dct8x8_allowed = get_dct8x8_allowed(h, sl);
2157
2158
2132893
        for (list = 0; list < sl->list_count; list++) {
2159
6307570
            for(i=0; i<4; i++){
2160
5046056
                sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2161
5046056
                if(IS_DIRECT(sl->sub_mb_type[i])){
2162
294118
                    fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2163
294118
                    continue;
2164
                }
2165
2166

9085418
                if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2167
4333480
                    const int sub_mb_type= sl->sub_mb_type[i];
2168
4333480
                    const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2169
13461591
                    for(j=0; j<sub_partition_count[i]; j++){
2170
                        int mpx, mpy;
2171
                        int mx, my;
2172
9128111
                        const int index= 4*i + block_width*j;
2173
9128111
                        int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2174
9128111
                        uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2175
9128111
                        pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2176

9128111
                        DECODE_CABAC_MB_MVD(sl, list, index)
2177
                        ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2178
2179
9128111
                        if(IS_SUB_8X8(sub_mb_type)){
2180
1321359
                            mv_cache[ 1 ][0]=
2181
1321359
                            mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2182
1321359
                            mv_cache[ 1 ][1]=
2183
1321359
                            mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2184
2185
1321359
                            mvd_cache[ 1 ][0]=
2186
1321359
                            mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2187
1321359
                            mvd_cache[ 1 ][1]=
2188
1321359
                            mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2189
7806752
                        }else if(IS_SUB_8X4(sub_mb_type)){
2190
3653042
                            mv_cache[ 1 ][0]= mx;
2191
3653042
                            mv_cache[ 1 ][1]= my;
2192
2193
3653042
                            mvd_cache[ 1 ][0]=  mpx;
2194
3653042
                            mvd_cache[ 1 ][1]= mpy;
2195
4153710
                        }else if(IS_SUB_4X8(sub_mb_type)){
2196
588690
                            mv_cache[ 8 ][0]= mx;
2197
588690
                            mv_cache[ 8 ][1]= my;
2198
2199
588690
                            mvd_cache[ 8 ][0]= mpx;
2200
588690
                            mvd_cache[ 8 ][1]= mpy;
2201
                        }
2202
9128111
                        mv_cache[ 0 ][0]= mx;
2203
9128111
                        mv_cache[ 0 ][1]= my;
2204
2205
9128111
                        mvd_cache[ 0 ][0]= mpx;
2206
9128111
                        mvd_cache[ 0 ][1]= mpy;
2207
                    }
2208
                }else{
2209
418458
                    fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2210
418458
                    fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2211
                }
2212
            }
2213
        }
2214
3142528
    } else if( IS_DIRECT(mb_type) ) {
2215
450356
        ff_h264_pred_direct_motion(h, sl, &mb_type);
2216
450356
        fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2217
450356
        fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2218
450356
        dct8x8_allowed &= sps->direct_8x8_inference_flag;
2219
    } else {
2220
        int list, i;
2221
2692172
        if(IS_16X16(mb_type)){
2222
5024083
            for (list = 0; list < sl->list_count; list++) {
2223
2997918
                if(IS_DIR(mb_type, 0, list)){
2224
                    int ref;
2225
2221923
                    unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2226
2221923
                    if (rc > 1) {
2227
1335608
                        ref= decode_cabac_mb_ref(sl, list, 0);
2228
1335608
                        if (ref >= rc) {
2229
                            av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2230
                            return -1;
2231
                        }
2232
                    }else
2233
886315
                        ref=0;
2234
2221923
                    fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2235
                }
2236
            }
2237
5024083
            for (list = 0; list < sl->list_count; list++) {
2238
2997918
                if(IS_DIR(mb_type, 0, list)){
2239
                    int mx,my,mpx,mpy;
2240
2221923
                    pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2241

2221923
                    DECODE_CABAC_MB_MVD(sl, list, 0)
2242
                    ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2243
2244
2221923
                    fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2245
2221923
                    fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2246
                }
2247
            }
2248
        }
2249
666007
        else if(IS_16X8(mb_type)){
2250
903404
            for (list = 0; list < sl->list_count; list++) {
2251
1654953
                    for(i=0; i<2; i++){
2252
1103302
                        if(IS_DIR(mb_type, i, list)){
2253
                            int ref;
2254
793367
                            unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2255
793367
                            if (rc > 1) {
2256
513287
                                ref= decode_cabac_mb_ref(sl, list, 8 * i);
2257
513287
                                if (ref >= rc) {
2258
                                    av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2259
                                    return -1;
2260
                                }
2261
                            }else
2262
280080
                                ref=0;
2263
793367
                            fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2264
                        }else
2265
309935
                            fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2266
                    }
2267
            }
2268
903404
            for (list = 0; list < sl->list_count; list++) {
2269
1654953
                for(i=0; i<2; i++){
2270
1103302
                    if(IS_DIR(mb_type, i, list)){
2271
                        int mx,my,mpx,mpy;
2272
793367
                        pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2273

793367
                        DECODE_CABAC_MB_MVD(sl, list, 8*i)
2274
                        ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2275
2276
793367
                        fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2277
793367
                        fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2278
                    }else{
2279
309935
                        fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2280
309935
                        fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2281
                    }
2282
                }
2283
            }
2284
        }else{
2285
            av_assert2(IS_8X16(mb_type));
2286
800053
            for (list = 0; list < sl->list_count; list++) {
2287
1457397
                    for(i=0; i<2; i++){
2288
971598
                        if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2289
                            int ref;
2290
703945
                            unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2291
703945
                            if (rc > 1) {
2292
443524
                                ref = decode_cabac_mb_ref(sl, list, 4 * i);
2293
443524
                                if (ref >= rc) {
2294
                                    av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2295
                                    return -1;
2296
                                }
2297
                            }else
2298
260421
                                ref=0;
2299
703945
                            fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2300
                        }else
2301
267653
                            fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2302
                    }
2303
            }
2304
800053
            for (list = 0; list < sl->list_count; list++) {
2305
1457397
                for(i=0; i<2; i++){
2306
971598
                    if(IS_DIR(mb_type, i, list)){
2307
                        int mx,my,mpx,mpy;
2308
703945
                        pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2309

703945
                        DECODE_CABAC_MB_MVD(sl, list, 4*i)
2310
2311
                        ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2312
703945
                        fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2313
703945
                        fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2314
                    }else{
2315
267653
                        fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2316
267653
                        fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2317
                    }
2318
                }
2319
            }
2320
        }
2321
    }
2322
2323
6382892
   if( IS_INTER( mb_type ) ) {
2324
4013907
        h->chroma_pred_mode_table[mb_xy] = 0;
2325
4013907
        write_back_motion(h, sl, mb_type);
2326
   }
2327
2328
6382892
    if( !IS_INTRA16x16( mb_type ) ) {
2329
5738925
        cbp  = decode_cabac_mb_cbp_luma(sl);
2330
5738925
        if(decode_chroma)
2331
5603677
            cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2332
    } else {
2333

643967
        if (!decode_chroma && cbp>15) {
2334
1
            av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2335
1
            return AVERROR_INVALIDDATA;
2336
        }
2337
    }
2338
2339
6382891
    h->cbp_table[mb_xy] = sl->cbp = cbp;
2340
2341

6382891
    if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2342
1318773
        mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2343
    }
2344
2345
    /* It would be better to do this in fill_decode_caches, but we don't know
2346
     * the transform mode of the current macroblock there. */
2347

6382891
    if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2348
        int i;
2349
21127
        uint8_t *nnz_cache = sl->non_zero_count_cache;
2350
21127
        if (h->x264_build < 151U) {
2351
63270
            for (i = 0; i < 2; i++){
2352

42180
                if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2353
9264
                    nnz_cache[3+8* 1 + 2*8*i]=
2354
9264
                    nnz_cache[3+8* 2 + 2*8*i]=
2355
9264
                    nnz_cache[3+8* 6 + 2*8*i]=
2356
9264
                    nnz_cache[3+8* 7 + 2*8*i]=
2357
9264
                    nnz_cache[3+8*11 + 2*8*i]=
2358
9264
                    nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2359
                }
2360
            }
2361

21090
            if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2362
4466
                uint32_t top_empty = !IS_INTRA(mb_type) ? 0 : 0x40404040;
2363
4466
                AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2364
4466
                AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2365
4466
                AV_WN32A(&nnz_cache[4+8*10], top_empty);
2366
            }
2367
        } else {
2368
111
            for (i = 0; i < 2; i++){
2369

74
                if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2370
40
                    nnz_cache[3+8* 1 + 2*8*i]=
2371
40
                    nnz_cache[3+8* 2 + 2*8*i]=
2372
40
                    nnz_cache[3+8* 6 + 2*8*i]=
2373
40
                    nnz_cache[3+8* 7 + 2*8*i]=
2374
40
                    nnz_cache[3+8*11 + 2*8*i]=
2375
40
                    nnz_cache[3+8*12 + 2*8*i]= !IS_INTRA_PCM(sl->left_type[LEFT(i)]) ? 0 : 64;
2376
                }
2377
            }
2378

37
            if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2379
7
                uint32_t top_empty = !IS_INTRA_PCM(sl->top_type) ? 0 : 0x40404040;
2380
7
                AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2381
7
                AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2382
7
                AV_WN32A(&nnz_cache[4+8*10], top_empty);
2383
            }
2384
        }
2385
    }
2386
6382891
    h->cur_pic.mb_type[mb_xy] = mb_type;
2387
2388

11900215
    if( cbp || IS_INTRA16x16( mb_type ) ) {
2389
        const uint8_t *scan, *scan8x8;
2390
        const uint32_t *qmul;
2391
2392
        // decode_cabac_mb_dqp
2393

5517324
        if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2394
939579
            int val = 1;
2395
939579
            int ctx= 2;
2396
939579
            const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2397
2398
6628185
            while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2399
5688606
                ctx= 3;
2400
5688606
                val++;
2401
5688606
                if(val > 2*max_qp){ //prevent infinite loop
2402
                    av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2403
                    return -1;
2404
                }
2405
            }
2406
2407
939579
            if( val&0x01 )
2408
467127
                val=   (val + 1)>>1 ;
2409
            else
2410
472452
                val= -((val + 1)>>1);
2411
939579
            sl->last_qscale_diff = val;
2412
939579
            sl->qscale += val;
2413
939579
            if (((unsigned)sl->qscale) > max_qp){
2414
10602
                if (sl->qscale < 0) sl->qscale += max_qp + 1;
2415
5127
                else                sl->qscale -= max_qp + 1;
2416
            }
2417
939579
            sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2418
939579
            sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2419
        }else
2420
4577745
            sl->last_qscale_diff=0;
2421
2422
5517324
        if(IS_INTERLACED(mb_type)){
2423
2149681
            scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2424
2149681
            scan    = sl->qscale ? h->field_scan : h->field_scan_q0;
2425
        }else{
2426
3367643
            scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2427
3367643
            scan    = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2428
        }
2429
2430
5517324
        decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2431
5517324
        if (CHROMA444(h)) {
2432
75128
            decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2433
75128
            decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2434
5442196
        } else if (CHROMA422(h)) {
2435
465190
            if( cbp&0x30 ){
2436
                int c;
2437
1156512
                for (c = 0; c < 2; c++)
2438
771008
                    decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2439
                                                 CHROMA_DC_BLOCK_INDEX + c,
2440
                                                 ff_h264_chroma422_dc_scan, 8);
2441
            }
2442
2443
465190
            if( cbp&0x20 ) {
2444
                int c, i, i8x8;
2445
864102
                for( c = 0; c < 2; c++ ) {
2446
576068
                    int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2447
576068
                    qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2448
1728204
                    for (i8x8 = 0; i8x8 < 2; i8x8++) {
2449
5760680
                        for (i = 0; i < 4; i++) {
2450
4608544
                            const int index = 16 + 16 * c + 8*i8x8 + i;
2451
4608544
                            decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2452
4608544
                            mb += 16<<pixel_shift;
2453
                        }
2454
                    }
2455
                }
2456
            } else {
2457
177156
                fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2458
177156
                fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2459
            }
2460
        } else /* yuv420 */ {
2461
4977006
            if( cbp&0x30 ){
2462
                int c;
2463
7722621
                for (c = 0; c < 2; c++)
2464
5148414
                    decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16 * 16 * c) << pixel_shift),
2465
                                             3, CHROMA_DC_BLOCK_INDEX + c, ff_h264_chroma_dc_scan, 4);
2466
            }
2467
2468
4977006
            if( cbp&0x20 ) {
2469
                int c, i;
2470
4092693
                for( c = 0; c < 2; c++ ) {
2471
2728462
                    qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2472
13642310
                    for( i = 0; i < 4; i++ ) {
2473
10913848
                        const int index = 16 + 16 * c + i;
2474
10913848
                        decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2475
                    }
2476
                }
2477
            } else {
2478
3612775
                fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2479
3612775
                fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2480
            }
2481
        }
2482
    } else {
2483
865567
        fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2484
865567
        fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2485
865567
        fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2486
865567
        sl->last_qscale_diff = 0;
2487
    }
2488
2489
6382891
    h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2490
6382891
    write_back_non_zero_count(h, sl);
2491
2492
6382891
    return 0;
2493
}