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, int16_t *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, int16_t *block,
1749 const uint8_t *scantable,
1752 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1755 static void decode_cabac_residual_dc_internal_422(H264Context *h, int16_t *block,
1756 int cat, int n, const uint8_t *scantable,
1759 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1762 static void decode_cabac_residual_nondc_internal(H264Context *h, int16_t *block,
1764 const uint8_t *scantable,
1765 const uint32_t *qmul,
1768 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1771 /* cat: 0-> DC 16x16 n = 0
1772 * 1-> AC 16x16 n = luma4x4idx
1773 * 2-> Luma4x4 n = luma4x4idx
1774 * 3-> DC Chroma n = iCbCr
1775 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1776 * 5-> Luma8x8 n = 4 * luma8x8idx */
1778 /* Partially inline the CABAC residual decode: inline the coded block flag.
1779 * This has very little impact on binary size and improves performance
1780 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1781 * as well as because most blocks have zero CBFs. */
1783 static av_always_inline void decode_cabac_residual_dc(H264Context *h,
1786 const uint8_t *scantable,
1789 /* read coded block flag */
1790 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) {
1791 h->non_zero_count_cache[scan8[n]] = 0;
1794 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff );
1797 static av_always_inline void
1798 decode_cabac_residual_dc_422(H264Context *h, int16_t *block,
1799 int cat, int n, const uint8_t *scantable,
1802 /* read coded block flag */
1803 if (get_cabac(&h->cabac, &h->cabac_state[get_cabac_cbf_ctx(h, cat, n, max_coeff, 1)]) == 0) {
1804 h->non_zero_count_cache[scan8[n]] = 0;
1807 decode_cabac_residual_dc_internal_422(h, block, cat, n, scantable, max_coeff);
1810 static av_always_inline void decode_cabac_residual_nondc(H264Context *h,
1813 const uint8_t *scantable,
1814 const uint32_t *qmul,
1817 /* read coded block flag */
1818 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) {
1819 if( max_coeff == 64 ) {
1820 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1822 h->non_zero_count_cache[scan8[n]] = 0;
1826 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff );
1829 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 )
1831 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1832 const uint32_t *qmul;
1834 MpegEncContext * const s = &h->s;
1835 int qscale = p == 0 ? s->qscale : h->chroma_qp[p-1];
1836 if( IS_INTRA16x16( mb_type ) ) {
1837 AV_ZERO128(h->mb_luma_dc[p]+0);
1838 AV_ZERO128(h->mb_luma_dc[p]+8);
1839 AV_ZERO128(h->mb_luma_dc[p]+16);
1840 AV_ZERO128(h->mb_luma_dc[p]+24);
1841 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1844 qmul = h->dequant4_coeff[p][qscale];
1845 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1846 const int index = 16*p + i4x4;
1847 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1850 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1853 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1854 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1855 if( cbp & (1<<i8x8) ) {
1856 if( IS_8x8DCT(mb_type) ) {
1857 const int index = 16*p + 4*i8x8;
1858 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1859 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
1861 qmul = h->dequant4_coeff[cqm][qscale];
1862 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1863 const int index = 16*p + 4*i8x8 + i4x4;
1865 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1866 //STOP_TIMER("decode_residual")
1870 fill_rectangle(&h->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1877 * Decode a macroblock.
1878 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1880 int ff_h264_decode_mb_cabac(H264Context *h) {
1881 MpegEncContext * const s = &h->s;
1883 int mb_type, partition_count, cbp = 0;
1884 int dct8x8_allowed= h->pps.transform_8x8_mode;
1885 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
1886 const int pixel_shift = h->pixel_shift;
1887 unsigned local_ref_count[2];
1889 mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
1891 tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y);
1892 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
1894 /* a skipped mb needs the aff flag from the following mb */
1895 if( FRAME_MBAFF && (s->mb_y&1)==1 && h->prev_mb_skipped )
1896 skip = h->next_mb_skipped;
1898 skip = decode_cabac_mb_skip( h, s->mb_x, s->mb_y );
1899 /* read skip flags */
1901 if( FRAME_MBAFF && (s->mb_y&1)==0 ){
1902 s->current_picture.f.mb_type[mb_xy] = MB_TYPE_SKIP;
1903 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 );
1904 if(!h->next_mb_skipped)
1905 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1910 h->cbp_table[mb_xy] = 0;
1911 h->chroma_pred_mode_table[mb_xy] = 0;
1912 h->last_qscale_diff = 0;
1919 if( (s->mb_y&1) == 0 )
1921 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1924 h->prev_mb_skipped = 0;
1926 fill_decode_neighbors(h, -(MB_FIELD));
1928 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
1930 av_assert2(h->slice_type_nos == AV_PICTURE_TYPE_B);
1932 if( !IS_DIRECT( h->left_type[LTOP]-1 ) )
1934 if( !IS_DIRECT( h->top_type-1 ) )
1937 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
1938 mb_type= 0; /* B_Direct_16x16 */
1939 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) {
1940 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */
1943 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3;
1944 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2;
1945 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1;
1946 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1948 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1949 }else if( bits == 13 ){
1950 mb_type= decode_cabac_intra_mb_type(h, 32, 0);
1951 goto decode_intra_mb;
1952 }else if( bits == 14 ){
1953 mb_type= 11; /* B_L1_L0_8x16 */
1954 }else if( bits == 15 ){
1955 mb_type= 22; /* B_8x8 */
1957 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1958 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1961 partition_count= b_mb_type_info[mb_type].partition_count;
1962 mb_type= b_mb_type_info[mb_type].type;
1963 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) {
1964 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
1966 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
1967 /* P_L0_D16x16, P_8x8 */
1968 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
1970 /* P_L0_D8x16, P_L0_D16x8 */
1971 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
1973 partition_count= p_mb_type_info[mb_type].partition_count;
1974 mb_type= p_mb_type_info[mb_type].type;
1976 mb_type= decode_cabac_intra_mb_type(h, 17, 0);
1977 goto decode_intra_mb;
1980 mb_type= decode_cabac_intra_mb_type(h, 3, 1);
1981 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
1983 av_assert2(h->slice_type_nos == AV_PICTURE_TYPE_I);
1985 partition_count = 0;
1986 cbp= i_mb_type_info[mb_type].cbp;
1987 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
1988 mb_type= i_mb_type_info[mb_type].type;
1991 mb_type |= MB_TYPE_INTERLACED;
1993 h->slice_table[ mb_xy ]= h->slice_num;
1995 if(IS_INTRA_PCM(mb_type)) {
1996 const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
1997 h->sps.bit_depth_luma >> 3;
2000 // We assume these blocks are very rare so we do not optimize it.
2001 // FIXME The two following lines get the bitstream position in the cabac
2002 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2003 ptr= h->cabac.bytestream;
2004 if(h->cabac.low&0x1) ptr--;
2006 if(h->cabac.low&0x1FF) ptr--;
2009 // The pixels are stored in the same order as levels in h->mb array.
2010 if ((int) (h->cabac.bytestream_end - ptr) < mb_size)
2012 memcpy(h->mb, ptr, mb_size); ptr+=mb_size;
2014 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr);
2016 // All blocks are present
2017 h->cbp_table[mb_xy] = 0xf7ef;
2018 h->chroma_pred_mode_table[mb_xy] = 0;
2019 // In deblocking, the quantizer is 0
2020 s->current_picture.f.qscale_table[mb_xy] = 0;
2021 // All coeffs are present
2022 memset(h->non_zero_count[mb_xy], 16, 48);
2023 s->current_picture.f.mb_type[mb_xy] = mb_type;
2024 h->last_qscale_diff = 0;
2028 local_ref_count[0] = h->ref_count[0] << MB_MBAFF;
2029 local_ref_count[1] = h->ref_count[1] << MB_MBAFF;
2031 fill_decode_caches(h, mb_type);
2033 if( IS_INTRA( mb_type ) ) {
2035 if( IS_INTRA4x4( mb_type ) ) {
2036 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) {
2037 mb_type |= MB_TYPE_8x8DCT;
2038 for( i = 0; i < 16; i+=4 ) {
2039 int pred = pred_intra_mode( h, i );
2040 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2041 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 );
2044 for( i = 0; i < 16; i++ ) {
2045 int pred = pred_intra_mode( h, i );
2046 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2048 av_dlog(s->avctx, "i4x4 pred=%d mode=%d\n", pred,
2049 h->intra4x4_pred_mode_cache[scan8[i]]);
2052 write_back_intra_pred_mode(h);
2053 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
2055 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 );
2056 if( h->intra16x16_pred_mode < 0 ) return -1;
2059 h->chroma_pred_mode_table[mb_xy] =
2060 pred_mode = decode_cabac_mb_chroma_pre_mode( h );
2062 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 );
2063 if( pred_mode < 0 ) return -1;
2064 h->chroma_pred_mode= pred_mode;
2066 h->chroma_pred_mode= DC_128_PRED8x8;
2068 } else if( partition_count == 4 ) {
2069 int i, j, sub_partition_count[4], list, ref[2][4];
2071 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
2072 for( i = 0; i < 4; i++ ) {
2073 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h );
2074 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2075 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2077 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] |
2078 h->sub_mb_type[2] | h->sub_mb_type[3]) ) {
2079 ff_h264_pred_direct_motion(h, &mb_type);
2080 h->ref_cache[0][scan8[4]] =
2081 h->ref_cache[1][scan8[4]] =
2082 h->ref_cache[0][scan8[12]] =
2083 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2084 for( i = 0; i < 4; i++ )
2085 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 );
2088 for( i = 0; i < 4; i++ ) {
2089 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h );
2090 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2091 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2095 for( list = 0; list < h->list_count; list++ ) {
2096 for( i = 0; i < 4; i++ ) {
2097 if(IS_DIRECT(h->sub_mb_type[i])) continue;
2098 if(IS_DIR(h->sub_mb_type[i], 0, list)){
2099 if (local_ref_count[list] > 1) {
2100 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
2101 if (ref[list][i] >= (unsigned)local_ref_count[list]) {
2102 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], local_ref_count[list]);
2110 h->ref_cache[list][ scan8[4*i]+1 ]=
2111 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
2116 dct8x8_allowed = get_dct8x8_allowed(h);
2118 for(list=0; list<h->list_count; list++){
2120 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ];
2121 if(IS_DIRECT(h->sub_mb_type[i])){
2122 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2126 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){
2127 const int sub_mb_type= h->sub_mb_type[i];
2128 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2129 for(j=0; j<sub_partition_count[i]; j++){
2132 const int index= 4*i + block_width*j;
2133 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
2134 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ];
2135 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
2136 DECODE_CABAC_MB_MVD( h, list, index)
2137 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2139 if(IS_SUB_8X8(sub_mb_type)){
2141 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2143 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2146 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2148 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2149 }else if(IS_SUB_8X4(sub_mb_type)){
2150 mv_cache[ 1 ][0]= mx;
2151 mv_cache[ 1 ][1]= my;
2153 mvd_cache[ 1 ][0]= mpx;
2154 mvd_cache[ 1 ][1]= mpy;
2155 }else if(IS_SUB_4X8(sub_mb_type)){
2156 mv_cache[ 8 ][0]= mx;
2157 mv_cache[ 8 ][1]= my;
2159 mvd_cache[ 8 ][0]= mpx;
2160 mvd_cache[ 8 ][1]= mpy;
2162 mv_cache[ 0 ][0]= mx;
2163 mv_cache[ 0 ][1]= my;
2165 mvd_cache[ 0 ][0]= mpx;
2166 mvd_cache[ 0 ][1]= mpy;
2169 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2170 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2174 } else if( IS_DIRECT(mb_type) ) {
2175 ff_h264_pred_direct_motion(h, &mb_type);
2176 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2177 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2178 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
2181 if(IS_16X16(mb_type)){
2182 for(list=0; list<h->list_count; list++){
2183 if(IS_DIR(mb_type, 0, list)){
2185 if (local_ref_count[list] > 1) {
2186 ref= decode_cabac_mb_ref(h, list, 0);
2187 if (ref >= (unsigned)local_ref_count[list]) {
2188 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2193 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2196 for(list=0; list<h->list_count; list++){
2197 if(IS_DIR(mb_type, 0, list)){
2199 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
2200 DECODE_CABAC_MB_MVD( h, list, 0)
2201 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2203 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2204 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2208 else if(IS_16X8(mb_type)){
2209 for(list=0; list<h->list_count; list++){
2211 if(IS_DIR(mb_type, i, list)){
2213 if (local_ref_count[list] > 1) {
2214 ref= decode_cabac_mb_ref( h, list, 8*i );
2215 if (ref >= (unsigned)local_ref_count[list]) {
2216 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2221 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2223 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2226 for(list=0; list<h->list_count; list++){
2228 if(IS_DIR(mb_type, i, list)){
2230 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2231 DECODE_CABAC_MB_MVD( h, list, 8*i)
2232 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2234 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2235 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2237 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2238 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2243 av_assert2(IS_8X16(mb_type));
2244 for(list=0; list<h->list_count; list++){
2246 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2248 if (local_ref_count[list] > 1) {
2249 ref= decode_cabac_mb_ref( h, list, 4*i );
2250 if (ref >= (unsigned)local_ref_count[list]) {
2251 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2256 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2258 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2261 for(list=0; list<h->list_count; list++){
2263 if(IS_DIR(mb_type, i, list)){
2265 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2266 DECODE_CABAC_MB_MVD( h, list, 4*i)
2268 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
2269 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2270 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2272 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2273 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2280 if( IS_INTER( mb_type ) ) {
2281 h->chroma_pred_mode_table[mb_xy] = 0;
2282 write_back_motion( h, mb_type );
2285 if( !IS_INTRA16x16( mb_type ) ) {
2286 cbp = decode_cabac_mb_cbp_luma( h );
2288 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4;
2290 if (!decode_chroma && cbp>15) {
2291 av_log(s->avctx, AV_LOG_ERROR, "gray chroma\n");
2292 return AVERROR_INVALIDDATA;
2296 h->cbp_table[mb_xy] = h->cbp = cbp;
2298 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2299 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] );
2302 /* It would be better to do this in fill_decode_caches, but we don't know
2303 * the transform mode of the current macroblock there. */
2304 if (CHROMA444 && IS_8x8DCT(mb_type)){
2306 uint8_t *nnz_cache = h->non_zero_count_cache;
2307 for (i = 0; i < 2; i++){
2308 if (h->left_type[LEFT(i)] && !IS_8x8DCT(h->left_type[LEFT(i)])){
2309 nnz_cache[3+8* 1 + 2*8*i]=
2310 nnz_cache[3+8* 2 + 2*8*i]=
2311 nnz_cache[3+8* 6 + 2*8*i]=
2312 nnz_cache[3+8* 7 + 2*8*i]=
2313 nnz_cache[3+8*11 + 2*8*i]=
2314 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2317 if (h->top_type && !IS_8x8DCT(h->top_type)){
2318 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2319 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2320 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2321 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2324 s->current_picture.f.mb_type[mb_xy] = mb_type;
2326 if( cbp || IS_INTRA16x16( mb_type ) ) {
2327 const uint8_t *scan, *scan8x8;
2328 const uint32_t *qmul;
2330 if(IS_INTERLACED(mb_type)){
2331 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2332 scan= s->qscale ? h->field_scan : h->field_scan_q0;
2334 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2335 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2338 // decode_cabac_mb_dqp
2339 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){
2342 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
2344 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
2347 if(val > 2*max_qp){ //prevent infinite loop
2348 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y);
2356 val= -((val + 1)>>1);
2357 h->last_qscale_diff = val;
2359 if(((unsigned)s->qscale) > max_qp){
2360 if(s->qscale<0) s->qscale+= max_qp+1;
2361 else s->qscale-= max_qp+1;
2363 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale);
2364 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale);
2366 h->last_qscale_diff=0;
2368 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2370 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2371 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2372 } else if (CHROMA422) {
2375 for (c = 0; c < 2; c++)
2376 decode_cabac_residual_dc_422(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3,
2377 CHROMA_DC_BLOCK_INDEX + c,
2378 chroma422_dc_scan, 8);
2383 for( c = 0; c < 2; c++ ) {
2384 int16_t *mb = h->mb + (16*(16 + 16*c) << pixel_shift);
2385 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2386 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2387 for (i = 0; i < 4; i++) {
2388 const int index = 16 + 16 * c + 8*i8x8 + i;
2389 decode_cabac_residual_nondc(h, mb, 4, index, scan + 1, qmul, 15);
2390 mb += 16<<pixel_shift;
2395 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2396 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2398 } else /* yuv420 */ {
2401 for (c = 0; c < 2; c++)
2402 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
2407 for( c = 0; c < 2; c++ ) {
2408 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2409 for( i = 0; i < 4; i++ ) {
2410 const int index = 16 + 16 * c + i;
2411 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2415 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2416 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2420 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2421 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2422 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2423 h->last_qscale_diff = 0;
2426 s->current_picture.f.qscale_table[mb_xy] = s->qscale;
2427 write_back_non_zero_count(h);