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

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

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

2317358
    if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1387
859939
        ctx++;
1388
1389

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

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

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

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

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

38946414
        if (is_dc && chroma422) { // dc 422
1681


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






71561124
        STORE_BLOCK(int32_t)
1758
    } else {
1759






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

63030983
    if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1851
23596358
        if( max_coeff == 64 ) {
1852
16483
            fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1853
        } else {
1854
23579875
            sl->non_zero_count_cache[scan8[n]] = 0;
1855
        }
1856
23596358
        return;
1857
    }
1858
39434625
    decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1859
}
1860
1861
5668153
static av_always_inline void decode_cabac_luma_residual(const H264Context *h, H264SliceContext *sl,
1862
                                                        const uint8_t *scan, const uint8_t *scan8x8,
1863
                                                        int pixel_shift, int mb_type, int cbp, int p)
1864
{
1865
    static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1866
    const uint32_t *qmul;
1867
    int i8x8, i4x4;
1868
5668153
    int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1869
5668153
    if( IS_INTRA16x16( mb_type ) ) {
1870
650333
        AV_ZERO128(sl->mb_luma_dc[p]+0);
1871
650333
        AV_ZERO128(sl->mb_luma_dc[p]+8);
1872
650333
        AV_ZERO128(sl->mb_luma_dc[p]+16);
1873
650333
        AV_ZERO128(sl->mb_luma_dc[p]+24);
1874
650333
        decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1875
1876
650333
        if( cbp&15 ) {
1877
341616
            qmul = h->ps.pps->dequant4_coeff[p][qscale];
1878
5807472
            for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1879
5465856
                const int index = 16*p + i4x4;
1880
5465856
                decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1881
            }
1882
        } else {
1883
308717
            fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1884
        }
1885
    } else {
1886
5017820
        int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1887
25089100
        for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1888
20071280
            if( cbp & (1<<i8x8) ) {
1889
14342669
                if( IS_8x8DCT(mb_type) ) {
1890
5109975
                    const int index = 16*p + 4*i8x8;
1891
5109975
                    decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1892
5109975
                                                scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1893
                } else {
1894
9232694
                    qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1895
46163470
                    for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1896
36930776
                        const int index = 16*p + 4*i8x8 + i4x4;
1897
36930776
                        decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1898
                    }
1899
                }
1900
            } else {
1901
5728611
                fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1902
            }
1903
        }
1904
    }
1905
5668153
}
1906
1907
/**
1908
 * Decode a macroblock.
1909
 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1910
 */
1911
8496479
int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1912
{
1913
8496479
    const SPS *sps = h->ps.sps;
1914
    int mb_xy;
1915
8496479
    int mb_type, partition_count, cbp = 0;
1916
8496479
    int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
1917

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

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

2107291
            if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1933
108281
                h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1934
108281
                sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1935
108281
                if(!sl->next_mb_skipped)
1936
36910
                    sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1937
            }
1938
1939
2107291
            decode_mb_skip(h, sl);
1940
1941
2107291
            h->cbp_table[mb_xy] = 0;
1942
2107291
            h->chroma_pred_mode_table[mb_xy] = 0;
1943
2107291
            sl->last_qscale_diff = 0;
1944
1945
2107291
            return 0;
1946
1947
        }
1948
    }
1949
6389188
    if (FRAME_MBAFF(h)) {
1950
1385493
        if ((sl->mb_y & 1) == 0)
1951
690439
            sl->mb_mbaff =
1952
690439
            sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1953
    }
1954
1955
6389188
    sl->prev_mb_skipped = 0;
1956
1957
6389188
    fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1958
1959
6389188
    if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1960
2628534
        int ctx = 0;
1961
        av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1962
1963
2628534
        if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1964
1911415
            ctx++;
1965
2628534
        if (!IS_DIRECT(sl->top_type - 1))
1966
1797494
            ctx++;
1967
1968
2628534
        if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1969
450356
            mb_type= 0; /* B_Direct_16x16 */
1970
2178178
        }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1971
776025
            mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1972
        }else{
1973
            int bits;
1974
1402153
            bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1975
1402153
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1976
1402153
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1977
1402153
            bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1978
1402153
            if( bits < 8 ){
1979
419930
                mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1980
982223
            }else if( bits == 13 ){
1981
444807
                mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1982
444807
                goto decode_intra_mb;
1983
537416
            }else if( bits == 14 ){
1984
14765
                mb_type= 11; /* B_L1_L0_8x16 */
1985
522651
            }else if( bits == 15 ){
1986
390137
                mb_type= 22; /* B_8x8 */
1987
            }else{
1988
132514
                bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1989
132514
                mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1990
            }
1991
        }
1992
2183727
            partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
1993
2183727
            mb_type         = ff_h264_b_mb_type_info[mb_type].type;
1994
3760654
    } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1995
2311126
        if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
1996
            /* P-type */
1997
1830376
            if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
