GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/h264_cabac.c Lines: 625 642 97.4 %
Date: 2020-01-28 04:56:05 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
18088
void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
1264
{
1265
    int i;
1266
    const int8_t (*tab)[2];
1267
18088
    const int slice_qp = av_clip(sl->qscale - 6*(h->ps.sps->bit_depth_luma-8), 0, 51);
1268
1269
18088
    if (sl->slice_type_nos == AV_PICTURE_TYPE_I) tab = cabac_context_init_I;
1270
15647
    else                                 tab = cabac_context_init_PB[sl->cabac_init_idc];
1271
1272
    /* calculate pre-state */
1273
18540200
    for( i= 0; i < 1024; i++ ) {
1274
18522112
        int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1275
1276
18522112
        pre^= pre>>31;
1277
18522112
        if(pre > 124)
1278
331578
            pre= 124 + (pre&1);
1279
1280
18522112
        sl->cabac_state[i] =  pre;
1281
    }
1282
18088
}
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
2374689
static int decode_cabac_intra_mb_type(H264SliceContext *sl,
1297
                                      int ctx_base, int intra_slice)
1298
{
1299
2374689
    uint8_t *state= &sl->cabac_state[ctx_base];
1300
    int mb_type;
1301
1302
2374689
    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
925557
        if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1313
614808
            return 0;   /* I4x4 */
1314
    }
1315
1316
649632
    if( get_cabac_terminate( &sl->cabac ) )
1317
5659
        return 25;  /* PCM */
1318
1319
643973
    mb_type = 1; /* I16x16 */
1320
643973
    mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1321
643973
    if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1322
268805
        mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1323
643973
    mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1324
643973
    mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1325
643973
    return mb_type;
1326
}
1327
1328
7046951
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
7046951
    int ctx = 0;
1333
1334
7046951
    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
5853491
        int mb_xy = sl->mb_xy;
1351
5853491
        mba_xy = mb_xy - 1;
1352
5853491
        mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1353
    }
1354
1355

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

7046951
    if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1358
4577323
        ctx++;
1359
1360
7046951
    if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1361
3968118
        ctx += 13;
