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