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 FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * H.264 / AVC / MPEG4 part10 cabac decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
29 #define UNCHECKED_BITSTREAM_READER 1
30 #define INT_BIT (CHAR_BIT * sizeof(int))
32 #include "libavutil/attributes.h"
33 #include "libavutil/avassert.h"
34 #include "libavutil/timer.h"
37 #include "cabac_functions.h"
42 #include "h264_mvpred.h"
44 #include "mpegutils.h"
47 #include "x86/h264_i386.h"
50 /* Cabac pre state table */
52 static const int8_t cabac_context_init_I[1024][2] =
55 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
56 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
57 { -6, 53 }, { -1, 54 }, { 7, 51 },
59 /* 11 - 23 unsused for I */
60 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
61 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
62 { 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 },
69 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
72 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
73 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
74 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
78 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
82 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
83 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
84 { 13, 41 }, { 3, 62 },
87 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
88 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
89 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
90 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
91 { -12, 115 },{ -16, 122 },
94 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
95 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
96 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
97 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
101 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
102 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
103 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
104 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
105 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
106 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
107 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
108 { 14, 62 }, { -13, 108 },{ -15, 100 },
111 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
112 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
113 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
114 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
115 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
116 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
117 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
118 { 0, 62 }, { 12, 72 },
121 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
122 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
123 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
124 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
125 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
126 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
127 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
128 { 0, 89 }, { 26, -19 }, { 22, -17 },
131 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
132 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
133 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
134 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
135 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
136 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
137 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
138 { 12, 68 }, { 2, 97 },
141 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
142 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
143 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
144 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
145 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
146 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
150 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
151 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
152 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
153 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
154 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
155 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
157 /* 276 a bit special (not used, bypass is used instead) */
161 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
162 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
163 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
164 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
165 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
166 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
167 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
168 { 9, 64 }, { -12, 104 },{ -11, 97 },
171 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
172 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
173 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
174 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
175 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
176 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
177 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
178 { 5, 64 }, { 12, 70 },
181 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
182 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
183 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
184 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
185 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
186 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
187 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
188 { -12, 109 },{ 36, -35 }, { 36, -34 },
191 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
192 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
193 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
194 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
195 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
196 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
197 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
198 { 29, 39 }, { 19, 66 },
201 { 31, 21 }, { 31, 31 }, { 25, 50 },
202 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
203 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
204 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
205 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
206 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
207 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
208 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
209 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
210 { 0, 68 }, { -9, 92 },
213 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
214 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
215 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
216 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
217 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
218 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
221 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
222 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
223 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
224 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
225 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
226 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
227 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
228 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
229 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
230 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
231 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
232 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
233 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
234 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
235 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
236 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
237 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
238 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
239 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
240 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
241 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
242 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
243 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
244 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
245 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
246 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
247 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
248 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
249 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
250 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
251 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
252 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
253 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
254 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
255 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
256 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
257 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
258 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
259 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
260 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
261 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
262 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
263 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
264 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
265 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
266 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
267 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
268 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
269 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
270 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
271 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
272 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
273 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
274 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 },
275 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 },
276 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 },
277 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 },
278 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 },
279 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 },
280 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 },
281 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
282 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
283 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
284 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
285 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 },
286 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 },
287 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 },
288 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 },
289 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 },
290 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 },
291 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 },
292 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 },
293 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 },
294 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 },
295 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 },
296 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 },
297 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 },
298 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 },
299 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 },
300 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
301 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
302 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
303 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
304 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
305 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
306 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
307 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
308 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
309 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
310 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
311 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
312 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
313 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
314 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
315 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
316 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
317 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
318 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
319 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
320 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
321 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
322 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
323 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
324 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
325 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
326 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
327 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
328 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
329 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
330 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
331 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
332 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
333 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
334 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
335 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
336 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
337 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
338 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
339 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
340 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
341 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
342 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
343 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
344 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
345 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
346 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
347 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
348 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
349 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
350 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 },
351 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 },
352 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 },
353 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 },
354 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 },
355 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 },
356 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 },
357 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 },
358 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 },
359 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
360 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
361 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }
364 static const int8_t cabac_context_init_PB[3][1024][2] =
366 /* i_cabac_init_idc == 0 */
369 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
370 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
371 { -6, 53 }, { -1, 54 }, { 7, 51 },
374 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
375 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
376 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
380 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
381 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
382 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
383 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
386 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
387 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
388 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
389 { -3, 81 }, { 0, 88 },
392 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
393 { -7, 72 }, { 1, 58 },
396 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
397 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
398 { 13, 41 }, { 3, 62 },
401 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
402 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
403 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
404 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
405 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
406 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
407 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
408 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
409 { 0, 68 }, { -4, 69 }, { -8, 88 },
412 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
413 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
414 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
415 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
416 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
417 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
418 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
419 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
420 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
421 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
422 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
423 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
424 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
425 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
426 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
430 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
431 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
432 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
433 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
434 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
435 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
436 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
437 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
438 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
439 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
440 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
441 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
442 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
443 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
444 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
448 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
449 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
450 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
451 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
452 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
453 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
454 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
455 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
456 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
457 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
458 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
459 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
462 /* 276 a bit special (not used, bypass is used instead) */
466 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
467 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
468 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
469 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
470 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
471 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
472 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
473 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
474 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
475 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
476 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
477 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
478 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
479 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
480 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
484 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
485 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
486 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
487 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
488 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
489 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
490 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
491 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
492 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
493 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
494 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
495 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
496 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
497 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
498 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
502 { 12, 40 }, { 11, 51 }, { 14, 59 },
503 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
504 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
505 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
506 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
507 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
508 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
509 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
510 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
511 { -8, 66 }, { -8, 76 },
514 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
515 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
516 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
517 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
518 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
519 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
522 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
523 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
524 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
525 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
526 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
527 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
528 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
529 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
530 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
531 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
532 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
533 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
534 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
535 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
536 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
537 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
538 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
539 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
540 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
541 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
542 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
543 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
544 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
545 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
546 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
547 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
548 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
549 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
550 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
551 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
552 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
553 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
554 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
555 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
556 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
557 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
558 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
559 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
560 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
561 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
562 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
563 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
564 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
565 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
566 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
567 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
568 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
569 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
570 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
571 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
572 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
573 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
574 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
575 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 },
576 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 },
577 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 },
578 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 },
579 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 },
580 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 },
581 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 },
582 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
583 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
584 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
585 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
586 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 },
587 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 },
588 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 },
589 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 },
590 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 },
591 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 },
592 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 },
593 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 },
594 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 },
595 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 },
596 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 },
597 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 },
598 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 },
599 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 },
600 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 },
601 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
602 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
603 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
604 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
605 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
606 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
607 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
608 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
609 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
610 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
611 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
612 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
613 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
614 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
615 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
616 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
617 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
618 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
619 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
620 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
621 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
622 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
623 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
624 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
625 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
626 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
627 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
628 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
629 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
630 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
631 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
632 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
633 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
634 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
635 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
636 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
637 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
638 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
639 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
640 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
641 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
642 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
643 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
644 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
645 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
646 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
647 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
648 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
649 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
650 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
651 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
652 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 },
653 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 },
654 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 },
655 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 },
656 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 },
657 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 },
658 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 },
659 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 },
660 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
661 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
662 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }
665 /* i_cabac_init_idc == 1 */
668 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
669 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
670 { -6, 53 }, { -1, 54 }, { 7, 51 },
673 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
674 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
675 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
679 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
680 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
681 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
682 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
685 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
686 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
687 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
688 { -7, 86 },{ -5, 95 },
691 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
692 { -5, 72 },{ 0, 61 },
695 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
696 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
697 { 13, 41 }, { 3, 62 },
700 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
701 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
702 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
703 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
704 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
705 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
706 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
707 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
708 { 0, 68 }, { -7, 74 }, { -9, 88 },
711 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
712 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
713 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
714 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
715 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
716 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
717 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
718 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
719 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
720 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
721 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
722 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
723 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
724 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
725 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
729 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
730 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
731 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
732 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
733 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
734 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
735 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
736 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
737 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
738 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
739 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
740 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
741 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
742 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
743 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
747 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
748 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
749 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
750 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
751 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
752 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
753 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
754 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
755 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
756 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
757 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
758 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
761 /* 276 a bit special (not used, bypass is used instead) */
765 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
766 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
767 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
768 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
769 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
770 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
771 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
772 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
773 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
774 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
775 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
776 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
777 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
778 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
779 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
783 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
784 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
785 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
786 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
787 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
788 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
789 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
790 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
791 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
792 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
793 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
794 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
795 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
796 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
797 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
801 { 25, 32 }, { 21, 49 }, { 21, 54 },
802 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
803 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
804 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
805 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
806 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
807 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
808 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
809 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
810 { -4, 67 }, { -7, 82 },
813 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
814 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
815 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
816 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
817 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
818 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
821 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
822 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
823 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
824 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
825 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
826 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
827 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
828 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
829 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
830 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
831 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
832 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
833 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
834 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
835 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
836 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
837 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
838 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
839 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
840 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
841 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
842 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
843 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
844 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
845 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
846 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
847 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
848 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
849 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
850 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
851 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
852 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
853 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
854 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
855 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
856 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
857 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
858 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
859 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
860 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
861 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
862 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
863 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
864 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
865 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
866 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
867 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
868 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
869 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
870 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
871 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
872 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
873 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
874 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 },
875 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 },
876 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 },
877 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 },
878 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 },
879 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 },
880 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 },
881 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
882 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
883 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
884 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
885 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 },
886 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 },
887 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 },
888 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 },
889 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 },
890 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 },
891 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 },
892 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 },
893 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 },
894 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 },
895 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 },
896 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 },
897 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 },
898 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 },
899 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 },
900 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
901 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
902 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
903 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
904 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
905 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
906 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
907 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
908 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
909 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
910 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
911 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
912 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
913 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
914 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
915 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
916 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
917 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
918 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
919 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
920 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
921 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
922 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
923 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
924 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
925 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
926 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
927 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
928 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
929 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
930 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
931 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
932 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
933 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
934 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
935 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
936 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
937 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
938 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
939 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
940 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
941 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
942 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
943 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
944 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
945 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
946 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
947 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
948 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
949 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
950 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
951 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 },
952 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 },
953 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 },
954 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 },
955 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 },
956 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 },
957 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 },
958 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 },
959 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
960 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
961 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }
964 /* i_cabac_init_idc == 2 */
967 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
968 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
969 { -6, 53 }, { -1, 54 }, { 7, 51 },
972 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
973 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
974 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
978 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
979 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
980 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
981 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
984 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
985 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
986 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
987 { -3, 90 },{ -1, 101 },
990 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
991 { -7, 50 },{ 1, 60 },
994 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
995 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
996 { 13, 41 }, { 3, 62 },
999 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
1000 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
1001 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
1002 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
1003 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1004 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1005 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1006 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1007 { 3, 68 }, { -8, 71 }, { -13, 98 },
1010 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1011 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1012 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1013 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1014 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1015 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1016 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1017 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1018 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1019 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1020 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1021 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1022 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1023 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1024 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1028 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1029 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1030 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1031 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1032 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1033 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1034 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1035 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1036 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1037 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1038 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1039 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1040 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1041 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1042 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1046 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1047 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1048 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1049 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1050 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1051 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1052 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1053 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1054 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1055 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1056 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1057 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1060 /* 276 a bit special (not used, bypass is used instead) */
1064 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1065 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1066 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1067 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1068 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1069 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1070 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1071 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1072 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1073 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1074 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1075 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1076 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1077 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1078 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1082 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1083 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1084 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1085 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1086 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1087 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1088 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1089 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1090 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1091 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1092 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1093 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1094 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1095 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1096 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1100 { 21, 33 }, { 19, 50 }, { 17, 61 },
1101 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1102 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1103 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1104 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1105 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1106 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1107 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1108 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1109 { -6, 68 }, { -10, 79 },
1112 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1113 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1114 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1115 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1116 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1117 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1120 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1121 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1122 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1123 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1124 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1125 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1126 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1127 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1128 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1129 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1130 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1131 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1132 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1133 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1134 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1135 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1136 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1137 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1138 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1139 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1140 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1141 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1142 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1143 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1144 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1145 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1146 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1147 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1148 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1149 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1150 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1151 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1152 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1153 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1154 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1155 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1156 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1157 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1158 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1159 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1160 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1161 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1162 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1163 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1164 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1165 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1166 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1167 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1168 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1169 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1170 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1171 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1172 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1173 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 },
1174 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 },
1175 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 },
1176 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 },
1177 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 },
1178 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 },
1179 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 },
1180 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1181 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1182 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1183 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1184 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 },
1185 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 },
1186 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 },
1187 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 },
1188 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 },
1189 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 },
1190 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 },
1191 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 },
1192 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 },
1193 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 },
1194 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 },
1195 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 },
1196 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 },
1197 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 },
1198 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 },
1199 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1200 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1201 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1202 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1203 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1204 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1205 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1206 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1207 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1208 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1209 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1210 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1211 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1212 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1213 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1214 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1215 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1216 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1217 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1218 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1219 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1220 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1221 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1222 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1223 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1224 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1225 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1226 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1227 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1228 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1229 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1230 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1231 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1232 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1233 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1234 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1235 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1236 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1237 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1238 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1239 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1240 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1241 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1242 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1243 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1244 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1245 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1246 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1247 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1248 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1249 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1250 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 },
1251 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 },
1252 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 },
1253 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 },
1254 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 },
1255 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 },
1256 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 },
1257 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 },
1258 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1259 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1260 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }
1264 void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
1267 const int8_t (*tab)[2];
1268 const int slice_qp = av_clip(sl->qscale - 6*(h->ps.sps->bit_depth_luma-8), 0, 51);
1270 if (sl->slice_type_nos == AV_PICTURE_TYPE_I) tab = cabac_context_init_I;
1271 else tab = cabac_context_init_PB[sl->cabac_init_idc];
1273 /* calculate pre-state */
1274 for( i= 0; i < 1024; i++ ) {
1275 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1281 sl->cabac_state[i] = pre;
1285 static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
1287 const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
1289 unsigned long ctx = 0;
1291 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);
1292 ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
1294 return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
1297 static int decode_cabac_intra_mb_type(H264SliceContext *sl,
1298 int ctx_base, int intra_slice)
1300 uint8_t *state= &sl->cabac_state[ctx_base];
1305 if (sl->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1307 if (sl->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1309 if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
1310 return 0; /* I4x4 */
1313 if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1314 return 0; /* I4x4 */
1317 if( get_cabac_terminate( &sl->cabac ) )
1318 return 25; /* PCM */
1320 mb_type = 1; /* I16x16 */
1321 mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1322 if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1323 mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1324 mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1325 mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1329 static int decode_cabac_mb_skip(const H264Context *h, H264SliceContext *sl,
1335 if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1336 int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1339 && h->slice_table[mba_xy] == sl->slice_num
1340 && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1341 mba_xy += h->mb_stride;
1343 mbb_xy = mb_xy - h->mb_stride;
1345 && h->slice_table[mbb_xy] == sl->slice_num
1346 && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
1347 mbb_xy -= h->mb_stride;
1349 mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1351 int mb_xy = sl->mb_xy;
1353 mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1356 if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1358 if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1361 if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1363 return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1366 static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
1370 if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1373 mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1374 mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1375 mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1377 return mode + ( mode >= pred_mode );
1380 static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
1382 const int mba_xy = sl->left_mb_xy[0];
1383 const int mbb_xy = sl->top_mb_xy;
1387 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1388 if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1391 if (sl->top_type && h->chroma_pred_mode_table[mbb_xy] != 0)
1394 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1397 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1399 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1405 static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
1407 int cbp_b, cbp_a, ctx, cbp = 0;
1409 cbp_a = sl->left_cbp;
1410 cbp_b = sl->top_cbp;
1412 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1413 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1414 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1415 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1416 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1417 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1418 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1419 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1422 static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
1427 cbp_a = (sl->left_cbp>>4)&0x03;
1428 cbp_b = (sl-> top_cbp>>4)&0x03;
1431 if( cbp_a > 0 ) ctx++;
1432 if( cbp_b > 0 ) ctx += 2;
1433 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1437 if( cbp_a == 2 ) ctx++;
1438 if( cbp_b == 2 ) ctx += 2;
1439 return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1442 static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
1444 if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1446 if( !get_cabac( &sl->cabac, &sl->cabac_state[22] ) )
1448 if( get_cabac( &sl->cabac, &sl->cabac_state[23] ) )
1452 static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
1455 if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1456 return 0; /* B_Direct_8x8 */
1457 if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1458 return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1460 if( get_cabac( &sl->cabac, &sl->cabac_state[38] ) ) {
1461 if( get_cabac( &sl->cabac, &sl->cabac_state[39] ) )
1462 return 11 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1465 type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1466 type += get_cabac( &sl->cabac, &sl->cabac_state[39] );
1470 static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
1472 int refa = sl->ref_cache[list][scan8[n] - 1];
1473 int refb = sl->ref_cache[list][scan8[n] - 8];
1477 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1478 if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1480 if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1489 while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
1492 if(ref >= 32 /*h->ref_list[list]*/){
1499 static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
1503 if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1504 // if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1511 while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1519 while( get_cabac_bypass( &sl->cabac ) ) {
1523 av_log(sl->h264->avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1528 mvd += get_cabac_bypass( &sl->cabac )<<k;
1530 *mvda=mvd < 70 ? mvd : 70;
1533 return get_cabac_bypass_sign( &sl->cabac, -mvd );
1536 #define DECODE_CABAC_MB_MVD(sl, list, n )\
1538 int amvd0 = sl->mvd_cache[list][scan8[n] - 1][0] +\
1539 sl->mvd_cache[list][scan8[n] - 8][0];\
1540 int amvd1 = sl->mvd_cache[list][scan8[n] - 1][1] +\
1541 sl->mvd_cache[list][scan8[n] - 8][1];\
1543 int mxd = decode_cabac_mb_mvd(sl, 40, amvd0, &mpx);\
1544 int myd = decode_cabac_mb_mvd(sl, 47, amvd1, &mpy);\
1545 if (mxd == INT_MIN || myd == INT_MIN) \
1546 return AVERROR_INVALIDDATA; \
1551 static av_always_inline int get_cabac_cbf_ctx(H264SliceContext *sl,
1552 int cat, int idx, int max_coeff,
1557 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1561 idx -= CHROMA_DC_BLOCK_INDEX;
1562 nza = (sl->left_cbp>>(6+idx))&0x01;
1563 nzb = (sl-> top_cbp>>(6+idx))&0x01;
1565 idx -= LUMA_DC_BLOCK_INDEX;
1566 nza = sl->left_cbp&(0x100<<idx);
1567 nzb = sl-> top_cbp&(0x100<<idx);
1570 nza = sl->non_zero_count_cache[scan8[idx] - 1];
1571 nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1580 return base_ctx[cat] + ctx;
1583 static av_always_inline void
1584 decode_cabac_residual_internal(const H264Context *h, H264SliceContext *sl,
1586 int cat, int n, const uint8_t *scantable,
1587 const uint32_t *qmul, int max_coeff,
1588 int is_dc, int chroma422)
1590 static const int significant_coeff_flag_offset[2][14] = {
1591 { 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 },
1592 { 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 }
1594 static const int last_coeff_flag_offset[2][14] = {
1595 { 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 },
1596 { 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 }
1598 static const int coeff_abs_level_m1_offset[14] = {
1599 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
1601 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1602 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1603 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1604 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1605 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1606 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1607 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1608 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1609 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1611 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1612 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1613 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1614 * map node ctx => cabac ctx for level=1 */
1615 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1616 /* map node ctx => cabac ctx for level>1 */
1617 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1618 { 5, 5, 5, 5, 6, 7, 8, 9 },
1619 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1621 static const uint8_t coeff_abs_level_transition[2][8] = {
1622 /* update node ctx after decoding a level=1 */
1623 { 1, 2, 3, 3, 4, 5, 6, 7 },
1624 /* update node ctx after decoding a level>1 */
1625 { 4, 4, 4, 4, 5, 6, 7, 7 }
1631 int coeff_count = 0;
1634 uint8_t *significant_coeff_ctx_base;
1635 uint8_t *last_coeff_ctx_base;
1636 uint8_t *abs_level_m1_ctx_base;
1639 #define CABAC_ON_STACK
1641 #ifdef CABAC_ON_STACK
1644 cc.range = sl->cabac.range;
1645 cc.low = sl->cabac.low;
1646 cc.bytestream= sl->cabac.bytestream;
1647 #if !UNCHECKED_BITSTREAM_READER || ARCH_AARCH64
1648 cc.bytestream_end = sl->cabac.bytestream_end;
1651 #define CC &sl->cabac
1654 significant_coeff_ctx_base = sl->cabac_state
1655 + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1656 last_coeff_ctx_base = sl->cabac_state
1657 + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1658 abs_level_m1_ctx_base = sl->cabac_state
1659 + coeff_abs_level_m1_offset[cat];
1661 if( !is_dc && max_coeff == 64 ) {
1662 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1663 for(last= 0; last < coefs; last++) { \
1664 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1665 if( get_cabac( CC, sig_ctx )) { \
1666 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1667 index[coeff_count++] = last; \
1668 if( get_cabac( CC, last_ctx ) ) { \
1674 if( last == max_coeff -1 ) {\
1675 index[coeff_count++] = last;\
1677 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1678 #ifdef decode_significance
1679 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1680 last_coeff_ctx_base, sig_off);
1682 if (is_dc && chroma422) { // dc 422
1683 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1685 coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1686 last_coeff_ctx_base-significant_coeff_ctx_base);
1689 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1691 if (is_dc && chroma422) { // dc 422
1692 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1694 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1698 av_assert2(coeff_count > 0);
1702 h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1704 h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1705 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1707 if( max_coeff == 64 )
1708 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1710 av_assert2( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1711 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1715 #define STORE_BLOCK(type) \
1717 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1719 int j= scantable[index[--coeff_count]]; \
1721 if( get_cabac( CC, ctx ) == 0 ) { \
1722 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1724 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1726 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1729 int coeff_abs = 2; \
1730 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1731 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1733 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1737 if( coeff_abs >= 15 ) { \
1739 while (get_cabac_bypass(CC) && j < 30) { \
1745 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1751 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1753 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1756 } while ( coeff_count );
1758 if (h->pixel_shift) {
1759 STORE_BLOCK(int32_t)
1761 STORE_BLOCK(int16_t)
1763 #ifdef CABAC_ON_STACK
1764 sl->cabac.range = cc.range ;
1765 sl->cabac.low = cc.low ;
1766 sl->cabac.bytestream= cc.bytestream;
1771 static av_noinline void decode_cabac_residual_dc_internal(const H264Context *h,
1772 H264SliceContext *sl,
1775 const uint8_t *scantable,
1778 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1781 static av_noinline void decode_cabac_residual_dc_internal_422(const H264Context *h,
1782 H264SliceContext *sl,
1785 const uint8_t *scantable,
1788 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1791 static av_noinline void decode_cabac_residual_nondc_internal(const H264Context *h,
1792 H264SliceContext *sl,
1795 const uint8_t *scantable,
1796 const uint32_t *qmul,
1799 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1802 /* cat: 0-> DC 16x16 n = 0
1803 * 1-> AC 16x16 n = luma4x4idx
1804 * 2-> Luma4x4 n = luma4x4idx
1805 * 3-> DC Chroma n = iCbCr
1806 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1807 * 5-> Luma8x8 n = 4 * luma8x8idx */
1809 /* Partially inline the CABAC residual decode: inline the coded block flag.
1810 * This has very little impact on binary size and improves performance
1811 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1812 * as well as because most blocks have zero CBFs. */
1814 static av_always_inline void decode_cabac_residual_dc(const H264Context *h,
1815 H264SliceContext *sl,
1818 const uint8_t *scantable,
1821 /* read coded block flag */
1822 if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1823 sl->non_zero_count_cache[scan8[n]] = 0;
1826 decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1829 static av_always_inline void
1830 decode_cabac_residual_dc_422(const H264Context *h, H264SliceContext *sl,
1832 int cat, int n, const uint8_t *scantable,
1835 /* read coded block flag */
1836 if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
1837 sl->non_zero_count_cache[scan8[n]] = 0;
1840 decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1843 static av_always_inline void decode_cabac_residual_nondc(const H264Context *h,
1844 H264SliceContext *sl,
1847 const uint8_t *scantable,
1848 const uint32_t *qmul,
1851 /* read coded block flag */
1852 if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1853 if( max_coeff == 64 ) {
1854 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1856 sl->non_zero_count_cache[scan8[n]] = 0;
1860 decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1863 static av_always_inline void decode_cabac_luma_residual(const H264Context *h, H264SliceContext *sl,
1864 const uint8_t *scan, const uint8_t *scan8x8,
1865 int pixel_shift, int mb_type, int cbp, int p)
1867 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1868 const uint32_t *qmul;
1870 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1871 if( IS_INTRA16x16( mb_type ) ) {
1872 AV_ZERO128(sl->mb_luma_dc[p]+0);
1873 AV_ZERO128(sl->mb_luma_dc[p]+8);
1874 AV_ZERO128(sl->mb_luma_dc[p]+16);
1875 AV_ZERO128(sl->mb_luma_dc[p]+24);
1876 decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1879 qmul = h->ps.pps->dequant4_coeff[p][qscale];
1880 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1881 const int index = 16*p + i4x4;
1882 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1885 fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1888 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1889 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1890 if( cbp & (1<<i8x8) ) {
1891 if( IS_8x8DCT(mb_type) ) {
1892 const int index = 16*p + 4*i8x8;
1893 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1894 scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1896 qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1897 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1898 const int index = 16*p + 4*i8x8 + i4x4;
1900 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1901 //STOP_TIMER("decode_residual")
1905 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1912 * Decode a macroblock.
1913 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1915 int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1917 const SPS *sps = h->ps.sps;
1919 int mb_type, partition_count, cbp = 0;
1920 int dct8x8_allowed= h->ps.pps->transform_8x8_mode;
1921 int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1922 const int pixel_shift = h->pixel_shift;
1924 mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
1926 ff_tlog(h->avctx, "pic:%d mb:%d/%d\n", h->poc.frame_num, sl->mb_x, sl->mb_y);
1927 if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1929 /* a skipped mb needs the aff flag from the following mb */
1930 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1931 skip = sl->next_mb_skipped;
1933 skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1934 /* read skip flags */
1936 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1937 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1938 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1939 if(!sl->next_mb_skipped)
1940 sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1943 decode_mb_skip(h, sl);
1945 h->cbp_table[mb_xy] = 0;
1946 h->chroma_pred_mode_table[mb_xy] = 0;
1947 sl->last_qscale_diff = 0;
1953 if (FRAME_MBAFF(h)) {
1954 if ((sl->mb_y & 1) == 0)
1956 sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1959 sl->prev_mb_skipped = 0;
1961 fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1963 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1965 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1967 if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1969 if (!IS_DIRECT(sl->top_type - 1))
1972 if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1973 mb_type= 0; /* B_Direct_16x16 */
1974 }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1975 mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1978 bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1979 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1980 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1981 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1983 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1984 }else if( bits == 13 ){
1985 mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1986 goto decode_intra_mb;
1987 }else if( bits == 14 ){
1988 mb_type= 11; /* B_L1_L0_8x16 */
1989 }else if( bits == 15 ){
1990 mb_type= 22; /* B_8x8 */
1992 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1993 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1996 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
1997 mb_type = ff_h264_b_mb_type_info[mb_type].type;
1998 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1999 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
2001 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
2002 /* P_L0_D16x16, P_8x8 */
2003 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2005 /* P_L0_D8x16, P_L0_D16x8 */
2006 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2008 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2009 mb_type = ff_h264_p_mb_type_info[mb_type].type;
2011 mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2012 goto decode_intra_mb;
2015 mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2016 if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2018 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_I);
2020 partition_count = 0;
2021 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2022 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2023 mb_type = ff_h264_i_mb_type_info[mb_type].type;
2026 mb_type |= MB_TYPE_INTERLACED;
2028 h->slice_table[mb_xy] = sl->slice_num;
2030 if(IS_INTRA_PCM(mb_type)) {
2031 const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2032 sps->bit_depth_luma >> 3;
2036 // We assume these blocks are very rare so we do not optimize it.
2037 // FIXME The two following lines get the bitstream position in the cabac
2038 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2039 ptr= sl->cabac.bytestream;
2040 if(sl->cabac.low&0x1) ptr--;
2042 if(sl->cabac.low&0x1FF) ptr--;
2045 // The pixels are stored in the same order as levels in h->mb array.
2046 if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2048 sl->intra_pcm_ptr = ptr;
2051 ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2055 // All blocks are present
2056 h->cbp_table[mb_xy] = 0xf7ef;
2057 h->chroma_pred_mode_table[mb_xy] = 0;
2058 // In deblocking, the quantizer is 0
2059 h->cur_pic.qscale_table[mb_xy] = 0;
2060 // All coeffs are present
2061 memset(h->non_zero_count[mb_xy], 16, 48);
2062 h->cur_pic.mb_type[mb_xy] = mb_type;
2063 sl->last_qscale_diff = 0;
2067 fill_decode_caches(h, sl, mb_type);
2069 if( IS_INTRA( mb_type ) ) {
2071 if( IS_INTRA4x4( mb_type ) ) {
2072 if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2073 mb_type |= MB_TYPE_8x8DCT;
2074 for( i = 0; i < 16; i+=4 ) {
2075 int pred = pred_intra_mode(h, sl, i);
2076 int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2077 fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2080 for( i = 0; i < 16; i++ ) {
2081 int pred = pred_intra_mode(h, sl, i);
2082 sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2084 ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2085 sl->intra4x4_pred_mode_cache[scan8[i]]);
2088 write_back_intra_pred_mode(h, sl);
2089 if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2090 sl->top_samples_available, sl->left_samples_available) < 0 )
2093 sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2094 sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2095 if (sl->intra16x16_pred_mode < 0) return -1;
2098 h->chroma_pred_mode_table[mb_xy] =
2099 pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2101 pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2102 sl->left_samples_available, pred_mode, 1 );
2103 if( pred_mode < 0 ) return -1;
2104 sl->chroma_pred_mode = pred_mode;
2106 sl->chroma_pred_mode = DC_128_PRED8x8;
2108 } else if( partition_count == 4 ) {
2109 int i, j, sub_partition_count[4], list, ref[2][4];
2111 if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2112 for( i = 0; i < 4; i++ ) {
2113 sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2114 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2115 sl->sub_mb_type[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2117 if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2118 sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2119 ff_h264_pred_direct_motion(h, sl, &mb_type);
2120 sl->ref_cache[0][scan8[4]] =
2121 sl->ref_cache[1][scan8[4]] =
2122 sl->ref_cache[0][scan8[12]] =
2123 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2124 for( i = 0; i < 4; i++ )
2125 fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2128 for( i = 0; i < 4; i++ ) {
2129 sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2130 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2131 sl->sub_mb_type[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2135 for( list = 0; list < sl->list_count; list++ ) {
2136 for( i = 0; i < 4; i++ ) {
2137 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2138 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2139 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2141 ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2142 if (ref[list][i] >= rc) {
2143 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2151 sl->ref_cache[list][scan8[4 * i] + 1] =
2152 sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2157 dct8x8_allowed = get_dct8x8_allowed(h, sl);
2159 for (list = 0; list < sl->list_count; list++) {
2161 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2162 if(IS_DIRECT(sl->sub_mb_type[i])){
2163 fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2167 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2168 const int sub_mb_type= sl->sub_mb_type[i];
2169 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2170 for(j=0; j<sub_partition_count[i]; j++){
2173 const int index= 4*i + block_width*j;
2174 int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2175 uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2176 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2177 DECODE_CABAC_MB_MVD(sl, list, index)
2178 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2180 if(IS_SUB_8X8(sub_mb_type)){
2182 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2184 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2187 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2189 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2190 }else if(IS_SUB_8X4(sub_mb_type)){
2191 mv_cache[ 1 ][0]= mx;
2192 mv_cache[ 1 ][1]= my;
2194 mvd_cache[ 1 ][0]= mpx;
2195 mvd_cache[ 1 ][1]= mpy;
2196 }else if(IS_SUB_4X8(sub_mb_type)){
2197 mv_cache[ 8 ][0]= mx;
2198 mv_cache[ 8 ][1]= my;
2200 mvd_cache[ 8 ][0]= mpx;
2201 mvd_cache[ 8 ][1]= mpy;
2203 mv_cache[ 0 ][0]= mx;
2204 mv_cache[ 0 ][1]= my;
2206 mvd_cache[ 0 ][0]= mpx;
2207 mvd_cache[ 0 ][1]= mpy;
2210 fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2211 fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2215 } else if( IS_DIRECT(mb_type) ) {
2216 ff_h264_pred_direct_motion(h, sl, &mb_type);
2217 fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2218 fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2219 dct8x8_allowed &= sps->direct_8x8_inference_flag;
2222 if(IS_16X16(mb_type)){
2223 for (list = 0; list < sl->list_count; list++) {
2224 if(IS_DIR(mb_type, 0, list)){
2226 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2228 ref= decode_cabac_mb_ref(sl, list, 0);
2230 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2235 fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2238 for (list = 0; list < sl->list_count; list++) {
2239 if(IS_DIR(mb_type, 0, list)){
2241 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2242 DECODE_CABAC_MB_MVD(sl, list, 0)
2243 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2245 fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2246 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2250 else if(IS_16X8(mb_type)){
2251 for (list = 0; list < sl->list_count; list++) {
2253 if(IS_DIR(mb_type, i, list)){
2255 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2257 ref= decode_cabac_mb_ref(sl, list, 8 * i);
2259 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2264 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2266 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2269 for (list = 0; list < sl->list_count; list++) {
2271 if(IS_DIR(mb_type, i, list)){
2273 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2274 DECODE_CABAC_MB_MVD(sl, list, 8*i)
2275 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2277 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2278 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2280 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2281 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2286 av_assert2(IS_8X16(mb_type));
2287 for (list = 0; list < sl->list_count; list++) {
2289 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2291 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2293 ref = decode_cabac_mb_ref(sl, list, 4 * i);
2295 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2300 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2302 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2305 for (list = 0; list < sl->list_count; list++) {
2307 if(IS_DIR(mb_type, i, list)){
2309 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2310 DECODE_CABAC_MB_MVD(sl, list, 4*i)
2312 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2313 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2314 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2316 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2317 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2324 if( IS_INTER( mb_type ) ) {
2325 h->chroma_pred_mode_table[mb_xy] = 0;
2326 write_back_motion(h, sl, mb_type);
2329 if( !IS_INTRA16x16( mb_type ) ) {
2330 cbp = decode_cabac_mb_cbp_luma(sl);
2332 cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2334 if (!decode_chroma && cbp>15) {
2335 av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2336 return AVERROR_INVALIDDATA;
2340 h->cbp_table[mb_xy] = sl->cbp = cbp;
2342 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2343 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2346 /* It would be better to do this in fill_decode_caches, but we don't know
2347 * the transform mode of the current macroblock there. */
2348 if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2350 uint8_t *nnz_cache = sl->non_zero_count_cache;
2351 for (i = 0; i < 2; i++){
2352 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2353 nnz_cache[3+8* 1 + 2*8*i]=
2354 nnz_cache[3+8* 2 + 2*8*i]=
2355 nnz_cache[3+8* 6 + 2*8*i]=
2356 nnz_cache[3+8* 7 + 2*8*i]=
2357 nnz_cache[3+8*11 + 2*8*i]=
2358 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2361 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2362 uint32_t top_empty = CABAC(h) && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2363 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2364 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2365 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 if(IS_INTERLACED(mb_type)){
2375 scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2376 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2378 scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2379 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2382 // decode_cabac_mb_dqp
2383 if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2386 const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2388 while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2391 if(val > 2*max_qp){ //prevent infinite loop
2392 av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2400 val= -((val + 1)>>1);
2401 sl->last_qscale_diff = val;
2403 if (((unsigned)sl->qscale) > max_qp){
2404 if (sl->qscale < 0) sl->qscale += max_qp + 1;
2405 else sl->qscale -= max_qp + 1;
2407 sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
2408 sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
2410 sl->last_qscale_diff=0;
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);