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 / MPEG4 part10 cabac decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
32 #include "cabac_functions.h"
38 #include "h264_mvpred.h"
42 #include "x86/h264_i386.h"
48 /* Cabac pre state table */
50 static const int8_t cabac_context_init_I[1024][2] =
53 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
54 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
55 { -6, 53 }, { -1, 54 }, { 7, 51 },
57 /* 11 - 23 unsused for I */
58 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
59 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
60 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
64 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
65 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
66 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
67 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
70 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
71 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
72 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
76 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
80 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
81 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
82 { 13, 41 }, { 3, 62 },
85 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
86 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
87 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
88 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
89 { -12, 115 },{ -16, 122 },
92 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
93 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
94 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
95 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
99 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
100 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
101 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
102 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
103 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
104 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
105 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
106 { 14, 62 }, { -13, 108 },{ -15, 100 },
109 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
110 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
111 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
112 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
113 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
114 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
115 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
116 { 0, 62 }, { 12, 72 },
119 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
120 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
121 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
122 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
123 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
124 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
125 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
126 { 0, 89 }, { 26, -19 }, { 22, -17 },
129 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
130 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
131 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
132 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
133 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
134 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
135 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
136 { 12, 68 }, { 2, 97 },
139 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
140 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
141 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
142 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
143 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
144 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
148 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
149 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
150 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
151 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
152 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
153 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
155 /* 276 a bit special (not used, bypass is used instead) */
159 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
160 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
161 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
162 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
163 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
164 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
165 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
166 { 9, 64 }, { -12, 104 },{ -11, 97 },
169 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
170 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
171 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
172 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
173 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
174 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
175 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
176 { 5, 64 }, { 12, 70 },
179 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
180 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
181 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
182 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
183 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
184 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
185 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
186 { -12, 109 },{ 36, -35 }, { 36, -34 },
189 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
190 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
191 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
192 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
193 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
194 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
195 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
196 { 29, 39 }, { 19, 66 },
199 { 31, 21 }, { 31, 31 }, { 25, 50 },
200 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
201 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
202 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
203 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
204 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
205 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
206 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
207 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
208 { 0, 68 }, { -9, 92 },
211 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
212 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
213 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
214 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
215 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
216 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
219 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
220 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
221 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
222 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
223 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
224 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
225 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
226 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
227 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
228 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
229 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
230 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
231 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
232 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
233 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
234 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
235 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
236 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
237 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
238 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
239 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
240 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
241 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
242 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
243 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
244 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
245 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
246 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
247 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
248 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
249 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
250 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
251 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
252 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
253 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
254 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
255 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
256 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
257 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
258 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
259 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
260 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
261 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
262 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
263 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
264 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
265 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
266 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
267 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
268 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
269 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
270 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
271 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
272 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 },
273 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 },
274 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 },
275 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 },
276 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 },
277 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 },
278 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 },
279 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
280 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
281 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
282 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
283 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 },
284 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 },
285 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 },
286 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 },
287 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 },
288 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 },
289 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 },
290 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 },
291 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 },
292 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 },
293 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 },
294 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 },
295 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 },
296 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 },
297 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 },
298 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
299 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
300 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
301 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
302 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
303 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
304 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
305 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
306 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
307 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
308 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
309 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
310 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
311 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
312 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
313 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
314 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
315 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
316 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
317 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
318 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
319 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
320 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
321 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
322 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
323 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
324 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
325 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
326 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
327 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
328 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
329 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
330 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
331 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
332 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
333 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
334 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
335 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
336 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
337 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
338 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
339 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
340 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
341 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
342 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
343 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
344 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
345 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
346 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
347 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
348 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 },
349 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 },
350 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 },
351 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 },
352 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 },
353 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 },
354 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 },
355 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 },
356 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 },
357 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
358 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
359 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }
362 static const int8_t cabac_context_init_PB[3][1024][2] =
364 /* i_cabac_init_idc == 0 */
367 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
368 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
369 { -6, 53 }, { -1, 54 }, { 7, 51 },
372 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
373 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
374 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
378 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
379 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
380 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
381 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
384 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
385 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
386 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
387 { -3, 81 }, { 0, 88 },
390 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
391 { -7, 72 }, { 1, 58 },
394 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
395 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
396 { 13, 41 }, { 3, 62 },
399 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
400 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
401 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
402 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
403 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
404 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
405 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
406 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
407 { 0, 68 }, { -4, 69 }, { -8, 88 },
410 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
411 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
412 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
413 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
414 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
415 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
416 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
417 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
418 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
419 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
420 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
421 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
422 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
423 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
424 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
428 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
429 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
430 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
431 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
432 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
433 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
434 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
435 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
436 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
437 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
438 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
439 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
440 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
441 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
442 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
446 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
447 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
448 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
449 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
450 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
451 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
452 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
453 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
454 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
455 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
456 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
457 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
460 /* 276 a bit special (not used, bypass is used instead) */
464 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
465 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
466 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
467 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
468 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
469 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
470 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
471 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
472 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
473 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
474 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
475 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
476 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
477 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
478 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
482 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
483 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
484 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
485 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
486 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
487 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
488 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
489 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
490 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
491 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
492 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
493 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
494 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
495 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
496 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
500 { 12, 40 }, { 11, 51 }, { 14, 59 },
501 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
502 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
503 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
504 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
505 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
506 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
507 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
508 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
509 { -8, 66 }, { -8, 76 },
512 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
513 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
514 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
515 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
516 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
517 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
520 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
521 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
522 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
523 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
524 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
525 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
526 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
527 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
528 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
529 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
530 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
531 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
532 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
533 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
534 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
535 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
536 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
537 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
538 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
539 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
540 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
541 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
542 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
543 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
544 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
545 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
546 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
547 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
548 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
549 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
550 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
551 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
552 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
553 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
554 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
555 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
556 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
557 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
558 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
559 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
560 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
561 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
562 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
563 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
564 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
565 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
566 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
567 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
568 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
569 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
570 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
571 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
572 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
573 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 },
574 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 },
575 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 },
576 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 },
577 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 },
578 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 },
579 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 },
580 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
581 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
582 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
583 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
584 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 },
585 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 },
586 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 },
587 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 },
588 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 },
589 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 },
590 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 },
591 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 },
592 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 },
593 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 },
594 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 },
595 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 },
596 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 },
597 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 },
598 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 },
599 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
600 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
601 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
602 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
603 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
604 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
605 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
606 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
607 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
608 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
609 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
610 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
611 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
612 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
613 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
614 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
615 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
616 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
617 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
618 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
619 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
620 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
621 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
622 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
623 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
624 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
625 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
626 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
627 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
628 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
629 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
630 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
631 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
632 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
633 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
634 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
635 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
636 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
637 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
638 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
639 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
640 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
641 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
642 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
643 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
644 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
645 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
646 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
647 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
648 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
649 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
650 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 },
651 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 },
652 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 },
653 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 },
654 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 },
655 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 },
656 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 },
657 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 },
658 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
659 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
660 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }
663 /* i_cabac_init_idc == 1 */
666 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
667 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
668 { -6, 53 }, { -1, 54 }, { 7, 51 },
671 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
672 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
673 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
677 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
678 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
679 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
680 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
683 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
684 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
685 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
686 { -7, 86 },{ -5, 95 },
689 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
690 { -5, 72 },{ 0, 61 },
693 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
694 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
695 { 13, 41 }, { 3, 62 },
698 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
699 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
700 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
701 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
702 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
703 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
704 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
705 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
706 { 0, 68 }, { -7, 74 }, { -9, 88 },
709 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
710 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
711 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
712 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
713 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
714 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
715 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
716 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
717 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
718 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
719 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
720 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
721 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
722 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
723 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
727 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
728 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
729 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
730 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
731 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
732 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
733 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
734 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
735 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
736 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
737 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
738 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
739 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
740 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
741 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
745 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
746 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
747 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
748 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
749 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
750 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
751 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
752 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
753 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
754 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
755 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
756 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
759 /* 276 a bit special (not used, bypass is used instead) */
763 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
764 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
765 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
766 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
767 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
768 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
769 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
770 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
771 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
772 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
773 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
774 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
775 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
776 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
777 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
781 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
782 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
783 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
784 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
785 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
786 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
787 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
788 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
789 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
790 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
791 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
792 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
793 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
794 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
795 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
799 { 25, 32 }, { 21, 49 }, { 21, 54 },
800 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
801 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
802 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
803 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
804 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
805 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
806 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
807 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
808 { -4, 67 }, { -7, 82 },
811 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
812 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
813 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
814 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
815 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
816 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
819 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
820 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
821 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
822 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
823 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
824 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
825 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
826 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
827 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
828 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
829 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
830 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
831 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
832 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
833 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
834 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
835 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
836 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
837 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
838 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
839 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
840 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
841 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
842 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
843 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
844 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
845 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
846 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
847 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
848 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
849 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
850 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
851 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
852 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
853 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
854 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
855 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
856 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
857 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
858 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
859 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
860 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
861 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
862 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
863 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
864 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
865 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
866 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
867 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
868 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
869 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
870 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
871 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
872 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 },
873 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 },
874 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 },
875 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 },
876 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 },
877 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 },
878 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 },
879 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
880 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
881 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
882 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
883 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 },
884 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 },
885 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 },
886 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 },
887 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 },
888 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 },
889 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 },
890 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 },
891 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 },
892 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 },
893 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 },
894 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 },
895 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 },
896 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 },
897 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 },
898 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
899 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
900 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
901 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
902 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
903 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
904 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
905 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
906 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
907 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
908 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
909 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
910 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
911 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
912 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
913 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
914 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
915 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
916 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
917 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
918 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
919 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
920 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
921 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
922 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
923 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
924 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
925 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
926 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
927 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
928 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
929 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
930 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
931 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
932 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
933 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
934 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
935 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
936 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
937 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
938 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
939 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
940 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
941 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
942 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
943 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
944 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
945 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
946 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
947 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
948 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
949 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 },
950 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 },
951 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 },
952 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 },
953 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 },
954 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 },
955 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 },
956 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 },
957 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
958 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
959 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }
962 /* i_cabac_init_idc == 2 */
965 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
966 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
967 { -6, 53 }, { -1, 54 }, { 7, 51 },
970 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
971 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
972 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
976 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
977 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
978 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
979 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
982 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
983 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
984 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
985 { -3, 90 },{ -1, 101 },
988 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
989 { -7, 50 },{ 1, 60 },
992 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
993 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
994 { 13, 41 }, { 3, 62 },
997 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
998 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
999 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
1000 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
1001 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1002 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1003 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1004 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1005 { 3, 68 }, { -8, 71 }, { -13, 98 },
1008 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1009 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1010 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1011 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1012 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1013 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1014 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1015 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1016 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1017 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1018 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1019 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1020 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1021 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1022 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1026 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1027 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1028 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1029 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1030 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1031 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1032 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1033 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1034 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1035 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1036 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1037 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1038 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1039 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1040 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1044 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1045 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1046 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1047 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1048 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1049 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1050 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1051 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1052 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1053 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1054 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1055 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1058 /* 276 a bit special (not used, bypass is used instead) */
1062 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1063 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1064 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1065 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1066 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1067 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1068 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1069 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1070 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1071 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1072 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1073 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1074 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1075 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1076 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1080 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1081 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1082 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1083 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1084 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1085 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1086 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1087 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1088 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1089 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1090 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1091 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1092 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1093 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1094 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1098 { 21, 33 }, { 19, 50 }, { 17, 61 },
1099 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1100 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1101 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1102 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1103 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1104 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1105 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1106 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1107 { -6, 68 }, { -10, 79 },
1110 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1111 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1112 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1113 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1114 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1115 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1118 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1119 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1120 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1121 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1122 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1123 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1124 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1125 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1126 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1127 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1128 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1129 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1130 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1131 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1132 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1133 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1134 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1135 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1136 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1137 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1138 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1139 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1140 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1141 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1142 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1143 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1144 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1145 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1146 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1147 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1148 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1149 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1150 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1151 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1152 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1153 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1154 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1155 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1156 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1157 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1158 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1159 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1160 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1161 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1162 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1163 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1164 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1165 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1166 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1167 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1168 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1169 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1170 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1171 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 },
1172 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 },
1173 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 },
1174 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 },
1175 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 },
1176 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 },
1177 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 },
1178 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1179 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1180 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1181 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1182 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 },
1183 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 },
1184 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 },
1185 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 },
1186 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 },
1187 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 },
1188 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 },
1189 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 },
1190 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 },
1191 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 },
1192 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 },
1193 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 },
1194 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 },
1195 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 },
1196 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 },
1197 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1198 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1199 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1200 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1201 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1202 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1203 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1204 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1205 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1206 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1207 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1208 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1209 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1210 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1211 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1212 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1213 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1214 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1215 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1216 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1217 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1218 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1219 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1220 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1221 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1222 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1223 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1224 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1225 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1226 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1227 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1228 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1229 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1230 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1231 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1232 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1233 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1234 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1235 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1236 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1237 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1238 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1239 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1240 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1241 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1242 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1243 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1244 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1245 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1246 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1247 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1248 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 },
1249 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 },
1250 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 },
1251 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 },
1252 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 },
1253 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 },
1254 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 },
1255 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 },
1256 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1257 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1258 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }
1262 void ff_h264_init_cabac_states(H264Context *h) {
1264 const int8_t (*tab)[2];
1265 const int slice_qp = av_clip(h->qscale - 6*(h->sps.bit_depth_luma-8), 0, 51);
1267 if( h->slice_type_nos == AV_PICTURE_TYPE_I ) tab = cabac_context_init_I;
1268 else tab = cabac_context_init_PB[h->cabac_init_idc];
1270 /* calculate pre-state */
1271 for( i= 0; i < 1024; i++ ) {
1272 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1278 h->cabac_state[i] = pre;
1282 static int decode_cabac_field_decoding_flag(H264Context *h) {
1283 const long mbb_xy = h->mb_xy - 2L*h->mb_stride;
1285 unsigned long ctx = 0;
1287 ctx += h->mb_field_decoding_flag & !!h->mb_x; //for FMO:(s->current_picture.f.mb_type[mba_xy] >> 7) & (h->slice_table[mba_xy] == h->slice_num);
1288 ctx += (h->cur_pic.f.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == h->slice_num);
1290 return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] );
1293 static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) {
1294 uint8_t *state= &h->cabac_state[ctx_base];
1299 if( h->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1301 if( h->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1303 if( get_cabac_noinline( &h->cabac, &state[ctx] ) == 0 )
1304 return 0; /* I4x4 */
1307 if( get_cabac_noinline( &h->cabac, state ) == 0 )
1308 return 0; /* I4x4 */
1311 if( get_cabac_terminate( &h->cabac ) )
1312 return 25; /* PCM */
1314 mb_type = 1; /* I16x16 */
1315 mb_type += 12 * get_cabac_noinline( &h->cabac, &state[1] ); /* cbp_luma != 0 */
1316 if( get_cabac_noinline( &h->cabac, &state[2] ) ) /* cbp_chroma */
1317 mb_type += 4 + 4 * get_cabac_noinline( &h->cabac, &state[2+intra_slice] );
1318 mb_type += 2 * get_cabac_noinline( &h->cabac, &state[3+intra_slice] );
1319 mb_type += 1 * get_cabac_noinline( &h->cabac, &state[3+2*intra_slice] );
1323 static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) {
1327 if(FRAME_MBAFF){ //FIXME merge with the stuff in fill_caches?
1328 int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1331 && h->slice_table[mba_xy] == h->slice_num
1332 && MB_FIELD == !!IS_INTERLACED( h->cur_pic.f.mb_type[mba_xy] ) )
1333 mba_xy += h->mb_stride;
1335 mbb_xy = mb_xy - h->mb_stride;
1337 && h->slice_table[mbb_xy] == h->slice_num
1338 && IS_INTERLACED( h->cur_pic.f.mb_type[mbb_xy] ) )
1339 mbb_xy -= h->mb_stride;
1341 mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1343 int mb_xy = h->mb_xy;
1345 mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE);
1348 if( h->slice_table[mba_xy] == h->slice_num && !IS_SKIP(h->cur_pic.f.mb_type[mba_xy] ))
1350 if( h->slice_table[mbb_xy] == h->slice_num && !IS_SKIP(h->cur_pic.f.mb_type[mbb_xy] ))
1353 if( h->slice_type_nos == AV_PICTURE_TYPE_B )
1355 return get_cabac_noinline( &h->cabac, &h->cabac_state[11+ctx] );
1358 static int decode_cabac_mb_intra4x4_pred_mode( H264Context *h, int pred_mode ) {
1361 if( get_cabac( &h->cabac, &h->cabac_state[68] ) )
1364 mode += 1 * get_cabac( &h->cabac, &h->cabac_state[69] );
1365 mode += 2 * get_cabac( &h->cabac, &h->cabac_state[69] );
1366 mode += 4 * get_cabac( &h->cabac, &h->cabac_state[69] );
1368 return mode + ( mode >= pred_mode );
1371 static int decode_cabac_mb_chroma_pre_mode( H264Context *h) {
1372 const int mba_xy = h->left_mb_xy[0];
1373 const int mbb_xy = h->top_mb_xy;
1377 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1378 if( h->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0 )
1381 if( h->top_type && h->chroma_pred_mode_table[mbb_xy] != 0 )
1384 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+ctx] ) == 0 )
1387 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 )
1389 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 )
1395 static int decode_cabac_mb_cbp_luma( H264Context *h) {
1396 int cbp_b, cbp_a, ctx, cbp = 0;
1398 cbp_a = h->left_cbp;
1401 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1402 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]);
1403 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1404 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 1;
1405 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1406 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 2;
1407 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1408 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 3;
1411 static int decode_cabac_mb_cbp_chroma( H264Context *h) {
1415 cbp_a = (h->left_cbp>>4)&0x03;
1416 cbp_b = (h-> top_cbp>>4)&0x03;
1419 if( cbp_a > 0 ) ctx++;
1420 if( cbp_b > 0 ) ctx += 2;
1421 if( get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] ) == 0 )
1425 if( cbp_a == 2 ) ctx++;
1426 if( cbp_b == 2 ) ctx += 2;
1427 return 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] );
1430 static int decode_cabac_p_mb_sub_type( H264Context *h ) {
1431 if( get_cabac( &h->cabac, &h->cabac_state[21] ) )
1433 if( !get_cabac( &h->cabac, &h->cabac_state[22] ) )
1435 if( get_cabac( &h->cabac, &h->cabac_state[23] ) )
1439 static int decode_cabac_b_mb_sub_type( H264Context *h ) {
1441 if( !get_cabac( &h->cabac, &h->cabac_state[36] ) )
1442 return 0; /* B_Direct_8x8 */
1443 if( !get_cabac( &h->cabac, &h->cabac_state[37] ) )
1444 return 1 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1446 if( get_cabac( &h->cabac, &h->cabac_state[38] ) ) {
1447 if( get_cabac( &h->cabac, &h->cabac_state[39] ) )
1448 return 11 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1451 type += 2*get_cabac( &h->cabac, &h->cabac_state[39] );
1452 type += get_cabac( &h->cabac, &h->cabac_state[39] );
1456 static int decode_cabac_mb_ref( H264Context *h, int list, int n ) {
1457 int refa = h->ref_cache[list][scan8[n] - 1];
1458 int refb = h->ref_cache[list][scan8[n] - 8];
1462 if( h->slice_type_nos == AV_PICTURE_TYPE_B) {
1463 if( refa > 0 && !(h->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1465 if( refb > 0 && !(h->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1474 while( get_cabac( &h->cabac, &h->cabac_state[54+ctx] ) ) {
1477 if(ref >= 32 /*h->ref_list[list]*/){
1484 static int decode_cabac_mb_mvd( H264Context *h, int ctxbase, int amvd, int *mvda) {
1487 if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1488 // if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1495 while( mvd < 9 && get_cabac( &h->cabac, &h->cabac_state[ctxbase] ) ) {
1503 while( get_cabac_bypass( &h->cabac ) ) {
1507 av_log(h->avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1512 mvd += get_cabac_bypass( &h->cabac )<<k;
1514 *mvda=mvd < 70 ? mvd : 70;
1517 return get_cabac_bypass_sign( &h->cabac, -mvd );
1520 #define DECODE_CABAC_MB_MVD( h, list, n )\
1522 int amvd0 = h->mvd_cache[list][scan8[n] - 1][0] +\
1523 h->mvd_cache[list][scan8[n] - 8][0];\
1524 int amvd1 = h->mvd_cache[list][scan8[n] - 1][1] +\
1525 h->mvd_cache[list][scan8[n] - 8][1];\
1527 mx += decode_cabac_mb_mvd( h, 40, amvd0, &mpx );\
1528 my += decode_cabac_mb_mvd( h, 47, amvd1, &mpy );\
1531 static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx, int max_coeff, int is_dc ) {
1534 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1538 idx -= CHROMA_DC_BLOCK_INDEX;
1539 nza = (h->left_cbp>>(6+idx))&0x01;
1540 nzb = (h-> top_cbp>>(6+idx))&0x01;
1542 idx -= LUMA_DC_BLOCK_INDEX;
1543 nza = h->left_cbp&(0x100<<idx);
1544 nzb = h-> top_cbp&(0x100<<idx);
1547 nza = h->non_zero_count_cache[scan8[idx] - 1];
1548 nzb = h->non_zero_count_cache[scan8[idx] - 8];
1557 return base_ctx[cat] + ctx;
1560 static av_always_inline void
1561 decode_cabac_residual_internal(H264Context *h, int16_t *block,
1562 int cat, int n, const uint8_t *scantable,
1563 const uint32_t *qmul, int max_coeff,
1564 int is_dc, int chroma422)
1566 static const int significant_coeff_flag_offset[2][14] = {
1567 { 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 },
1568 { 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 }
1570 static const int last_coeff_flag_offset[2][14] = {
1571 { 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 },
1572 { 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 }
1574 static const int coeff_abs_level_m1_offset[14] = {
1575 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
1577 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1578 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1579 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1580 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1581 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1582 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1583 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1584 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1585 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1587 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1588 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1589 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1590 * map node ctx => cabac ctx for level=1 */
1591 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1592 /* map node ctx => cabac ctx for level>1 */
1593 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1594 { 5, 5, 5, 5, 6, 7, 8, 9 },
1595 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1597 static const uint8_t coeff_abs_level_transition[2][8] = {
1598 /* update node ctx after decoding a level=1 */
1599 { 1, 2, 3, 3, 4, 5, 6, 7 },
1600 /* update node ctx after decoding a level>1 */
1601 { 4, 4, 4, 4, 5, 6, 7, 7 }
1607 int coeff_count = 0;
1610 uint8_t *significant_coeff_ctx_base;
1611 uint8_t *last_coeff_ctx_base;
1612 uint8_t *abs_level_m1_ctx_base;
1615 #define CABAC_ON_STACK
1617 #ifdef CABAC_ON_STACK
1620 cc.range = h->cabac.range;
1621 cc.low = h->cabac.low;
1622 cc.bytestream= h->cabac.bytestream;
1623 cc.bytestream_end = h->cabac.bytestream_end;
1625 #define CC &h->cabac
1628 significant_coeff_ctx_base = h->cabac_state
1629 + significant_coeff_flag_offset[MB_FIELD][cat];
1630 last_coeff_ctx_base = h->cabac_state
1631 + last_coeff_flag_offset[MB_FIELD][cat];
1632 abs_level_m1_ctx_base = h->cabac_state
1633 + coeff_abs_level_m1_offset[cat];
1635 if( !is_dc && max_coeff == 64 ) {
1636 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1637 for(last= 0; last < coefs; last++) { \
1638 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1639 if( get_cabac( CC, sig_ctx )) { \
1640 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1641 index[coeff_count++] = last; \
1642 if( get_cabac( CC, last_ctx ) ) { \
1648 if( last == max_coeff -1 ) {\
1649 index[coeff_count++] = last;\
1651 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD];
1652 #ifdef decode_significance
1653 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1654 last_coeff_ctx_base, sig_off);
1656 if (is_dc && chroma422) { // dc 422
1657 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1659 coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1660 last_coeff_ctx_base-significant_coeff_ctx_base);
1663 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1665 if (is_dc && chroma422) { // dc 422
1666 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1668 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1672 assert(coeff_count > 0);
1676 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1678 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1679 h->non_zero_count_cache[scan8[n]] = coeff_count;
1681 if( max_coeff == 64 )
1682 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1684 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1685 h->non_zero_count_cache[scan8[n]] = coeff_count;
1689 #define STORE_BLOCK(type) \
1691 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1693 int j= scantable[index[--coeff_count]]; \
1695 if( get_cabac( CC, ctx ) == 0 ) { \
1696 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1698 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1700 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1703 int coeff_abs = 2; \
1704 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1705 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1707 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1711 if( coeff_abs >= 15 ) { \
1713 while( get_cabac_bypass( CC ) ) { \
1719 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1725 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1727 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1730 } while ( coeff_count );
1732 if (h->pixel_shift) {
1733 STORE_BLOCK(int32_t)
1735 STORE_BLOCK(int16_t)
1737 #ifdef CABAC_ON_STACK
1738 h->cabac.range = cc.range ;
1739 h->cabac.low = cc.low ;
1740 h->cabac.bytestream= cc.bytestream;
1745 static void decode_cabac_residual_dc_internal(H264Context *h, int16_t *block,
1747 const uint8_t *scantable,
1750 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1753 static void decode_cabac_residual_dc_internal_422(H264Context *h, int16_t *block,
1754 int cat, int n, const uint8_t *scantable,
1757 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1760 static void decode_cabac_residual_nondc_internal(H264Context *h, int16_t *block,
1762 const uint8_t *scantable,
1763 const uint32_t *qmul,
1766 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1769 /* cat: 0-> DC 16x16 n = 0
1770 * 1-> AC 16x16 n = luma4x4idx
1771 * 2-> Luma4x4 n = luma4x4idx
1772 * 3-> DC Chroma n = iCbCr
1773 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1774 * 5-> Luma8x8 n = 4 * luma8x8idx */
1776 /* Partially inline the CABAC residual decode: inline the coded block flag.
1777 * This has very little impact on binary size and improves performance
1778 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1779 * as well as because most blocks have zero CBFs. */
1781 static av_always_inline void decode_cabac_residual_dc(H264Context *h,
1784 const uint8_t *scantable,
1787 /* read coded block flag */
1788 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) {
1789 h->non_zero_count_cache[scan8[n]] = 0;
1792 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff );
1795 static av_always_inline void
1796 decode_cabac_residual_dc_422(H264Context *h, int16_t *block,
1797 int cat, int n, const uint8_t *scantable,
1800 /* read coded block flag */
1801 if (get_cabac(&h->cabac, &h->cabac_state[get_cabac_cbf_ctx(h, cat, n, max_coeff, 1)]) == 0) {
1802 h->non_zero_count_cache[scan8[n]] = 0;
1805 decode_cabac_residual_dc_internal_422(h, block, cat, n, scantable, max_coeff);
1808 static av_always_inline void decode_cabac_residual_nondc(H264Context *h,
1811 const uint8_t *scantable,
1812 const uint32_t *qmul,
1815 /* read coded block flag */
1816 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) {
1817 if( max_coeff == 64 ) {
1818 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1820 h->non_zero_count_cache[scan8[n]] = 0;
1824 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff );
1827 static av_always_inline void decode_cabac_luma_residual( H264Context *h, const uint8_t *scan, const uint8_t *scan8x8, int pixel_shift, int mb_type, int cbp, int p )
1829 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1830 const uint32_t *qmul;
1832 int qscale = p == 0 ? h->qscale : h->chroma_qp[p-1];
1833 if( IS_INTRA16x16( mb_type ) ) {
1834 AV_ZERO128(h->mb_luma_dc[p]+0);
1835 AV_ZERO128(h->mb_luma_dc[p]+8);
1836 AV_ZERO128(h->mb_luma_dc[p]+16);
1837 AV_ZERO128(h->mb_luma_dc[p]+24);
1838 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1841 qmul = h->dequant4_coeff[p][qscale];
1842 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1843 const int index = 16*p + i4x4;
1844 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1847 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1850 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1851 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1852 if( cbp & (1<<i8x8) ) {
1853 if( IS_8x8DCT(mb_type) ) {
1854 const int index = 16*p + 4*i8x8;
1855 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1856 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
1858 qmul = h->dequant4_coeff[cqm][qscale];
1859 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1860 const int index = 16*p + 4*i8x8 + i4x4;
1862 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1863 //STOP_TIMER("decode_residual")
1867 fill_rectangle(&h->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1874 * Decode a macroblock.
1875 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1877 int ff_h264_decode_mb_cabac(H264Context *h) {
1879 int mb_type, partition_count, cbp = 0;
1880 int dct8x8_allowed= h->pps.transform_8x8_mode;
1881 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
1882 const int pixel_shift = h->pixel_shift;
1884 mb_xy = h->mb_xy = h->mb_x + h->mb_y*h->mb_stride;
1886 tprintf(h->avctx, "pic:%d mb:%d/%d\n", h->frame_num, h->mb_x, h->mb_y);
1887 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
1889 /* a skipped mb needs the aff flag from the following mb */
1890 if( FRAME_MBAFF && (h->mb_y&1)==1 && h->prev_mb_skipped )
1891 skip = h->next_mb_skipped;
1893 skip = decode_cabac_mb_skip( h, h->mb_x, h->mb_y );
1894 /* read skip flags */
1896 if( FRAME_MBAFF && (h->mb_y&1)==0 ){
1897 h->cur_pic.f.mb_type[mb_xy] = MB_TYPE_SKIP;
1898 h->next_mb_skipped = decode_cabac_mb_skip( h, h->mb_x, h->mb_y+1 );
1899 if(!h->next_mb_skipped)
1900 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1905 h->cbp_table[mb_xy] = 0;
1906 h->chroma_pred_mode_table[mb_xy] = 0;
1907 h->last_qscale_diff = 0;
1914 if( (h->mb_y&1) == 0 )
1916 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1919 h->prev_mb_skipped = 0;
1921 fill_decode_neighbors(h, -(MB_FIELD));
1923 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
1925 assert(h->slice_type_nos == AV_PICTURE_TYPE_B);
1927 if( !IS_DIRECT( h->left_type[LTOP]-1 ) )
1929 if( !IS_DIRECT( h->top_type-1 ) )
1932 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
1933 mb_type= 0; /* B_Direct_16x16 */
1934 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) {
1935 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */
1938 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3;
1939 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2;
1940 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1;
1941 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1943 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1944 }else if( bits == 13 ){
1945 mb_type= decode_cabac_intra_mb_type(h, 32, 0);
1946 goto decode_intra_mb;
1947 }else if( bits == 14 ){
1948 mb_type= 11; /* B_L1_L0_8x16 */
1949 }else if( bits == 15 ){
1950 mb_type= 22; /* B_8x8 */
1952 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1953 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1956 partition_count= b_mb_type_info[mb_type].partition_count;
1957 mb_type= b_mb_type_info[mb_type].type;
1958 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) {
1959 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
1961 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
1962 /* P_L0_D16x16, P_8x8 */
1963 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
1965 /* P_L0_D8x16, P_L0_D16x8 */
1966 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
1968 partition_count= p_mb_type_info[mb_type].partition_count;
1969 mb_type= p_mb_type_info[mb_type].type;
1971 mb_type= decode_cabac_intra_mb_type(h, 17, 0);
1972 goto decode_intra_mb;
1975 mb_type= decode_cabac_intra_mb_type(h, 3, 1);
1976 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
1978 assert(h->slice_type_nos == AV_PICTURE_TYPE_I);
1980 partition_count = 0;
1981 cbp= i_mb_type_info[mb_type].cbp;
1982 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
1983 mb_type= i_mb_type_info[mb_type].type;
1986 mb_type |= MB_TYPE_INTERLACED;
1988 h->slice_table[ mb_xy ]= h->slice_num;
1990 if(IS_INTRA_PCM(mb_type)) {
1991 const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
1992 h->sps.bit_depth_luma >> 3;
1995 // We assume these blocks are very rare so we do not optimize it.
1996 // FIXME The two following lines get the bitstream position in the cabac
1997 // decode, I think it should be done by a function in cabac.h (or cabac.c).
1998 ptr= h->cabac.bytestream;
1999 if(h->cabac.low&0x1) ptr--;
2001 if(h->cabac.low&0x1FF) ptr--;
2004 // The pixels are stored in the same order as levels in h->mb array.
2005 if ((int) (h->cabac.bytestream_end - ptr) < mb_size)
2007 h->intra_pcm_ptr = ptr;
2010 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr);
2012 // All blocks are present
2013 h->cbp_table[mb_xy] = 0xf7ef;
2014 h->chroma_pred_mode_table[mb_xy] = 0;
2015 // In deblocking, the quantizer is 0
2016 h->cur_pic.f.qscale_table[mb_xy] = 0;
2017 // All coeffs are present
2018 memset(h->non_zero_count[mb_xy], 16, 48);
2019 h->cur_pic.f.mb_type[mb_xy] = mb_type;
2020 h->last_qscale_diff = 0;
2024 fill_decode_caches(h, mb_type);
2026 if( IS_INTRA( mb_type ) ) {
2028 if( IS_INTRA4x4( mb_type ) ) {
2029 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) {
2030 mb_type |= MB_TYPE_8x8DCT;
2031 for( i = 0; i < 16; i+=4 ) {
2032 int pred = pred_intra_mode( h, i );
2033 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2034 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 );
2037 for( i = 0; i < 16; i++ ) {
2038 int pred = pred_intra_mode( h, i );
2039 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2041 av_dlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2042 h->intra4x4_pred_mode_cache[scan8[i]]);
2045 write_back_intra_pred_mode(h);
2046 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
2048 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 );
2049 if( h->intra16x16_pred_mode < 0 ) return -1;
2052 h->chroma_pred_mode_table[mb_xy] =
2053 pred_mode = decode_cabac_mb_chroma_pre_mode( h );
2055 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 );
2056 if( pred_mode < 0 ) return -1;
2057 h->chroma_pred_mode= pred_mode;
2059 h->chroma_pred_mode= DC_128_PRED8x8;
2061 } else if( partition_count == 4 ) {
2062 int i, j, sub_partition_count[4], list, ref[2][4];
2064 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
2065 for( i = 0; i < 4; i++ ) {
2066 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h );
2067 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2068 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2070 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] |
2071 h->sub_mb_type[2] | h->sub_mb_type[3]) ) {
2072 ff_h264_pred_direct_motion(h, &mb_type);
2073 h->ref_cache[0][scan8[4]] =
2074 h->ref_cache[1][scan8[4]] =
2075 h->ref_cache[0][scan8[12]] =
2076 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2077 for( i = 0; i < 4; i++ )
2078 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 );
2081 for( i = 0; i < 4; i++ ) {
2082 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h );
2083 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2084 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2088 for( list = 0; list < h->list_count; list++ ) {
2089 for( i = 0; i < 4; i++ ) {
2090 if(IS_DIRECT(h->sub_mb_type[i])) continue;
2091 if(IS_DIR(h->sub_mb_type[i], 0, list)){
2092 int rc = h->ref_count[list] << MB_MBAFF;
2094 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
2095 if (ref[list][i] >= (unsigned) rc) {
2096 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2104 h->ref_cache[list][ scan8[4*i]+1 ]=
2105 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
2110 dct8x8_allowed = get_dct8x8_allowed(h);
2112 for(list=0; list<h->list_count; list++){
2114 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ];
2115 if(IS_DIRECT(h->sub_mb_type[i])){
2116 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2120 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){
2121 const int sub_mb_type= h->sub_mb_type[i];
2122 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2123 for(j=0; j<sub_partition_count[i]; j++){
2126 const int index= 4*i + block_width*j;
2127 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
2128 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ];
2129 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
2130 DECODE_CABAC_MB_MVD( h, list, index)
2131 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2133 if(IS_SUB_8X8(sub_mb_type)){
2135 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2137 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2140 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2142 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2143 }else if(IS_SUB_8X4(sub_mb_type)){
2144 mv_cache[ 1 ][0]= mx;
2145 mv_cache[ 1 ][1]= my;
2147 mvd_cache[ 1 ][0]= mpx;
2148 mvd_cache[ 1 ][1]= mpy;
2149 }else if(IS_SUB_4X8(sub_mb_type)){
2150 mv_cache[ 8 ][0]= mx;
2151 mv_cache[ 8 ][1]= my;
2153 mvd_cache[ 8 ][0]= mpx;
2154 mvd_cache[ 8 ][1]= mpy;
2156 mv_cache[ 0 ][0]= mx;
2157 mv_cache[ 0 ][1]= my;
2159 mvd_cache[ 0 ][0]= mpx;
2160 mvd_cache[ 0 ][1]= mpy;
2163 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2164 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2168 } else if( IS_DIRECT(mb_type) ) {
2169 ff_h264_pred_direct_motion(h, &mb_type);
2170 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2171 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2172 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
2175 if(IS_16X16(mb_type)){
2176 for(list=0; list<h->list_count; list++){
2177 if(IS_DIR(mb_type, 0, list)){
2178 int ref, rc = h->ref_count[list] << MB_MBAFF;
2180 ref= decode_cabac_mb_ref(h, list, 0);
2181 if (ref >= (unsigned) rc) {
2182 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2187 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2190 for(list=0; list<h->list_count; list++){
2191 if(IS_DIR(mb_type, 0, list)){
2193 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
2194 DECODE_CABAC_MB_MVD( h, list, 0)
2195 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2197 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2198 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2202 else if(IS_16X8(mb_type)){
2203 for(list=0; list<h->list_count; list++){
2205 if(IS_DIR(mb_type, i, list)){
2206 int ref, rc = h->ref_count[list] << MB_MBAFF;
2208 ref= decode_cabac_mb_ref( h, list, 8*i );
2209 if (ref >= (unsigned) rc) {
2210 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2215 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2217 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2220 for(list=0; list<h->list_count; list++){
2222 if(IS_DIR(mb_type, i, list)){
2224 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2225 DECODE_CABAC_MB_MVD( h, list, 8*i)
2226 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2228 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2229 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2231 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2232 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2237 assert(IS_8X16(mb_type));
2238 for(list=0; list<h->list_count; list++){
2240 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2241 int ref, rc = h->ref_count[list] << MB_MBAFF;
2243 ref= decode_cabac_mb_ref( h, list, 4*i );
2244 if (ref >= (unsigned) rc) {
2245 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2250 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2252 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2255 for(list=0; list<h->list_count; list++){
2257 if(IS_DIR(mb_type, i, list)){
2259 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2260 DECODE_CABAC_MB_MVD( h, list, 4*i)
2262 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2263 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2264 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2266 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2267 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2274 if( IS_INTER( mb_type ) ) {
2275 h->chroma_pred_mode_table[mb_xy] = 0;
2276 write_back_motion( h, mb_type );
2279 if( !IS_INTRA16x16( mb_type ) ) {
2280 cbp = decode_cabac_mb_cbp_luma( h );
2282 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4;
2285 h->cbp_table[mb_xy] = h->cbp = cbp;
2287 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2288 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] );
2291 /* It would be better to do this in fill_decode_caches, but we don't know
2292 * the transform mode of the current macroblock there. */
2293 if (CHROMA444 && IS_8x8DCT(mb_type)){
2295 uint8_t *nnz_cache = h->non_zero_count_cache;
2296 for (i = 0; i < 2; i++){
2297 if (h->left_type[LEFT(i)] && !IS_8x8DCT(h->left_type[LEFT(i)])){
2298 nnz_cache[3+8* 1 + 2*8*i]=
2299 nnz_cache[3+8* 2 + 2*8*i]=
2300 nnz_cache[3+8* 6 + 2*8*i]=
2301 nnz_cache[3+8* 7 + 2*8*i]=
2302 nnz_cache[3+8*11 + 2*8*i]=
2303 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2306 if (h->top_type && !IS_8x8DCT(h->top_type)){
2307 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2308 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2309 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2310 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2313 h->cur_pic.f.mb_type[mb_xy] = mb_type;
2315 if( cbp || IS_INTRA16x16( mb_type ) ) {
2316 const uint8_t *scan, *scan8x8;
2317 const uint32_t *qmul;
2319 if(IS_INTERLACED(mb_type)){
2320 scan8x8= h->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2321 scan= h->qscale ? h->field_scan : h->field_scan_q0;
2323 scan8x8= h->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2324 scan= h->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2327 // decode_cabac_mb_dqp
2328 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){
2331 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
2333 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
2336 if(val > 2*max_qp){ //prevent infinite loop
2337 av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", h->mb_x, h->mb_y);
2345 val= -((val + 1)>>1);
2346 h->last_qscale_diff = val;
2348 if(((unsigned)h->qscale) > max_qp){
2349 if(h->qscale<0) h->qscale+= max_qp+1;
2350 else h->qscale-= max_qp+1;
2352 h->chroma_qp[0] = get_chroma_qp(h, 0, h->qscale);
2353 h->chroma_qp[1] = get_chroma_qp(h, 1, h->qscale);
2355 h->last_qscale_diff=0;
2357 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2359 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2360 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2361 } else if (CHROMA422) {
2364 for (c = 0; c < 2; c++)
2365 decode_cabac_residual_dc_422(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3,
2366 CHROMA_DC_BLOCK_INDEX + c,
2367 chroma422_dc_scan, 8);
2372 for( c = 0; c < 2; c++ ) {
2373 int16_t *mb = h->mb + (16*(16 + 16*c) << pixel_shift);
2374 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2375 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2376 for (i = 0; i < 4; i++) {
2377 const int index = 16 + 16 * c + 8*i8x8 + i;
2378 decode_cabac_residual_nondc(h, mb, 4, index, scan + 1, qmul, 15);
2379 mb += 16<<pixel_shift;
2384 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2385 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2387 } else /* yuv420 */ {
2390 for (c = 0; c < 2; c++)
2391 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
2396 for( c = 0; c < 2; c++ ) {
2397 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2398 for( i = 0; i < 4; i++ ) {
2399 const int index = 16 + 16 * c + i;
2400 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2404 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2405 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2409 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2410 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2411 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2412 h->last_qscale_diff = 0;
2415 h->cur_pic.f.qscale_table[mb_xy] = h->qscale;
2416 write_back_non_zero_count(h);