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