2 * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * H.264 / AVC / MPEG4 part10 cabac decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
29 #define UNCHECKED_BITSTREAM_READER 1
33 #include "cabac_functions.h"
39 #include "h264_mvpred.h"
41 #include "libavutil/avassert.h"
44 #include "x86/h264_i386.h"
47 /* Cabac pre state table */
49 static const int8_t cabac_context_init_I[1024][2] =
52 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
53 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
54 { -6, 53 }, { -1, 54 }, { 7, 51 },
56 /* 11 - 23 unsused for I */
57 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
58 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
59 { 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 },
66 { 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 },
71 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
75 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
79 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
80 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
81 { 13, 41 }, { 3, 62 },
84 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
85 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
86 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
87 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
88 { -12, 115 },{ -16, 122 },
91 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
92 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
93 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
94 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
98 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
99 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
100 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
101 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
102 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
103 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
104 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
105 { 14, 62 }, { -13, 108 },{ -15, 100 },
108 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
109 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
110 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
111 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
112 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
113 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
114 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
115 { 0, 62 }, { 12, 72 },
118 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
119 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
120 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
121 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
122 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
123 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
124 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
125 { 0, 89 }, { 26, -19 }, { 22, -17 },
128 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
129 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
130 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
131 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
132 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
133 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
134 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
135 { 12, 68 }, { 2, 97 },
138 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
139 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
140 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
141 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
142 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
143 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
147 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
148 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
149 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
150 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
151 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
152 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
154 /* 276 a bit special (not used, bypass is used instead) */
158 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
159 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
160 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
161 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
162 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
163 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
164 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
165 { 9, 64 }, { -12, 104 },{ -11, 97 },
168 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
169 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
170 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
171 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
172 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
173 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
174 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
175 { 5, 64 }, { 12, 70 },
178 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
179 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
180 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
181 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
182 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
183 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
184 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
185 { -12, 109 },{ 36, -35 }, { 36, -34 },
188 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
189 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
190 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
191 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
192 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
193 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
194 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
195 { 29, 39 }, { 19, 66 },
198 { 31, 21 }, { 31, 31 }, { 25, 50 },
199 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
200 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
201 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
202 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
203 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
204 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
205 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
206 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
207 { 0, 68 }, { -9, 92 },
210 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
211 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
212 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
213 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
214 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
215 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
218 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
219 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
220 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
221 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
222 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
223 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
224 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
225 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
226 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
227 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
228 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
229 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
230 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
231 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
232 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
233 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
234 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
235 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
236 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
237 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
238 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
239 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
240 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
241 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
242 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
243 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
244 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
245 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
246 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
247 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
248 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
249 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
250 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
251 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
252 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
253 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
254 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
255 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
256 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
257 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
258 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
259 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
260 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
261 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
262 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
263 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
264 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
265 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
266 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
267 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
268 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
269 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
270 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
271 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 },
272 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 },
273 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 },
274 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 },
275 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 },
276 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 },
277 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 },
278 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
279 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
280 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
281 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
282 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 },
283 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 },
284 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 },
285 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 },
286 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 },
287 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 },
288 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 },
289 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 },
290 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 },
291 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 },
292 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 },
293 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 },
294 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 },
295 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 },
296 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 },
297 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
298 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
299 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
300 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
301 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
302 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
303 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
304 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
305 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
306 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
307 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
308 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
309 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
310 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
311 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
312 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
313 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
314 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
315 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
316 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
317 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
318 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
319 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
320 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
321 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
322 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
323 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
324 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
325 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
326 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
327 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
328 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
329 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
330 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
331 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
332 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
333 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
334 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
335 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
336 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
337 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
338 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
339 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
340 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
341 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
342 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
343 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
344 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
345 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
346 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
347 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 },
348 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 },
349 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 },
350 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 },
351 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 },
352 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 },
353 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 },
354 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 },
355 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 },
356 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
357 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
358 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }
361 static const int8_t cabac_context_init_PB[3][1024][2] =
363 /* i_cabac_init_idc == 0 */
366 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
367 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
368 { -6, 53 }, { -1, 54 }, { 7, 51 },
371 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
372 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
373 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
377 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
378 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
379 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
380 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
383 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
384 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
385 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
386 { -3, 81 }, { 0, 88 },
389 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
390 { -7, 72 }, { 1, 58 },
393 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
394 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
395 { 13, 41 }, { 3, 62 },
398 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
399 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
400 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
401 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
402 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
403 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
404 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
405 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
406 { 0, 68 }, { -4, 69 }, { -8, 88 },
409 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
410 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
411 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
412 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
413 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
414 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
415 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
416 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
417 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
418 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
419 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
420 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
421 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
422 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
423 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
427 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
428 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
429 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
430 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
431 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
432 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
433 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
434 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
435 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
436 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
437 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
438 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
439 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
440 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
441 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
445 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
446 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
447 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
448 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
449 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
450 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
451 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
452 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
453 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
454 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
455 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
456 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
459 /* 276 a bit special (not used, bypass is used instead) */
463 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
464 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
465 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
466 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
467 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
468 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
469 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
470 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
471 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
472 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
473 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
474 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
475 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
476 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
477 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
481 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
482 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
483 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
484 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
485 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
486 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
487 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
488 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
489 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
490 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
491 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
492 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
493 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
494 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
495 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
499 { 12, 40 }, { 11, 51 }, { 14, 59 },
500 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
501 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
502 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
503 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
504 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
505 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
506 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
507 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
508 { -8, 66 }, { -8, 76 },
511 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
512 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
513 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
514 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
515 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
516 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
519 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
520 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
521 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
522 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
523 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
524 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
525 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
526 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
527 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
528 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
529 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
530 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
531 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
532 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
533 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
534 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
535 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
536 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
537 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
538 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
539 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
540 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
541 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
542 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
543 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
544 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
545 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
546 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
547 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
548 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
549 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
550 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
551 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
552 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
553 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
554 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
555 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
556 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
557 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
558 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
559 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
560 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
561 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
562 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
563 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
564 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
565 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
566 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
567 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
568 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
569 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
570 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
571 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
572 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 },
573 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 },
574 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 },
575 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 },
576 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 },
577 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 },
578 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 },
579 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
580 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
581 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
582 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
583 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 },
584 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 },
585 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 },
586 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 },
587 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 },
588 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 },
589 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 },
590 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 },
591 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 },
592 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 },
593 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 },
594 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 },
595 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 },
596 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 },
597 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 },
598 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
599 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
600 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
601 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
602 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
603 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
604 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
605 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
606 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
607 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
608 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
609 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
610 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
611 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
612 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
613 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
614 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
615 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
616 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
617 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
618 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
619 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
620 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
621 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
622 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
623 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
624 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
625 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
626 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
627 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
628 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
629 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
630 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
631 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
632 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
633 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
634 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
635 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
636 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
637 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
638 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
639 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
640 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
641 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
642 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
643 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
644 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
645 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
646 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
647 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
648 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
649 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 },
650 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 },
651 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 },
652 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 },
653 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 },
654 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 },
655 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 },
656 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 },
657 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
658 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
659 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }
662 /* i_cabac_init_idc == 1 */
665 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
666 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
667 { -6, 53 }, { -1, 54 }, { 7, 51 },
670 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
671 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
672 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
676 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
677 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
678 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
679 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
682 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
683 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
684 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
685 { -7, 86 },{ -5, 95 },
688 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
689 { -5, 72 },{ 0, 61 },
692 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
693 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
694 { 13, 41 }, { 3, 62 },
697 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
698 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
699 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
700 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
701 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
702 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
703 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
704 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
705 { 0, 68 }, { -7, 74 }, { -9, 88 },
708 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
709 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
710 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
711 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
712 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
713 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
714 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
715 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
716 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
717 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
718 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
719 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
720 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
721 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
722 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
726 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
727 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
728 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
729 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
730 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
731 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
732 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
733 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
734 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
735 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
736 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
737 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
738 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
739 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
740 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
744 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
745 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
746 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
747 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
748 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
749 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
750 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
751 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
752 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
753 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
754 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
755 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
758 /* 276 a bit special (not used, bypass is used instead) */
762 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
763 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
764 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
765 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
766 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
767 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
768 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
769 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
770 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
771 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
772 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
773 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
774 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
775 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
776 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
780 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
781 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
782 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
783 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
784 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
785 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
786 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
787 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
788 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
789 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
790 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
791 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
792 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
793 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
794 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
798 { 25, 32 }, { 21, 49 }, { 21, 54 },
799 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
800 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
801 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
802 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
803 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
804 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
805 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
806 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
807 { -4, 67 }, { -7, 82 },
810 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
811 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
812 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
813 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
814 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
815 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
818 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
819 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
820 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
821 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
822 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
823 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
824 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
825 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
826 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
827 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
828 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
829 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
830 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
831 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
832 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
833 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
834 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
835 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
836 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
837 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
838 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
839 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
840 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
841 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
842 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
843 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
844 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
845 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
846 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
847 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
848 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
849 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
850 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
851 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
852 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
853 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
854 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
855 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
856 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
857 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
858 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
859 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
860 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
861 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
862 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
863 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
864 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
865 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
866 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
867 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
868 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
869 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
870 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
871 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 },
872 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 },
873 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 },
874 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 },
875 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 },
876 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 },
877 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 },
878 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
879 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
880 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
881 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
882 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 },
883 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 },
884 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 },
885 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 },
886 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 },
887 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 },
888 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 },
889 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 },
890 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 },
891 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 },
892 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 },
893 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 },
894 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 },
895 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 },
896 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 },
897 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
898 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
899 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
900 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
901 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
902 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
903 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
904 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
905 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
906 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
907 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
908 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
909 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
910 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
911 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
912 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
913 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
914 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
915 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
916 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
917 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
918 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
919 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
920 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
921 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
922 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
923 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
924 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
925 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
926 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
927 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
928 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
929 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
930 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
931 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
932 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
933 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
934 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
935 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
936 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
937 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
938 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
939 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
940 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
941 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
942 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
943 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
944 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
945 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
946 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
947 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
948 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 },
949 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 },
950 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 },
951 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 },
952 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 },
953 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 },
954 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 },
955 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 },
956 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
957 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
958 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }
961 /* i_cabac_init_idc == 2 */
964 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
965 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
966 { -6, 53 }, { -1, 54 }, { 7, 51 },
969 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
970 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
971 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
975 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
976 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
977 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
978 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
981 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
982 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
983 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
984 { -3, 90 },{ -1, 101 },
987 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
988 { -7, 50 },{ 1, 60 },
991 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
992 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
993 { 13, 41 }, { 3, 62 },
996 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
997 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
998 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
999 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
1000 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1001 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1002 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1003 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1004 { 3, 68 }, { -8, 71 }, { -13, 98 },
1007 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1008 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1009 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1010 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1011 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1012 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1013 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1014 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1015 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1016 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1017 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1018 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1019 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1020 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1021 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1025 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1026 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1027 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1028 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1029 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1030 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1031 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1032 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1033 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1034 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1035 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1036 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1037 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1038 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1039 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1043 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1044 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1045 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1046 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1047 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1048 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1049 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1050 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1051 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1052 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1053 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1054 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1057 /* 276 a bit special (not used, bypass is used instead) */
1061 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1062 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1063 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1064 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1065 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1066 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1067 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1068 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1069 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1070 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1071 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1072 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1073 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1074 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1075 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1079 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1080 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1081 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1082 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1083 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1084 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1085 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1086 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1087 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1088 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1089 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1090 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1091 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1092 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1093 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1097 { 21, 33 }, { 19, 50 }, { 17, 61 },
1098 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1099 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1100 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1101 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1102 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1103 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1104 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1105 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1106 { -6, 68 }, { -10, 79 },
1109 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1110 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1111 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1112 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1113 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1114 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1117 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1118 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1119 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1120 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1121 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1122 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1123 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1124 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1125 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1126 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1127 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1128 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1129 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1130 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1131 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1132 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1133 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1134 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1135 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1136 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1137 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1138 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1139 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1140 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1141 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1142 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1143 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1144 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1145 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1146 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1147 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1148 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1149 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1150 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1151 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1152 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1153 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1154 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1155 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1156 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1157 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1158 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1159 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1160 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1161 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1162 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1163 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1164 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1165 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1166 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1167 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1168 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1169 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1170 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 },
1171 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 },
1172 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 },
1173 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 },
1174 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 },
1175 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 },
1176 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 },
1177 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1178 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1179 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1180 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1181 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 },
1182 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 },
1183 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 },
1184 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 },
1185 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 },
1186 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 },
1187 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 },
1188 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 },
1189 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 },
1190 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 },
1191 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 },
1192 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 },
1193 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 },
1194 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 },
1195 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 },
1196 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1197 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1198 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1199 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1200 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1201 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1202 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1203 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1204 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1205 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1206 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1207 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1208 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1209 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1210 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1211 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1212 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1213 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1214 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1215 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1216 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1217 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1218 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1219 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1220 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1221 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1222 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1223 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1224 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1225 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1226 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1227 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1228 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1229 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1230 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1231 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1232 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1233 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1234 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1235 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1236 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1237 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1238 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1239 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1240 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1241 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1242 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1243 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1244 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1245 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1246 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1247 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 },
1248 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 },
1249 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 },
1250 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 },
1251 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 },
1252 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 },
1253 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 },
1254 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 },
1255 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1256 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1257 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }
1261 void ff_h264_init_cabac_states(H264Context *h) {
1262 MpegEncContext * const s = &h->s;
1264 const int8_t (*tab)[2];
1265 const int slice_qp = av_clip(s->qscale - 6*(h->sps.bit_depth_luma-8), 0, 51);
1267 if( h->slice_type_nos == AV_PICTURE_TYPE_I ) tab = cabac_context_init_I;
1268 else tab = cabac_context_init_PB[h->cabac_init_idc];
1270 /* calculate pre-state */
1271 for( i= 0; i < 1024; i++ ) {
1272 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1278 h->cabac_state[i] = pre;
1282 static int decode_cabac_field_decoding_flag(H264Context *h) {
1283 MpegEncContext * const s = &h->s;
1284 const long mbb_xy = h->mb_xy - 2L*s->mb_stride;
1286 unsigned long ctx = 0;
1288 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);
1289 ctx += (s->current_picture.f.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == h->slice_num);
1291 return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] );
1294 static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) {
1295 uint8_t *state= &h->cabac_state[ctx_base];
1300 if( h->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1302 if( h->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1304 if( get_cabac_noinline( &h->cabac, &state[ctx] ) == 0 )
1305 return 0; /* I4x4 */
1308 if( get_cabac_noinline( &h->cabac, state ) == 0 )
1309 return 0; /* I4x4 */
1312 if( get_cabac_terminate( &h->cabac ) )
1313 return 25; /* PCM */
1315 mb_type = 1; /* I16x16 */
1316 mb_type += 12 * get_cabac_noinline( &h->cabac, &state[1] ); /* cbp_luma != 0 */
1317 if( get_cabac_noinline( &h->cabac, &state[2] ) ) /* cbp_chroma */
1318 mb_type += 4 + 4 * get_cabac_noinline( &h->cabac, &state[2+intra_slice] );
1319 mb_type += 2 * get_cabac_noinline( &h->cabac, &state[3+intra_slice] );
1320 mb_type += 1 * get_cabac_noinline( &h->cabac, &state[3+2*intra_slice] );
1324 static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) {
1325 MpegEncContext * const s = &h->s;
1329 if(FRAME_MBAFF){ //FIXME merge with the stuff in fill_caches?
1330 int mb_xy = mb_x + (mb_y&~1)*s->mb_stride;
1333 && h->slice_table[mba_xy] == h->slice_num
1334 && MB_FIELD == !!IS_INTERLACED( s->current_picture.f.mb_type[mba_xy] ) )
1335 mba_xy += s->mb_stride;
1337 mbb_xy = mb_xy - s->mb_stride;
1339 && h->slice_table[mbb_xy] == h->slice_num
1340 && IS_INTERLACED( s->current_picture.f.mb_type[mbb_xy] ) )
1341 mbb_xy -= s->mb_stride;
1343 mbb_xy = mb_x + (mb_y-1)*s->mb_stride;
1345 int mb_xy = h->mb_xy;
1347 mbb_xy = mb_xy - (s->mb_stride << FIELD_PICTURE);
1350 if( h->slice_table[mba_xy] == h->slice_num && !IS_SKIP( s->current_picture.f.mb_type[mba_xy] ))
1352 if( h->slice_table[mbb_xy] == h->slice_num && !IS_SKIP( s->current_picture.f.mb_type[mbb_xy] ))
1355 if( h->slice_type_nos == AV_PICTURE_TYPE_B )
1357 return get_cabac_noinline( &h->cabac, &h->cabac_state[11+ctx] );
1360 static int decode_cabac_mb_intra4x4_pred_mode( H264Context *h, int pred_mode ) {
1363 if( get_cabac( &h->cabac, &h->cabac_state[68] ) )
1366 mode += 1 * get_cabac( &h->cabac, &h->cabac_state[69] );
1367 mode += 2 * get_cabac( &h->cabac, &h->cabac_state[69] );
1368 mode += 4 * get_cabac( &h->cabac, &h->cabac_state[69] );
1370 return mode + ( mode >= pred_mode );
1373 static int decode_cabac_mb_chroma_pre_mode( H264Context *h) {
1374 const int mba_xy = h->left_mb_xy[0];
1375 const int mbb_xy = h->top_mb_xy;
1379 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1380 if( h->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0 )
1383 if( h->top_type && h->chroma_pred_mode_table[mbb_xy] != 0 )
1386 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+ctx] ) == 0 )
1389 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 )
1391 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 )
1397 static int decode_cabac_mb_cbp_luma( H264Context *h) {
1398 int cbp_b, cbp_a, ctx, cbp = 0;
1400 cbp_a = h->left_cbp;
1403 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1404 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]);
1405 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1406 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 1;
1407 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1408 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 2;
1409 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1410 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 3;
1413 static int decode_cabac_mb_cbp_chroma( H264Context *h) {
1417 cbp_a = (h->left_cbp>>4)&0x03;
1418 cbp_b = (h-> top_cbp>>4)&0x03;
1421 if( cbp_a > 0 ) ctx++;
1422 if( cbp_b > 0 ) ctx += 2;
1423 if( get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] ) == 0 )
1427 if( cbp_a == 2 ) ctx++;
1428 if( cbp_b == 2 ) ctx += 2;
1429 return 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] );
1432 static int decode_cabac_p_mb_sub_type( H264Context *h ) {
1433 if( get_cabac( &h->cabac, &h->cabac_state[21] ) )
1435 if( !get_cabac( &h->cabac, &h->cabac_state[22] ) )
1437 if( get_cabac( &h->cabac, &h->cabac_state[23] ) )
1441 static int decode_cabac_b_mb_sub_type( H264Context *h ) {
1443 if( !get_cabac( &h->cabac, &h->cabac_state[36] ) )
1444 return 0; /* B_Direct_8x8 */
1445 if( !get_cabac( &h->cabac, &h->cabac_state[37] ) )
1446 return 1 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1448 if( get_cabac( &h->cabac, &h->cabac_state[38] ) ) {
1449 if( get_cabac( &h->cabac, &h->cabac_state[39] ) )
1450 return 11 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1453 type += 2*get_cabac( &h->cabac, &h->cabac_state[39] );
1454 type += get_cabac( &h->cabac, &h->cabac_state[39] );
1458 static int decode_cabac_mb_ref( H264Context *h, int list, int n ) {
1459 int refa = h->ref_cache[list][scan8[n] - 1];
1460 int refb = h->ref_cache[list][scan8[n] - 8];
1464 if( h->slice_type_nos == AV_PICTURE_TYPE_B) {
1465 if( refa > 0 && !(h->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1467 if( refb > 0 && !(h->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1476 while( get_cabac( &h->cabac, &h->cabac_state[54+ctx] ) ) {
1479 if(ref >= 32 /*h->ref_list[list]*/){
1486 static int decode_cabac_mb_mvd( H264Context *h, int ctxbase, int amvd, int *mvda) {
1489 if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1490 // if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1497 while( mvd < 9 && get_cabac( &h->cabac, &h->cabac_state[ctxbase] ) ) {
1505 while( get_cabac_bypass( &h->cabac ) ) {
1509 av_log(h->s.avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1514 mvd += get_cabac_bypass( &h->cabac )<<k;
1516 *mvda=mvd < 70 ? mvd : 70;
1519 return get_cabac_bypass_sign( &h->cabac, -mvd );
1522 #define DECODE_CABAC_MB_MVD( h, list, n )\
1524 int amvd0 = h->mvd_cache[list][scan8[n] - 1][0] +\
1525 h->mvd_cache[list][scan8[n] - 8][0];\
1526 int amvd1 = h->mvd_cache[list][scan8[n] - 1][1] +\
1527 h->mvd_cache[list][scan8[n] - 8][1];\
1529 mx += decode_cabac_mb_mvd( h, 40, amvd0, &mpx );\
1530 my += decode_cabac_mb_mvd( h, 47, amvd1, &mpy );\
1533 static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx, int max_coeff, int is_dc ) {
1536 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1540 idx -= CHROMA_DC_BLOCK_INDEX;
1541 nza = (h->left_cbp>>(6+idx))&0x01;
1542 nzb = (h-> top_cbp>>(6+idx))&0x01;
1544 idx -= LUMA_DC_BLOCK_INDEX;
1545 nza = h->left_cbp&(0x100<<idx);
1546 nzb = h-> top_cbp&(0x100<<idx);
1549 nza = h->non_zero_count_cache[scan8[idx] - 1];
1550 nzb = h->non_zero_count_cache[scan8[idx] - 8];
1559 return base_ctx[cat] + ctx;
1562 static av_always_inline void
1563 decode_cabac_residual_internal(H264Context *h, DCTELEM *block,
1564 int cat, int n, const uint8_t *scantable,
1565 const uint32_t *qmul, int max_coeff,
1566 int is_dc, int chroma422)
1568 static const int significant_coeff_flag_offset[2][14] = {
1569 { 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 },
1570 { 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 }
1572 static const int last_coeff_flag_offset[2][14] = {
1573 { 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 },
1574 { 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 }
1576 static const int coeff_abs_level_m1_offset[14] = {
1577 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
1579 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1580 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1581 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1582 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1583 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1584 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1585 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1586 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1587 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1589 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
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[2][8] = {
1596 { 5, 5, 5, 5, 6, 7, 8, 9 },
1597 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1599 static const uint8_t coeff_abs_level_transition[2][8] = {
1600 /* update node ctx after decoding a level=1 */
1601 { 1, 2, 3, 3, 4, 5, 6, 7 },
1602 /* update node ctx after decoding a level>1 */
1603 { 4, 4, 4, 4, 5, 6, 7, 7 }
1609 int coeff_count = 0;
1612 uint8_t *significant_coeff_ctx_base;
1613 uint8_t *last_coeff_ctx_base;
1614 uint8_t *abs_level_m1_ctx_base;
1617 #define CABAC_ON_STACK
1619 #ifdef CABAC_ON_STACK
1622 cc.range = h->cabac.range;
1623 cc.low = h->cabac.low;
1624 cc.bytestream= h->cabac.bytestream;
1626 #define CC &h->cabac
1629 significant_coeff_ctx_base = h->cabac_state
1630 + significant_coeff_flag_offset[MB_FIELD][cat];
1631 last_coeff_ctx_base = h->cabac_state
1632 + last_coeff_flag_offset[MB_FIELD][cat];
1633 abs_level_m1_ctx_base = h->cabac_state
1634 + coeff_abs_level_m1_offset[cat];
1636 if( !is_dc && max_coeff == 64 ) {
1637 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1638 for(last= 0; last < coefs; last++) { \
1639 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1640 if( get_cabac( CC, sig_ctx )) { \
1641 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1642 index[coeff_count++] = last; \
1643 if( get_cabac( CC, last_ctx ) ) { \
1649 if( last == max_coeff -1 ) {\
1650 index[coeff_count++] = last;\
1652 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD];
1653 #ifdef decode_significance
1654 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1655 last_coeff_ctx_base, sig_off);
1657 if (is_dc && chroma422) { // dc 422
1658 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1660 coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1661 last_coeff_ctx_base-significant_coeff_ctx_base);
1664 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1666 if (is_dc && chroma422) { // dc 422
1667 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1669 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1673 av_assert2(coeff_count > 0);
1677 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1679 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1680 h->non_zero_count_cache[scan8[n]] = coeff_count;
1682 if( max_coeff == 64 )
1683 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1685 av_assert2( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1686 h->non_zero_count_cache[scan8[n]] = coeff_count;
1691 #define STORE_BLOCK(type) \
1693 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1695 int j= scantable[index[--coeff_count]]; \
1697 if( get_cabac( CC, ctx ) == 0 ) { \
1698 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1700 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1702 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1705 int coeff_abs = 2; \
1706 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1707 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1709 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1713 if( coeff_abs >= 15 ) { \
1715 while( get_cabac_bypass( CC ) ) { \
1721 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1727 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1729 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1732 } while ( coeff_count );
1734 if (h->pixel_shift) {
1735 STORE_BLOCK(int32_t)
1737 STORE_BLOCK(int16_t)
1739 #ifdef CABAC_ON_STACK
1740 h->cabac.range = cc.range ;
1741 h->cabac.low = cc.low ;
1742 h->cabac.bytestream= cc.bytestream;
1747 static void decode_cabac_residual_dc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
1748 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1751 static void decode_cabac_residual_dc_internal_422(H264Context *h, DCTELEM *block,
1752 int cat, int n, const uint8_t *scantable,
1755 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1758 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 ) {
1759 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1762 /* cat: 0-> DC 16x16 n = 0
1763 * 1-> AC 16x16 n = luma4x4idx
1764 * 2-> Luma4x4 n = luma4x4idx
1765 * 3-> DC Chroma n = iCbCr
1766 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1767 * 5-> Luma8x8 n = 4 * luma8x8idx */
1769 /* Partially inline the CABAC residual decode: inline the coded block flag.
1770 * This has very little impact on binary size and improves performance
1771 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1772 * as well as because most blocks have zero CBFs. */
1774 static av_always_inline void decode_cabac_residual_dc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
1775 /* read coded block flag */
1776 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) {
1777 h->non_zero_count_cache[scan8[n]] = 0;
1780 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff );
1783 static av_always_inline void
1784 decode_cabac_residual_dc_422(H264Context *h, DCTELEM *block,
1785 int cat, int n, const uint8_t *scantable,
1788 /* read coded block flag */
1789 if (get_cabac(&h->cabac, &h->cabac_state[get_cabac_cbf_ctx(h, cat, n, max_coeff, 1)]) == 0) {
1790 h->non_zero_count_cache[scan8[n]] = 0;
1793 decode_cabac_residual_dc_internal_422(h, block, cat, n, scantable, max_coeff);
1796 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 ) {
1797 /* read coded block flag */
1798 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) {
1799 if( max_coeff == 64 ) {
1800 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1802 h->non_zero_count_cache[scan8[n]] = 0;
1806 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff );
1809 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 )
1811 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1812 const uint32_t *qmul;
1814 MpegEncContext * const s = &h->s;
1815 int qscale = p == 0 ? s->qscale : h->chroma_qp[p-1];
1816 if( IS_INTRA16x16( mb_type ) ) {
1817 AV_ZERO128(h->mb_luma_dc[p]+0);
1818 AV_ZERO128(h->mb_luma_dc[p]+8);
1819 AV_ZERO128(h->mb_luma_dc[p]+16);
1820 AV_ZERO128(h->mb_luma_dc[p]+24);
1821 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1824 qmul = h->dequant4_coeff[p][qscale];
1825 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1826 const int index = 16*p + i4x4;
1827 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1830 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1833 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1834 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1835 if( cbp & (1<<i8x8) ) {
1836 if( IS_8x8DCT(mb_type) ) {
1837 const int index = 16*p + 4*i8x8;
1838 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1839 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
1841 qmul = h->dequant4_coeff[cqm][qscale];
1842 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1843 const int index = 16*p + 4*i8x8 + i4x4;
1845 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1846 //STOP_TIMER("decode_residual")
1850 fill_rectangle(&h->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1857 * Decode a macroblock.
1858 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1860 int ff_h264_decode_mb_cabac(H264Context *h) {
1861 MpegEncContext * const s = &h->s;
1863 int mb_type, partition_count, cbp = 0;
1864 int dct8x8_allowed= h->pps.transform_8x8_mode;
1865 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
1866 const int pixel_shift = h->pixel_shift;
1868 mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
1870 tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y);
1871 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
1873 /* a skipped mb needs the aff flag from the following mb */
1874 if( FRAME_MBAFF && (s->mb_y&1)==1 && h->prev_mb_skipped )
1875 skip = h->next_mb_skipped;
1877 skip = decode_cabac_mb_skip( h, s->mb_x, s->mb_y );
1878 /* read skip flags */
1880 if( FRAME_MBAFF && (s->mb_y&1)==0 ){
1881 s->current_picture.f.mb_type[mb_xy] = MB_TYPE_SKIP;
1882 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 );
1883 if(!h->next_mb_skipped)
1884 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1889 h->cbp_table[mb_xy] = 0;
1890 h->chroma_pred_mode_table[mb_xy] = 0;
1891 h->last_qscale_diff = 0;
1898 if( (s->mb_y&1) == 0 )
1900 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1903 h->prev_mb_skipped = 0;
1905 fill_decode_neighbors(h, -(MB_FIELD));
1907 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
1909 av_assert2(h->slice_type_nos == AV_PICTURE_TYPE_B);
1911 if( !IS_DIRECT( h->left_type[LTOP]-1 ) )
1913 if( !IS_DIRECT( h->top_type-1 ) )
1916 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
1917 mb_type= 0; /* B_Direct_16x16 */
1918 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) {
1919 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */
1922 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3;
1923 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2;
1924 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1;
1925 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1927 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1928 }else if( bits == 13 ){
1929 mb_type= decode_cabac_intra_mb_type(h, 32, 0);
1930 goto decode_intra_mb;
1931 }else if( bits == 14 ){
1932 mb_type= 11; /* B_L1_L0_8x16 */
1933 }else if( bits == 15 ){
1934 mb_type= 22; /* B_8x8 */
1936 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1937 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1940 partition_count= b_mb_type_info[mb_type].partition_count;
1941 mb_type= b_mb_type_info[mb_type].type;
1942 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) {
1943 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
1945 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
1946 /* P_L0_D16x16, P_8x8 */
1947 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
1949 /* P_L0_D8x16, P_L0_D16x8 */
1950 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
1952 partition_count= p_mb_type_info[mb_type].partition_count;
1953 mb_type= p_mb_type_info[mb_type].type;
1955 mb_type= decode_cabac_intra_mb_type(h, 17, 0);
1956 goto decode_intra_mb;
1959 mb_type= decode_cabac_intra_mb_type(h, 3, 1);
1960 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
1962 av_assert2(h->slice_type_nos == AV_PICTURE_TYPE_I);
1964 partition_count = 0;
1965 cbp= i_mb_type_info[mb_type].cbp;
1966 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
1967 mb_type= i_mb_type_info[mb_type].type;
1970 mb_type |= MB_TYPE_INTERLACED;
1972 h->slice_table[ mb_xy ]= h->slice_num;
1974 if(IS_INTRA_PCM(mb_type)) {
1975 const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
1976 h->sps.bit_depth_luma >> 3;
1979 // We assume these blocks are very rare so we do not optimize it.
1980 // FIXME The two following lines get the bitstream position in the cabac
1981 // decode, I think it should be done by a function in cabac.h (or cabac.c).
1982 ptr= h->cabac.bytestream;
1983 if(h->cabac.low&0x1) ptr--;
1985 if(h->cabac.low&0x1FF) ptr--;
1988 // The pixels are stored in the same order as levels in h->mb array.
1989 if ((int) (h->cabac.bytestream_end - ptr) < mb_size)
1991 memcpy(h->mb, ptr, mb_size); ptr+=mb_size;
1993 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr);
1995 // All blocks are present
1996 h->cbp_table[mb_xy] = 0xf7ef;
1997 h->chroma_pred_mode_table[mb_xy] = 0;
1998 // In deblocking, the quantizer is 0
1999 s->current_picture.f.qscale_table[mb_xy] = 0;
2000 // All coeffs are present
2001 memset(h->non_zero_count[mb_xy], 16, 48);
2002 s->current_picture.f.mb_type[mb_xy] = mb_type;
2003 h->last_qscale_diff = 0;
2008 h->ref_count[0] <<= 1;
2009 h->ref_count[1] <<= 1;
2012 fill_decode_caches(h, mb_type);
2014 if( IS_INTRA( mb_type ) ) {
2016 if( IS_INTRA4x4( mb_type ) ) {
2017 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) {
2018 mb_type |= MB_TYPE_8x8DCT;
2019 for( i = 0; i < 16; i+=4 ) {
2020 int pred = pred_intra_mode( h, i );
2021 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2022 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 );
2025 for( i = 0; i < 16; i++ ) {
2026 int pred = pred_intra_mode( h, i );
2027 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2029 av_dlog(s->avctx, "i4x4 pred=%d mode=%d\n", pred,
2030 h->intra4x4_pred_mode_cache[scan8[i]]);
2033 write_back_intra_pred_mode(h);
2034 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
2036 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 );
2037 if( h->intra16x16_pred_mode < 0 ) return -1;
2040 h->chroma_pred_mode_table[mb_xy] =
2041 pred_mode = decode_cabac_mb_chroma_pre_mode( h );
2043 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 );
2044 if( pred_mode < 0 ) return -1;
2045 h->chroma_pred_mode= pred_mode;
2047 h->chroma_pred_mode= DC_128_PRED8x8;
2049 } else if( partition_count == 4 ) {
2050 int i, j, sub_partition_count[4], list, ref[2][4];
2052 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
2053 for( i = 0; i < 4; i++ ) {
2054 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h );
2055 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2056 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2058 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] |
2059 h->sub_mb_type[2] | h->sub_mb_type[3]) ) {
2060 ff_h264_pred_direct_motion(h, &mb_type);
2061 h->ref_cache[0][scan8[4]] =
2062 h->ref_cache[1][scan8[4]] =
2063 h->ref_cache[0][scan8[12]] =
2064 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2065 for( i = 0; i < 4; i++ )
2066 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 );
2069 for( i = 0; i < 4; i++ ) {
2070 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h );
2071 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2072 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2076 for( list = 0; list < h->list_count; list++ ) {
2077 for( i = 0; i < 4; i++ ) {
2078 if(IS_DIRECT(h->sub_mb_type[i])) continue;
2079 if(IS_DIR(h->sub_mb_type[i], 0, list)){
2080 if( h->ref_count[list] > 1 ){
2081 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
2082 if(ref[list][i] >= (unsigned)h->ref_count[list]){
2083 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]);
2091 h->ref_cache[list][ scan8[4*i]+1 ]=
2092 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
2097 dct8x8_allowed = get_dct8x8_allowed(h);
2099 for(list=0; list<h->list_count; list++){
2101 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ];
2102 if(IS_DIRECT(h->sub_mb_type[i])){
2103 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2107 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){
2108 const int sub_mb_type= h->sub_mb_type[i];
2109 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2110 for(j=0; j<sub_partition_count[i]; j++){
2113 const int index= 4*i + block_width*j;
2114 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
2115 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ];
2116 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
2117 DECODE_CABAC_MB_MVD( h, list, index)
2118 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2120 if(IS_SUB_8X8(sub_mb_type)){
2122 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2124 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2127 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2129 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2130 }else if(IS_SUB_8X4(sub_mb_type)){
2131 mv_cache[ 1 ][0]= mx;
2132 mv_cache[ 1 ][1]= my;
2134 mvd_cache[ 1 ][0]= mpx;
2135 mvd_cache[ 1 ][1]= mpy;
2136 }else if(IS_SUB_4X8(sub_mb_type)){
2137 mv_cache[ 8 ][0]= mx;
2138 mv_cache[ 8 ][1]= my;
2140 mvd_cache[ 8 ][0]= mpx;
2141 mvd_cache[ 8 ][1]= mpy;
2143 mv_cache[ 0 ][0]= mx;
2144 mv_cache[ 0 ][1]= my;
2146 mvd_cache[ 0 ][0]= mpx;
2147 mvd_cache[ 0 ][1]= mpy;
2150 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2151 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2155 } else if( IS_DIRECT(mb_type) ) {
2156 ff_h264_pred_direct_motion(h, &mb_type);
2157 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2158 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2159 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
2162 if(IS_16X16(mb_type)){
2163 for(list=0; list<h->list_count; list++){
2164 if(IS_DIR(mb_type, 0, list)){
2166 if(h->ref_count[list] > 1){
2167 ref= decode_cabac_mb_ref(h, list, 0);
2168 if(ref >= (unsigned)h->ref_count[list]){
2169 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2174 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2177 for(list=0; list<h->list_count; list++){
2178 if(IS_DIR(mb_type, 0, list)){
2180 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
2181 DECODE_CABAC_MB_MVD( h, list, 0)
2182 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2184 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2185 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2189 else if(IS_16X8(mb_type)){
2190 for(list=0; list<h->list_count; list++){
2192 if(IS_DIR(mb_type, i, list)){
2194 if(h->ref_count[list] > 1){
2195 ref= decode_cabac_mb_ref( h, list, 8*i );
2196 if(ref >= (unsigned)h->ref_count[list]){
2197 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2202 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2204 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2207 for(list=0; list<h->list_count; list++){
2209 if(IS_DIR(mb_type, i, list)){
2211 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2212 DECODE_CABAC_MB_MVD( h, list, 8*i)
2213 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2215 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2216 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2218 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2219 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2224 av_assert2(IS_8X16(mb_type));
2225 for(list=0; list<h->list_count; list++){
2227 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2229 if(h->ref_count[list] > 1){
2230 ref= decode_cabac_mb_ref( h, list, 4*i );
2231 if(ref >= (unsigned)h->ref_count[list]){
2232 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
2237 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2239 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2242 for(list=0; list<h->list_count; list++){
2244 if(IS_DIR(mb_type, i, list)){
2246 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2247 DECODE_CABAC_MB_MVD( h, list, 4*i)
2249 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2250 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2251 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2253 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2254 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2261 if( IS_INTER( mb_type ) ) {
2262 h->chroma_pred_mode_table[mb_xy] = 0;
2263 write_back_motion( h, mb_type );
2266 if( !IS_INTRA16x16( mb_type ) ) {
2267 cbp = decode_cabac_mb_cbp_luma( h );
2269 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4;
2272 h->cbp_table[mb_xy] = h->cbp = cbp;
2274 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2275 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] );
2278 /* It would be better to do this in fill_decode_caches, but we don't know
2279 * the transform mode of the current macroblock there. */
2280 if (CHROMA444 && IS_8x8DCT(mb_type)){
2282 uint8_t *nnz_cache = h->non_zero_count_cache;
2283 for (i = 0; i < 2; i++){
2284 if (h->left_type[LEFT(i)] && !IS_8x8DCT(h->left_type[LEFT(i)])){
2285 nnz_cache[3+8* 1 + 2*8*i]=
2286 nnz_cache[3+8* 2 + 2*8*i]=
2287 nnz_cache[3+8* 6 + 2*8*i]=
2288 nnz_cache[3+8* 7 + 2*8*i]=
2289 nnz_cache[3+8*11 + 2*8*i]=
2290 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2293 if (h->top_type && !IS_8x8DCT(h->top_type)){
2294 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2295 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2296 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2297 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2300 s->current_picture.f.mb_type[mb_xy] = mb_type;
2302 if( cbp || IS_INTRA16x16( mb_type ) ) {
2303 const uint8_t *scan, *scan8x8;
2304 const uint32_t *qmul;
2306 if(IS_INTERLACED(mb_type)){
2307 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2308 scan= s->qscale ? h->field_scan : h->field_scan_q0;
2310 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2311 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2314 // decode_cabac_mb_dqp
2315 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){
2318 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
2320 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
2323 if(val > 2*max_qp){ //prevent infinite loop
2324 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y);
2332 val= -((val + 1)>>1);
2333 h->last_qscale_diff = val;
2335 if(((unsigned)s->qscale) > max_qp){
2336 if(s->qscale<0) s->qscale+= max_qp+1;
2337 else s->qscale-= max_qp+1;
2339 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale);
2340 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale);
2342 h->last_qscale_diff=0;
2344 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2346 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2347 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2348 } else if (CHROMA422) {
2351 for (c = 0; c < 2; c++)
2352 decode_cabac_residual_dc_422(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3,
2353 CHROMA_DC_BLOCK_INDEX + c,
2354 chroma422_dc_scan, 8);
2359 for( c = 0; c < 2; c++ ) {
2360 DCTELEM *mb = h->mb + (16*(16 + 16*c) << pixel_shift);
2361 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2362 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2363 for (i = 0; i < 4; i++) {
2364 const int index = 16 + 16 * c + 8*i8x8 + i;
2365 decode_cabac_residual_nondc(h, mb, 4, index, scan + 1, qmul, 15);
2366 mb += 16<<pixel_shift;
2371 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2372 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2374 } else /* yuv420 */ {
2377 for (c = 0; c < 2; c++)
2378 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
2383 for( c = 0; c < 2; c++ ) {
2384 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2385 for( i = 0; i < 4; i++ ) {
2386 const int index = 16 + 16 * c + i;
2387 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2391 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2392 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2396 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2397 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2398 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2399 h->last_qscale_diff = 0;
2402 s->current_picture.f.qscale_table[mb_xy] = s->qscale;
2403 write_back_non_zero_count(h);
2406 h->ref_count[0] >>= 1;
2407 h->ref_count[1] >>= 1;