1362
7046951
    return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1363
}
1364
1365
16670916
static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
1366
{
1367
16670916
    int mode = 0;
1368
1369
16670916
    if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1370
8932835
        return pred_mode;
1371
1372
7738081
    mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1373
7738081
    mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1374
7738081
    mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1375
1376
7738081
    return mode + ( mode >= pred_mode );
1377
}
1378
1379
2316962
static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
1380
{
1381
2316962
    const int mba_xy = sl->left_mb_xy[0];
1382
2316962
    const int mbb_xy = sl->top_mb_xy;
1383
1384
2316962
    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

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

2316962
    if (sl->top_type        && h->chroma_pred_mode_table[mbb_xy] != 0)
1391
782596
        ctx++;
1392
1393
2316962
    if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1394
1286664
        return 0;
1395
1396
1030298
    if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1397
566883
        return 1;
1398
463415
    if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1399
264587
        return 2;
1400
    else
1401
198828
        return 3;
1402
}
1403
1404
5739160
static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
1405
{
1406
5739160
    int cbp_b, cbp_a, ctx, cbp = 0;
1407
1408
5739160
    cbp_a = sl->left_cbp;
1409
5739160
    cbp_b = sl->top_cbp;
1410
1411
5739160
    ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1412
5739160
    cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1413
5739160
    ctx = !(cbp   & 0x01) + 2 * !(cbp_b & 0x08);
1414
5739160
    cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1415
5739160
    ctx = !(cbp_a & 0x08) + 2 * !(cbp   & 0x01);
1416
5739160
    cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1417
5739160
    ctx = !(cbp   & 0x04) + 2 * !(cbp   & 0x02);
1418
5739160
    cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1419
5739160
    return cbp;
1420
}
1421
5603912
static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
1422
{
1423
    int ctx;
1424
    int cbp_a, cbp_b;
1425
1426
5603912
    cbp_a = (sl->left_cbp>>4)&0x03;
1427
5603912
    cbp_b = (sl-> top_cbp>>4)&0x03;
1428
1429
5603912
    ctx = 0;
1430
5603912
    if( cbp_a > 0 ) ctx++;
1431
5603912
    if( cbp_b > 0 ) ctx += 2;
1432
5603912
    if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1433
2912941
        return 0;
1434
1435
2690971
    ctx = 4;
1436
2690971
    if( cbp_a == 2 ) ctx++;
1437
2690971
    if( cbp_b == 2 ) ctx += 2;
1438
2690971
    return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1439
}
1440
1441
1925148
static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
1442
{
1443
1925148
    if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1444
714181
        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
1560548
static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
1452
{
1453
    int type;
1454
1560548
    if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1455
147065
        return 0;   /* B_Direct_8x8 */
1456
1413483
    if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1457
284901
        return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1458
1128582
    type = 3;
1459
1128582
    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
1118135
    type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1465
1118135
    type +=   get_cabac( &sl->cabac, &sl->cabac_state[39] );
1466
1118135
    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
25695446
static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
1499
{
1500
    int mvd;
1501
1502
25695446
    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
15174259
        *mvda= 0;
1505
15174259
        return 0;
1506
    }
1507
1508
10521187
    mvd= 1;
1509
10521187
    ctxbase+= 3;
1510

51303391
    while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1511
40782204
        if( mvd < 4 )
1512
19851558
            ctxbase++;
1513
40782204
        mvd++;
1514
    }
1515
1516
10521187
    if( mvd >= 9 ) {
1517
3534254
        int k = 3;
1518
7423576
        while( get_cabac_bypass( &sl->cabac ) ) {
1519
3889322
            mvd += 1 << k;
1520
3889322
            k++;
1521
3889322
            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
18026338
        while( k-- ) {
1527
14492084
            mvd += get_cabac_bypass( &sl->cabac )<<k;
1528
        }
1529
3534254
        *mvda=mvd < 70 ? mvd : 70;
1530
    }else
1531
6986933
        *mvda=mvd;
1532
10521187
    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
64525606
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
64525606
    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
64525606
    if( is_dc ) {
1559
6569836
        if( cat == 3 ) {
1560
5919550
            idx -= CHROMA_DC_BLOCK_INDEX;
1561
5919550
            nza = (sl->left_cbp>>(6+idx))&0x01;
1562
5919550
            nzb = (sl-> top_cbp>>(6+idx))&0x01;
1563
        } else {
1564
650286
            idx -= LUMA_DC_BLOCK_INDEX;
1565
650286
            nza = sl->left_cbp&(0x100<<idx);
1566
650286
            nzb = sl-> top_cbp&(0x100<<idx);
1567
        }
1568
    } else {
1569
57955770
        nza = sl->non_zero_count_cache[scan8[idx] - 1];
1570
57955770
        nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1571
    }
1572
1573
64525606
    if( nza > 0 )
1574
35891316
        ctx++;
1575
1576
64525606
    if( nzb > 0 )
1577
35695748
        ctx += 2;
1578
1579
64525606
    return base_ctx[cat] + ctx;
1580
}
1581
1582
static av_always_inline void
1583
44036916
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
44036916
    int coeff_count = 0;
1631
44036916
    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
44036916
    significant_coeff_ctx_base = sl->cabac_state
1654
44036916
        + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1655
44036916
    last_coeff_ctx_base = sl->cabac_state
1656
44036916
        + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1657
44036916
    abs_level_m1_ctx_base = sl->cabac_state
1658
44036916
        + coeff_abs_level_m1_offset[cat];
1659
1660

49129122
    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
5092206
        const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1677
#ifdef decode_significance
1678
5092206
        coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1679
                                                 last_coeff_ctx_base, sig_off);
1680
    } else {
1681

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


3532913
            DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1683
        } else {
1684
38290508
            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
44036916
    if( is_dc ) {
1700
4604710
        if( cat == 3 )
1701
4156824
            h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1702
        else
1703
447886
            h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1704
4604710
        sl->non_zero_count_cache[scan8[n]] = coeff_count;
1705
    } else {
1706
39432206
        if( max_coeff == 64 )
1707
5092206
            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
34340000
            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
44036916
    if (h->pixel_shift) {
1758






71561124
        STORE_BLOCK(int32_t)
1759
    } else {
1760






206057129
        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
44036916
}
1769
1770
3950508
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
3950508
    decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1778
3950508
}
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
39432206
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
39432206
    decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1799
39432206
}
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
5798828
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
5798828
    if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1822
1848320
        sl->non_zero_count_cache[scan8[n]] = 0;
1823
1848320
        return;
1824
    }
1825
3950508
    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
63028009
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

63028009
    if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1852
23595803
        if( max_coeff == 64 ) {
1853
16483
            fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1854
        } else {
1855
23579320
            sl->non_zero_count_cache[scan8[n]] = 0;
1856
        }
1857
23595803
        return;
1858
    }