1998
                /* P_L0_D16x16, P_8x8 */
1999
1535773
                mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2000
            } else {
2001
                /* P_L0_D8x16, P_L0_D16x8 */
2002
294603
                mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2003
            }
2004
1830376
            partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2005
1830376
            mb_type         = ff_h264_p_mb_type_info[mb_type].type;
2006
        } else {
2007
480750
            mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2008
480750
            goto decode_intra_mb;
2009
        }
2010
    } else {
2011
1449528
        mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2012

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

1725406
            if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2069
911182
                mb_type |= MB_TYPE_8x8DCT;
2070
4555910
                for( i = 0; i < 16; i+=4 ) {
2071
3644728
                    int pred = pred_intra_mode(h, sl, i);
2072
3644728
                    int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2073
3644728
                    fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2074
                }
2075
            } else {
2076
13841808
                for( i = 0; i < 16; i++ ) {
2077
13027584
                    int pred = pred_intra_mode(h, sl, i);
2078
13027584
                    sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2079
2080
                    ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2081
                            sl->intra4x4_pred_mode_cache[scan8[i]]);
2082
                }
2083
            }
2084
1725406
            write_back_intra_pred_mode(h, sl);
2085
1725406
            if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2086
1725406
                                                 sl->top_samples_available, sl->left_samples_available) < 0 )
2087
                return -1;
2088
        } else {
2089
1288040
            sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2090
644020
                                                                     sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2091
644020
            if (sl->intra16x16_pred_mode < 0) return -1;
2092
        }
2093
2369426
        if(decode_chroma){
2094
2317358
            h->chroma_pred_mode_table[mb_xy] =
2095
2317358
            pred_mode                        = decode_cabac_mb_chroma_pre_mode(h, sl);
2096
2097
2317358
            pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2098
2317358
                                                     sl->left_samples_available, pred_mode, 1 );
2099
2317358
            if( pred_mode < 0 ) return -1;
2100
2317358
            sl->chroma_pred_mode = pred_mode;
2101
        } else {
2102
52068
            sl->chroma_pred_mode = DC_128_PRED8x8;
2103
        }
2104
4014103
    } else if( partition_count == 4 ) {
2105
        int i, j, sub_partition_count[4], list, ref[2][4];
2106
2107
871424
        if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2108
1950685
            for( i = 0; i < 4; i++ ) {
2109
1560548
                sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2110
1560548
                sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2111
1560548
                sl->sub_mb_type[i]     = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2112
            }
2113
390137
            if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2114
                          sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2115
73314
                ff_h264_pred_direct_motion(h, sl, &mb_type);
2116
73314
                sl->ref_cache[0][scan8[4]] =
2117
73314
                sl->ref_cache[1][scan8[4]] =
2118
73314
                sl->ref_cache[0][scan8[12]] =
2119
73314
                sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2120
366570
                    for( i = 0; i < 4; i++ )
2121
293256
                        fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2122
            }
2123
        } else {
2124
2406435
            for( i = 0; i < 4; i++ ) {
2125
1925148
                sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2126
1925148
                sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2127
1925148
                sl->sub_mb_type[i]     = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2128
            }
2129
        }
2130
2131
2132985
        for( list = 0; list < sl->list_count; list++ ) {
2132
6307805
                for( i = 0; i < 4; i++ ) {
2133
5046244
                    if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2134
4752114
                    if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2135
4333655
                        unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2136
4333655
                        if (rc > 1) {
2137
2937343
                            ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2138
2937343
                            if (ref[list][i] >= rc) {
2139
                                av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2140
                                return -1;
2141
                            }
2142
                        }else
2143
1396312
                            ref[list][i] = 0;
2144
                    } else {
2145
418459
                        ref[list][i] = -1;
2146
                    }
2147
4752114
                    sl->ref_cache[list][scan8[4 * i] + 1] =
2148
4752114
                    sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2149
                }
2150
        }
2151
2152
871424
        if(dct8x8_allowed)
2153
209764
            dct8x8_allowed = get_dct8x8_allowed(h, sl);
2154
2155
2132985
        for (list = 0; list < sl->list_count; list++) {
2156
6307805
            for(i=0; i<4; i++){
2157
5046244
                sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2158
5046244
                if(IS_DIRECT(sl->sub_mb_type[i])){
2159
294130
                    fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2160
294130
                    continue;
2161
                }
2162
2163

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

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

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

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

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

644020
        if (!decode_chroma && cbp>15) {
2331
1
            av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2332
1
            return AVERROR_INVALIDDATA;
2333
        }
2334
    }
2335
2336
6383528
    h->cbp_table[mb_xy] = sl->cbp = cbp;
2337
2338

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

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

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

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

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

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

11901425
    if( cbp || IS_INTRA16x16( mb_type ) ) {
2386
        const uint8_t *scan, *scan8x8;
2387
        const uint32_t *qmul;
2388
2389
        // decode_cabac_mb_dqp
2390

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