4:4:4 H.264 decoding support
[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
c9c49387 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 },
c9c49387
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
c9c49387 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 },
c9c49387
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 },
c9c49387
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 },
c9c49387
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 */
c9c49387 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
90a5849e 1287 ctx += h->mb_field_decoding_flag & !!s->mb_x; //for FMO:(s->current_picture.mb_type[mba_xy]>>7)&(h->slice_table[mba_xy] == h->slice_num);
27739206 1288 ctx += (s->current_picture.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;
37a9719a 1299 if( h->left_type[0] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
cc51b282 1300 ctx++;
37a9719a 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
1333 && MB_FIELD == !!IS_INTERLACED( s->current_picture.mb_type[mba_xy] ) )
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
1339 && IS_INTERLACED( s->current_picture.mb_type[mbb_xy] ) )
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
1349 if( h->slice_table[mba_xy] == h->slice_num && !IS_SKIP( s->current_picture.mb_type[mba_xy] ))
1350 ctx++;
1351 if( h->slice_table[mbb_xy] == h->slice_num && !IS_SKIP( s->current_picture.mb_type[mbb_xy] ))
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 */
5806e8cd 1379 if( h->left_type[0] && h->chroma_pred_mode_table[mba_xy] != 0 )
cc51b282
MN
1380 ctx++;
1381
5806e8cd 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
c9c49387 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;
c9c49387 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 ) {
c9c49387 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;
c9c49387
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
c9c49387 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
1568static av_always_inline void decode_cabac_residual_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff, int is_dc ) {
c9c49387
JGG
1569 static const int significant_coeff_flag_offset[2][14] = {
1570 { 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 },
1571 { 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 1572 };
c9c49387
JGG
1573 static const int last_coeff_flag_offset[2][14] = {
1574 { 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 },
1575 { 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 1576 };
c9c49387
JGG
1577 static const int coeff_abs_level_m1_offset[14] = {
1578 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
1579 };
1580 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1581 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1582 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1583 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1584 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1585 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1586 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1587 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1588 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1589 };
1590 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1591 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1592 * map node ctx => cabac ctx for level=1 */
1593 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1594 /* map node ctx => cabac ctx for level>1 */
1595 static const uint8_t coeff_abs_levelgt1_ctx[8] = { 5, 5, 5, 5, 6, 7, 8, 9 };
1596 static const uint8_t coeff_abs_level_transition[2][8] = {
1597 /* update node ctx after decoding a level=1 */
1598 { 1, 2, 3, 3, 4, 5, 6, 7 },
1599 /* update node ctx after decoding a level>1 */
1600 { 4, 4, 4, 4, 5, 6, 7, 7 }
1601 };
1602
1603 int index[64];
1604
1605 int av_unused last;
1606 int coeff_count = 0;
1607 int node_ctx = 0;
1608
1609 uint8_t *significant_coeff_ctx_base;
1610 uint8_t *last_coeff_ctx_base;
1611 uint8_t *abs_level_m1_ctx_base;
1612
1613#if !ARCH_X86
1614#define CABAC_ON_STACK
1615#endif
1616#ifdef CABAC_ON_STACK
1617#define CC &cc
1618 CABACContext cc;
1619 cc.range = h->cabac.range;
1620 cc.low = h->cabac.low;
1621 cc.bytestream= h->cabac.bytestream;
1622#else
1623#define CC &h->cabac
1624#endif
1625
cc51b282
MN
1626 significant_coeff_ctx_base = h->cabac_state
1627 + significant_coeff_flag_offset[MB_FIELD][cat];
1628 last_coeff_ctx_base = h->cabac_state
1629 + last_coeff_flag_offset[MB_FIELD][cat];
1630 abs_level_m1_ctx_base = h->cabac_state
1631 + coeff_abs_level_m1_offset[cat];
1632
c9c49387 1633 if( !is_dc && max_coeff == 64 ) {
cc51b282
MN
1634#define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1635 for(last= 0; last < coefs; last++) { \
1636 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1637 if( get_cabac( CC, sig_ctx )) { \
1638 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1639 index[coeff_count++] = last; \
1640 if( get_cabac( CC, last_ctx ) ) { \
1641 last= max_coeff; \
1642 break; \
1643 } \
1644 } \
1645 }\
1646 if( last == max_coeff -1 ) {\
1647 index[coeff_count++] = last;\
1648 }
1649 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD];
1650#if ARCH_X86 && HAVE_7REGS && HAVE_EBX_AVAILABLE && !defined(BROKEN_RELOCATIONS)
c9c49387
JGG
1651 coeff_count= decode_significance_8x8_x86(CC, significant_coeff_ctx_base, index,
1652 last_coeff_ctx_base-significant_coeff_ctx_base, sig_off);
cc51b282 1653 } else {
c9c49387
JGG
1654 coeff_count= decode_significance_x86(CC, max_coeff, significant_coeff_ctx_base, index,
1655 last_coeff_ctx_base-significant_coeff_ctx_base);
cc51b282
MN
1656#else
1657 DECODE_SIGNIFICANCE( 63, sig_off[last], last_coeff_flag_offset_8x8[last] );
1658 } else {
1659 DECODE_SIGNIFICANCE( max_coeff - 1, last, last );
1660#endif
1661 }
1662 assert(coeff_count > 0);
1663
1664 if( is_dc ) {
c9c49387 1665 if( cat == 3 )
5657d140 1666 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
c9c49387
JGG
1667 else
1668 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
5657d140 1669 h->non_zero_count_cache[scan8[n]] = coeff_count;
cc51b282 1670 } else {
c9c49387 1671 if( max_coeff == 64 )
cc51b282
MN
1672 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1673 else {
c9c49387 1674 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
cc51b282
MN
1675 h->non_zero_count_cache[scan8[n]] = coeff_count;
1676 }
1677 }
1678
6e3ef511
OA
1679#define STORE_BLOCK(type) \
1680 do { \
1681 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1682 \
1683 int j= scantable[index[--coeff_count]]; \
1684 \
1685 if( get_cabac( CC, ctx ) == 0 ) { \
1686 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1687 if( is_dc ) { \
1688 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1689 }else{ \
1690 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1691 } \
1692 } else { \
1693 int coeff_abs = 2; \
1694 ctx = coeff_abs_levelgt1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1695 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1696\
1697 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1698 coeff_abs++; \
1699 } \
1700\
1701 if( coeff_abs >= 15 ) { \
1702 int j = 0; \
1703 while( get_cabac_bypass( CC ) ) { \
1704 j++; \
1705 } \
1706\
1707 coeff_abs=1; \
1708 while( j-- ) { \
1709 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1710 } \
1711 coeff_abs+= 14; \
1712 } \
1713\
1714 if( is_dc ) { \
1715 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1716 }else{ \
1717 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1718 } \
1719 } \
1720 } while ( coeff_count );
cc51b282 1721
6e3ef511
OA
1722 if (h->pixel_shift) {
1723 STORE_BLOCK(int32_t)
1724 } else {
1725 STORE_BLOCK(int16_t)
1726 }
cc51b282
MN
1727#ifdef CABAC_ON_STACK
1728 h->cabac.range = cc.range ;
1729 h->cabac.low = cc.low ;
1730 h->cabac.bytestream= cc.bytestream;
1731#endif
1732
1733}
1734
f14bdd8e 1735static void decode_cabac_residual_dc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
601ca8c5 1736 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1);
cc51b282
MN
1737}
1738
f14bdd8e 1739static 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 ) {
cc51b282
MN
1740 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0);
1741}
cc51b282 1742
f14bdd8e
JGG
1743/* cat: 0-> DC 16x16 n = 0
1744 * 1-> AC 16x16 n = luma4x4idx
1745 * 2-> Luma4x4 n = luma4x4idx
1746 * 3-> DC Chroma n = iCbCr
1747 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1748 * 5-> Luma8x8 n = 4 * luma8x8idx */
1749
1750/* Partially inline the CABAC residual decode: inline the coded block flag.
1751 * This has very little impact on binary size and improves performance
1752 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1753 * as well as because most blocks have zero CBFs. */
1754
1755static av_always_inline void decode_cabac_residual_dc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
1756 /* read coded block flag */
c9c49387 1757 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) {
f14bdd8e
JGG
1758 h->non_zero_count_cache[scan8[n]] = 0;
1759 return;
1760 }
1761 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff );
1762}
1763
1764static 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 ) {
1765 /* read coded block flag */
c9c49387
JGG
1766 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) {
1767 if( max_coeff == 64 ) {
1768 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1769 } else {
1770 h->non_zero_count_cache[scan8[n]] = 0;
1771 }
f14bdd8e
JGG
1772 return;
1773 }
1774 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff );
1775}
1776
c9c49387
JGG
1777static 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 )
1778{
1779 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1780 const uint32_t *qmul;
1781 int i8x8, i4x4;
1782 MpegEncContext * const s = &h->s;
1783 int qscale = p == 0 ? s->qscale : h->chroma_qp[p-1];
1784 if( IS_INTRA16x16( mb_type ) ) {
1785 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 DC\n" );
1786 AV_ZERO128(h->mb_luma_dc[p]+0);
1787 AV_ZERO128(h->mb_luma_dc[p]+8);
1788 AV_ZERO128(h->mb_luma_dc[p]+16);
1789 AV_ZERO128(h->mb_luma_dc[p]+24);
1790 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1791
1792 if( cbp&15 ) {
1793 qmul = h->dequant4_coeff[p][qscale];
1794 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1795 const int index = 16*p + i4x4;
1796 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 AC:%d\n", index );
1797 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1798 }
1799 } else {
1800 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1801 }
1802 } else {
1803 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1804 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1805 if( cbp & (1<<i8x8) ) {
1806 if( IS_8x8DCT(mb_type) ) {
1807 const int index = 16*p + 4*i8x8;
1808 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1809 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
1810 } else {
1811 qmul = h->dequant4_coeff[cqm][qscale];
1812 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1813 const int index = 16*p + 4*i8x8 + i4x4;
1814 //av_log( s->avctx, AV_LOG_ERROR, "Luma4x4: %d\n", index );
1815//START_TIMER
1816 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1817//STOP_TIMER("decode_residual")
1818 }
1819 }
1820 } else {
1821 uint8_t * const nnz= &h->non_zero_count_cache[ scan8[4*i8x8+16*p] ];
1822 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
1823 }
1824 }
1825 }
1826}
1827
cc51b282
MN
1828/**
1829 * decodes a macroblock
32e543f8 1830 * @return 0 if OK, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed
cc51b282
MN
1831 */
1832int ff_h264_decode_mb_cabac(H264Context *h) {
1833 MpegEncContext * const s = &h->s;
1834 int mb_xy;
1835 int mb_type, partition_count, cbp = 0;
1836 int dct8x8_allowed= h->pps.transform_8x8_mode;
c9c49387 1837 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
6e3ef511 1838 const int pixel_shift = h->pixel_shift;
cc51b282
MN
1839
1840 mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
1841
1842 tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y);
975a1447 1843 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
cc51b282
MN
1844 int skip;
1845 /* a skipped mb needs the aff flag from the following mb */
cc51b282
MN
1846 if( FRAME_MBAFF && (s->mb_y&1)==1 && h->prev_mb_skipped )
1847 skip = h->next_mb_skipped;
1848 else
1849 skip = decode_cabac_mb_skip( h, s->mb_x, s->mb_y );
1850 /* read skip flags */
1851 if( skip ) {
1852 if( FRAME_MBAFF && (s->mb_y&1)==0 ){
1853 s->current_picture.mb_type[mb_xy] = MB_TYPE_SKIP;
1854 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 );
1855 if(!h->next_mb_skipped)
1856 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1857 }
1858
1859 decode_mb_skip(h);
1860
1861 h->cbp_table[mb_xy] = 0;
1862 h->chroma_pred_mode_table[mb_xy] = 0;
1863 h->last_qscale_diff = 0;
1864
1865 return 0;
1866
1867 }
1868 }
1869 if(FRAME_MBAFF){
1870 if( (s->mb_y&1) == 0 )
1871 h->mb_mbaff =
1872 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1873 }
1874
1875 h->prev_mb_skipped = 0;
1876
05307427 1877 fill_decode_neighbors(h, -(MB_FIELD));
cc51b282 1878
975a1447 1879 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
f4060611 1880 int ctx = 0;
975a1447 1881 assert(h->slice_type_nos == AV_PICTURE_TYPE_B);
f4060611 1882
5806e8cd 1883 if( !IS_DIRECT( h->left_type[0]-1 ) )
f4060611 1884 ctx++;
5806e8cd 1885 if( !IS_DIRECT( h->top_type-1 ) )
f4060611
MN
1886 ctx++;
1887
1888 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
1889 mb_type= 0; /* B_Direct_16x16 */
1890 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) {
1891 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */
cc51b282 1892 }else{
f4060611
MN
1893 int bits;
1894 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3;
767738f7
AS
1895 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2;
1896 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1;
1897 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
f4060611
MN
1898 if( bits < 8 ){
1899 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1900 }else if( bits == 13 ){
1901 mb_type= decode_cabac_intra_mb_type(h, 32, 0);
1902 goto decode_intra_mb;
1903 }else if( bits == 14 ){
1904 mb_type= 11; /* B_L1_L0_8x16 */
1905 }else if( bits == 15 ){
1906 mb_type= 22; /* B_8x8 */
1907 }else{
767738f7 1908 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
f4060611
MN
1909 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1910 }
cc51b282 1911 }
f4060611
MN
1912 partition_count= b_mb_type_info[mb_type].partition_count;
1913 mb_type= b_mb_type_info[mb_type].type;
975a1447 1914 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) {
cc51b282
MN
1915 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
1916 /* P-type */
1917 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
1918 /* P_L0_D16x16, P_8x8 */
1919 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
1920 } else {
1921 /* P_L0_D8x16, P_L0_D16x8 */
1922 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
1923 }
1924 partition_count= p_mb_type_info[mb_type].partition_count;
1925 mb_type= p_mb_type_info[mb_type].type;
1926 } else {
1927 mb_type= decode_cabac_intra_mb_type(h, 17, 0);
1928 goto decode_intra_mb;
1929 }
1930 } else {
1931 mb_type= decode_cabac_intra_mb_type(h, 3, 1);
975a1447 1932 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
cc51b282 1933 mb_type--;
975a1447 1934 assert(h->slice_type_nos == AV_PICTURE_TYPE_I);
cc51b282
MN
1935decode_intra_mb:
1936 partition_count = 0;
1937 cbp= i_mb_type_info[mb_type].cbp;
1938 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
1939 mb_type= i_mb_type_info[mb_type].type;
1940 }
1941 if(MB_FIELD)
1942 mb_type |= MB_TYPE_INTERLACED;
1943
1944 h->slice_table[ mb_xy ]= h->slice_num;
1945
1946 if(IS_INTRA_PCM(mb_type)) {
c9c49387
JGG
1947 static const uint16_t mb_sizes[4] = {256,384,512,768};
1948 const int mb_size = mb_sizes[h->sps.chroma_format_idc]*h->sps.bit_depth_luma >> 3;
cc51b282
MN
1949 const uint8_t *ptr;
1950
1951 // We assume these blocks are very rare so we do not optimize it.
1952 // FIXME The two following lines get the bitstream position in the cabac
1953 // decode, I think it should be done by a function in cabac.h (or cabac.c).
1954 ptr= h->cabac.bytestream;
1955 if(h->cabac.low&0x1) ptr--;
1956 if(CABAC_BITS==16){
1957 if(h->cabac.low&0x1FF) ptr--;
1958 }
1959
1960 // The pixels are stored in the same order as levels in h->mb array.
c9c49387 1961 memcpy(h->mb, ptr, mb_size); ptr+=mb_size;
cc51b282
MN
1962
1963 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr);
1964
1965 // All blocks are present
c9c49387 1966 h->cbp_table[mb_xy] = 0xf7ef;
cc51b282
MN
1967 h->chroma_pred_mode_table[mb_xy] = 0;
1968 // In deblocking, the quantizer is 0
1969 s->current_picture.qscale_table[mb_xy]= 0;
1970 // All coeffs are present
c9c49387 1971 memset(h->non_zero_count[mb_xy], 16, 48);
cc51b282
MN
1972 s->current_picture.mb_type[mb_xy]= mb_type;
1973 h->last_qscale_diff = 0;
1974 return 0;
1975 }
1976
1977 if(MB_MBAFF){
1978 h->ref_count[0] <<= 1;
1979 h->ref_count[1] <<= 1;
1980 }
1981
f432b43b 1982 fill_decode_caches(h, mb_type);
cc51b282
MN
1983
1984 if( IS_INTRA( mb_type ) ) {
1985 int i, pred_mode;
1986 if( IS_INTRA4x4( mb_type ) ) {
64dd1b0a 1987 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) {
cc51b282
MN
1988 mb_type |= MB_TYPE_8x8DCT;
1989 for( i = 0; i < 16; i+=4 ) {
1990 int pred = pred_intra_mode( h, i );
1991 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred );
1992 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 );
1993 }
1994 } else {
1995 for( i = 0; i < 16; i++ ) {
1996 int pred = pred_intra_mode( h, i );
1997 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred );
1998
1999 //av_log( s->avctx, AV_LOG_ERROR, "i4x4 pred=%d mode=%d\n", pred, h->intra4x4_pred_mode_cache[ scan8[i] ] );
2000 }
2001 }
2002 ff_h264_write_back_intra_pred_mode(h);
2003 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
2004 } else {
2005 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode );
2006 if( h->intra16x16_pred_mode < 0 ) return -1;
2007 }
c9c49387 2008 if(decode_chroma){
cc51b282
MN
2009 h->chroma_pred_mode_table[mb_xy] =
2010 pred_mode = decode_cabac_mb_chroma_pre_mode( h );
2011
2012 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode );
2013 if( pred_mode < 0 ) return -1;
2014 h->chroma_pred_mode= pred_mode;
8bcfe7f7
RB
2015 } else {
2016 h->chroma_pred_mode= DC_128_PRED8x8;
cc51b282
MN
2017 }
2018 } else if( partition_count == 4 ) {
2019 int i, j, sub_partition_count[4], list, ref[2][4];
2020
975a1447 2021 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
cc51b282
MN
2022 for( i = 0; i < 4; i++ ) {
2023 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h );
2024 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2025 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2026 }
2027 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] |
2028 h->sub_mb_type[2] | h->sub_mb_type[3]) ) {
2029 ff_h264_pred_direct_motion(h, &mb_type);
2030 h->ref_cache[0][scan8[4]] =
2031 h->ref_cache[1][scan8[4]] =
2032 h->ref_cache[0][scan8[12]] =
2033 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
cc51b282 2034 for( i = 0; i < 4; i++ )
a59b9ee3 2035 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 );
cc51b282
MN
2036 }
2037 } else {
2038 for( i = 0; i < 4; i++ ) {
2039 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h );
2040 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2041 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2042 }
2043 }
2044
2045 for( list = 0; list < h->list_count; list++ ) {
2046 for( i = 0; i < 4; i++ ) {
2047 if(IS_DIRECT(h->sub_mb_type[i])) continue;
2048 if(IS_DIR(h->sub_mb_type[i], 0, list)){
2049 if( h->ref_count[list] > 1 ){
2050 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
2051 if(ref[list][i] >= (unsigned)h->ref_count[list]){
2052 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]);
2053 return -1;
2054 }
2055 }else
2056 ref[list][i] = 0;
2057 } else {
2058 ref[list][i] = -1;
2059 }
2060 h->ref_cache[list][ scan8[4*i]+1 ]=
2061 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
2062 }
2063 }
2064
2065 if(dct8x8_allowed)
2066 dct8x8_allowed = get_dct8x8_allowed(h);
2067
2068 for(list=0; list<h->list_count; list++){
2069 for(i=0; i<4; i++){
2070 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ];
2071 if(IS_DIRECT(h->sub_mb_type[i])){
b5bd0700 2072 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
cc51b282
MN
2073 continue;
2074 }
2075
2076 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){
2077 const int sub_mb_type= h->sub_mb_type[i];
2078 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2079 for(j=0; j<sub_partition_count[i]; j++){
2080 int mpx, mpy;
2081 int mx, my;
2082 const int index= 4*i + block_width*j;
2083 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
b5bd0700 2084 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ];
81b5e4ee 2085 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
01b35be1 2086 DECODE_CABAC_MB_MVD( h, list, index)
cc51b282
MN
2087 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2088
2089 if(IS_SUB_8X8(sub_mb_type)){
2090 mv_cache[ 1 ][0]=
2091 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2092 mv_cache[ 1 ][1]=
2093 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2094
2095 mvd_cache[ 1 ][0]=
a305449d 2096 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
cc51b282 2097 mvd_cache[ 1 ][1]=
a305449d 2098 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
cc51b282
MN
2099 }else if(IS_SUB_8X4(sub_mb_type)){
2100 mv_cache[ 1 ][0]= mx;
2101 mv_cache[ 1 ][1]= my;
2102
a305449d
MN
2103 mvd_cache[ 1 ][0]= mpx;
2104 mvd_cache[ 1 ][1]= mpy;
cc51b282
MN
2105 }else if(IS_SUB_4X8(sub_mb_type)){
2106 mv_cache[ 8 ][0]= mx;
2107 mv_cache[ 8 ][1]= my;
2108
a305449d
MN
2109 mvd_cache[ 8 ][0]= mpx;
2110 mvd_cache[ 8 ][1]= mpy;
cc51b282
MN
2111 }
2112 mv_cache[ 0 ][0]= mx;
2113 mv_cache[ 0 ][1]= my;
2114
a305449d
MN
2115 mvd_cache[ 0 ][0]= mpx;
2116 mvd_cache[ 0 ][1]= mpy;
cc51b282
MN
2117 }
2118 }else{
90332deb 2119 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
b5bd0700 2120 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
cc51b282
MN
2121 }
2122 }
2123 }
2124 } else if( IS_DIRECT(mb_type) ) {
2125 ff_h264_pred_direct_motion(h, &mb_type);
b5bd0700
MN
2126 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2127 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
cc51b282
MN
2128 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
2129 } else {
81b5e4ee 2130 int list, i;
cc51b282
MN
2131 if(IS_16X16(mb_type)){
2132 for(list=0; list<h->list_count; list++){
2133 if(IS_DIR(mb_type, 0, list)){
2134 int ref;
2135 if(h->ref_count[list] > 1){
2136 ref= decode_cabac_mb_ref(h, list, 0);
2137 if(ref >= (unsigned)h->ref_count[list]){
2138 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2139 return -1;
2140 }
2141 }else
2142 ref=0;
2143 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
8897b247 2144 }
cc51b282
MN
2145 }
2146 for(list=0; list<h->list_count; list++){
2147 if(IS_DIR(mb_type, 0, list)){
81b5e4ee
MN
2148 int mx,my,mpx,mpy;
2149 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
01b35be1 2150 DECODE_CABAC_MB_MVD( h, list, 0)
cc51b282
MN
2151 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2152
b5bd0700 2153 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
cc51b282 2154 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
8897b247 2155 }
cc51b282
MN
2156 }
2157 }
2158 else if(IS_16X8(mb_type)){
2159 for(list=0; list<h->list_count; list++){
2160 for(i=0; i<2; i++){
2161 if(IS_DIR(mb_type, i, list)){
2162 int ref;
2163 if(h->ref_count[list] > 1){
2164 ref= decode_cabac_mb_ref( h, list, 8*i );
2165 if(ref >= (unsigned)h->ref_count[list]){
2166 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2167 return -1;
2168 }
2169 }else
2170 ref=0;
2171 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2172 }else
2173 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2174 }
2175 }
2176 for(list=0; list<h->list_count; list++){
2177 for(i=0; i<2; i++){
2178 if(IS_DIR(mb_type, i, list)){
81b5e4ee
MN
2179 int mx,my,mpx,mpy;
2180 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
01b35be1 2181 DECODE_CABAC_MB_MVD( h, list, 8*i)
cc51b282
MN
2182 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2183
b5bd0700 2184 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
cc51b282
MN
2185 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2186 }else{
b5bd0700 2187 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
cc51b282
MN
2188 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2189 }
2190 }
2191 }
2192 }else{
2193 assert(IS_8X16(mb_type));
2194 for(list=0; list<h->list_count; list++){
2195 for(i=0; i<2; i++){
2196 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2197 int ref;
2198 if(h->ref_count[list] > 1){
2199 ref= decode_cabac_mb_ref( h, list, 4*i );
2200 if(ref >= (unsigned)h->ref_count[list]){
2201 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2202 return -1;
2203 }
2204 }else
2205 ref=0;
2206 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2207 }else
2208 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2209 }
2210 }
2211 for(list=0; list<h->list_count; list++){
2212 for(i=0; i<2; i++){
2213 if(IS_DIR(mb_type, i, list)){
81b5e4ee
MN
2214 int mx,my,mpx,mpy;
2215 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
01b35be1 2216 DECODE_CABAC_MB_MVD( h, list, 4*i)
cc51b282
MN
2217
2218 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
b5bd0700 2219 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
cc51b282
MN
2220 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2221 }else{
b5bd0700 2222 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
cc51b282
MN
2223 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2224 }
2225 }
2226 }
2227 }
2228 }
2229
2230 if( IS_INTER( mb_type ) ) {
2231 h->chroma_pred_mode_table[mb_xy] = 0;
2232 write_back_motion( h, mb_type );
2233 }
2234
2235 if( !IS_INTRA16x16( mb_type ) ) {
2236 cbp = decode_cabac_mb_cbp_luma( h );
c9c49387 2237 if(decode_chroma)
cc51b282
MN
2238 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4;
2239 }
2240
2241 h->cbp_table[mb_xy] = h->cbp = cbp;
2242
2243 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
64dd1b0a 2244 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] );
cc51b282 2245 }
c9c49387
JGG
2246
2247 /* It would be better to do this in fill_decode_caches, but we don't know
2248 * the transform mode of the current macroblock there. */
2249 if (CHROMA444 && IS_8x8DCT(mb_type)){
2250 int i;
2251 for (i = 0; i < 2; i++){
2252 if (h->left_type[i] && !IS_8x8DCT(h->left_type[i])){
2253 h->non_zero_count_cache[3+8* 1 + 2*8*i]=
2254 h->non_zero_count_cache[3+8* 2 + 2*8*i]=
2255 h->non_zero_count_cache[3+8* 6 + 2*8*i]=
2256 h->non_zero_count_cache[3+8* 7 + 2*8*i]=
2257 h->non_zero_count_cache[3+8*11 + 2*8*i]=
2258 h->non_zero_count_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2259 }
2260 }
2261 if (h->top_type && !IS_8x8DCT(h->top_type)){
2262 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2263 AV_WN32A(&h->non_zero_count_cache[4+8* 0], top_empty);
2264 AV_WN32A(&h->non_zero_count_cache[4+8* 5], top_empty);
2265 AV_WN32A(&h->non_zero_count_cache[4+8*10], top_empty);
2266 }
2267 }
cc51b282
MN
2268 s->current_picture.mb_type[mb_xy]= mb_type;
2269
2270 if( cbp || IS_INTRA16x16( mb_type ) ) {
19fb234e 2271 const uint8_t *scan, *scan8x8;
cc51b282 2272 const uint32_t *qmul;
cc51b282
MN
2273
2274 if(IS_INTERLACED(mb_type)){
2275 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2276 scan= s->qscale ? h->field_scan : h->field_scan_q0;
cc51b282
MN
2277 }else{
2278 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2279 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
cc51b282
MN
2280 }
2281
f4b8b825
MN
2282 // decode_cabac_mb_dqp
2283 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){
2284 int val = 1;
2285 int ctx= 2;
fcc0224e 2286 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
f4b8b825
MN
2287
2288 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
2289 ctx= 3;
2290 val++;
fcc0224e 2291 if(val > 2*max_qp){ //prevent infinite loop
f4b8b825
MN
2292 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y);
2293 return -1;
2294 }
2295 }
2296
2297 if( val&0x01 )
2298 val= (val + 1)>>1 ;
2299 else
2300 val= -((val + 1)>>1);
2301 h->last_qscale_diff = val;
2302 s->qscale += val;
fcc0224e
OA
2303 if(((unsigned)s->qscale) > max_qp){
2304 if(s->qscale<0) s->qscale+= max_qp+1;
2305 else s->qscale-= max_qp+1;
8b38d107
MN
2306 }
2307 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale);
2308 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale);
f4b8b825
MN
2309 }else
2310 h->last_qscale_diff=0;
cc51b282 2311
c9c49387
JGG
2312 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2313 if(CHROMA444){
2314 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2315 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
cc51b282 2316 } else {
c9c49387
JGG
2317 if( cbp&0x30 ){
2318 int c;
2319 for( c = 0; c < 2; c++ ) {
2320 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c );
2321 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
2322 }
2323 }
cc51b282 2324
c9c49387
JGG
2325 if( cbp&0x20 ) {
2326 int c, i;
2327 for( c = 0; c < 2; c++ ) {
2328 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2329 for( i = 0; i < 4; i++ ) {
2330 const int index = 16 + 16 * c + i;
2331 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 );
2332 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2333 }
cc51b282 2334 }
c9c49387
JGG
2335 } else {
2336 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2337 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
cc51b282 2338 }
cc51b282
MN
2339 }
2340 } else {
c9c49387
JGG
2341 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2342 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2343 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
cc51b282
MN
2344 h->last_qscale_diff = 0;
2345 }
2346
2347 s->current_picture.qscale_table[mb_xy]= s->qscale;
2348 write_back_non_zero_count(h);
2349
2350 if(MB_MBAFF){
2351 h->ref_count[0] >>= 1;
2352 h->ref_count[1] >>= 1;
2353 }
b9af1540 2354
cc51b282
MN
2355 return 0;
2356}