1859
39432206
    decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1860
}
1861
1862
5667757
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
5667757
    int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1870
5667757
    if( IS_INTRA16x16( mb_type ) ) {
1871
650286
        AV_ZERO128(sl->mb_luma_dc[p]+0);
1872
650286
        AV_ZERO128(sl->mb_luma_dc[p]+8);
1873
650286
        AV_ZERO128(sl->mb_luma_dc[p]+16);
1874
650286
        AV_ZERO128(sl->mb_luma_dc[p]+24);
1875
650286
        decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1876
1877
650286
        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
308675
            fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1885
        }
1886
    } else {
1887
5017471
        int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1888
25087355
        for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1889
20069884
            if( cbp & (1<<i8x8) ) {
1890
14341383
                if( IS_8x8DCT(mb_type) ) {
1891
5108689
                    const int index = 16*p + 4*i8x8;
1892
5108689
                    decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1893
5108689
                                                scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1894
                } else {
1895
9232694
                    qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1896
46163470
                    for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1897
36930776
                        const int index = 16*p + 4*i8x8 + i4x4;
1898
//START_TIMER
1899
36930776
                        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
5728501
                fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1905
            }
1906
        }
1907
    }
1908
5667757
}
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
8496083
int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1915
{
1916
8496083
    const SPS *sps = h->ps.sps;
1917
    int mb_xy;
1918
8496083
    int mb_type, partition_count, cbp = 0;
1919
8496083
    int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
1920

8496083
    const int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1921
8496083
    const int pixel_shift = h->pixel_shift;
1922
1923
8496083
    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
8496083
    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

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

2107291
            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
2107291
            decode_mb_skip(h, sl);
1943
1944
2107291
            h->cbp_table[mb_xy] = 0;
1945
2107291
            h->chroma_pred_mode_table[mb_xy] = 0;
1946
2107291
            sl->last_qscale_diff = 0;
1947
1948
2107291
            return 0;
1949
1950
        }
1951
    }
1952
6388792
    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
6388792
    sl->prev_mb_skipped = 0;
1959
1960
6388792
    fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1961
1962
6388792
    if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1963
2628534
        int ctx = 0;
1964
        av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1965
1966
2628534
        if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1967
1911415
            ctx++;
1968
2628534
        if (!IS_DIRECT(sl->top_type - 1))
1969
1797494
            ctx++;
1970
1971
2628534
        if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1972
450356
            mb_type= 0; /* B_Direct_16x16 */
1973
2178178
        }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1974
776025
            mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1975
        }else{
1976
            int bits;
1977
1402153
            bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1978
1402153
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1979
1402153
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1980
1402153
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1981
1402153
            if( bits < 8 ){
1982
419930
                mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1983
982223
            }else if( bits == 13 ){
1984
444807
                mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1985
444807
                goto decode_intra_mb;
1986
537416
            }else if( bits == 14 ){
1987
14765
                mb_type= 11; /* B_L1_L0_8x16 */
1988
522651
            }else if( bits == 15 ){
1989
390137
                mb_type= 22; /* B_8x8 */
1990
            }else{
1991
132514
                bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1992
132514
                mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1993
            }
1994
        }
1995
2183727
            partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
1996
2183727
            mb_type         = ff_h264_b_mb_type_info[mb_type].type;
1997
3760258
    } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1998
2311126
        if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
1999
            /* P-type */
2000
1830376
            if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
2001
                /* P_L0_D16x16, P_8x8 */
2002
1535773
                mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2003
            } else {
2004
                /* P_L0_D8x16, P_L0_D16x8 */
2005
294603
                mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2006
            }
2007
1830376
            partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2008
1830376
            mb_type         = ff_h264_p_mb_type_info[mb_type].type;
2009
        } else {
2010
480750
            mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2011
480750
            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
2374689
        partition_count = 0;
2020
2374689
        cbp                      = ff_h264_i_mb_type_info[mb_type].cbp;
2021
2374689
        sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2022
2374689
        mb_type                  = ff_h264_i_mb_type_info[mb_type].type;
2023
    }
2024
6388792
    if (MB_FIELD(sl))
2025
2428425
        mb_type |= MB_TYPE_INTERLACED;
2026
2027
6388792
    h->slice_table[mb_xy] = sl->slice_num;
2028
2029
6388792
    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
6383133
    fill_decode_caches(h, sl, mb_type);
