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>
35 #include "h264_mvpred.h"
40 #include "x86/h264_i386.h"
46 /* Cabac pre state table */
48 static const int8_t cabac_context_init_I[1024][2] =
51 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
52 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
53 { -6, 53 }, { -1, 54 }, { 7, 51 },
55 /* 11 - 23 unsused for I */
56 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
57 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
58 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
62 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
63 { 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 },
68 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
69 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
70 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
74 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
78 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
79 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
80 { 13, 41 }, { 3, 62 },
83 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
84 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
85 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
86 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
87 { -12, 115 },{ -16, 122 },
90 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
91 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
92 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
93 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
97 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
98 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
99 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
100 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
101 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
102 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
103 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
104 { 14, 62 }, { -13, 108 },{ -15, 100 },
107 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
108 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
109 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
110 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
111 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
112 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
113 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
114 { 0, 62 }, { 12, 72 },
117 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
118 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
119 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
120 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
121 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
122 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
123 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
124 { 0, 89 }, { 26, -19 }, { 22, -17 },
127 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
128 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
129 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
130 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
131 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
132 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
133 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
134 { 12, 68 }, { 2, 97 },
137 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
138 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
139 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
140 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
141 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
142 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
146 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
147 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
148 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
149 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
150 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
151 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
153 /* 276 a bit special (not used, bypass is used instead) */
157 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
158 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
159 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
160 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
161 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
162 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
163 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
164 { 9, 64 }, { -12, 104 },{ -11, 97 },
167 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
168 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
169 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
170 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
171 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
172 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
173 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
174 { 5, 64 }, { 12, 70 },
177 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
178 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
179 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
180 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
181 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
182 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
183 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
184 { -12, 109 },{ 36, -35 }, { 36, -34 },
187 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
188 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
189 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
190 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
191 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
192 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
193 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
194 { 29, 39 }, { 19, 66 },
197 { 31, 21 }, { 31, 31 }, { 25, 50 },
198 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
199 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
200 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
201 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
202 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
203 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
204 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
205 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
206 { 0, 68 }, { -9, 92 },
209 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
210 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
211 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
212 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
213 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
214 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
217 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
218 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
219 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
220 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
221 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
222 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
223 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
224 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
225 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
226 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
227 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
228 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
229 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
230 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
231 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
232 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
233 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
234 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
235 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
236 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
237 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
238 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
239 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
240 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
241 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
242 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
243 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
244 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
245 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
246 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
247 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
248 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
249 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
250 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
251 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
252 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
253 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
254 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
255 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
256 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
257 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
258 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
259 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
260 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
261 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
262 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
263 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
264 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
265 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
266 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
267 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
268 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
269 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
270 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 },
271 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 },
272 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 },
273 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 },
274 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 },
275 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 },
276 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 },
277 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
278 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
279 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
280 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
281 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 },
282 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 },
283 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 },
284 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 },
285 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 },
286 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 },
287 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 },
288 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 },
289 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 },
290 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 },
291 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 },
292 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 },
293 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 },
294 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 },
295 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 },
296 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
297 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
298 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
299 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
300 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
301 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
302 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
303 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
304 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
305 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
306 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
307 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
308 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
309 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
310 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
311 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
312 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
313 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
314 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
315 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
316 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
317 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
318 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
319 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
320 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
321 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
322 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
323 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
324 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
325 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
326 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
327 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
328 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
329 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
330 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
331 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
332 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
333 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
334 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
335 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
336 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
337 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
338 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
339 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
340 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
341 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
342 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
343 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
344 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
345 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
346 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 },
347 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 },
348 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 },
349 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 },
350 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 },
351 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 },
352 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 },
353 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 },
354 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 },
355 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
356 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
357 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }
360 static const int8_t cabac_context_init_PB[3][1024][2] =
362 /* i_cabac_init_idc == 0 */
365 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
366 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
367 { -6, 53 }, { -1, 54 }, { 7, 51 },
370 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
371 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
372 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
376 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
377 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
378 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
379 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
382 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
383 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
384 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
385 { -3, 81 }, { 0, 88 },
388 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
389 { -7, 72 }, { 1, 58 },
392 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
393 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
394 { 13, 41 }, { 3, 62 },
397 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
398 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
399 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
400 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
401 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
402 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
403 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
404 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
405 { 0, 68 }, { -4, 69 }, { -8, 88 },
408 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
409 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
410 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
411 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
412 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
413 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
414 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
415 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
416 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
417 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
418 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
419 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
420 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
421 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
422 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
426 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
427 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
428 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
429 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
430 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
431 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
432 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
433 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
434 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
435 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
436 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
437 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
438 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
439 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
440 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
444 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
445 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
446 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
447 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
448 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
449 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
450 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
451 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
452 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
453 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
454 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
455 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
458 /* 276 a bit special (not used, bypass is used instead) */
462 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
463 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
464 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
465 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
466 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
467 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
468 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
469 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
470 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
471 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
472 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
473 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
474 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
475 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
476 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
480 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
481 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
482 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
483 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
484 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
485 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
486 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
487 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
488 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
489 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
490 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
491 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
492 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
493 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
494 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
498 { 12, 40 }, { 11, 51 }, { 14, 59 },
499 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
500 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
501 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
502 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
503 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
504 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
505 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
506 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
507 { -8, 66 }, { -8, 76 },
510 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
511 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
512 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
513 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
514 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
515 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
518 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
519 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
520 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
521 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
522 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
523 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
524 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
525 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
526 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
527 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
528 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
529 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
530 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
531 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
532 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
533 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
534 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
535 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
536 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
537 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
538 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
539 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
540 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
541 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
542 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
543 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
544 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
545 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
546 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
547 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
548 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
549 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
550 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
551 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
552 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
553 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
554 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
555 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
556 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
557 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
558 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
559 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
560 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
561 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
562 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
563 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
564 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
565 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
566 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
567 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
568 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
569 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
570 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
571 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 },
572 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 },
573 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 },
574 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 },
575 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 },
576 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 },
577 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 },
578 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
579 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
580 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
581 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
582 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 },
583 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 },
584 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 },
585 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 },
586 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 },
587 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 },
588 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 },
589 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 },
590 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 },
591 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 },
592 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 },
593 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 },
594 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 },
595 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 },
596 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 },
597 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
598 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
599 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
600 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
601 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
602 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
603 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
604 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
605 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
606 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
607 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
608 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
609 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
610 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
611 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
612 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
613 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
614 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
615 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
616 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
617 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
618 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
619 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
620 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
621 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
622 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
623 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
624 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
625 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
626 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
627 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
628 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
629 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
630 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
631 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
632 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
633 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
634 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
635 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
636 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
637 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
638 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
639 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
640 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
641 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
642 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
643 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
644 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
645 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
646 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
647 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
648 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 },
649 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 },
650 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 },
651 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 },
652 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 },
653 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 },
654 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 },
655 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 },
656 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
657 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
658 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }
661 /* i_cabac_init_idc == 1 */
664 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
665 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
666 { -6, 53 }, { -1, 54 }, { 7, 51 },
669 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
670 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
671 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
675 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
676 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
677 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
678 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
681 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
682 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
683 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
684 { -7, 86 },{ -5, 95 },
687 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
688 { -5, 72 },{ 0, 61 },
691 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
692 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
693 { 13, 41 }, { 3, 62 },
696 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
697 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
698 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
699 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
700 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
701 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
702 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
703 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
704 { 0, 68 }, { -7, 74 }, { -9, 88 },
707 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
708 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
709 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
710 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
711 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
712 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
713 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
714 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
715 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
716 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
717 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
718 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
719 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
720 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
721 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
725 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
726 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
727 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
728 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
729 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
730 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
731 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
732 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
733 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
734 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
735 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
736 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
737 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
738 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
739 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
743 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
744 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
745 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
746 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
747 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
748 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
749 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
750 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
751 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
752 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
753 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
754 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
757 /* 276 a bit special (not used, bypass is used instead) */
761 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
762 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
763 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
764 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
765 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
766 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
767 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
768 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
769 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
770 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
771 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
772 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
773 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
774 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
775 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
779 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
780 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
781 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
782 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
783 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
784 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
785 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
786 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
787 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
788 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
789 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
790 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
791 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
792 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
793 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
797 { 25, 32 }, { 21, 49 }, { 21, 54 },
798 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
799 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
800 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
801 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
802 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
803 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
804 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
805 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
806 { -4, 67 }, { -7, 82 },
809 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
810 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
811 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
812 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
813 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
814 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
817 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
818 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
819 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
820 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
821 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
822 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
823 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
824 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
825 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
826 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
827 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
828 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
829 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
830 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
831 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
832 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
833 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
834 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
835 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
836 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
837 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
838 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
839 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
840 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
841 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
842 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
843 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
844 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
845 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
846 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
847 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
848 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
849 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
850 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
851 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
852 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
853 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
854 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
855 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
856 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
857 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
858 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
859 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
860 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
861 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
862 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
863 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
864 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
865 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
866 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
867 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
868 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
869 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
870 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 },
871 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 },
872 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 },
873 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 },
874 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 },
875 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 },
876 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 },
877 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
878 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
879 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
880 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
881 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 },
882 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 },
883 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 },
884 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 },
885 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 },
886 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 },
887 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 },
888 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 },
889 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 },
890 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 },
891 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 },
892 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 },
893 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 },
894 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 },
895 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 },
896 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
897 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
898 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
899 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
900 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
901 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
902 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
903 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
904 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
905 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
906 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
907 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
908 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
909 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
910 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
911 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
912 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
913 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
914 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
915 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
916 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
917 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
918 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
919 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
920 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
921 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
922 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
923 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
924 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
925 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
926 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
927 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
928 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
929 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
930 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
931 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
932 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
933 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
934 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
935 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
936 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
937 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
938 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
939 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
940 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
941 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
942 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
943 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
944 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
945 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
946 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
947 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 },
948 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 },
949 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 },
950 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 },
951 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 },
952 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 },
953 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 },
954 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 },
955 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
956 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
957 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }
960 /* i_cabac_init_idc == 2 */
963 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
964 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
965 { -6, 53 }, { -1, 54 }, { 7, 51 },
968 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
969 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
970 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
974 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
975 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
976 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
977 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
980 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
981 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
982 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
983 { -3, 90 },{ -1, 101 },
986 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
987 { -7, 50 },{ 1, 60 },
990 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
991 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
992 { 13, 41 }, { 3, 62 },
995 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
996 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
997 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
998 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
999 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1000 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1001 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1002 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1003 { 3, 68 }, { -8, 71 }, { -13, 98 },
1006 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1007 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1008 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1009 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1010 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1011 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1012 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1013 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1014 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1015 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1016 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1017 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1018 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1019 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1020 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1024 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1025 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1026 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1027 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1028 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1029 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1030 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1031 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1032 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1033 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1034 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1035 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1036 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1037 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1038 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1042 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1043 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1044 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1045 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1046 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1047 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1048 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1049 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1050 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1051 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1052 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1053 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1056 /* 276 a bit special (not used, bypass is used instead) */
1060 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1061 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1062 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1063 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1064 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1065 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1066 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1067 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1068 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1069 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1070 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1071 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1072 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1073 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1074 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1078 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1079 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1080 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1081 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1082 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1083 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1084 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1085 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1086 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1087 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1088 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1089 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1090 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1091 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1092 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1096 { 21, 33 }, { 19, 50 }, { 17, 61 },
1097 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1098 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1099 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1100 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1101 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1102 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1103 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1104 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1105 { -6, 68 }, { -10, 79 },
1108 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1109 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1110 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1111 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1112 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1113 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1116 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1117 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1118 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1119 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1120 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1121 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1122 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1123 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1124 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1125 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1126 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1127 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1128 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1129 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1130 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1131 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1132 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1133 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1134 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1135 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1136 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1137 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1138 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1139 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1140 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1141 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1142 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1143 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1144 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1145 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1146 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1147 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1148 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1149 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1150 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1151 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1152 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1153 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1154 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1155 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1156 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1157 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1158 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1159 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1160 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1161 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1162 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1163 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1164 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1165 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1166 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1167 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1168 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1169 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 },
1170 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 },
1171 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 },
1172 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 },
1173 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 },
1174 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 },
1175 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 },
1176 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1177 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1178 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1179 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1180 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 },
1181 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 },
1182 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 },
1183 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 },
1184 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 },
1185 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 },
1186 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 },
1187 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 },
1188 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 },
1189 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 },
1190 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 },
1191 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 },
1192 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 },
1193 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 },
1194 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 },
1195 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1196 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1197 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1198 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1199 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1200 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1201 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1202 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1203 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1204 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1205 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1206 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1207 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1208 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1209 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1210 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1211 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1212 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1213 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1214 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1215 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1216 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1217 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1218 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1219 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1220 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1221 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1222 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1223 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1224 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1225 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1226 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1227 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1228 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1229 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1230 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1231 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1232 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1233 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1234 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1235 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1236 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1237 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1238 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1239 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1240 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1241 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1242 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1243 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1244 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1245 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1246 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 },
1247 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 },
1248 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 },
1249 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 },
1250 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 },
1251 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 },
1252 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 },
1253 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 },
1254 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1255 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1256 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }
1260 void ff_h264_init_cabac_states(H264Context *h) {
1261 MpegEncContext * const s = &h->s;
1263 const int8_t (*tab)[2];
1264 const int slice_qp = av_clip(s->qscale - 6*(h->sps.bit_depth_luma-8), 0, 51);
1266 if( h->slice_type_nos == AV_PICTURE_TYPE_I ) tab = cabac_context_init_I;
1267 else tab = cabac_context_init_PB[h->cabac_init_idc];
1269 /* calculate pre-state */
1270 for( i= 0; i < 1024; i++ ) {
1271 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1277 h->cabac_state[i] = pre;
1281 static int decode_cabac_field_decoding_flag(H264Context *h) {
1282 MpegEncContext * const s = &h->s;
1283 const long mbb_xy = h->mb_xy - 2L*s->mb_stride;
1285 unsigned long ctx = 0;
1287 ctx += h->mb_field_decoding_flag & !!s->mb_x; //for FMO:(s->current_picture.f.mb_type[mba_xy] >> 7) & (h->slice_table[mba_xy] == h->slice_num);
1288 ctx += (s->current_picture.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 ) {
1324 MpegEncContext * const s = &h->s;
1328 if(FRAME_MBAFF){ //FIXME merge with the stuff in fill_caches?
1329 int mb_xy = mb_x + (mb_y&~1)*s->mb_stride;
1332 && h->slice_table[mba_xy] == h->slice_num
1333 && MB_FIELD == !!IS_INTERLACED( s->current_picture.f.mb_type[mba_xy] ) )
1334 mba_xy += s->mb_stride;
1336 mbb_xy = mb_xy - s->mb_stride;
1338 && h->slice_table[mbb_xy] == h->slice_num
1339 && IS_INTERLACED( s->current_picture.f.mb_type[mbb_xy] ) )
1340 mbb_xy -= s->mb_stride;
1342 mbb_xy = mb_x + (mb_y-1)*s->mb_stride;
1344 int mb_xy = h->mb_xy;
1346 mbb_xy = mb_xy - (s->mb_stride << FIELD_PICTURE);
1349 if( h->slice_table[mba_xy] == h->slice_num && !IS_SKIP( s->current_picture.f.mb_type[mba_xy] ))
1351 if( h->slice_table[mbb_xy] == h->slice_num && !IS_SKIP( s->current_picture.f.mb_type[mbb_xy] ))
1354 if( h->slice_type_nos == AV_PICTURE_TYPE_B )
1356 return get_cabac_noinline( &h->cabac, &h->cabac_state[11+ctx] );
1359 static int decode_cabac_mb_intra4x4_pred_mode( H264Context *h, int pred_mode ) {
1362 if( get_cabac( &h->cabac, &h->cabac_state[68] ) )
1365 mode += 1 * get_cabac( &h->cabac, &h->cabac_state[69] );
1366 mode += 2 * get_cabac( &h->cabac, &h->cabac_state[69] );
1367 mode += 4 * get_cabac( &h->cabac, &h->cabac_state[69] );
1369 return mode + ( mode >= pred_mode );
1372 static int decode_cabac_mb_chroma_pre_mode( H264Context *h) {
1373 const int mba_xy = h->left_mb_xy[0];
1374 const int mbb_xy = h->top_mb_xy;
1378 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1379 if( h->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0 )
1382 if( h->top_type && h->chroma_pred_mode_table[mbb_xy] != 0 )
1385 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+ctx] ) == 0 )
1388 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 )
1390 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 )
1396 static int decode_cabac_mb_cbp_luma( H264Context *h) {
1397 int cbp_b, cbp_a, ctx, cbp = 0;
1399 cbp_a = h->left_cbp;
1402 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1403 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]);
1404 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1405 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 1;
1406 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1407 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 2;
1408 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1409 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 3;
1412 static int decode_cabac_mb_cbp_chroma( H264Context *h) {
1416 cbp_a = (h->left_cbp>>4)&0x03;
1417 cbp_b = (h-> top_cbp>>4)&0x03;
1420 if( cbp_a > 0 ) ctx++;
1421 if( cbp_b > 0 ) ctx += 2;
1422 if( get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] ) == 0 )
1426 if( cbp_a == 2 ) ctx++;
1427 if( cbp_b == 2 ) ctx += 2;
1428 return 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] );
1431 static int decode_cabac_p_mb_sub_type( H264Context *h ) {
1432 if( get_cabac( &h->cabac, &h->cabac_state[21] ) )
1434 if( !get_cabac( &h->cabac, &h->cabac_state[22] ) )
1436 if( get_cabac( &h->cabac, &h->cabac_state[23] ) )
1440 static int decode_cabac_b_mb_sub_type( H264Context *h ) {
1442 if( !get_cabac( &h->cabac, &h->cabac_state[36] ) )
1443 return 0; /* B_Direct_8x8 */
1444 if( !get_cabac( &h->cabac, &h->cabac_state[37] ) )
1445 return 1 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1447 if( get_cabac( &h->cabac, &h->cabac_state[38] ) ) {
1448 if( get_cabac( &h->cabac, &h->cabac_state[39] ) )
1449 return 11 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1452 type += 2*get_cabac( &h->cabac, &h->cabac_state[39] );
1453 type += get_cabac( &h->cabac, &h->cabac_state[39] );
1457 static int decode_cabac_mb_ref( H264Context *h, int list, int n ) {
1458 int refa = h->ref_cache[list][scan8[n] - 1];
1459 int refb = h->ref_cache[list][scan8[n] - 8];
1463 if( h->slice_type_nos == AV_PICTURE_TYPE_B) {
1464 if( refa > 0 && !(h->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1466 if( refb > 0 && !(h->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1475 while( get_cabac( &h->cabac, &h->cabac_state[54+ctx] ) ) {
1478 if(ref >= 32 /*h->ref_list[list]*/){
1485 static int decode_cabac_mb_mvd( H264Context *h, int ctxbase, int amvd, int *mvda) {
1488 if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1489 // if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1496 while( mvd < 9 && get_cabac( &h->cabac, &h->cabac_state[ctxbase] ) ) {
1504 while( get_cabac_bypass( &h->cabac ) ) {
1508 av_log(h->s.avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1513 mvd += get_cabac_bypass( &h->cabac )<<k;
1515 *mvda=mvd < 70 ? mvd : 70;
1518 return get_cabac_bypass_sign( &h->cabac, -mvd );
1521 #define DECODE_CABAC_MB_MVD( h, list, n )\
1523 int amvd0 = h->mvd_cache[list][scan8[n] - 1][0] +\
1524 h->mvd_cache[list][scan8[n] - 8][0];\
1525 int amvd1 = h->mvd_cache[list][scan8[n] - 1][1] +\
1526 h->mvd_cache[list][scan8[n] - 8][1];\
1528 mx += decode_cabac_mb_mvd( h, 40, amvd0, &mpx );\
1529 my += decode_cabac_mb_mvd( h, 47, amvd1, &mpy );\
1532 static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx, int max_coeff, int is_dc ) {
1535 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1539 idx -= CHROMA_DC_BLOCK_INDEX;
1540 nza = (h->left_cbp>>(6+idx))&0x01;
1541 nzb = (h-> top_cbp>>(6+idx))&0x01;
1543 idx -= LUMA_DC_BLOCK_INDEX;
1544 nza = h->left_cbp&(0x100<<idx);
1545 nzb = h-> top_cbp&(0x100<<idx);
1548 nza = h->non_zero_count_cache[scan8[idx] - 1];
1549 nzb = h->non_zero_count_cache[scan8[idx] - 8];
1558 return base_ctx[cat] + ctx;
1561 DECLARE_ASM_CONST(1, uint8_t, last_coeff_flag_offset_8x8)[63] = {
1562 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1564 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1565 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8
1568 static av_always_inline void
1569 decode_cabac_residual_internal(H264Context *h, DCTELEM *block,
1570 int cat, int n, const uint8_t *scantable,
1571 const uint32_t *qmul, int max_coeff,
1572 int is_dc, int chroma422)
1574 static const int significant_coeff_flag_offset[2][14] = {
1575 { 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 },
1576 { 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 }
1578 static const int last_coeff_flag_offset[2][14] = {
1579 { 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 },
1580 { 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 }
1582 static const int coeff_abs_level_m1_offset[14] = {
1583 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
1585 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1586 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1587 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1588 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1589 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1590 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1591 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1592 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1593 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1595 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1596 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1597 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1598 * map node ctx => cabac ctx for level=1 */
1599 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1600 /* map node ctx => cabac ctx for level>1 */
1601 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1602 { 5, 5, 5, 5, 6, 7, 8, 9 },
1603 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1605 static const uint8_t coeff_abs_level_transition[2][8] = {
1606 /* update node ctx after decoding a level=1 */
1607 { 1, 2, 3, 3, 4, 5, 6, 7 },
1608 /* update node ctx after decoding a level>1 */
1609 { 4, 4, 4, 4, 5, 6, 7, 7 }
1615 int coeff_count = 0;
1618 uint8_t *significant_coeff_ctx_base;
1619 uint8_t *last_coeff_ctx_base;
1620 uint8_t *abs_level_m1_ctx_base;
1623 #define CABAC_ON_STACK
1625 #ifdef CABAC_ON_STACK
1628 cc.range = h->cabac.range;
1629 cc.low = h->cabac.low;
1630 cc.bytestream= h->cabac.bytestream;
1632 #define CC &h->cabac
1635 significant_coeff_ctx_base = h->cabac_state
1636 + significant_coeff_flag_offset[MB_FIELD][cat];
1637 last_coeff_ctx_base = h->cabac_state
1638 + last_coeff_flag_offset[MB_FIELD][cat];
1639 abs_level_m1_ctx_base = h->cabac_state
1640 + coeff_abs_level_m1_offset[cat];
1642 if( !is_dc && max_coeff == 64 ) {
1643 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1644 for(last= 0; last < coefs; last++) { \
1645 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1646 if( get_cabac( CC, sig_ctx )) { \
1647 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1648 index[coeff_count++] = last; \
1649 if( get_cabac( CC, last_ctx ) ) { \
1655 if( last == max_coeff -1 ) {\
1656 index[coeff_count++] = last;\
1658 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD];
1659 #if ARCH_X86 && HAVE_7REGS && HAVE_EBX_AVAILABLE && !defined(BROKEN_RELOCATIONS)
1660 coeff_count= decode_significance_8x8_x86(CC, significant_coeff_ctx_base, index,
1661 last_coeff_ctx_base, sig_off);
1663 if (is_dc && chroma422) { // dc 422
1664 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1666 coeff_count= decode_significance_x86(CC, max_coeff, significant_coeff_ctx_base, index,
1667 last_coeff_ctx_base-significant_coeff_ctx_base);
1670 DECODE_SIGNIFICANCE( 63, sig_off[last], last_coeff_flag_offset_8x8[last] );
1672 if (is_dc && chroma422) { // dc 422
1673 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1675 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1679 assert(coeff_count > 0);
1683 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1685 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1686 h->non_zero_count_cache[scan8[n]] = coeff_count;
1688 if( max_coeff == 64 )
1689 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1691 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1692 h->non_zero_count_cache[scan8[n]] = coeff_count;
1696 #define STORE_BLOCK(type) \
1698 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1700 int j= scantable[index[--coeff_count]]; \
1702 if( get_cabac( CC, ctx ) == 0 ) { \
1703 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1705 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1707 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1710 int coeff_abs = 2; \
1711 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1712 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1714 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1718 if( coeff_abs >= 15 ) { \
1720 while( get_cabac_bypass( CC ) ) { \
1726 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1732 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1734 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1737 } while ( coeff_count );
1739 if (h->pixel_shift) {
1740 STORE_BLOCK(int32_t)
1742 STORE_BLOCK(int16_t)
1744 #ifdef CABAC_ON_STACK
1745 h->cabac.range = cc.range ;
1746 h->cabac.low = cc.low ;
1747 h->cabac.bytestream= cc.bytestream;
1752 static void decode_cabac_residual_dc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
1753 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1756 static void decode_cabac_residual_dc_internal_422(H264Context *h, DCTELEM *block,
1757 int cat, int n, const uint8_t *scantable,
1760 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1763 static void decode_cabac_residual_nondc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) {
1764 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1767 /* cat: 0-> DC 16x16 n = 0
1768 * 1-> AC 16x16 n = luma4x4idx
1769 * 2-> Luma4x4 n = luma4x4idx
1770 * 3-> DC Chroma n = iCbCr
1771 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1772 * 5-> Luma8x8 n = 4 * luma8x8idx */
1774 /* Partially inline the CABAC residual decode: inline the coded block flag.
1775 * This has very little impact on binary size and improves performance
1776 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1777 * as well as because most blocks have zero CBFs. */
1779 static av_always_inline void decode_cabac_residual_dc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
1780 /* read coded block flag */
1781 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) {
1782 h->non_zero_count_cache[scan8[n]] = 0;
1785 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff );
1788 static av_always_inline void
1789 decode_cabac_residual_dc_422(H264Context *h, DCTELEM *block,
1790 int cat, int n, const uint8_t *scantable,
1793 /* read coded block flag */
1794 if (get_cabac(&h->cabac, &h->cabac_state[get_cabac_cbf_ctx(h, cat, n, max_coeff, 1)]) == 0) {
1795 h->non_zero_count_cache[scan8[n]] = 0;
1798 decode_cabac_residual_dc_internal_422(h, block, cat, n, scantable, max_coeff);
1801 static av_always_inline void decode_cabac_residual_nondc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) {
1802 /* read coded block flag */
1803 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) {
1804 if( max_coeff == 64 ) {
1805 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1807 h->non_zero_count_cache[scan8[n]] = 0;
1811 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff );
1814 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 )
1816 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1817 const uint32_t *qmul;
1819 MpegEncContext * const s = &h->s;
1820 int qscale = p == 0 ? s->qscale : h->chroma_qp[p-1];
1821 if( IS_INTRA16x16( mb_type ) ) {
1822 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 DC\n" );
1823 AV_ZERO128(h->mb_luma_dc[p]+0);
1824 AV_ZERO128(h->mb_luma_dc[p]+8);
1825 AV_ZERO128(h->mb_luma_dc[p]+16);
1826 AV_ZERO128(h->mb_luma_dc[p]+24);
1827 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1830 qmul = h->dequant4_coeff[p][qscale];
1831 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1832 const int index = 16*p + i4x4;
1833 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 AC:%d\n", index );
1834 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1837 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1840 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1841 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1842 if( cbp & (1<<i8x8) ) {
1843 if( IS_8x8DCT(mb_type) ) {
1844 const int index = 16*p + 4*i8x8;
1845 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1846 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
1848 qmul = h->dequant4_coeff[cqm][qscale];
1849 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1850 const int index = 16*p + 4*i8x8 + i4x4;
1851 //av_log( s->avctx, AV_LOG_ERROR, "Luma4x4: %d\n", index );
1853 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1854 //STOP_TIMER("decode_residual")
1858 fill_rectangle(&h->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1865 * decodes a macroblock
1866 * @return 0 if OK, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed
1868 int ff_h264_decode_mb_cabac(H264Context *h) {
1869 MpegEncContext * const s = &h->s;
1871 int mb_type, partition_count, cbp = 0;
1872 int dct8x8_allowed= h->pps.transform_8x8_mode;
1873 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
1874 const int pixel_shift = h->pixel_shift;
1876 mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
1878 tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y);
1879 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
1881 /* a skipped mb needs the aff flag from the following mb */
1882 if( FRAME_MBAFF && (s->mb_y&1)==1 && h->prev_mb_skipped )
1883 skip = h->next_mb_skipped;
1885 skip = decode_cabac_mb_skip( h, s->mb_x, s->mb_y );
1886 /* read skip flags */
1888 if( FRAME_MBAFF && (s->mb_y&1)==0 ){
1889 s->current_picture.f.mb_type[mb_xy] = MB_TYPE_SKIP;
1890 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 );
1891 if(!h->next_mb_skipped)
1892 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1897 h->cbp_table[mb_xy] = 0;
1898 h->chroma_pred_mode_table[mb_xy] = 0;
1899 h->last_qscale_diff = 0;
1906 if( (s->mb_y&1) == 0 )
1908 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1911 h->prev_mb_skipped = 0;
1913 fill_decode_neighbors(h, -(MB_FIELD));
1915 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
1917 assert(h->slice_type_nos == AV_PICTURE_TYPE_B);
1919 if( !IS_DIRECT( h->left_type[LTOP]-1 ) )
1921 if( !IS_DIRECT( h->top_type-1 ) )
1924 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
1925 mb_type= 0; /* B_Direct_16x16 */
1926 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) {
1927 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */
1930 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3;
1931 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2;
1932 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1;
1933 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1935 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1936 }else if( bits == 13 ){
1937 mb_type= decode_cabac_intra_mb_type(h, 32, 0);
1938 goto decode_intra_mb;
1939 }else if( bits == 14 ){
1940 mb_type= 11; /* B_L1_L0_8x16 */
1941 }else if( bits == 15 ){
1942 mb_type= 22; /* B_8x8 */
1944 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1945 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1948 partition_count= b_mb_type_info[mb_type].partition_count;
1949 mb_type= b_mb_type_info[mb_type].type;
1950 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) {
1951 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
1953 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
1954 /* P_L0_D16x16, P_8x8 */
1955 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
1957 /* P_L0_D8x16, P_L0_D16x8 */
1958 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
1960 partition_count= p_mb_type_info[mb_type].partition_count;
1961 mb_type= p_mb_type_info[mb_type].type;
1963 mb_type= decode_cabac_intra_mb_type(h, 17, 0);
1964 goto decode_intra_mb;
1967 mb_type= decode_cabac_intra_mb_type(h, 3, 1);
1968 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
1970 assert(h->slice_type_nos == AV_PICTURE_TYPE_I);
1972 partition_count = 0;
1973 cbp= i_mb_type_info[mb_type].cbp;
1974 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
1975 mb_type= i_mb_type_info[mb_type].type;
1978 mb_type |= MB_TYPE_INTERLACED;
1980 h->slice_table[ mb_xy ]= h->slice_num;
1982 if(IS_INTRA_PCM(mb_type)) {
1983 static const uint16_t mb_sizes[4] = {256,384,512,768};
1984 const int mb_size = mb_sizes[h->sps.chroma_format_idc]*h->sps.bit_depth_luma >> 3;
1987 // We assume these blocks are very rare so we do not optimize it.
1988 // FIXME The two following lines get the bitstream position in the cabac
1989 // decode, I think it should be done by a function in cabac.h (or cabac.c).
1990 ptr= h->cabac.bytestream;
1991 if(h->cabac.low&0x1) ptr--;
1993 if(h->cabac.low&0x1FF) ptr--;
1996 // The pixels are stored in the same order as levels in h->mb array.
1997 memcpy(h->mb, ptr, mb_size); ptr+=mb_size;
1999 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr);
2001 // All blocks are present
2002 h->cbp_table[mb_xy] = 0xf7ef;
2003 h->chroma_pred_mode_table[mb_xy] = 0;
2004 // In deblocking, the quantizer is 0
2005 s->current_picture.f.qscale_table[mb_xy] = 0;
2006 // All coeffs are present
2007 memset(h->non_zero_count[mb_xy], 16, 48);
2008 s->current_picture.f.mb_type[mb_xy] = mb_type;
2009 h->last_qscale_diff = 0;
2014 h->ref_count[0] <<= 1;
2015 h->ref_count[1] <<= 1;
2018 fill_decode_caches(h, mb_type);
2020 if( IS_INTRA( mb_type ) ) {
2022 if( IS_INTRA4x4( mb_type ) ) {
2023 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) {
2024 mb_type |= MB_TYPE_8x8DCT;
2025 for( i = 0; i < 16; i+=4 ) {
2026 int pred = pred_intra_mode( h, i );
2027 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2028 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 );
2031 for( i = 0; i < 16; i++ ) {
2032 int pred = pred_intra_mode( h, i );
2033 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2035 //av_log( s->avctx, AV_LOG_ERROR, "i4x4 pred=%d mode=%d\n", pred, h->intra4x4_pred_mode_cache[ scan8[i] ] );
2038 write_back_intra_pred_mode(h);
2039 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
2041 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode );
2042 if( h->intra16x16_pred_mode < 0 ) return -1;
2045 h->chroma_pred_mode_table[mb_xy] =
2046 pred_mode = decode_cabac_mb_chroma_pre_mode( h );
2048 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode );
2049 if( pred_mode < 0 ) return -1;
2050 h->chroma_pred_mode= pred_mode;
2052 h->chroma_pred_mode= DC_128_PRED8x8;
2054 } else if( partition_count == 4 ) {
2055 int i, j, sub_partition_count[4], list, ref[2][4];
2057 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
2058 for( i = 0; i < 4; i++ ) {
2059 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h );
2060 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2061 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2063 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] |
2064 h->sub_mb_type[2] | h->sub_mb_type[3]) ) {
2065 ff_h264_pred_direct_motion(h, &mb_type);
2066 h->ref_cache[0][scan8[4]] =
2067 h->ref_cache[1][scan8[4]] =
2068 h->ref_cache[0][scan8[12]] =
2069 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2070 for( i = 0; i < 4; i++ )
2071 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 );
2074 for( i = 0; i < 4; i++ ) {
2075 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h );
2076 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2077 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2081 for( list = 0; list < h->list_count; list++ ) {
2082 for( i = 0; i < 4; i++ ) {
2083 if(IS_DIRECT(h->sub_mb_type[i])) continue;
2084 if(IS_DIR(h->sub_mb_type[i], 0, list)){
2085 if( h->ref_count[list] > 1 ){
2086 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
2087 if(ref[list][i] >= (unsigned)h->ref_count[list]){
2088 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]);
2096 h->ref_cache[list][ scan8[4*i]+1 ]=
2097 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
2102 dct8x8_allowed = get_dct8x8_allowed(h);
2104 for(list=0; list<h->list_count; list++){
2106 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ];
2107 if(IS_DIRECT(h->sub_mb_type[i])){
2108 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2112 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){
2113 const int sub_mb_type= h->sub_mb_type[i];
2114 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2115 for(j=0; j<sub_partition_count[i]; j++){
2118 const int index= 4*i + block_width*j;
2119 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
2120 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ];
2121 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
2122 DECODE_CABAC_MB_MVD( h, list, index)
2123 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2125 if(IS_SUB_8X8(sub_mb_type)){
2127 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2129 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2132 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2134 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2135 }else if(IS_SUB_8X4(sub_mb_type)){
2136 mv_cache[ 1 ][0]= mx;
2137 mv_cache[ 1 ][1]= my;
2139 mvd_cache[ 1 ][0]= mpx;
2140 mvd_cache[ 1 ][1]= mpy;
2141 }else if(IS_SUB_4X8(sub_mb_type)){
2142 mv_cache[ 8 ][0]= mx;
2143 mv_cache[ 8 ][1]= my;
2145 mvd_cache[ 8 ][0]= mpx;
2146 mvd_cache[ 8 ][1]= mpy;
2148 mv_cache[ 0 ][0]= mx;
2149 mv_cache[ 0 ][1]= my;
2151 mvd_cache[ 0 ][0]= mpx;
2152 mvd_cache[ 0 ][1]= mpy;
2155 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2156 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2160 } else if( IS_DIRECT(mb_type) ) {
2161 ff_h264_pred_direct_motion(h, &mb_type);
2162 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2163 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2164 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
2167 if(IS_16X16(mb_type)){
2168 for(list=0; list<h->list_count; list++){
2169 if(IS_DIR(mb_type, 0, list)){
2171 if(h->ref_count[list] > 1){
2172 ref= decode_cabac_mb_ref(h, list, 0);
2173 if(ref >= (unsigned)h->ref_count[list]){
2174 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2179 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2182 for(list=0; list<h->list_count; list++){
2183 if(IS_DIR(mb_type, 0, list)){
2185 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
2186 DECODE_CABAC_MB_MVD( h, list, 0)
2187 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2189 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2190 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2194 else if(IS_16X8(mb_type)){
2195 for(list=0; list<h->list_count; list++){
2197 if(IS_DIR(mb_type, i, list)){
2199 if(h->ref_count[list] > 1){
2200 ref= decode_cabac_mb_ref( h, list, 8*i );
2201 if(ref >= (unsigned)h->ref_count[list]){
2202 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2207 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2209 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2212 for(list=0; list<h->list_count; list++){
2214 if(IS_DIR(mb_type, i, list)){
2216 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2217 DECODE_CABAC_MB_MVD( h, list, 8*i)
2218 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2220 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2221 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2223 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2224 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2229 assert(IS_8X16(mb_type));
2230 for(list=0; list<h->list_count; list++){
2232 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2234 if(h->ref_count[list] > 1){
2235 ref= decode_cabac_mb_ref( h, list, 4*i );
2236 if(ref >= (unsigned)h->ref_count[list]){
2237 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2242 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2244 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2247 for(list=0; list<h->list_count; list++){
2249 if(IS_DIR(mb_type, i, list)){
2251 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2252 DECODE_CABAC_MB_MVD( h, list, 4*i)
2254 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2255 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2256 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2258 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2259 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2266 if( IS_INTER( mb_type ) ) {
2267 h->chroma_pred_mode_table[mb_xy] = 0;
2268 write_back_motion( h, mb_type );
2271 if( !IS_INTRA16x16( mb_type ) ) {
2272 cbp = decode_cabac_mb_cbp_luma( h );
2274 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4;
2277 h->cbp_table[mb_xy] = h->cbp = cbp;
2279 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2280 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] );
2283 /* It would be better to do this in fill_decode_caches, but we don't know
2284 * the transform mode of the current macroblock there. */
2285 if (CHROMA444 && IS_8x8DCT(mb_type)){
2287 uint8_t *nnz_cache = h->non_zero_count_cache;
2288 for (i = 0; i < 2; i++){
2289 if (h->left_type[LEFT(i)] && !IS_8x8DCT(h->left_type[LEFT(i)])){
2290 nnz_cache[3+8* 1 + 2*8*i]=
2291 nnz_cache[3+8* 2 + 2*8*i]=
2292 nnz_cache[3+8* 6 + 2*8*i]=
2293 nnz_cache[3+8* 7 + 2*8*i]=
2294 nnz_cache[3+8*11 + 2*8*i]=
2295 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2298 if (h->top_type && !IS_8x8DCT(h->top_type)){
2299 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2300 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2301 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2302 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2305 s->current_picture.f.mb_type[mb_xy] = mb_type;
2307 if( cbp || IS_INTRA16x16( mb_type ) ) {
2308 const uint8_t *scan, *scan8x8;
2309 const uint32_t *qmul;
2311 if(IS_INTERLACED(mb_type)){
2312 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2313 scan= s->qscale ? h->field_scan : h->field_scan_q0;
2315 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2316 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2319 // decode_cabac_mb_dqp
2320 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){
2323 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
2325 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
2328 if(val > 2*max_qp){ //prevent infinite loop
2329 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y);
2337 val= -((val + 1)>>1);
2338 h->last_qscale_diff = val;
2340 if(((unsigned)s->qscale) > max_qp){
2341 if(s->qscale<0) s->qscale+= max_qp+1;
2342 else s->qscale-= max_qp+1;
2344 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale);
2345 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale);
2347 h->last_qscale_diff=0;
2349 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2351 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2352 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2353 } else if (CHROMA422) {
2356 for( c = 0; c < 2; c++ ) {
2357 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c );
2358 decode_cabac_residual_dc_422(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3,
2359 CHROMA_DC_BLOCK_INDEX + c,
2360 chroma422_dc_scan, 8);
2366 for( c = 0; c < 2; c++ ) {
2367 DCTELEM *mb = h->mb + (16*(16 + 16*c) << pixel_shift);
2368 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2369 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2370 for (i = 0; i < 4; i++) {
2371 const int index = 16 + 16 * c + 8*i8x8 + i;
2372 //av_log(s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16);
2373 decode_cabac_residual_nondc(h, mb, 4, index, scan + 1, qmul, 15);
2374 mb += 16<<pixel_shift;
2379 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2380 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2382 } else /* yuv420 */ {
2385 for( c = 0; c < 2; c++ ) {
2386 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c );
2387 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
2393 for( c = 0; c < 2; c++ ) {
2394 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2395 for( i = 0; i < 4; i++ ) {
2396 const int index = 16 + 16 * c + i;
2397 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 );
2398 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2402 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2403 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2407 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2408 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2409 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2410 h->last_qscale_diff = 0;
2413 s->current_picture.f.qscale_table[mb_xy] = s->qscale;
2414 write_back_non_zero_count(h);
2417 h->ref_count[0] >>= 1;
2418 h->ref_count[1] >>= 1;