2 * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * H.264 / AVC / MPEG4 part10 cabac decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
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 decode_cabac_residual_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff, int is_dc ) {
1569 static const int significant_coeff_flag_offset[2][14] = {
1570 { 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 },
1571 { 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 }
1573 static const int last_coeff_flag_offset[2][14] = {
1574 { 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 },
1575 { 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 }
1577 static const int coeff_abs_level_m1_offset[14] = {
1578 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
1580 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1581 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1582 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1583 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1584 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1585 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1586 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1587 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1588 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1590 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1591 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1592 * map node ctx => cabac ctx for level=1 */
1593 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1594 /* map node ctx => cabac ctx for level>1 */
1595 static const uint8_t coeff_abs_levelgt1_ctx[8] = { 5, 5, 5, 5, 6, 7, 8, 9 };
1596 static const uint8_t coeff_abs_level_transition[2][8] = {
1597 /* update node ctx after decoding a level=1 */
1598 { 1, 2, 3, 3, 4, 5, 6, 7 },
1599 /* update node ctx after decoding a level>1 */
1600 { 4, 4, 4, 4, 5, 6, 7, 7 }
1606 int coeff_count = 0;
1609 uint8_t *significant_coeff_ctx_base;
1610 uint8_t *last_coeff_ctx_base;
1611 uint8_t *abs_level_m1_ctx_base;
1614 #define CABAC_ON_STACK
1616 #ifdef CABAC_ON_STACK
1619 cc.range = h->cabac.range;
1620 cc.low = h->cabac.low;
1621 cc.bytestream= h->cabac.bytestream;
1623 #define CC &h->cabac
1626 significant_coeff_ctx_base = h->cabac_state
1627 + significant_coeff_flag_offset[MB_FIELD][cat];
1628 last_coeff_ctx_base = h->cabac_state
1629 + last_coeff_flag_offset[MB_FIELD][cat];
1630 abs_level_m1_ctx_base = h->cabac_state
1631 + coeff_abs_level_m1_offset[cat];
1633 if( !is_dc && max_coeff == 64 ) {
1634 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1635 for(last= 0; last < coefs; last++) { \
1636 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1637 if( get_cabac( CC, sig_ctx )) { \
1638 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1639 index[coeff_count++] = last; \
1640 if( get_cabac( CC, last_ctx ) ) { \
1646 if( last == max_coeff -1 ) {\
1647 index[coeff_count++] = last;\
1649 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD];
1650 #if ARCH_X86 && HAVE_7REGS && HAVE_EBX_AVAILABLE && !defined(BROKEN_RELOCATIONS)
1651 coeff_count= decode_significance_8x8_x86(CC, significant_coeff_ctx_base, index,
1652 last_coeff_ctx_base-significant_coeff_ctx_base, sig_off);
1654 coeff_count= decode_significance_x86(CC, max_coeff, significant_coeff_ctx_base, index,
1655 last_coeff_ctx_base-significant_coeff_ctx_base);
1657 DECODE_SIGNIFICANCE( 63, sig_off[last], last_coeff_flag_offset_8x8[last] );
1659 DECODE_SIGNIFICANCE( max_coeff - 1, last, last );
1662 assert(coeff_count > 0);
1666 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1668 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1669 h->non_zero_count_cache[scan8[n]] = coeff_count;
1671 if( max_coeff == 64 )
1672 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1674 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1675 h->non_zero_count_cache[scan8[n]] = coeff_count;
1680 #define STORE_BLOCK(type) \
1682 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1684 int j= scantable[index[--coeff_count]]; \
1686 if( get_cabac( CC, ctx ) == 0 ) { \
1687 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1689 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1691 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1694 int coeff_abs = 2; \
1695 ctx = coeff_abs_levelgt1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1696 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1698 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1702 if( coeff_abs >= 15 ) { \
1704 while( get_cabac_bypass( CC ) ) { \
1710 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1716 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1718 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1721 } while ( coeff_count );
1723 if (h->pixel_shift) {
1724 STORE_BLOCK(int32_t)
1726 STORE_BLOCK(int16_t)
1728 #ifdef CABAC_ON_STACK
1729 h->cabac.range = cc.range ;
1730 h->cabac.low = cc.low ;
1731 h->cabac.bytestream= cc.bytestream;
1736 static void decode_cabac_residual_dc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
1737 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1);
1740 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 ) {
1741 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0);
1744 /* cat: 0-> DC 16x16 n = 0
1745 * 1-> AC 16x16 n = luma4x4idx
1746 * 2-> Luma4x4 n = luma4x4idx
1747 * 3-> DC Chroma n = iCbCr
1748 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1749 * 5-> Luma8x8 n = 4 * luma8x8idx */
1751 /* Partially inline the CABAC residual decode: inline the coded block flag.
1752 * This has very little impact on binary size and improves performance
1753 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1754 * as well as because most blocks have zero CBFs. */
1756 static av_always_inline void decode_cabac_residual_dc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
1757 /* read coded block flag */
1758 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) {
1759 h->non_zero_count_cache[scan8[n]] = 0;
1762 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff );
1765 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 ) {
1766 /* read coded block flag */
1767 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) {
1768 if( max_coeff == 64 ) {
1769 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1771 h->non_zero_count_cache[scan8[n]] = 0;
1775 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff );
1778 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 )
1780 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1781 const uint32_t *qmul;
1783 MpegEncContext * const s = &h->s;
1784 int qscale = p == 0 ? s->qscale : h->chroma_qp[p-1];
1785 if( IS_INTRA16x16( mb_type ) ) {
1786 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 DC\n" );
1787 AV_ZERO128(h->mb_luma_dc[p]+0);
1788 AV_ZERO128(h->mb_luma_dc[p]+8);
1789 AV_ZERO128(h->mb_luma_dc[p]+16);
1790 AV_ZERO128(h->mb_luma_dc[p]+24);
1791 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1794 qmul = h->dequant4_coeff[p][qscale];
1795 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1796 const int index = 16*p + i4x4;
1797 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 AC:%d\n", index );
1798 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1801 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1804 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1805 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1806 if( cbp & (1<<i8x8) ) {
1807 if( IS_8x8DCT(mb_type) ) {
1808 const int index = 16*p + 4*i8x8;
1809 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1810 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
1812 qmul = h->dequant4_coeff[cqm][qscale];
1813 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1814 const int index = 16*p + 4*i8x8 + i4x4;
1815 //av_log( s->avctx, AV_LOG_ERROR, "Luma4x4: %d\n", index );
1817 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1818 //STOP_TIMER("decode_residual")
1822 fill_rectangle(&h->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1829 * decodes a macroblock
1830 * @return 0 if OK, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed
1832 int ff_h264_decode_mb_cabac(H264Context *h) {
1833 MpegEncContext * const s = &h->s;
1835 int mb_type, partition_count, cbp = 0;
1836 int dct8x8_allowed= h->pps.transform_8x8_mode;
1837 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
1838 const int pixel_shift = h->pixel_shift;
1840 mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
1842 tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y);
1843 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
1845 /* a skipped mb needs the aff flag from the following mb */
1846 if( FRAME_MBAFF && (s->mb_y&1)==1 && h->prev_mb_skipped )
1847 skip = h->next_mb_skipped;
1849 skip = decode_cabac_mb_skip( h, s->mb_x, s->mb_y );
1850 /* read skip flags */
1852 if( FRAME_MBAFF && (s->mb_y&1)==0 ){
1853 s->current_picture.f.mb_type[mb_xy] = MB_TYPE_SKIP;
1854 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 );
1855 if(!h->next_mb_skipped)
1856 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1861 h->cbp_table[mb_xy] = 0;
1862 h->chroma_pred_mode_table[mb_xy] = 0;
1863 h->last_qscale_diff = 0;
1870 if( (s->mb_y&1) == 0 )
1872 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1875 h->prev_mb_skipped = 0;
1877 fill_decode_neighbors(h, -(MB_FIELD));
1879 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
1881 assert(h->slice_type_nos == AV_PICTURE_TYPE_B);
1883 if( !IS_DIRECT( h->left_type[LTOP]-1 ) )
1885 if( !IS_DIRECT( h->top_type-1 ) )
1888 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
1889 mb_type= 0; /* B_Direct_16x16 */
1890 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) {
1891 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */
1894 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3;
1895 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2;
1896 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1;
1897 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1899 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1900 }else if( bits == 13 ){
1901 mb_type= decode_cabac_intra_mb_type(h, 32, 0);
1902 goto decode_intra_mb;
1903 }else if( bits == 14 ){
1904 mb_type= 11; /* B_L1_L0_8x16 */
1905 }else if( bits == 15 ){
1906 mb_type= 22; /* B_8x8 */
1908 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1909 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1912 partition_count= b_mb_type_info[mb_type].partition_count;
1913 mb_type= b_mb_type_info[mb_type].type;
1914 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) {
1915 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
1917 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
1918 /* P_L0_D16x16, P_8x8 */
1919 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
1921 /* P_L0_D8x16, P_L0_D16x8 */
1922 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
1924 partition_count= p_mb_type_info[mb_type].partition_count;
1925 mb_type= p_mb_type_info[mb_type].type;
1927 mb_type= decode_cabac_intra_mb_type(h, 17, 0);
1928 goto decode_intra_mb;
1931 mb_type= decode_cabac_intra_mb_type(h, 3, 1);
1932 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
1934 assert(h->slice_type_nos == AV_PICTURE_TYPE_I);
1936 partition_count = 0;
1937 cbp= i_mb_type_info[mb_type].cbp;
1938 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
1939 mb_type= i_mb_type_info[mb_type].type;
1942 mb_type |= MB_TYPE_INTERLACED;
1944 h->slice_table[ mb_xy ]= h->slice_num;
1946 if(IS_INTRA_PCM(mb_type)) {
1947 static const uint16_t mb_sizes[4] = {256,384,512,768};
1948 const int mb_size = mb_sizes[h->sps.chroma_format_idc]*h->sps.bit_depth_luma >> 3;
1951 // We assume these blocks are very rare so we do not optimize it.
1952 // FIXME The two following lines get the bitstream position in the cabac
1953 // decode, I think it should be done by a function in cabac.h (or cabac.c).
1954 ptr= h->cabac.bytestream;
1955 if(h->cabac.low&0x1) ptr--;
1957 if(h->cabac.low&0x1FF) ptr--;
1960 // The pixels are stored in the same order as levels in h->mb array.
1961 memcpy(h->mb, ptr, mb_size); ptr+=mb_size;
1963 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr);
1965 // All blocks are present
1966 h->cbp_table[mb_xy] = 0xf7ef;
1967 h->chroma_pred_mode_table[mb_xy] = 0;
1968 // In deblocking, the quantizer is 0
1969 s->current_picture.f.qscale_table[mb_xy] = 0;
1970 // All coeffs are present
1971 memset(h->non_zero_count[mb_xy], 16, 48);
1972 s->current_picture.f.mb_type[mb_xy] = mb_type;
1973 h->last_qscale_diff = 0;
1978 h->ref_count[0] <<= 1;
1979 h->ref_count[1] <<= 1;
1982 fill_decode_caches(h, mb_type);
1984 if( IS_INTRA( mb_type ) ) {
1986 if( IS_INTRA4x4( mb_type ) ) {
1987 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) {
1988 mb_type |= MB_TYPE_8x8DCT;
1989 for( i = 0; i < 16; i+=4 ) {
1990 int pred = pred_intra_mode( h, i );
1991 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred );
1992 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 );
1995 for( i = 0; i < 16; i++ ) {
1996 int pred = pred_intra_mode( h, i );
1997 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred );
1999 //av_log( s->avctx, AV_LOG_ERROR, "i4x4 pred=%d mode=%d\n", pred, h->intra4x4_pred_mode_cache[ scan8[i] ] );
2002 write_back_intra_pred_mode(h);
2003 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
2005 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode );
2006 if( h->intra16x16_pred_mode < 0 ) return -1;
2009 h->chroma_pred_mode_table[mb_xy] =
2010 pred_mode = decode_cabac_mb_chroma_pre_mode( h );
2012 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode );
2013 if( pred_mode < 0 ) return -1;
2014 h->chroma_pred_mode= pred_mode;
2016 h->chroma_pred_mode= DC_128_PRED8x8;
2018 } else if( partition_count == 4 ) {
2019 int i, j, sub_partition_count[4], list, ref[2][4];
2021 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
2022 for( i = 0; i < 4; i++ ) {
2023 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h );
2024 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2025 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2027 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] |
2028 h->sub_mb_type[2] | h->sub_mb_type[3]) ) {
2029 ff_h264_pred_direct_motion(h, &mb_type);
2030 h->ref_cache[0][scan8[4]] =
2031 h->ref_cache[1][scan8[4]] =
2032 h->ref_cache[0][scan8[12]] =
2033 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2034 for( i = 0; i < 4; i++ )
2035 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 );
2038 for( i = 0; i < 4; i++ ) {
2039 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h );
2040 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2041 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2045 for( list = 0; list < h->list_count; list++ ) {
2046 for( i = 0; i < 4; i++ ) {
2047 if(IS_DIRECT(h->sub_mb_type[i])) continue;
2048 if(IS_DIR(h->sub_mb_type[i], 0, list)){
2049 if( h->ref_count[list] > 1 ){
2050 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
2051 if(ref[list][i] >= (unsigned)h->ref_count[list]){
2052 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]);
2060 h->ref_cache[list][ scan8[4*i]+1 ]=
2061 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
2066 dct8x8_allowed = get_dct8x8_allowed(h);
2068 for(list=0; list<h->list_count; list++){
2070 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ];
2071 if(IS_DIRECT(h->sub_mb_type[i])){
2072 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2076 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){
2077 const int sub_mb_type= h->sub_mb_type[i];
2078 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2079 for(j=0; j<sub_partition_count[i]; j++){
2082 const int index= 4*i + block_width*j;
2083 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
2084 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ];
2085 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
2086 DECODE_CABAC_MB_MVD( h, list, index)
2087 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2089 if(IS_SUB_8X8(sub_mb_type)){
2091 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2093 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2096 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2098 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2099 }else if(IS_SUB_8X4(sub_mb_type)){
2100 mv_cache[ 1 ][0]= mx;
2101 mv_cache[ 1 ][1]= my;
2103 mvd_cache[ 1 ][0]= mpx;
2104 mvd_cache[ 1 ][1]= mpy;
2105 }else if(IS_SUB_4X8(sub_mb_type)){
2106 mv_cache[ 8 ][0]= mx;
2107 mv_cache[ 8 ][1]= my;
2109 mvd_cache[ 8 ][0]= mpx;
2110 mvd_cache[ 8 ][1]= mpy;
2112 mv_cache[ 0 ][0]= mx;
2113 mv_cache[ 0 ][1]= my;
2115 mvd_cache[ 0 ][0]= mpx;
2116 mvd_cache[ 0 ][1]= mpy;
2119 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2120 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2124 } else if( IS_DIRECT(mb_type) ) {
2125 ff_h264_pred_direct_motion(h, &mb_type);
2126 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2127 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2128 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
2131 if(IS_16X16(mb_type)){
2132 for(list=0; list<h->list_count; list++){
2133 if(IS_DIR(mb_type, 0, list)){
2135 if(h->ref_count[list] > 1){
2136 ref= decode_cabac_mb_ref(h, list, 0);
2137 if(ref >= (unsigned)h->ref_count[list]){
2138 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2143 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2146 for(list=0; list<h->list_count; list++){
2147 if(IS_DIR(mb_type, 0, list)){
2149 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
2150 DECODE_CABAC_MB_MVD( h, list, 0)
2151 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2153 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2154 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2158 else if(IS_16X8(mb_type)){
2159 for(list=0; list<h->list_count; list++){
2161 if(IS_DIR(mb_type, i, list)){
2163 if(h->ref_count[list] > 1){
2164 ref= decode_cabac_mb_ref( h, list, 8*i );
2165 if(ref >= (unsigned)h->ref_count[list]){
2166 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2171 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2173 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2176 for(list=0; list<h->list_count; list++){
2178 if(IS_DIR(mb_type, i, list)){
2180 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2181 DECODE_CABAC_MB_MVD( h, list, 8*i)
2182 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2184 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2185 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2187 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2188 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2193 assert(IS_8X16(mb_type));
2194 for(list=0; list<h->list_count; list++){
2196 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2198 if(h->ref_count[list] > 1){
2199 ref= decode_cabac_mb_ref( h, list, 4*i );
2200 if(ref >= (unsigned)h->ref_count[list]){
2201 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2206 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2208 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2211 for(list=0; list<h->list_count; list++){
2213 if(IS_DIR(mb_type, i, list)){
2215 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2216 DECODE_CABAC_MB_MVD( h, list, 4*i)
2218 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2219 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2220 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2222 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2223 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2230 if( IS_INTER( mb_type ) ) {
2231 h->chroma_pred_mode_table[mb_xy] = 0;
2232 write_back_motion( h, mb_type );
2235 if( !IS_INTRA16x16( mb_type ) ) {
2236 cbp = decode_cabac_mb_cbp_luma( h );
2238 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4;
2241 h->cbp_table[mb_xy] = h->cbp = cbp;
2243 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2244 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] );
2247 /* It would be better to do this in fill_decode_caches, but we don't know
2248 * the transform mode of the current macroblock there. */
2249 if (CHROMA444 && IS_8x8DCT(mb_type)){
2251 uint8_t *nnz_cache = h->non_zero_count_cache;
2252 for (i = 0; i < 2; i++){
2253 if (h->left_type[LEFT(i)] && !IS_8x8DCT(h->left_type[LEFT(i)])){
2254 nnz_cache[3+8* 1 + 2*8*i]=
2255 nnz_cache[3+8* 2 + 2*8*i]=
2256 nnz_cache[3+8* 6 + 2*8*i]=
2257 nnz_cache[3+8* 7 + 2*8*i]=
2258 nnz_cache[3+8*11 + 2*8*i]=
2259 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2262 if (h->top_type && !IS_8x8DCT(h->top_type)){
2263 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2264 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2265 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2266 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2269 s->current_picture.f.mb_type[mb_xy] = mb_type;
2271 if( cbp || IS_INTRA16x16( mb_type ) ) {
2272 const uint8_t *scan, *scan8x8;
2273 const uint32_t *qmul;
2275 if(IS_INTERLACED(mb_type)){
2276 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2277 scan= s->qscale ? h->field_scan : h->field_scan_q0;
2279 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2280 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2283 // decode_cabac_mb_dqp
2284 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){
2287 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
2289 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
2292 if(val > 2*max_qp){ //prevent infinite loop
2293 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y);
2301 val= -((val + 1)>>1);
2302 h->last_qscale_diff = val;
2304 if(((unsigned)s->qscale) > max_qp){
2305 if(s->qscale<0) s->qscale+= max_qp+1;
2306 else s->qscale-= max_qp+1;
2308 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale);
2309 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale);
2311 h->last_qscale_diff=0;
2313 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2315 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2316 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2320 for( c = 0; c < 2; c++ ) {
2321 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c );
2322 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
2328 for( c = 0; c < 2; c++ ) {
2329 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2330 for( i = 0; i < 4; i++ ) {
2331 const int index = 16 + 16 * c + i;
2332 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 );
2333 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2337 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2338 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2342 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2343 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2344 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2345 h->last_qscale_diff = 0;
2348 s->current_picture.f.qscale_table[mb_xy] = s->qscale;
2349 write_back_non_zero_count(h);
2352 h->ref_count[0] >>= 1;
2353 h->ref_count[1] >>= 1;