2067
2068
6383133
    if( IS_INTRA( mb_type ) ) {
2069
        int i, pred_mode;
2070
2369030
        if( IS_INTRA4x4( mb_type ) ) {
2071

1725057
            if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2072
910833
                mb_type |= MB_TYPE_8x8DCT;
2073
4554165
                for( i = 0; i < 16; i+=4 ) {
2074
3643332
                    int pred = pred_intra_mode(h, sl, i);
2075
3643332
                    int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2076
3643332
                    fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2077
                }
2078
            } else {
2079
13841808
                for( i = 0; i < 16; i++ ) {
2080
13027584
                    int pred = pred_intra_mode(h, sl, i);
2081
13027584
                    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
1725057
            write_back_intra_pred_mode(h, sl);
2088
1725057
            if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2089
1725057
                                                 sl->top_samples_available, sl->left_samples_available) < 0 )
2090
                return -1;
2091
        } else {
2092
1287946
            sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2093
643973
                                                                     sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2094
643973
            if (sl->intra16x16_pred_mode < 0) return -1;
2095
        }
2096
2369030
        if(decode_chroma){
2097
2316962
            h->chroma_pred_mode_table[mb_xy] =
2098
2316962
            pred_mode                        = decode_cabac_mb_chroma_pre_mode(h, sl);
2099
2100
2316962
            pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2101
2316962
                                                     sl->left_samples_available, pred_mode, 1 );
2102
2316962
            if( pred_mode < 0 ) return -1;
2103
2316962
            sl->chroma_pred_mode = pred_mode;
2104
        } else {
2105
52068
            sl->chroma_pred_mode = DC_128_PRED8x8;
2106
        }
2107
4014103
    } else if( partition_count == 4 ) {
2108
        int i, j, sub_partition_count[4], list, ref[2][4];
2109
2110
871424
        if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2111
1950685
            for( i = 0; i < 4; i++ ) {
2112
1560548
                sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2113
1560548
                sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2114
1560548
                sl->sub_mb_type[i]     = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2115
            }
2116
390137
            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
73314
                ff_h264_pred_direct_motion(h, sl, &mb_type);
2119
73314
                sl->ref_cache[0][scan8[4]] =
2120
73314
                sl->ref_cache[1][scan8[4]] =
2121
73314
                sl->ref_cache[0][scan8[12]] =
2122
73314
                sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2123
366570
                    for( i = 0; i < 4; i++ )
2124
293256
                        fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2125
            }
2126
        } else {
2127
2406435
            for( i = 0; i < 4; i++ ) {
2128
1925148
                sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2129
1925148
                sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2130
1925148
                sl->sub_mb_type[i]     = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2131
            }
2132
        }
2133
2134
2132985
        for( list = 0; list < sl->list_count; list++ ) {
2135
6307805
                for( i = 0; i < 4; i++ ) {
2136
5046244
                    if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2137
4752114
                    if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2138
4333655
                        unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2139
4333655
                        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
1396312
                            ref[list][i] = 0;
2147
                    } else {
2148
418459
                        ref[list][i] = -1;
2149
                    }
2150
4752114
                    sl->ref_cache[list][scan8[4 * i] + 1] =
2151
4752114
                    sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2152
                }
2153
        }
2154
2155
871424
        if(dct8x8_allowed)
2156
209764
            dct8x8_allowed = get_dct8x8_allowed(h, sl);
2157
2158
2132985
        for (list = 0; list < sl->list_count; list++) {
2159
6307805
            for(i=0; i<4; i++){
2160
5046244
                sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2161
5046244
                if(IS_DIRECT(sl->sub_mb_type[i])){
2162
294130
                    fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2163
294130
                    continue;
2164
                }
2165
2166

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

9128286
                        DECODE_CABAC_MB_MVD(sl, list, index)
2177
                        ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2178
2179
9128286
                        if(IS_SUB_8X8(sub_mb_type)){
2180
1321534
                            mv_cache[ 1 ][0]=
2181
1321534
                            mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2182
1321534
                            mv_cache[ 1 ][1]=
2183
1321534
                            mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2184
2185
1321534
                            mvd_cache[ 1 ][0]=
2186
1321534
                            mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2187
1321534
                            mvd_cache[ 1 ][1]=
2188
1321534
                            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
9128286
                        mv_cache[ 0 ][0]= mx;
2203
9128286
                        mv_cache[ 0 ][1]= my;
2204
2205
9128286
                        mvd_cache[ 0 ][0]= mpx;
2206
9128286
                        mvd_cache[ 0 ][1]= mpy;
2207
                    }
2208
                }else{
2209
418459
                    fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2210
418459
                    fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2211
                }
2212
            }
