aarch64: Add assembly support for -fsanitize=hwaddress tagged globals.
[libav.git] / libavcodec / h264_cabac.c
blobc0b9e30e61a348e1656224afb84219f838f47380
1 /*
2 * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
5 * This file is part of Libav.
7 * Libav 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.
12 * Libav 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.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 /**
23 * @file
24 * H.264 / AVC / MPEG-4 part10 cabac decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
28 #define CABAC(h) 1
29 #define INT_BIT (CHAR_BIT * sizeof(int))
31 #include "libavutil/attributes.h"
32 #include "libavutil/timer.h"
33 #include "config.h"
34 #include "cabac.h"
35 #include "cabac_functions.h"
36 #include "internal.h"
37 #include "avcodec.h"
38 #include "h264dec.h"
39 #include "h264data.h"
40 #include "h264_mvpred.h"
41 #include "mpegutils.h"
43 #if ARCH_X86
44 #include "x86/h264_cabac.c"
45 #endif
47 #include <assert.h>
49 /* Cabac pre state table */
51 static const int8_t cabac_context_init_I[1024][2] =
53 /* 0 - 10 */
54 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
55 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
56 { -6, 53 }, { -1, 54 }, { 7, 51 },
58 /* 11 - 23 unused for I */
59 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
60 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
61 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
62 { 0, 0 },
64 /* 24- 39 */
65 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
66 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
67 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
68 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
70 /* 40 - 53 */
71 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
72 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
73 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
74 { 0, 0 }, { 0, 0 },
76 /* 54 - 59 */
77 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
78 { 0, 0 }, { 0, 0 },
80 /* 60 - 69 */
81 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
82 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
83 { 13, 41 }, { 3, 62 },
85 /* 70 -> 87 */
86 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
87 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
88 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
89 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
90 { -12, 115 },{ -16, 122 },
92 /* 88 -> 104 */
93 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
94 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
95 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
96 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
97 { -22, 125 },
99 /* 105 -> 135 */
100 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
101 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
102 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
103 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
104 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
105 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
106 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
107 { 14, 62 }, { -13, 108 },{ -15, 100 },
109 /* 136 -> 165 */
110 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
111 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
112 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
113 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
114 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
115 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
116 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
117 { 0, 62 }, { 12, 72 },
119 /* 166 -> 196 */
120 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
121 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
122 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
123 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
124 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
125 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
126 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
127 { 0, 89 }, { 26, -19 }, { 22, -17 },
129 /* 197 -> 226 */
130 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
131 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
132 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
133 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
134 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
135 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
136 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
137 { 12, 68 }, { 2, 97 },
139 /* 227 -> 251 */
140 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
141 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
142 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
143 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
144 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
145 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
146 { -4, 65 },
148 /* 252 -> 275 */
149 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
150 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
151 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
152 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
153 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
154 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
156 /* 276 a bit special (not used, bypass is used instead) */
157 { 0, 0 },
159 /* 277 -> 307 */
160 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
161 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
162 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
163 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
164 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
165 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
166 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
167 { 9, 64 }, { -12, 104 },{ -11, 97 },
169 /* 308 -> 337 */
170 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
171 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
172 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
173 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
174 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
175 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
176 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
177 { 5, 64 }, { 12, 70 },
179 /* 338 -> 368 */
180 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
181 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
182 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
183 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
184 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
185 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
186 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
187 { -12, 109 },{ 36, -35 }, { 36, -34 },
189 /* 369 -> 398 */
190 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
191 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
192 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
193 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
194 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
195 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
196 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
197 { 29, 39 }, { 19, 66 },
199 /* 399 -> 435 */
200 { 31, 21 }, { 31, 31 }, { 25, 50 },
201 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
202 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
203 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
204 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
205 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
206 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
207 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
208 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
209 { 0, 68 }, { -9, 92 },
211 /* 436 -> 459 */
212 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
213 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
214 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
215 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
216 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
217 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
219 /* 460 -> 1024 */
220 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
221 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
222 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
223 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
224 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
225 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
226 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
227 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
228 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
229 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
230 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
231 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
232 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
233 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
234 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
235 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
236 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
237 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
238 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
239 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
240 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
241 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
242 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
243 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
244 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
245 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
246 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
247 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
248 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
249 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
250 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
251 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
252 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
253 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
254 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
255 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
256 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
257 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
258 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
259 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
260 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
261 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
262 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
263 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
264 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
265 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
266 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
267 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
268 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
269 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
270 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
271 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
272 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
273 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 },
274 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 },
275 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 },
276 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 },
277 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 },
278 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 },
279 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 },
280 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
281 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
282 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
283 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
284 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 },
285 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 },
286 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 },
287 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 },
288 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 },
289 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 },
290 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 },
291 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 },
292 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 },
293 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 },
294 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 },
295 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 },
296 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 },
297 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 },
298 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 },
299 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
300 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
301 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
302 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
303 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
304 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
305 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
306 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
307 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
308 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
309 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
310 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
311 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
312 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
313 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
314 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
315 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
316 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
317 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
318 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
319 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
320 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
321 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
322 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
323 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
324 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
325 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
326 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
327 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
328 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
329 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
330 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
331 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
332 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
333 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
334 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
335 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
336 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
337 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
338 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
339 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
340 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
341 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
342 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
343 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
344 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
345 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
346 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
347 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
348 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
349 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 },
350 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 },
351 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 },
352 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 },
353 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 },
354 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 },
355 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 },
356 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 },
357 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 },
358 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
359 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
360 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }
363 static const int8_t cabac_context_init_PB[3][1024][2] =
365 /* i_cabac_init_idc == 0 */
367 /* 0 - 10 */
368 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
369 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
370 { -6, 53 }, { -1, 54 }, { 7, 51 },
372 /* 11 - 23 */
373 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
374 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
375 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
376 { 17, 50 },
378 /* 24 - 39 */
379 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
380 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
381 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
382 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
384 /* 40 - 53 */
385 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
386 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
387 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
388 { -3, 81 }, { 0, 88 },
390 /* 54 - 59 */
391 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
392 { -7, 72 }, { 1, 58 },
394 /* 60 - 69 */
395 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
396 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
397 { 13, 41 }, { 3, 62 },
399 /* 70 - 87 */
400 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
401 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
402 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
403 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
404 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
405 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
406 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
407 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
408 { 0, 68 }, { -4, 69 }, { -8, 88 },
410 /* 105 -> 165 */
411 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
412 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
413 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
414 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
415 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
416 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
417 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
418 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
419 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
420 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
421 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
422 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
423 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
424 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
425 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
426 { 9, 69 },
428 /* 166 - 226 */
429 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
430 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
431 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
432 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
433 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
434 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
435 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
436 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
437 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
438 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
439 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
440 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
441 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
442 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
443 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
444 { -9, 108 },
446 /* 227 - 275 */
447 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
448 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
449 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
450 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
451 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
452 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
453 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
454 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
455 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
456 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
457 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
458 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
459 { -8, 85 },
461 /* 276 a bit special (not used, bypass is used instead) */
462 { 0, 0 },
464 /* 277 - 337 */
465 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
466 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
467 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
468 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
469 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
470 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
471 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
472 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
473 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
474 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
475 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
476 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
477 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
478 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
479 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
480 { 26, 43 },
482 /* 338 - 398 */
483 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
484 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
485 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
486 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
487 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
488 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
489 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
490 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
491 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
492 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
493 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
494 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
495 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
496 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
497 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
498 { 11, 86 },
500 /* 399 - 435 */
501 { 12, 40 }, { 11, 51 }, { 14, 59 },
502 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
503 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
504 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
505 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
506 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
507 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
508 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
509 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
510 { -8, 66 }, { -8, 76 },
512 /* 436 - 459 */
513 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
514 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
515 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
516 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
517 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
518 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
520 /* 460 - 1024 */
521 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
522 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
523 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
524 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
525 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
526 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
527 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
528 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
529 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
530 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
531 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
532 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
533 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
534 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
535 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
536 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
537 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
538 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
539 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
540 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
541 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
542 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
543 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
544 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
545 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
546 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
547 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
548 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
549 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
550 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
551 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
552 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
553 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
554 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
555 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
556 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
557 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
558 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
559 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
560 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
561 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
562 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
563 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
564 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
565 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
566 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
567 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
568 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
569 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
570 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
571 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
572 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
573 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
574 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 },
575 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 },
576 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 },
577 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 },
578 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 },
579 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 },
580 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 },
581 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
582 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
583 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
584 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
585 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 },
586 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 },
587 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 },
588 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 },
589 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 },
590 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 },
591 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 },
592 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 },
593 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 },
594 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 },
595 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 },
596 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 },
597 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 },
598 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 },
599 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 },
600 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
601 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
602 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
603 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
604 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
605 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
606 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
607 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
608 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
609 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
610 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
611 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
612 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
613 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
614 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
615 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
616 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
617 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
618 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
619 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
620 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
621 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
622 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
623 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
624 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
625 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
626 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
627 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
628 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
629 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
630 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
631 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
632 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
633 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
634 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
635 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
636 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
637 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
638 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
639 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
640 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
641 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
642 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
643 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
644 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
645 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
646 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
647 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
648 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
649 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
650 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
651 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 },
652 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 },
653 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 },
654 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 },
655 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 },
656 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 },
657 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 },
658 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 },
659 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
660 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
661 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }
664 /* i_cabac_init_idc == 1 */
666 /* 0 - 10 */
667 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
668 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
669 { -6, 53 }, { -1, 54 }, { 7, 51 },
671 /* 11 - 23 */
672 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
673 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
674 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
675 { 10, 54 },
677 /* 24 - 39 */
678 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
679 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
680 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
681 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
683 /* 40 - 53 */
684 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
685 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
686 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
687 { -7, 86 },{ -5, 95 },
689 /* 54 - 59 */
690 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
691 { -5, 72 },{ 0, 61 },
693 /* 60 - 69 */
694 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
695 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
696 { 13, 41 }, { 3, 62 },
698 /* 70 - 104 */
699 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
700 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
701 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
702 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
703 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
704 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
705 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
706 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
707 { 0, 68 }, { -7, 74 }, { -9, 88 },
709 /* 105 -> 165 */
710 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
711 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
712 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
713 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
714 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
715 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
716 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
717 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
718 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
719 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
720 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
721 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
722 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
723 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
724 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
725 { 0, 89 },
727 /* 166 - 226 */
728 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
729 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
730 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
731 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
732 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
733 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
734 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
735 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
736 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
737 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
738 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
739 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
740 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
741 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
742 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
743 { -10, 116 },
745 /* 227 - 275 */
746 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
747 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
748 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
749 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
750 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
751 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
752 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
753 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
754 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
755 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
756 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
757 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
758 { -4, 78 },
760 /* 276 a bit special (not used, bypass is used instead) */
761 { 0, 0 },
763 /* 277 - 337 */
764 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
765 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
766 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
767 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
768 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
769 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
770 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
771 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
772 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
773 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
774 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
775 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
776 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
777 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
778 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
779 { 18, 50 },
781 /* 338 - 398 */
782 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
783 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
784 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
785 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
786 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
787 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
788 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
789 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
790 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
791 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
792 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
793 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
794 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
795 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
796 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
797 { 11, 83 },
799 /* 399 - 435 */
800 { 25, 32 }, { 21, 49 }, { 21, 54 },
801 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
802 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
803 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
804 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
805 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
806 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
807 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
808 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
809 { -4, 67 }, { -7, 82 },
811 /* 436 - 459 */
812 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
813 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
814 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
815 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
816 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
817 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
819 /* 460 - 1024 */
820 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
821 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
822 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
823 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
824 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
825 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
826 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
827 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
828 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
829 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
830 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
831 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
832 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
833 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
834 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
835 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
836 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
837 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
838 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
839 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
840 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
841 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
842 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
843 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
844 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
845 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
846 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
847 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
848 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
849 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
850 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
851 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
852 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
853 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
854 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
855 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
856 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
857 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
858 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
859 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
860 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
861 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
862 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
863 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
864 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
865 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
866 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
867 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
868 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
869 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
870 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
871 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
872 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
873 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 },
874 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 },
875 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 },
876 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 },
877 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 },
878 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 },
879 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 },
880 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
881 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
882 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
883 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
884 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 },
885 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 },
886 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 },
887 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 },
888 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 },
889 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 },
890 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 },
891 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 },
892 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 },
893 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 },
894 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 },
895 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 },
896 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 },
897 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 },
898 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 },
899 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
900 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
901 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
902 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
903 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
904 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
905 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
906 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
907 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
908 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
909 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
910 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
911 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
912 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
913 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
914 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
915 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
916 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
917 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
918 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
919 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
920 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
921 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
922 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
923 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
924 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
925 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
926 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
927 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
928 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
929 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
930 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
931 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
932 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
933 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
934 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
935 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
936 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
937 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
938 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
939 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
940 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
941 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
942 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
943 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
944 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
945 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
946 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
947 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
948 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
949 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
950 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 },
951 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 },
952 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 },
953 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 },
954 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 },
955 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 },
956 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 },
957 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 },
958 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
959 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
960 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }
963 /* i_cabac_init_idc == 2 */
965 /* 0 - 10 */
966 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
967 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
968 { -6, 53 }, { -1, 54 }, { 7, 51 },
970 /* 11 - 23 */
971 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
972 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
973 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
974 { 14, 57 },
976 /* 24 - 39 */
977 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
978 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
979 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
980 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
982 /* 40 - 53 */
983 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
984 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
985 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
986 { -3, 90 },{ -1, 101 },
988 /* 54 - 59 */
989 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
990 { -7, 50 },{ 1, 60 },
992 /* 60 - 69 */
993 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
994 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
995 { 13, 41 }, { 3, 62 },
997 /* 70 - 104 */
998 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
999 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
1000 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
1001 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
1002 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1003 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1004 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1005 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1006 { 3, 68 }, { -8, 71 }, { -13, 98 },
1008 /* 105 -> 165 */
1009 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1010 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1011 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1012 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1013 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1014 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1015 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1016 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1017 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1018 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1019 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1020 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1021 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1022 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1023 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1024 { -22, 127 },
1026 /* 166 - 226 */
1027 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1028 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1029 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1030 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1031 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1032 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1033 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1034 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1035 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1036 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1037 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1038 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1039 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1040 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1041 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1042 { -24, 127 },
1044 /* 227 - 275 */
1045 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1046 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1047 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1048 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1049 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1050 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1051 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1052 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1053 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1054 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1055 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1056 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1057 { -10, 87 },
1059 /* 276 a bit special (not used, bypass is used instead) */
1060 { 0, 0 },
1062 /* 277 - 337 */
1063 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1064 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1065 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1066 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1067 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1068 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1069 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1070 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1071 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1072 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1073 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1074 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1075 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1076 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1077 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1078 { 25, 42 },
1080 /* 338 - 398 */
1081 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1082 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1083 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1084 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1085 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1086 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1087 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1088 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1089 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1090 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1091 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1092 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1093 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1094 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1095 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1096 { 25, 61 },
1098 /* 399 - 435 */
1099 { 21, 33 }, { 19, 50 }, { 17, 61 },
1100 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1101 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1102 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1103 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1104 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1105 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1106 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1107 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1108 { -6, 68 }, { -10, 79 },
1110 /* 436 - 459 */
1111 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1112 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1113 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1114 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1115 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1116 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1118 /* 460 - 1024 */
1119 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1120 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1121 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1122 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1123 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1124 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1125 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1126 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1127 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1128 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1129 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1130 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1131 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1132 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1133 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1134 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1135 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1136 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1137 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1138 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1139 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1140 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1141 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1142 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1143 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1144 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1145 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1146 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1147 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1148 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1149 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1150 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1151 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1152 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1153 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1154 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1155 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1156 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1157 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1158 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1159 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1160 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1161 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1162 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1163 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1164 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1165 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1166 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1167 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1168 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1169 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1170 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1171 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1172 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 },
1173 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 },
1174 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 },
1175 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 },
1176 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 },
1177 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 },
1178 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 },
1179 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1180 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1181 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1182 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1183 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 },
1184 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 },
1185 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 },
1186 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 },
1187 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 },
1188 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 },
1189 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 },
1190 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 },
1191 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 },
1192 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 },
1193 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 },
1194 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 },
1195 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 },
1196 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 },
1197 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 },
1198 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1199 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1200 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1201 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1202 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1203 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1204 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1205 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1206 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1207 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1208 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1209 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1210 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1211 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1212 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1213 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1214 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1215 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1216 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1217 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1218 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1219 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1220 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1221 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1222 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1223 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1224 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1225 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1226 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1227 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1228 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1229 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1230 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1231 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1232 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1233 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1234 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1235 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1236 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1237 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1238 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1239 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1240 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1241 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1242 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1243 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1244 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1245 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1246 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1247 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1248 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1249 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 },
1250 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 },
1251 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 },
1252 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 },
1253 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 },
1254 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 },
1255 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 },
1256 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 },
1257 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1258 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1259 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }
1263 void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
1265 int i;
1266 const int8_t (*tab)[2];
1267 const int slice_qp = av_clip(sl->qscale - 6*(h->ps.sps->bit_depth_luma-8), 0, 51);
1269 if (sl->slice_type_nos == AV_PICTURE_TYPE_I) tab = cabac_context_init_I;
1270 else tab = cabac_context_init_PB[sl->cabac_init_idc];
1272 /* calculate pre-state */
1273 for( i= 0; i < 1024; i++ ) {
1274 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1276 pre^= pre>>31;
1277 if(pre > 124)
1278 pre= 124 + (pre&1);
1280 sl->cabac_state[i] = pre;
1284 static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
1286 const long mbb_xy = sl->mb_xy - 2L*h->mb_stride;
1288 unsigned long ctx = 0;
1290 ctx += sl->mb_field_decoding_flag & !!sl->mb_x; //for FMO:(s->current_picture.mb_type[mba_xy] >> 7) & (h->slice_table[mba_xy] == h->slice_num);
1291 ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
1293 return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
1296 static int decode_cabac_intra_mb_type(H264SliceContext *sl,
1297 int ctx_base, int intra_slice)
1299 uint8_t *state= &sl->cabac_state[ctx_base];
1300 int mb_type;
1302 if(intra_slice){
1303 int ctx=0;
1304 if (sl->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1305 ctx++;
1306 if (sl->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1307 ctx++;
1308 if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
1309 return 0; /* I4x4 */
1310 state += 2;
1311 }else{
1312 if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1313 return 0; /* I4x4 */
1316 if( get_cabac_terminate( &sl->cabac ) )
1317 return 25; /* PCM */
1319 mb_type = 1; /* I16x16 */
1320 mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1321 if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1322 mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1323 mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1324 mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1325 return mb_type;
1328 static int decode_cabac_mb_skip(const H264Context *h, H264SliceContext *sl,
1329 int mb_x, int mb_y)
1331 int mba_xy, mbb_xy;
1332 int ctx = 0;
1334 if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1335 int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1336 mba_xy = mb_xy - 1;
1337 if( (mb_y&1)
1338 && h->slice_table[mba_xy] == sl->slice_num
1339 && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1340 mba_xy += h->mb_stride;
1341 if (MB_FIELD(sl)) {
1342 mbb_xy = mb_xy - h->mb_stride;
1343 if( !(mb_y&1)
1344 && h->slice_table[mbb_xy] == sl->slice_num
1345 && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
1346 mbb_xy -= h->mb_stride;
1347 }else
1348 mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1349 }else{
1350 int mb_xy = sl->mb_xy;
1351 mba_xy = mb_xy - 1;
1352 mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1355 if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1356 ctx++;
1357 if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1358 ctx++;
1360 if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1361 ctx += 13;
1362 return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1365 static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
1367 int mode = 0;
1369 if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1370 return pred_mode;
1372 mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1373 mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1374 mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1376 return mode + ( mode >= pred_mode );
1379 static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
1381 const int mba_xy = sl->left_mb_xy[0];
1382 const int mbb_xy = sl->top_mb_xy;
1384 int ctx = 0;
1386 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1387 if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1388 ctx++;
1390 if (sl->top_type && h->chroma_pred_mode_table[mbb_xy] != 0)
1391 ctx++;
1393 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1394 return 0;
1396 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1397 return 1;
1398 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1399 return 2;
1400 else
1401 return 3;
1404 static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
1406 int cbp_b, cbp_a, ctx, cbp = 0;
1408 cbp_a = sl->left_cbp;
1409 cbp_b = sl->top_cbp;
1411 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1412 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1413 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1414 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1415 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1416 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1417 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1418 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1419 return cbp;
1421 static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
1423 int ctx;
1424 int cbp_a, cbp_b;
1426 cbp_a = (sl->left_cbp>>4)&0x03;
1427 cbp_b = (sl-> top_cbp>>4)&0x03;
1429 ctx = 0;
1430 if( cbp_a > 0 ) ctx++;
1431 if( cbp_b > 0 ) ctx += 2;
1432 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1433 return 0;
1435 ctx = 4;
1436 if( cbp_a == 2 ) ctx++;
1437 if( cbp_b == 2 ) ctx += 2;
1438 return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1441 static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
1443 if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1444 return 0; /* 8x8 */
1445 if( !get_cabac( &sl->cabac, &sl->cabac_state[22] ) )
1446 return 1; /* 8x4 */
1447 if( get_cabac( &sl->cabac, &sl->cabac_state[23] ) )
1448 return 2; /* 4x8 */
1449 return 3; /* 4x4 */
1451 static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
1453 int type;
1454 if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1455 return 0; /* B_Direct_8x8 */
1456 if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1457 return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1458 type = 3;
1459 if( get_cabac( &sl->cabac, &sl->cabac_state[38] ) ) {
1460 if( get_cabac( &sl->cabac, &sl->cabac_state[39] ) )
1461 return 11 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1462 type += 4;
1464 type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1465 type += get_cabac( &sl->cabac, &sl->cabac_state[39] );
1466 return type;
1469 static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
1471 int refa = sl->ref_cache[list][scan8[n] - 1];
1472 int refb = sl->ref_cache[list][scan8[n] - 8];
1473 int ref = 0;
1474 int ctx = 0;
1476 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1477 if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1478 ctx++;
1479 if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1480 ctx += 2;
1481 } else {
1482 if( refa > 0 )
1483 ctx++;
1484 if( refb > 0 )
1485 ctx += 2;
1488 while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
1489 ref++;
1490 ctx = (ctx>>2)+4;
1491 if(ref >= 32 /*h->ref_list[list]*/){
1492 return -1;
1495 return ref;
1498 static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
1500 int mvd;
1502 if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1503 // if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1504 *mvda= 0;
1505 return 0;
1508 mvd= 1;
1509 ctxbase+= 3;
1510 while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1511 if( mvd < 4 )
1512 ctxbase++;
1513 mvd++;
1516 if( mvd >= 9 ) {
1517 int k = 3;
1518 while( get_cabac_bypass( &sl->cabac ) ) {
1519 mvd += 1 << k;
1520 k++;
1521 if(k>24){
1522 av_log(sl->h264->avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1523 return INT_MIN;
1526 while( k-- ) {
1527 mvd += get_cabac_bypass( &sl->cabac )<<k;
1529 *mvda=mvd < 70 ? mvd : 70;
1530 }else
1531 *mvda=mvd;
1532 return get_cabac_bypass_sign( &sl->cabac, -mvd );
1535 #define DECODE_CABAC_MB_MVD(sl, list, n )\
1537 int amvd0 = sl->mvd_cache[list][scan8[n] - 1][0] +\
1538 sl->mvd_cache[list][scan8[n] - 8][0];\
1539 int amvd1 = sl->mvd_cache[list][scan8[n] - 1][1] +\
1540 sl->mvd_cache[list][scan8[n] - 8][1];\
1542 mx += decode_cabac_mb_mvd(sl, 40, amvd0, &mpx);\
1543 my += decode_cabac_mb_mvd(sl, 47, amvd1, &mpy);\
1546 static av_always_inline int get_cabac_cbf_ctx(H264SliceContext *sl,
1547 int cat, int idx, int max_coeff,
1548 int is_dc)
1550 int nza, nzb;
1551 int ctx = 0;
1552 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1554 if( is_dc ) {
1555 if( cat == 3 ) {
1556 idx -= CHROMA_DC_BLOCK_INDEX;
1557 nza = (sl->left_cbp>>(6+idx))&0x01;
1558 nzb = (sl-> top_cbp>>(6+idx))&0x01;
1559 } else {
1560 idx -= LUMA_DC_BLOCK_INDEX;
1561 nza = sl->left_cbp&(0x100<<idx);
1562 nzb = sl-> top_cbp&(0x100<<idx);
1564 } else {
1565 nza = sl->non_zero_count_cache[scan8[idx] - 1];
1566 nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1569 if( nza > 0 )
1570 ctx++;
1572 if( nzb > 0 )
1573 ctx += 2;
1575 return base_ctx[cat] + ctx;
1578 static av_always_inline void
1579 decode_cabac_residual_internal(const H264Context *h, H264SliceContext *sl,
1580 int16_t *block,
1581 int cat, int n, const uint8_t *scantable,
1582 const uint32_t *qmul, int max_coeff,
1583 int is_dc, int chroma422)
1585 static const int significant_coeff_flag_offset[2][14] = {
1586 { 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 },
1587 { 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 }
1589 static const int last_coeff_flag_offset[2][14] = {
1590 { 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 },
1591 { 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 }
1593 static const int coeff_abs_level_m1_offset[14] = {
1594 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
1596 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1597 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1598 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1599 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1600 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1601 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1602 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1603 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1604 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1606 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1607 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1608 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1609 * map node ctx => cabac ctx for level=1 */
1610 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1611 /* map node ctx => cabac ctx for level>1 */
1612 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1613 { 5, 5, 5, 5, 6, 7, 8, 9 },
1614 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1616 static const uint8_t coeff_abs_level_transition[2][8] = {
1617 /* update node ctx after decoding a level=1 */
1618 { 1, 2, 3, 3, 4, 5, 6, 7 },
1619 /* update node ctx after decoding a level>1 */
1620 { 4, 4, 4, 4, 5, 6, 7, 7 }
1623 int index[64];
1625 int last;
1626 int coeff_count = 0;
1627 int node_ctx = 0;
1629 uint8_t *significant_coeff_ctx_base;
1630 uint8_t *last_coeff_ctx_base;
1631 uint8_t *abs_level_m1_ctx_base;
1633 #if !ARCH_X86
1634 #define CABAC_ON_STACK
1635 #endif
1636 #ifdef CABAC_ON_STACK
1637 #define CC &cc
1638 CABACContext cc;
1639 cc.range = sl->cabac.range;
1640 cc.low = sl->cabac.low;
1641 cc.bytestream= sl->cabac.bytestream;
1642 cc.bytestream_end = sl->cabac.bytestream_end;
1643 #else
1644 #define CC &sl->cabac
1645 #endif
1647 significant_coeff_ctx_base = sl->cabac_state
1648 + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1649 last_coeff_ctx_base = sl->cabac_state
1650 + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1651 abs_level_m1_ctx_base = sl->cabac_state
1652 + coeff_abs_level_m1_offset[cat];
1654 if( !is_dc && max_coeff == 64 ) {
1655 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1656 for(last= 0; last < coefs; last++) { \
1657 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1658 if( get_cabac( CC, sig_ctx )) { \
1659 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1660 index[coeff_count++] = last; \
1661 if( get_cabac( CC, last_ctx ) ) { \
1662 last= max_coeff; \
1663 break; \
1667 if( last == max_coeff -1 ) {\
1668 index[coeff_count++] = last;\
1670 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1671 #ifdef decode_significance
1672 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1673 last_coeff_ctx_base, sig_off);
1674 } else {
1675 if (is_dc && chroma422) { // dc 422
1676 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1677 } else {
1678 coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1679 last_coeff_ctx_base-significant_coeff_ctx_base);
1681 #else
1682 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1683 } else {
1684 if (is_dc && chroma422) { // dc 422
1685 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1686 } else {
1687 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1689 #endif
1691 assert(coeff_count > 0);
1693 if( is_dc ) {
1694 if( cat == 3 )
1695 h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1696 else
1697 h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1698 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1699 } else {
1700 if( max_coeff == 64 )
1701 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1702 else {
1703 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1704 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1708 #define STORE_BLOCK(type) \
1709 do { \
1710 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1712 int j= scantable[index[--coeff_count]]; \
1714 if( get_cabac( CC, ctx ) == 0 ) { \
1715 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1716 if( is_dc ) { \
1717 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1718 }else{ \
1719 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1721 } else { \
1722 int coeff_abs = 2; \
1723 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1724 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1726 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1727 coeff_abs++; \
1730 if( coeff_abs >= 15 ) { \
1731 int j = 0; \
1732 while (get_cabac_bypass(CC) && j < 30) { \
1733 j++; \
1736 coeff_abs=1; \
1737 while( j-- ) { \
1738 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1740 coeff_abs+= 14; \
1743 if( is_dc ) { \
1744 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1745 }else{ \
1746 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1749 } while ( coeff_count );
1751 if (h->pixel_shift) {
1752 STORE_BLOCK(int32_t)
1753 } else {
1754 STORE_BLOCK(int16_t)
1756 #ifdef CABAC_ON_STACK
1757 sl->cabac.range = cc.range ;
1758 sl->cabac.low = cc.low ;
1759 sl->cabac.bytestream= cc.bytestream;
1760 #endif
1764 static av_noinline void decode_cabac_residual_dc_internal(const H264Context *h,
1765 H264SliceContext *sl,
1766 int16_t *block,
1767 int cat, int n,
1768 const uint8_t *scantable,
1769 int max_coeff)
1771 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1774 static av_noinline void decode_cabac_residual_dc_internal_422(const H264Context *h,
1775 H264SliceContext *sl,
1776 int16_t *block,
1777 int cat, int n,
1778 const uint8_t *scantable,
1779 int max_coeff)
1781 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1784 static av_noinline void decode_cabac_residual_nondc_internal(const H264Context *h,
1785 H264SliceContext *sl,
1786 int16_t *block,
1787 int cat, int n,
1788 const uint8_t *scantable,
1789 const uint32_t *qmul,
1790 int max_coeff)
1792 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1795 /* cat: 0-> DC 16x16 n = 0
1796 * 1-> AC 16x16 n = luma4x4idx
1797 * 2-> Luma4x4 n = luma4x4idx
1798 * 3-> DC Chroma n = iCbCr
1799 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1800 * 5-> Luma8x8 n = 4 * luma8x8idx */
1802 /* Partially inline the CABAC residual decode: inline the coded block flag.
1803 * This has very little impact on binary size and improves performance
1804 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1805 * as well as because most blocks have zero CBFs. */
1807 static av_always_inline void decode_cabac_residual_dc(const H264Context *h,
1808 H264SliceContext *sl,
1809 int16_t *block,
1810 int cat, int n,
1811 const uint8_t *scantable,
1812 int max_coeff)
1814 /* read coded block flag */
1815 if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1816 sl->non_zero_count_cache[scan8[n]] = 0;
1817 return;
1819 decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1822 static av_always_inline void
1823 decode_cabac_residual_dc_422(const H264Context *h, H264SliceContext *sl,
1824 int16_t *block,
1825 int cat, int n, const uint8_t *scantable,
1826 int max_coeff)
1828 /* read coded block flag */
1829 if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
1830 sl->non_zero_count_cache[scan8[n]] = 0;
1831 return;
1833 decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1836 static av_always_inline void decode_cabac_residual_nondc(const H264Context *h,
1837 H264SliceContext *sl,
1838 int16_t *block,
1839 int cat, int n,
1840 const uint8_t *scantable,
1841 const uint32_t *qmul,
1842 int max_coeff)
1844 /* read coded block flag */
1845 if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1846 if( max_coeff == 64 ) {
1847 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1848 } else {
1849 sl->non_zero_count_cache[scan8[n]] = 0;
1851 return;
1853 decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1856 static av_always_inline void decode_cabac_luma_residual(const H264Context *h, H264SliceContext *sl,
1857 const uint8_t *scan, const uint8_t *scan8x8,
1858 int pixel_shift, int mb_type, int cbp, int p)
1860 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1861 const uint32_t *qmul;
1862 int i8x8, i4x4;
1863 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1864 if( IS_INTRA16x16( mb_type ) ) {
1865 AV_ZERO128(sl->mb_luma_dc[p]+0);
1866 AV_ZERO128(sl->mb_luma_dc[p]+8);
1867 AV_ZERO128(sl->mb_luma_dc[p]+16);
1868 AV_ZERO128(sl->mb_luma_dc[p]+24);
1869 decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1871 if( cbp&15 ) {
1872 qmul = h->ps.pps->dequant4_coeff[p][qscale];
1873 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1874 const int index = 16*p + i4x4;
1875 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1877 } else {
1878 fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1880 } else {
1881 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1882 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1883 if( cbp & (1<<i8x8) ) {
1884 if( IS_8x8DCT(mb_type) ) {
1885 const int index = 16*p + 4*i8x8;
1886 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1887 scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1888 } else {
1889 qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1890 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1891 const int index = 16*p + 4*i8x8 + i4x4;
1892 //START_TIMER
1893 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1894 //STOP_TIMER("decode_residual")
1897 } else {
1898 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1905 * Decode a macroblock.
1906 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1908 int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1910 const SPS *sps = h->ps.sps;
1911 int mb_xy;
1912 int mb_type, partition_count, cbp = 0;
1913 int dct8x8_allowed= h->ps.pps->transform_8x8_mode;
1914 int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1915 const int pixel_shift = h->pixel_shift;
1917 mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
1919 if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1920 int skip;
1921 /* a skipped mb needs the aff flag from the following mb */
1922 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1923 skip = sl->next_mb_skipped;
1924 else
1925 skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1926 /* read skip flags */
1927 if( skip ) {
1928 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1929 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1930 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1931 if(!sl->next_mb_skipped)
1932 sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1935 decode_mb_skip(h, sl);
1937 h->cbp_table[mb_xy] = 0;
1938 h->chroma_pred_mode_table[mb_xy] = 0;
1939 sl->last_qscale_diff = 0;
1941 return 0;
1945 if (FRAME_MBAFF(h)) {
1946 if ((sl->mb_y & 1) == 0)
1947 sl->mb_mbaff =
1948 sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1951 sl->prev_mb_skipped = 0;
1953 fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1955 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1956 int ctx = 0;
1957 assert(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1959 if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1960 ctx++;
1961 if (!IS_DIRECT(sl->top_type - 1))
1962 ctx++;
1964 if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1965 mb_type= 0; /* B_Direct_16x16 */
1966 }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1967 mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1968 }else{
1969 int bits;
1970 bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1971 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1972 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1973 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1974 if( bits < 8 ){
1975 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1976 }else if( bits == 13 ){
1977 mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1978 goto decode_intra_mb;
1979 }else if( bits == 14 ){
1980 mb_type= 11; /* B_L1_L0_8x16 */
1981 }else if( bits == 15 ){
1982 mb_type= 22; /* B_8x8 */
1983 }else{
1984 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1985 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1988 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
1989 mb_type = ff_h264_b_mb_type_info[mb_type].type;
1990 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1991 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
1992 /* P-type */
1993 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
1994 /* P_L0_D16x16, P_8x8 */
1995 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
1996 } else {
1997 /* P_L0_D8x16, P_L0_D16x8 */
1998 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2000 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2001 mb_type = ff_h264_p_mb_type_info[mb_type].type;
2002 } else {
2003 mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2004 goto decode_intra_mb;
2006 } else {
2007 mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2008 if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2009 mb_type--;
2010 assert(sl->slice_type_nos == AV_PICTURE_TYPE_I);
2011 decode_intra_mb:
2012 partition_count = 0;
2013 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2014 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2015 mb_type = ff_h264_i_mb_type_info[mb_type].type;
2017 if (MB_FIELD(sl))
2018 mb_type |= MB_TYPE_INTERLACED;
2020 h->slice_table[mb_xy] = sl->slice_num;
2022 if(IS_INTRA_PCM(mb_type)) {
2023 const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2024 sps->bit_depth_luma >> 3;
2025 const uint8_t *ptr;
2027 // We assume these blocks are very rare so we do not optimize it.
2028 // FIXME The two following lines get the bitstream position in the cabac
2029 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2030 ptr= sl->cabac.bytestream;
2031 if(sl->cabac.low&0x1) ptr--;
2032 if(CABAC_BITS==16){
2033 if(sl->cabac.low&0x1FF) ptr--;
2036 // The pixels are stored in the same order as levels in h->mb array.
2037 if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2038 return -1;
2039 sl->intra_pcm_ptr = ptr;
2040 ptr += mb_size;
2042 ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2044 // All blocks are present
2045 h->cbp_table[mb_xy] = 0xf7ef;
2046 h->chroma_pred_mode_table[mb_xy] = 0;
2047 // In deblocking, the quantizer is 0
2048 h->cur_pic.qscale_table[mb_xy] = 0;
2049 // All coeffs are present
2050 memset(h->non_zero_count[mb_xy], 16, 48);
2051 h->cur_pic.mb_type[mb_xy] = mb_type;
2052 sl->last_qscale_diff = 0;
2053 return 0;
2056 fill_decode_caches(h, sl, mb_type);
2058 if( IS_INTRA( mb_type ) ) {
2059 int i, pred_mode;
2060 if( IS_INTRA4x4( mb_type ) ) {
2061 if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2062 mb_type |= MB_TYPE_8x8DCT;
2063 for( i = 0; i < 16; i+=4 ) {
2064 int pred = pred_intra_mode(h, sl, i);
2065 int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2066 fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2068 } else {
2069 for( i = 0; i < 16; i++ ) {
2070 int pred = pred_intra_mode(h, sl, i);
2071 sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2073 ff_dlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2074 sl->intra4x4_pred_mode_cache[scan8[i]]);
2077 write_back_intra_pred_mode(h, sl);
2078 if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2079 sl->top_samples_available, sl->left_samples_available) < 0 )
2080 return -1;
2081 } else {
2082 sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2083 sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2084 if (sl->intra16x16_pred_mode < 0) return -1;
2086 if(decode_chroma){
2087 h->chroma_pred_mode_table[mb_xy] =
2088 pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2090 pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2091 sl->left_samples_available, pred_mode, 1 );
2092 if( pred_mode < 0 ) return -1;
2093 sl->chroma_pred_mode = pred_mode;
2094 } else {
2095 sl->chroma_pred_mode = DC_128_PRED8x8;
2097 } else if( partition_count == 4 ) {
2098 int i, j, sub_partition_count[4], list, ref[2][4];
2100 if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2101 for( i = 0; i < 4; i++ ) {
2102 sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2103 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2104 sl->sub_mb_type[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2106 if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2107 sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2108 ff_h264_pred_direct_motion(h, sl, &mb_type);
2109 sl->ref_cache[0][scan8[4]] =
2110 sl->ref_cache[1][scan8[4]] =
2111 sl->ref_cache[0][scan8[12]] =
2112 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2113 for( i = 0; i < 4; i++ )
2114 fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2116 } else {
2117 for( i = 0; i < 4; i++ ) {
2118 sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2119 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2120 sl->sub_mb_type[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2124 for( list = 0; list < sl->list_count; list++ ) {
2125 for( i = 0; i < 4; i++ ) {
2126 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2127 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2128 int rc = sl->ref_count[list] << MB_MBAFF(sl);
2129 if (rc > 1) {
2130 ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2131 if (ref[list][i] >= (unsigned) rc) {
2132 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2133 return -1;
2135 }else
2136 ref[list][i] = 0;
2137 } else {
2138 ref[list][i] = -1;
2140 sl->ref_cache[list][scan8[4 * i] + 1] =
2141 sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2145 if(dct8x8_allowed)
2146 dct8x8_allowed = get_dct8x8_allowed(h, sl);
2148 for (list = 0; list < sl->list_count; list++) {
2149 for(i=0; i<4; i++){
2150 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2151 if(IS_DIRECT(sl->sub_mb_type[i])){
2152 fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2153 continue;
2156 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2157 const int sub_mb_type= sl->sub_mb_type[i];
2158 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2159 for(j=0; j<sub_partition_count[i]; j++){
2160 int mpx, mpy;
2161 int mx, my;
2162 const int index= 4*i + block_width*j;
2163 int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2164 uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2165 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2166 DECODE_CABAC_MB_MVD(sl, list, index)
2167 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2169 if(IS_SUB_8X8(sub_mb_type)){
2170 mv_cache[ 1 ][0]=
2171 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2172 mv_cache[ 1 ][1]=
2173 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2175 mvd_cache[ 1 ][0]=
2176 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2177 mvd_cache[ 1 ][1]=
2178 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2179 }else if(IS_SUB_8X4(sub_mb_type)){
2180 mv_cache[ 1 ][0]= mx;
2181 mv_cache[ 1 ][1]= my;
2183 mvd_cache[ 1 ][0]= mpx;
2184 mvd_cache[ 1 ][1]= mpy;
2185 }else if(IS_SUB_4X8(sub_mb_type)){
2186 mv_cache[ 8 ][0]= mx;
2187 mv_cache[ 8 ][1]= my;
2189 mvd_cache[ 8 ][0]= mpx;
2190 mvd_cache[ 8 ][1]= mpy;
2192 mv_cache[ 0 ][0]= mx;
2193 mv_cache[ 0 ][1]= my;
2195 mvd_cache[ 0 ][0]= mpx;
2196 mvd_cache[ 0 ][1]= mpy;
2198 }else{
2199 fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2200 fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2204 } else if( IS_DIRECT(mb_type) ) {
2205 ff_h264_pred_direct_motion(h, sl, &mb_type);
2206 fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2207 fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2208 dct8x8_allowed &= sps->direct_8x8_inference_flag;
2209 } else {
2210 int list, i;
2211 if(IS_16X16(mb_type)){
2212 for (list = 0; list < sl->list_count; list++) {
2213 if(IS_DIR(mb_type, 0, list)){
2214 int ref, rc = sl->ref_count[list] << MB_MBAFF(sl);
2215 if (rc > 1) {
2216 ref= decode_cabac_mb_ref(sl, list, 0);
2217 if (ref >= (unsigned) rc) {
2218 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2219 return -1;
2221 }else
2222 ref=0;
2223 fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2226 for (list = 0; list < sl->list_count; list++) {
2227 if(IS_DIR(mb_type, 0, list)){
2228 int mx,my,mpx,mpy;
2229 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2230 DECODE_CABAC_MB_MVD(sl, list, 0)
2231 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2233 fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2234 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2238 else if(IS_16X8(mb_type)){
2239 for (list = 0; list < sl->list_count; list++) {
2240 for(i=0; i<2; i++){
2241 if(IS_DIR(mb_type, i, list)){
2242 int ref, rc = sl->ref_count[list] << MB_MBAFF(sl);
2243 if (rc > 1) {
2244 ref= decode_cabac_mb_ref(sl, list, 8 * i);
2245 if (ref >= (unsigned) rc) {
2246 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2247 return -1;
2249 }else
2250 ref=0;
2251 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2252 }else
2253 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2256 for (list = 0; list < sl->list_count; list++) {
2257 for(i=0; i<2; i++){
2258 if(IS_DIR(mb_type, i, list)){
2259 int mx,my,mpx,mpy;
2260 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2261 DECODE_CABAC_MB_MVD(sl, list, 8*i)
2262 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2264 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2265 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2266 }else{
2267 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2268 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2272 }else{
2273 assert(IS_8X16(mb_type));
2274 for (list = 0; list < sl->list_count; list++) {
2275 for(i=0; i<2; i++){
2276 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2277 int ref, rc = sl->ref_count[list] << MB_MBAFF(sl);
2278 if (rc > 1) {
2279 ref = decode_cabac_mb_ref(sl, list, 4 * i);
2280 if (ref >= (unsigned) rc) {
2281 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2282 return -1;
2284 }else
2285 ref=0;
2286 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2287 }else
2288 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2291 for (list = 0; list < sl->list_count; list++) {
2292 for(i=0; i<2; i++){
2293 if(IS_DIR(mb_type, i, list)){
2294 int mx,my,mpx,mpy;
2295 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2296 DECODE_CABAC_MB_MVD(sl, list, 4*i)
2298 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2299 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2300 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2301 }else{
2302 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2303 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2310 if( IS_INTER( mb_type ) ) {
2311 h->chroma_pred_mode_table[mb_xy] = 0;
2312 write_back_motion(h, sl, mb_type);
2315 if( !IS_INTRA16x16( mb_type ) ) {
2316 cbp = decode_cabac_mb_cbp_luma(sl);
2317 if(decode_chroma)
2318 cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2321 h->cbp_table[mb_xy] = sl->cbp = cbp;
2323 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2324 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2327 /* It would be better to do this in fill_decode_caches, but we don't know
2328 * the transform mode of the current macroblock there. */
2329 if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2330 int i;
2331 uint8_t *nnz_cache = sl->non_zero_count_cache;
2332 if (h->x264_build < 151U) {
2333 for (i = 0; i < 2; i++){
2334 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2335 nnz_cache[3+8* 1 + 2*8*i]=
2336 nnz_cache[3+8* 2 + 2*8*i]=
2337 nnz_cache[3+8* 6 + 2*8*i]=
2338 nnz_cache[3+8* 7 + 2*8*i]=
2339 nnz_cache[3+8*11 + 2*8*i]=
2340 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2343 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2344 uint32_t top_empty = !IS_INTRA(mb_type) ? 0 : 0x40404040;
2345 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2346 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2347 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2349 } else {
2350 for (i = 0; i < 2; i++){
2351 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2352 nnz_cache[3+8* 1 + 2*8*i]=
2353 nnz_cache[3+8* 2 + 2*8*i]=
2354 nnz_cache[3+8* 6 + 2*8*i]=
2355 nnz_cache[3+8* 7 + 2*8*i]=
2356 nnz_cache[3+8*11 + 2*8*i]=
2357 nnz_cache[3+8*12 + 2*8*i]= !IS_INTRA_PCM(sl->left_type[LEFT(i)]) ? 0 : 64;
2360 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2361 uint32_t top_empty = !IS_INTRA_PCM(sl->top_type) ? 0 : 0x40404040;
2362 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2363 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2364 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2368 h->cur_pic.mb_type[mb_xy] = mb_type;
2370 if( cbp || IS_INTRA16x16( mb_type ) ) {
2371 const uint8_t *scan, *scan8x8;
2372 const uint32_t *qmul;
2374 // decode_cabac_mb_dqp
2375 if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2376 int val = 1;
2377 int ctx= 2;
2378 const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2380 while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2381 ctx= 3;
2382 val++;
2383 if(val > 2*max_qp){ //prevent infinite loop
2384 av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2385 return -1;
2389 if( val&0x01 )
2390 val= (val + 1)>>1 ;
2391 else
2392 val= -((val + 1)>>1);
2393 sl->last_qscale_diff = val;
2394 sl->qscale += val;
2395 if (((unsigned)sl->qscale) > max_qp){
2396 if (sl->qscale < 0) sl->qscale += max_qp + 1;
2397 else sl->qscale -= max_qp + 1;
2399 sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2400 sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2401 }else
2402 sl->last_qscale_diff=0;
2404 if(IS_INTERLACED(mb_type)){
2405 scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2406 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2407 }else{
2408 scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2409 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2412 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2413 if (CHROMA444(h)) {
2414 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2415 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2416 } else if (CHROMA422(h)) {
2417 if( cbp&0x30 ){
2418 int c;
2419 for (c = 0; c < 2; c++)
2420 decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2421 CHROMA_DC_BLOCK_INDEX + c,
2422 ff_h264_chroma422_dc_scan, 8);
2425 if( cbp&0x20 ) {
2426 int c, i, i8x8;
2427 for( c = 0; c < 2; c++ ) {
2428 int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2429 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2430 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2431 for (i = 0; i < 4; i++) {
2432 const int index = 16 + 16 * c + 8*i8x8 + i;
2433 decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2434 mb += 16<<pixel_shift;
2438 } else {
2439 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2440 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2442 } else /* yuv420 */ {
2443 if( cbp&0x30 ){
2444 int c;
2445 for (c = 0; c < 2; c++)
2446 decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16 * 16 * c) << pixel_shift),
2447 3, CHROMA_DC_BLOCK_INDEX + c, ff_h264_chroma_dc_scan, 4);
2450 if( cbp&0x20 ) {
2451 int c, i;
2452 for( c = 0; c < 2; c++ ) {
2453 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2454 for( i = 0; i < 4; i++ ) {
2455 const int index = 16 + 16 * c + i;
2456 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2459 } else {
2460 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2461 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2464 } else {
2465 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2466 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2467 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2468 sl->last_qscale_diff = 0;
2471 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2472 write_back_non_zero_count(h, sl);
2474 return 0;