2 * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
5 * This file is part of Libav.
7 * Libav is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * Libav is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * H.264 / AVC / MPEG-4 part10 cabac decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
29 #define INT_BIT (CHAR_BIT * sizeof(int))
31 #include "libavutil/attributes.h"
32 #include "libavutil/timer.h"
35 #include "cabac_functions.h"
40 #include "h264_mvpred.h"
42 #include "mpegutils.h"
45 #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 unused 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 long mbb_xy = sl->mb_xy - 2L*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(&h->cabac, &h->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 mx += decode_cabac_mb_mvd(sl, 40, amvd0, &mpx);\
1544 my += decode_cabac_mb_mvd(sl, 47, amvd1, &mpy);\
1547 static av_always_inline int get_cabac_cbf_ctx(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(const 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 cc.bytestream_end = sl->cabac.bytestream_end;
1645 #define CC &sl->cabac
1648 significant_coeff_ctx_base = sl->cabac_state
1649 + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1650 last_coeff_ctx_base = sl->cabac_state
1651 + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1652 abs_level_m1_ctx_base = sl->cabac_state
1653 + coeff_abs_level_m1_offset[cat];
1655 if( !is_dc && max_coeff == 64 ) {
1656 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1657 for(last= 0; last < coefs; last++) { \
1658 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1659 if( get_cabac( CC, sig_ctx )) { \
1660 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1661 index[coeff_count++] = last; \
1662 if( get_cabac( CC, last_ctx ) ) { \
1668 if( last == max_coeff -1 ) {\
1669 index[coeff_count++] = last;\
1671 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1672 #ifdef decode_significance
1673 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1674 last_coeff_ctx_base, sig_off);
1676 if (is_dc && chroma422) { // dc 422
1677 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1679 coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1680 last_coeff_ctx_base-significant_coeff_ctx_base);
1683 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1685 if (is_dc && chroma422) { // dc 422
1686 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1688 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1692 assert(coeff_count > 0);
1696 h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1698 h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1699 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1701 if( max_coeff == 64 )
1702 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1704 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1705 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1709 #define STORE_BLOCK(type) \
1711 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1713 int j= scantable[index[--coeff_count]]; \
1715 if( get_cabac( CC, ctx ) == 0 ) { \
1716 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1718 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1720 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1723 int coeff_abs = 2; \
1724 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1725 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1727 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1731 if( coeff_abs >= 15 ) { \
1733 while (get_cabac_bypass(CC) && j < 30) { \
1739 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1745 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1747 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1750 } while ( coeff_count );
1752 if (h->pixel_shift) {
1753 STORE_BLOCK(int32_t)
1755 STORE_BLOCK(int16_t)
1757 #ifdef CABAC_ON_STACK
1758 sl->cabac.range = cc.range ;
1759 sl->cabac.low = cc.low ;
1760 sl->cabac.bytestream= cc.bytestream;
1765 static av_noinline void decode_cabac_residual_dc_internal(const H264Context *h,
1766 H264SliceContext *sl,
1769 const uint8_t *scantable,
1772 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1775 static av_noinline void decode_cabac_residual_dc_internal_422(const H264Context *h,
1776 H264SliceContext *sl,
1779 const uint8_t *scantable,
1782 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1785 static av_noinline void decode_cabac_residual_nondc_internal(const H264Context *h,
1786 H264SliceContext *sl,
1789 const uint8_t *scantable,
1790 const uint32_t *qmul,
1793 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1796 /* cat: 0-> DC 16x16 n = 0
1797 * 1-> AC 16x16 n = luma4x4idx
1798 * 2-> Luma4x4 n = luma4x4idx
1799 * 3-> DC Chroma n = iCbCr
1800 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1801 * 5-> Luma8x8 n = 4 * luma8x8idx */
1803 /* Partially inline the CABAC residual decode: inline the coded block flag.
1804 * This has very little impact on binary size and improves performance
1805 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1806 * as well as because most blocks have zero CBFs. */
1808 static av_always_inline void decode_cabac_residual_dc(const H264Context *h,
1809 H264SliceContext *sl,
1812 const uint8_t *scantable,
1815 /* read coded block flag */
1816 if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1817 sl->non_zero_count_cache[scan8[n]] = 0;
1820 decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1823 static av_always_inline void
1824 decode_cabac_residual_dc_422(const H264Context *h, H264SliceContext *sl,
1826 int cat, int n, const uint8_t *scantable,
1829 /* read coded block flag */
1830 if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
1831 sl->non_zero_count_cache[scan8[n]] = 0;
1834 decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1837 static av_always_inline void decode_cabac_residual_nondc(const H264Context *h,
1838 H264SliceContext *sl,
1841 const uint8_t *scantable,
1842 const uint32_t *qmul,
1845 /* read coded block flag */
1846 if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1847 if( max_coeff == 64 ) {
1848 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1850 sl->non_zero_count_cache[scan8[n]] = 0;
1854 decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1857 static av_always_inline void decode_cabac_luma_residual(const H264Context *h, H264SliceContext *sl,
1858 const uint8_t *scan, const uint8_t *scan8x8,
1859 int pixel_shift, int mb_type, int cbp, int p)
1861 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1862 const uint32_t *qmul;
1864 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1865 if( IS_INTRA16x16( mb_type ) ) {
1866 AV_ZERO128(sl->mb_luma_dc[p]+0);
1867 AV_ZERO128(sl->mb_luma_dc[p]+8);
1868 AV_ZERO128(sl->mb_luma_dc[p]+16);
1869 AV_ZERO128(sl->mb_luma_dc[p]+24);
1870 decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1873 qmul = h->ps.pps->dequant4_coeff[p][qscale];
1874 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1875 const int index = 16*p + i4x4;
1876 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1879 fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1882 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1883 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1884 if( cbp & (1<<i8x8) ) {
1885 if( IS_8x8DCT(mb_type) ) {
1886 const int index = 16*p + 4*i8x8;
1887 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1888 scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1890 qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1891 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1892 const int index = 16*p + 4*i8x8 + i4x4;
1894 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1895 //STOP_TIMER("decode_residual")
1899 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1906 * Decode a macroblock.
1907 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1909 int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1911 const SPS *sps = h->ps.sps;
1913 int mb_type, partition_count, cbp = 0;
1914 int dct8x8_allowed= h->ps.pps->transform_8x8_mode;
1915 int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1916 const int pixel_shift = h->pixel_shift;
1918 mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
1920 if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1922 /* a skipped mb needs the aff flag from the following mb */
1923 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1924 skip = sl->next_mb_skipped;
1926 skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1927 /* read skip flags */
1929 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1930 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1931 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1932 if(!sl->next_mb_skipped)
1933 sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1936 decode_mb_skip(h, sl);
1938 h->cbp_table[mb_xy] = 0;
1939 h->chroma_pred_mode_table[mb_xy] = 0;
1940 sl->last_qscale_diff = 0;
1946 if (FRAME_MBAFF(h)) {
1947 if ((sl->mb_y & 1) == 0)
1949 sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1952 sl->prev_mb_skipped = 0;
1954 fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1956 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1958 assert(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1960 if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1962 if (!IS_DIRECT(sl->top_type - 1))
1965 if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1966 mb_type= 0; /* B_Direct_16x16 */
1967 }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1968 mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1971 bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1972 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1973 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1974 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1976 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1977 }else if( bits == 13 ){
1978 mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1979 goto decode_intra_mb;
1980 }else if( bits == 14 ){
1981 mb_type= 11; /* B_L1_L0_8x16 */
1982 }else if( bits == 15 ){
1983 mb_type= 22; /* B_8x8 */
1985 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1986 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1989 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
1990 mb_type = ff_h264_b_mb_type_info[mb_type].type;
1991 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1992 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
1994 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
1995 /* P_L0_D16x16, P_8x8 */
1996 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
1998 /* P_L0_D8x16, P_L0_D16x8 */
1999 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2001 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2002 mb_type = ff_h264_p_mb_type_info[mb_type].type;
2004 mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2005 goto decode_intra_mb;
2008 mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2009 if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2011 assert(sl->slice_type_nos == AV_PICTURE_TYPE_I);
2013 partition_count = 0;
2014 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2015 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2016 mb_type = ff_h264_i_mb_type_info[mb_type].type;
2019 mb_type |= MB_TYPE_INTERLACED;
2021 h->slice_table[mb_xy] = sl->slice_num;
2023 if(IS_INTRA_PCM(mb_type)) {
2024 const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2025 sps->bit_depth_luma >> 3;
2028 // We assume these blocks are very rare so we do not optimize it.
2029 // FIXME The two following lines get the bitstream position in the cabac
2030 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2031 ptr= sl->cabac.bytestream;
2032 if(sl->cabac.low&0x1) ptr--;
2034 if(sl->cabac.low&0x1FF) ptr--;
2037 // The pixels are stored in the same order as levels in h->mb array.
2038 if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2040 sl->intra_pcm_ptr = ptr;
2043 ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2045 // All blocks are present
2046 h->cbp_table[mb_xy] = 0xf7ef;
2047 h->chroma_pred_mode_table[mb_xy] = 0;
2048 // In deblocking, the quantizer is 0
2049 h->cur_pic.qscale_table[mb_xy] = 0;
2050 // All coeffs are present
2051 memset(h->non_zero_count[mb_xy], 16, 48);
2052 h->cur_pic.mb_type[mb_xy] = mb_type;
2053 sl->last_qscale_diff = 0;
2057 fill_decode_caches(h, sl, mb_type);
2059 if( IS_INTRA( mb_type ) ) {
2061 if( IS_INTRA4x4( mb_type ) ) {
2062 if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2063 mb_type |= MB_TYPE_8x8DCT;
2064 for( i = 0; i < 16; i+=4 ) {
2065 int pred = pred_intra_mode(h, sl, i);
2066 int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2067 fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2070 for( i = 0; i < 16; i++ ) {
2071 int pred = pred_intra_mode(h, sl, i);
2072 sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2074 ff_dlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2075 sl->intra4x4_pred_mode_cache[scan8[i]]);
2078 write_back_intra_pred_mode(h, sl);
2079 if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2080 sl->top_samples_available, sl->left_samples_available) < 0 )
2083 sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2084 sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2085 if (sl->intra16x16_pred_mode < 0) return -1;
2088 h->chroma_pred_mode_table[mb_xy] =
2089 pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2091 pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2092 sl->left_samples_available, pred_mode, 1 );
2093 if( pred_mode < 0 ) return -1;
2094 sl->chroma_pred_mode = pred_mode;
2096 sl->chroma_pred_mode = DC_128_PRED8x8;
2098 } else if( partition_count == 4 ) {
2099 int i, j, sub_partition_count[4], list, ref[2][4];
2101 if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2102 for( i = 0; i < 4; i++ ) {
2103 sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2104 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2105 sl->sub_mb_type[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2107 if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2108 sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2109 ff_h264_pred_direct_motion(h, sl, &mb_type);
2110 sl->ref_cache[0][scan8[4]] =
2111 sl->ref_cache[1][scan8[4]] =
2112 sl->ref_cache[0][scan8[12]] =
2113 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2114 for( i = 0; i < 4; i++ )
2115 fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2118 for( i = 0; i < 4; i++ ) {
2119 sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2120 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2121 sl->sub_mb_type[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2125 for( list = 0; list < sl->list_count; list++ ) {
2126 for( i = 0; i < 4; i++ ) {
2127 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2128 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2129 int rc = sl->ref_count[list] << MB_MBAFF(sl);
2131 ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2132 if (ref[list][i] >= (unsigned) rc) {
2133 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2141 sl->ref_cache[list][scan8[4 * i] + 1] =
2142 sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2147 dct8x8_allowed = get_dct8x8_allowed(h, sl);
2149 for (list = 0; list < sl->list_count; list++) {
2151 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2152 if(IS_DIRECT(sl->sub_mb_type[i])){
2153 fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2157 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2158 const int sub_mb_type= sl->sub_mb_type[i];
2159 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2160 for(j=0; j<sub_partition_count[i]; j++){
2163 const int index= 4*i + block_width*j;
2164 int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2165 uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2166 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2167 DECODE_CABAC_MB_MVD(sl, list, index)
2168 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2170 if(IS_SUB_8X8(sub_mb_type)){
2172 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2174 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2177 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2179 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2180 }else if(IS_SUB_8X4(sub_mb_type)){
2181 mv_cache[ 1 ][0]= mx;
2182 mv_cache[ 1 ][1]= my;
2184 mvd_cache[ 1 ][0]= mpx;
2185 mvd_cache[ 1 ][1]= mpy;
2186 }else if(IS_SUB_4X8(sub_mb_type)){
2187 mv_cache[ 8 ][0]= mx;
2188 mv_cache[ 8 ][1]= my;
2190 mvd_cache[ 8 ][0]= mpx;
2191 mvd_cache[ 8 ][1]= mpy;
2193 mv_cache[ 0 ][0]= mx;
2194 mv_cache[ 0 ][1]= my;
2196 mvd_cache[ 0 ][0]= mpx;
2197 mvd_cache[ 0 ][1]= mpy;
2200 fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2201 fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2205 } else if( IS_DIRECT(mb_type) ) {
2206 ff_h264_pred_direct_motion(h, sl, &mb_type);
2207 fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2208 fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2209 dct8x8_allowed &= sps->direct_8x8_inference_flag;
2212 if(IS_16X16(mb_type)){
2213 for (list = 0; list < sl->list_count; list++) {
2214 if(IS_DIR(mb_type, 0, list)){
2215 int ref, rc = sl->ref_count[list] << MB_MBAFF(sl);
2217 ref= decode_cabac_mb_ref(sl, list, 0);
2218 if (ref >= (unsigned) rc) {
2219 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2224 fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2227 for (list = 0; list < sl->list_count; list++) {
2228 if(IS_DIR(mb_type, 0, list)){
2230 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2231 DECODE_CABAC_MB_MVD(sl, list, 0)
2232 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2234 fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2235 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2239 else if(IS_16X8(mb_type)){
2240 for (list = 0; list < sl->list_count; list++) {
2242 if(IS_DIR(mb_type, i, list)){
2243 int ref, rc = sl->ref_count[list] << MB_MBAFF(sl);
2245 ref= decode_cabac_mb_ref(sl, list, 8 * i);
2246 if (ref >= (unsigned) rc) {
2247 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2252 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2254 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2257 for (list = 0; list < sl->list_count; list++) {
2259 if(IS_DIR(mb_type, i, list)){
2261 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2262 DECODE_CABAC_MB_MVD(sl, list, 8*i)
2263 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2265 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2266 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2268 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2269 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2274 assert(IS_8X16(mb_type));
2275 for (list = 0; list < sl->list_count; list++) {
2277 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2278 int ref, rc = sl->ref_count[list] << MB_MBAFF(sl);
2280 ref = decode_cabac_mb_ref(sl, list, 4 * i);
2281 if (ref >= (unsigned) rc) {
2282 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2287 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2289 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2292 for (list = 0; list < sl->list_count; list++) {
2294 if(IS_DIR(mb_type, i, list)){
2296 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2297 DECODE_CABAC_MB_MVD(sl, list, 4*i)
2299 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2300 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2301 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2303 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2304 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2311 if( IS_INTER( mb_type ) ) {
2312 h->chroma_pred_mode_table[mb_xy] = 0;
2313 write_back_motion(h, sl, mb_type);
2316 if( !IS_INTRA16x16( mb_type ) ) {
2317 cbp = decode_cabac_mb_cbp_luma(sl);
2319 cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2322 h->cbp_table[mb_xy] = sl->cbp = cbp;
2324 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2325 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2328 /* It would be better to do this in fill_decode_caches, but we don't know
2329 * the transform mode of the current macroblock there. */
2330 if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2332 uint8_t *nnz_cache = sl->non_zero_count_cache;
2333 for (i = 0; i < 2; i++){
2334 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2335 nnz_cache[3+8* 1 + 2*8*i]=
2336 nnz_cache[3+8* 2 + 2*8*i]=
2337 nnz_cache[3+8* 6 + 2*8*i]=
2338 nnz_cache[3+8* 7 + 2*8*i]=
2339 nnz_cache[3+8*11 + 2*8*i]=
2340 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2343 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2344 uint32_t top_empty = CABAC(h) && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2345 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2346 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2347 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2350 h->cur_pic.mb_type[mb_xy] = mb_type;
2352 if( cbp || IS_INTRA16x16( mb_type ) ) {
2353 const uint8_t *scan, *scan8x8;
2354 const uint32_t *qmul;
2356 if(IS_INTERLACED(mb_type)){
2357 scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2358 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2360 scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2361 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2364 // decode_cabac_mb_dqp
2365 if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2368 const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2370 while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2373 if(val > 2*max_qp){ //prevent infinite loop
2374 av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2382 val= -((val + 1)>>1);
2383 sl->last_qscale_diff = val;
2385 if (((unsigned)sl->qscale) > max_qp){
2386 if (sl->qscale < 0) sl->qscale += max_qp + 1;
2387 else sl->qscale -= max_qp + 1;
2389 sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
2390 sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
2392 sl->last_qscale_diff=0;
2394 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2396 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2397 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2398 } else if (CHROMA422(h)) {
2401 for (c = 0; c < 2; c++)
2402 decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2403 CHROMA_DC_BLOCK_INDEX + c,
2404 ff_h264_chroma422_dc_scan, 8);
2409 for( c = 0; c < 2; c++ ) {
2410 int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2411 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2412 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2413 for (i = 0; i < 4; i++) {
2414 const int index = 16 + 16 * c + 8*i8x8 + i;
2415 decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2416 mb += 16<<pixel_shift;
2421 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2422 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2424 } else /* yuv420 */ {
2427 for (c = 0; c < 2; c++)
2428 decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16 * 16 * c) << pixel_shift),
2429 3, CHROMA_DC_BLOCK_INDEX + c, ff_h264_chroma_dc_scan, 4);
2434 for( c = 0; c < 2; c++ ) {
2435 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2436 for( i = 0; i < 4; i++ ) {
2437 const int index = 16 + 16 * c + i;
2438 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2442 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2443 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2447 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2448 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2449 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2450 sl->last_qscale_diff = 0;
2453 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2454 write_back_non_zero_count(h, sl);