2213
        }
2214
3142679
    } 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
2692323
        if(IS_16X16(mb_type)){
2222
5024330
            for (list = 0; list < sl->list_count; list++) {
2223
2998058
                if(IS_DIR(mb_type, 0, list)){
2224
                    int ref;
2225
2222033
                    unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2226
2222033
                    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
886425
                        ref=0;
2234
2222033
                    fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2235
                }
2236
            }
2237
5024330
            for (list = 0; list < sl->list_count; list++) {
2238
2998058
                if(IS_DIR(mb_type, 0, list)){
2239
                    int mx,my,mpx,mpy;
2240
2222033
                    pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2241

2222033
                    DECODE_CABAC_MB_MVD(sl, list, 0)
2242
                    ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2243
2244
2222033
                    fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2245
2222033
                    fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2246
                }
2247
            }
2248
        }
2249
666051
        else if(IS_16X8(mb_type)){
2250
903444
            for (list = 0; list < sl->list_count; list++) {
2251
1655016
                    for(i=0; i<2; i++){
2252
1103344
                        if(IS_DIR(mb_type, i, list)){
2253
                            int ref;
2254
793407
                            unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2255
793407
                            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
280120
                                ref=0;
2263
793407
                            fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2264
                        }else
2265
309937
                            fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2266
                    }
2267
            }
2268
903444
            for (list = 0; list < sl->list_count; list++) {
2269
1655016
                for(i=0; i<2; i++){
2270
1103344
                    if(IS_DIR(mb_type, i, list)){
2271
                        int mx,my,mpx,mpy;
2272
793407
                        pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2273

793407
                        DECODE_CABAC_MB_MVD(sl, list, 8*i)
2274
                        ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2275
2276
793407
                        fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2277
793407
                        fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2278
                    }else{
2279
309937
                        fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2280
309937
                        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
800106
            for (list = 0; list < sl->list_count; list++) {
2287
1457481
                    for(i=0; i<2; i++){
2288
971654
                        if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2289
                            int ref;
2290
703997
                            unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2291
703997
                            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
260473
                                ref=0;
2299
703997
                            fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2300
                        }else
2301
267657
                            fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2302
                    }
2303
            }
2304
800106
            for (list = 0; list < sl->list_count; list++) {
2305
1457481
                for(i=0; i<2; i++){
2306
971654
                    if(IS_DIR(mb_type, i, list)){
2307
                        int mx,my,mpx,mpy;
2308
703997
                        pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2309

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

643973
        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
6383132
    h->cbp_table[mb_xy] = sl->cbp = cbp;
2340
2341

6383132
    if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2342
1318904
        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

6383132
    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
6383132
    h->cur_pic.mb_type[mb_xy] = mb_type;
2387
2388

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

5517501
        if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2394
939688
            int val = 1;
2395
939688
            int ctx= 2;
2396
939688
            const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2397
2398
6628951
            while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2399
5689263
                ctx= 3;
2400
5689263
                val++;
2401
5689263
                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
939688
            if( val&0x01 )
2408
467177
                val=   (val + 1)>>1 ;
2409
            else
2410
472511
                val= -((val + 1)>>1);
2411
939688
            sl->last_qscale_diff = val;
2412
939688
            sl->qscale += val;
2413
939688
            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
939688
            sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2418
939688
            sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2419
        }else
2420
4577813
            sl->last_qscale_diff=0;
2421
2422
5517501
        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
3367820
            scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2427
3367820
            scan    = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2428
        }
2429
2430
5517501
        decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2431
5517501
        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
5442373
        } 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
4977183
            if( cbp&0x30 ){
2462
                int c;
2463
7722813
                for (c = 0; c < 2; c++)
2464
5148542
                    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
4977183
            if( cbp&0x20 ) {
2469
                int c, i;
2470
4092834
                for( c = 0; c < 2; c++ ) {
2471
2728556
                    qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2472
13642780
                    for( i = 0; i < 4; i++ ) {
2473
10914224
                        const int index = 16 + 16 * c + i;
2474
10914224
                        decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2475
                    }
2476
                }
2477
            } else {
2478
3612905
                fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2479
3612905
                fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2480
            }
2481
        }
2482
    } else {
2483
865631
        fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2484
865631
        fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2485
865631
        fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2486
865631
        sl->last_qscale_diff = 0;
2487
    }
2488
2489
6383132
    h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2490
6383132
    write_back_non_zero_count(h, sl);
2491
2492
6383132
    return 0;
2493
}