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(H264Context *h, H264SliceContext *sl)
1267 const int8_t (*tab)[2];
1268 const int slice_qp = av_clip(sl->qscale - 6*(h->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(H264Context *h, H264SliceContext *sl)
1287 const int mbb_xy = h->mb_xy - 2*h->mb_stride;
1289 unsigned long ctx = 0;
1291 ctx += h->mb_field_decoding_flag & !!h->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(H264Context *h, 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(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(h) == !!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 = h->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(H264Context *h, 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(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(H264Context *h, 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(H264Context *h, 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(H264Context *h, 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(H264Context *h, 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(H264Context *h, 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(H264Context *h, 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(h->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( h, 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 mx += decode_cabac_mb_mvd(h, sl, 40, amvd0, &mpx);\
1544 my += decode_cabac_mb_mvd(h, sl, 47, amvd1, &mpy);\
1547 static av_always_inline int get_cabac_cbf_ctx(H264Context *h, H264SliceContext *sl,
1548 int cat, int idx, int max_coeff,
1553 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1557 idx -= CHROMA_DC_BLOCK_INDEX;
1558 nza = (sl->left_cbp>>(6+idx))&0x01;
1559 nzb = (sl-> top_cbp>>(6+idx))&0x01;
1561 idx -= LUMA_DC_BLOCK_INDEX;
1562 nza = sl->left_cbp&(0x100<<idx);
1563 nzb = sl-> top_cbp&(0x100<<idx);
1566 nza = sl->non_zero_count_cache[scan8[idx] - 1];
1567 nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1576 return base_ctx[cat] + ctx;
1579 static av_always_inline void
1580 decode_cabac_residual_internal(H264Context *h, H264SliceContext *sl,
1582 int cat, int n, const uint8_t *scantable,
1583 const uint32_t *qmul, int max_coeff,
1584 int is_dc, int chroma422)
1586 static const int significant_coeff_flag_offset[2][14] = {
1587 { 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 },
1588 { 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 }
1590 static const int last_coeff_flag_offset[2][14] = {
1591 { 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 },
1592 { 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 }
1594 static const int coeff_abs_level_m1_offset[14] = {
1595 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
1597 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1598 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1599 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1600 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1601 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1602 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1603 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1604 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1605 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1607 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1608 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1609 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1610 * map node ctx => cabac ctx for level=1 */
1611 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1612 /* map node ctx => cabac ctx for level>1 */
1613 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1614 { 5, 5, 5, 5, 6, 7, 8, 9 },
1615 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1617 static const uint8_t coeff_abs_level_transition[2][8] = {
1618 /* update node ctx after decoding a level=1 */
1619 { 1, 2, 3, 3, 4, 5, 6, 7 },
1620 /* update node ctx after decoding a level>1 */
1621 { 4, 4, 4, 4, 5, 6, 7, 7 }
1627 int coeff_count = 0;
1630 uint8_t *significant_coeff_ctx_base;
1631 uint8_t *last_coeff_ctx_base;
1632 uint8_t *abs_level_m1_ctx_base;
1635 #define CABAC_ON_STACK
1637 #ifdef CABAC_ON_STACK
1640 cc.range = sl->cabac.range;
1641 cc.low = sl->cabac.low;
1642 cc.bytestream= sl->cabac.bytestream;
1643 #if !UNCHECKED_BITSTREAM_READER || ARCH_AARCH64
1644 cc.bytestream_end = sl->cabac.bytestream_end;
1647 #define CC &sl->cabac
1650 significant_coeff_ctx_base = sl->cabac_state
1651 + significant_coeff_flag_offset[MB_FIELD(h)][cat];
1652 last_coeff_ctx_base = sl->cabac_state
1653 + last_coeff_flag_offset[MB_FIELD(h)][cat];
1654 abs_level_m1_ctx_base = sl->cabac_state
1655 + coeff_abs_level_m1_offset[cat];
1657 if( !is_dc && max_coeff == 64 ) {
1658 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1659 for(last= 0; last < coefs; last++) { \
1660 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1661 if( get_cabac( CC, sig_ctx )) { \
1662 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1663 index[coeff_count++] = last; \
1664 if( get_cabac( CC, last_ctx ) ) { \
1670 if( last == max_coeff -1 ) {\
1671 index[coeff_count++] = last;\
1673 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(h)];
1674 #ifdef decode_significance
1675 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1676 last_coeff_ctx_base, sig_off);
1678 if (is_dc && chroma422) { // dc 422
1679 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1681 coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1682 last_coeff_ctx_base-significant_coeff_ctx_base);
1685 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1687 if (is_dc && chroma422) { // dc 422
1688 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1690 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1694 av_assert2(coeff_count > 0);
1698 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1700 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1701 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1703 if( max_coeff == 64 )
1704 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1706 av_assert2( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1707 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1711 #define STORE_BLOCK(type) \
1713 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1715 int j= scantable[index[--coeff_count]]; \
1717 if( get_cabac( CC, ctx ) == 0 ) { \
1718 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1720 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1722 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1725 int coeff_abs = 2; \
1726 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1727 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1729 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1733 if( coeff_abs >= 15 ) { \
1735 while (get_cabac_bypass(CC) && j < 30) { \
1741 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1747 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1749 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1752 } while ( coeff_count );
1754 if (h->pixel_shift) {
1755 STORE_BLOCK(int32_t)
1757 STORE_BLOCK(int16_t)
1759 #ifdef CABAC_ON_STACK
1760 sl->cabac.range = cc.range ;
1761 sl->cabac.low = cc.low ;
1762 sl->cabac.bytestream= cc.bytestream;
1767 static av_noinline void decode_cabac_residual_dc_internal(H264Context *h,
1768 H264SliceContext *sl,
1771 const uint8_t *scantable,
1774 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1777 static av_noinline void decode_cabac_residual_dc_internal_422(H264Context *h,
1778 H264SliceContext *sl,
1781 const uint8_t *scantable,
1784 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1787 static av_noinline void decode_cabac_residual_nondc_internal(H264Context *h,
1788 H264SliceContext *sl,
1791 const uint8_t *scantable,
1792 const uint32_t *qmul,
1795 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1798 /* cat: 0-> DC 16x16 n = 0
1799 * 1-> AC 16x16 n = luma4x4idx
1800 * 2-> Luma4x4 n = luma4x4idx
1801 * 3-> DC Chroma n = iCbCr
1802 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1803 * 5-> Luma8x8 n = 4 * luma8x8idx */
1805 /* Partially inline the CABAC residual decode: inline the coded block flag.
1806 * This has very little impact on binary size and improves performance
1807 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1808 * as well as because most blocks have zero CBFs. */
1810 static av_always_inline void decode_cabac_residual_dc(H264Context *h,
1811 H264SliceContext *sl,
1814 const uint8_t *scantable,
1817 /* read coded block flag */
1818 if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(h, sl, cat, n, max_coeff, 1)]) == 0 ) {
1819 sl->non_zero_count_cache[scan8[n]] = 0;
1822 decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1825 static av_always_inline void
1826 decode_cabac_residual_dc_422(H264Context *h, H264SliceContext *sl,
1828 int cat, int n, const uint8_t *scantable,
1831 /* read coded block flag */
1832 if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(h, sl, cat, n, max_coeff, 1)]) == 0) {
1833 sl->non_zero_count_cache[scan8[n]] = 0;
1836 decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1839 static av_always_inline void decode_cabac_residual_nondc(H264Context *h,
1840 H264SliceContext *sl,
1843 const uint8_t *scantable,
1844 const uint32_t *qmul,
1847 /* read coded block flag */
1848 if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(h, sl, cat, n, max_coeff, 0)]) == 0) {
1849 if( max_coeff == 64 ) {
1850 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1852 sl->non_zero_count_cache[scan8[n]] = 0;
1856 decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1859 static av_always_inline void decode_cabac_luma_residual(H264Context *h, H264SliceContext *sl,
1860 const uint8_t *scan, const uint8_t *scan8x8,
1861 int pixel_shift, int mb_type, int cbp, int p)
1863 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1864 const uint32_t *qmul;
1866 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1867 if( IS_INTRA16x16( mb_type ) ) {
1868 AV_ZERO128(sl->mb_luma_dc[p]+0);
1869 AV_ZERO128(sl->mb_luma_dc[p]+8);
1870 AV_ZERO128(sl->mb_luma_dc[p]+16);
1871 AV_ZERO128(sl->mb_luma_dc[p]+24);
1872 decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1875 qmul = h->dequant4_coeff[p][qscale];
1876 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1877 const int index = 16*p + i4x4;
1878 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1881 fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1884 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1885 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1886 if( cbp & (1<<i8x8) ) {
1887 if( IS_8x8DCT(mb_type) ) {
1888 const int index = 16*p + 4*i8x8;
1889 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1890 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
1892 qmul = h->dequant4_coeff[cqm][qscale];
1893 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1894 const int index = 16*p + 4*i8x8 + i4x4;
1896 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1897 //STOP_TIMER("decode_residual")
1901 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1908 * Decode a macroblock.
1909 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1911 int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
1914 int mb_type, partition_count, cbp = 0;
1915 int dct8x8_allowed= h->pps.transform_8x8_mode;
1916 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
1917 const int pixel_shift = h->pixel_shift;
1918 unsigned local_ref_count[2];
1920 mb_xy = h->mb_xy = h->mb_x + h->mb_y*h->mb_stride;
1922 tprintf(h->avctx, "pic:%d mb:%d/%d\n", h->frame_num, h->mb_x, h->mb_y);
1923 if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1925 /* a skipped mb needs the aff flag from the following mb */
1926 if (FRAME_MBAFF(h) && (h->mb_y & 1) == 1 && sl->prev_mb_skipped)
1927 skip = sl->next_mb_skipped;
1929 skip = decode_cabac_mb_skip(h, sl, h->mb_x, h->mb_y );
1930 /* read skip flags */
1932 if (FRAME_MBAFF(h) && (h->mb_y & 1) == 0) {
1933 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1934 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, h->mb_x, h->mb_y+1 );
1935 if(!sl->next_mb_skipped)
1936 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1939 decode_mb_skip(h, sl);
1941 h->cbp_table[mb_xy] = 0;
1942 h->chroma_pred_mode_table[mb_xy] = 0;
1943 sl->last_qscale_diff = 0;
1949 if (FRAME_MBAFF(h)) {
1950 if( (h->mb_y&1) == 0 )
1952 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1955 sl->prev_mb_skipped = 0;
1957 fill_decode_neighbors(h, sl, -(MB_FIELD(h)));
1959 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1961 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1963 if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1965 if (!IS_DIRECT(sl->top_type - 1))
1968 if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1969 mb_type= 0; /* B_Direct_16x16 */
1970 }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1971 mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1974 bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1975 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1976 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1977 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1979 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1980 }else if( bits == 13 ){
1981 mb_type = decode_cabac_intra_mb_type(h, sl, 32, 0);
1982 goto decode_intra_mb;
1983 }else if( bits == 14 ){
1984 mb_type= 11; /* B_L1_L0_8x16 */
1985 }else if( bits == 15 ){
1986 mb_type= 22; /* B_8x8 */
1988 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1989 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1992 partition_count= b_mb_type_info[mb_type].partition_count;
1993 mb_type= b_mb_type_info[mb_type].type;
1994 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1995 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
1997 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
1998 /* P_L0_D16x16, P_8x8 */
1999 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2001 /* P_L0_D8x16, P_L0_D16x8 */
2002 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2004 partition_count= p_mb_type_info[mb_type].partition_count;
2005 mb_type= p_mb_type_info[mb_type].type;
2007 mb_type = decode_cabac_intra_mb_type(h, sl, 17, 0);
2008 goto decode_intra_mb;
2011 mb_type = decode_cabac_intra_mb_type(h, sl, 3, 1);
2012 if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2014 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_I);
2016 partition_count = 0;
2017 cbp= i_mb_type_info[mb_type].cbp;
2018 sl->intra16x16_pred_mode = i_mb_type_info[mb_type].pred_mode;
2019 mb_type= i_mb_type_info[mb_type].type;
2022 mb_type |= MB_TYPE_INTERLACED;
2024 h->slice_table[mb_xy] = sl->slice_num;
2026 if(IS_INTRA_PCM(mb_type)) {
2027 const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
2028 h->sps.bit_depth_luma >> 3;
2031 // We assume these blocks are very rare so we do not optimize it.
2032 // FIXME The two following lines get the bitstream position in the cabac
2033 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2034 ptr= sl->cabac.bytestream;
2035 if(sl->cabac.low&0x1) ptr--;
2037 if(sl->cabac.low&0x1FF) ptr--;
2040 // The pixels are stored in the same order as levels in h->mb array.
2041 if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2043 sl->intra_pcm_ptr = ptr;
2046 ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2048 // All blocks are present
2049 h->cbp_table[mb_xy] = 0xf7ef;
2050 h->chroma_pred_mode_table[mb_xy] = 0;
2051 // In deblocking, the quantizer is 0
2052 h->cur_pic.qscale_table[mb_xy] = 0;
2053 // All coeffs are present
2054 memset(h->non_zero_count[mb_xy], 16, 48);
2055 h->cur_pic.mb_type[mb_xy] = mb_type;
2056 sl->last_qscale_diff = 0;
2060 local_ref_count[0] = sl->ref_count[0] << MB_MBAFF(h);
2061 local_ref_count[1] = sl->ref_count[1] << MB_MBAFF(h);
2063 fill_decode_caches(h, sl, mb_type);
2065 if( IS_INTRA( mb_type ) ) {
2067 if( IS_INTRA4x4( mb_type ) ) {
2068 if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2069 mb_type |= MB_TYPE_8x8DCT;
2070 for( i = 0; i < 16; i+=4 ) {
2071 int pred = pred_intra_mode(h, sl, i);
2072 int mode = decode_cabac_mb_intra4x4_pred_mode(h, sl, pred);
2073 fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2076 for( i = 0; i < 16; i++ ) {
2077 int pred = pred_intra_mode(h, sl, i);
2078 sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(h, sl, pred);
2080 av_dlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2081 sl->intra4x4_pred_mode_cache[scan8[i]]);
2084 write_back_intra_pred_mode(h, sl);
2085 if (ff_h264_check_intra4x4_pred_mode(h, sl) < 0 ) return -1;
2087 sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h, sl, sl->intra16x16_pred_mode, 0);
2088 if (sl->intra16x16_pred_mode < 0) return -1;
2091 h->chroma_pred_mode_table[mb_xy] =
2092 pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2094 pred_mode= ff_h264_check_intra_pred_mode(h, sl, pred_mode, 1 );
2095 if( pred_mode < 0 ) return -1;
2096 sl->chroma_pred_mode = pred_mode;
2098 sl->chroma_pred_mode = DC_128_PRED8x8;
2100 } else if( partition_count == 4 ) {
2101 int i, j, sub_partition_count[4], list, ref[2][4];
2103 if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2104 for( i = 0; i < 4; i++ ) {
2105 sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(h, sl);
2106 sub_partition_count[i] = b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2107 sl->sub_mb_type[i] = b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2109 if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2110 sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2111 ff_h264_pred_direct_motion(h, sl, &mb_type);
2112 sl->ref_cache[0][scan8[4]] =
2113 sl->ref_cache[1][scan8[4]] =
2114 sl->ref_cache[0][scan8[12]] =
2115 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2116 for( i = 0; i < 4; i++ )
2117 fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2120 for( i = 0; i < 4; i++ ) {
2121 sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(h, sl);
2122 sub_partition_count[i] = p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2123 sl->sub_mb_type[i] = p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2127 for( list = 0; list < sl->list_count; list++ ) {
2128 for( i = 0; i < 4; i++ ) {
2129 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2130 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2131 if (local_ref_count[list] > 1) {
2132 ref[list][i] = decode_cabac_mb_ref(h, sl, list, 4 * i);
2133 if (ref[list][i] >= (unsigned)local_ref_count[list]) {
2134 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], local_ref_count[list]);
2142 sl->ref_cache[list][scan8[4 * i] + 1] =
2143 sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2148 dct8x8_allowed = get_dct8x8_allowed(h, sl);
2150 for (list = 0; list < sl->list_count; list++) {
2152 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2153 if(IS_DIRECT(sl->sub_mb_type[i])){
2154 fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2158 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2159 const int sub_mb_type= sl->sub_mb_type[i];
2160 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2161 for(j=0; j<sub_partition_count[i]; j++){
2164 const int index= 4*i + block_width*j;
2165 int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2166 uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2167 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2168 DECODE_CABAC_MB_MVD( h, list, index)
2169 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2171 if(IS_SUB_8X8(sub_mb_type)){
2173 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2175 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2178 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2180 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2181 }else if(IS_SUB_8X4(sub_mb_type)){
2182 mv_cache[ 1 ][0]= mx;
2183 mv_cache[ 1 ][1]= my;
2185 mvd_cache[ 1 ][0]= mpx;
2186 mvd_cache[ 1 ][1]= mpy;
2187 }else if(IS_SUB_4X8(sub_mb_type)){
2188 mv_cache[ 8 ][0]= mx;
2189 mv_cache[ 8 ][1]= my;
2191 mvd_cache[ 8 ][0]= mpx;
2192 mvd_cache[ 8 ][1]= mpy;
2194 mv_cache[ 0 ][0]= mx;
2195 mv_cache[ 0 ][1]= my;
2197 mvd_cache[ 0 ][0]= mpx;
2198 mvd_cache[ 0 ][1]= mpy;
2201 fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2202 fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2206 } else if( IS_DIRECT(mb_type) ) {
2207 ff_h264_pred_direct_motion(h, sl, &mb_type);
2208 fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2209 fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2210 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
2213 if(IS_16X16(mb_type)){
2214 for (list = 0; list < sl->list_count; list++) {
2215 if(IS_DIR(mb_type, 0, list)){
2217 if (local_ref_count[list] > 1) {
2218 ref= decode_cabac_mb_ref(h, sl, list, 0);
2219 if (ref >= (unsigned)local_ref_count[list]) {
2220 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2225 fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2228 for (list = 0; list < sl->list_count; list++) {
2229 if(IS_DIR(mb_type, 0, list)){
2231 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2232 DECODE_CABAC_MB_MVD( h, list, 0)
2233 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2235 fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2236 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2240 else if(IS_16X8(mb_type)){
2241 for (list = 0; list < sl->list_count; list++) {
2243 if(IS_DIR(mb_type, i, list)){
2245 if (local_ref_count[list] > 1) {
2246 ref= decode_cabac_mb_ref(h, sl, list, 8 * i);
2247 if (ref >= (unsigned)local_ref_count[list]) {
2248 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2253 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2255 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2258 for (list = 0; list < sl->list_count; list++) {
2260 if(IS_DIR(mb_type, i, list)){
2262 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2263 DECODE_CABAC_MB_MVD( h, list, 8*i)
2264 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2266 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2267 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2269 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2270 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2275 av_assert2(IS_8X16(mb_type));
2276 for (list = 0; list < sl->list_count; list++) {
2278 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2280 if (local_ref_count[list] > 1) {
2281 ref= decode_cabac_mb_ref(h, sl, list, 4 * i);
2282 if (ref >= (unsigned)local_ref_count[list]) {
2283 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2288 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2290 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2293 for (list = 0; list < sl->list_count; list++) {
2295 if(IS_DIR(mb_type, i, list)){
2297 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2298 DECODE_CABAC_MB_MVD( h, list, 4*i)
2300 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2301 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2302 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2304 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2305 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2312 if( IS_INTER( mb_type ) ) {
2313 h->chroma_pred_mode_table[mb_xy] = 0;
2314 write_back_motion(h, sl, mb_type);
2317 if( !IS_INTRA16x16( mb_type ) ) {
2318 cbp = decode_cabac_mb_cbp_luma(h, sl);
2320 cbp |= decode_cabac_mb_cbp_chroma(h, sl) << 4;
2322 if (!decode_chroma && cbp>15) {
2323 av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2324 return AVERROR_INVALIDDATA;
2328 h->cbp_table[mb_xy] = sl->cbp = cbp;
2330 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2331 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2334 /* It would be better to do this in fill_decode_caches, but we don't know
2335 * the transform mode of the current macroblock there. */
2336 if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2338 uint8_t *nnz_cache = sl->non_zero_count_cache;
2339 for (i = 0; i < 2; i++){
2340 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2341 nnz_cache[3+8* 1 + 2*8*i]=
2342 nnz_cache[3+8* 2 + 2*8*i]=
2343 nnz_cache[3+8* 6 + 2*8*i]=
2344 nnz_cache[3+8* 7 + 2*8*i]=
2345 nnz_cache[3+8*11 + 2*8*i]=
2346 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2349 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2350 uint32_t top_empty = CABAC(h) && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2351 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2352 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2353 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2356 h->cur_pic.mb_type[mb_xy] = mb_type;
2358 if( cbp || IS_INTRA16x16( mb_type ) ) {
2359 const uint8_t *scan, *scan8x8;
2360 const uint32_t *qmul;
2362 if(IS_INTERLACED(mb_type)){
2363 scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2364 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2366 scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2367 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2370 // decode_cabac_mb_dqp
2371 if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2374 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
2376 while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2379 if(val > 2*max_qp){ //prevent infinite loop
2380 av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", h->mb_x, h->mb_y);
2388 val= -((val + 1)>>1);
2389 sl->last_qscale_diff = val;
2391 if (((unsigned)sl->qscale) > max_qp){
2392 if (sl->qscale < 0) sl->qscale += max_qp + 1;
2393 else sl->qscale -= max_qp + 1;
2395 sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
2396 sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
2398 sl->last_qscale_diff=0;
2400 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2402 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2403 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2404 } else if (CHROMA422(h)) {
2407 for (c = 0; c < 2; c++)
2408 decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2409 CHROMA_DC_BLOCK_INDEX + c,
2410 chroma422_dc_scan, 8);
2415 for( c = 0; c < 2; c++ ) {
2416 int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2417 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2418 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2419 for (i = 0; i < 4; i++) {
2420 const int index = 16 + 16 * c + 8*i8x8 + i;
2421 decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2422 mb += 16<<pixel_shift;
2427 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2428 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2430 } else /* yuv420 */ {
2433 for (c = 0; c < 2; c++)
2434 decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
2439 for( c = 0; c < 2; c++ ) {
2440 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2441 for( i = 0; i < 4; i++ ) {
2442 const int index = 16 + 16 * c + i;
2443 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2447 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2448 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2452 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2453 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2454 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2455 sl->last_qscale_diff = 0;
2458 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2459 write_back_non_zero_count(h, sl);