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"
38 #include "h264_mvpred.h"
40 #include "libavutil/avassert.h"
43 #include "x86/h264_i386.h"
46 /* Cabac pre state table */
48 static const int8_t cabac_context_init_I[1024][2] =
51 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
52 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
53 { -6, 53 }, { -1, 54 }, { 7, 51 },
55 /* 11 - 23 unsused for I */
56 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
57 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
58 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
62 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
63 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
64 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
65 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
68 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
69 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
70 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
74 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
78 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
79 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
80 { 13, 41 }, { 3, 62 },
83 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
84 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
85 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
86 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
87 { -12, 115 },{ -16, 122 },
90 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
91 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
92 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
93 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
97 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
98 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
99 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
100 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
101 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
102 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
103 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
104 { 14, 62 }, { -13, 108 },{ -15, 100 },
107 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
108 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
109 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
110 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
111 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
112 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
113 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
114 { 0, 62 }, { 12, 72 },
117 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
118 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
119 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
120 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
121 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
122 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
123 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
124 { 0, 89 }, { 26, -19 }, { 22, -17 },
127 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
128 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
129 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
130 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
131 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
132 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
133 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
134 { 12, 68 }, { 2, 97 },
137 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
138 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
139 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
140 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
141 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
142 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
146 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
147 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
148 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
149 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
150 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
151 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
153 /* 276 a bit special (not used, bypass is used instead) */
157 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
158 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
159 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
160 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
161 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
162 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
163 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
164 { 9, 64 }, { -12, 104 },{ -11, 97 },
167 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
168 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
169 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
170 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
171 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
172 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
173 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
174 { 5, 64 }, { 12, 70 },
177 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
178 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
179 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
180 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
181 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
182 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
183 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
184 { -12, 109 },{ 36, -35 }, { 36, -34 },
187 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
188 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
189 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
190 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
191 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
192 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
193 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
194 { 29, 39 }, { 19, 66 },
197 { 31, 21 }, { 31, 31 }, { 25, 50 },
198 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
199 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
200 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
201 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
202 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
203 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
204 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
205 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
206 { 0, 68 }, { -9, 92 },
209 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
210 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
211 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
212 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
213 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
214 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
217 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
218 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
219 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
220 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
221 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
222 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
223 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
224 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
225 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
226 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
227 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
228 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
229 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
230 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
231 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
232 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
233 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
234 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
235 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
236 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
237 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
238 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
239 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
240 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
241 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
242 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
243 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
244 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
245 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
246 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
247 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
248 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
249 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
250 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
251 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
252 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
253 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
254 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
255 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
256 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
257 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
258 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
259 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
260 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
261 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
262 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
263 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
264 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
265 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
266 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
267 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
268 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
269 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
270 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 },
271 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 },
272 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 },
273 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 },
274 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 },
275 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 },
276 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 },
277 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
278 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
279 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
280 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
281 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 },
282 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 },
283 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 },
284 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 },
285 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 },
286 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 },
287 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 },
288 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 },
289 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 },
290 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 },
291 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 },
292 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 },
293 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 },
294 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 },
295 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 },
296 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
297 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
298 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
299 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
300 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
301 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
302 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
303 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
304 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
305 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
306 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
307 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
308 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
309 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
310 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
311 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
312 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
313 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
314 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
315 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
316 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
317 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
318 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
319 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
320 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
321 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
322 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
323 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
324 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
325 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
326 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
327 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
328 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
329 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
330 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
331 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
332 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
333 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
334 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
335 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
336 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
337 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
338 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
339 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
340 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
341 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
342 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
343 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
344 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
345 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
346 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 },
347 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 },
348 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 },
349 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 },
350 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 },
351 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 },
352 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 },
353 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 },
354 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 },
355 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
356 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
357 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }
360 static const int8_t cabac_context_init_PB[3][1024][2] =
362 /* i_cabac_init_idc == 0 */
365 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
366 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
367 { -6, 53 }, { -1, 54 }, { 7, 51 },
370 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
371 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
372 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
376 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
377 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
378 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
379 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
382 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
383 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
384 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
385 { -3, 81 }, { 0, 88 },
388 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
389 { -7, 72 }, { 1, 58 },
392 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
393 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
394 { 13, 41 }, { 3, 62 },
397 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
398 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
399 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
400 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
401 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
402 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
403 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
404 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
405 { 0, 68 }, { -4, 69 }, { -8, 88 },
408 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
409 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
410 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
411 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
412 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
413 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
414 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
415 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
416 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
417 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
418 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
419 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
420 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
421 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
422 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
426 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
427 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
428 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
429 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
430 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
431 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
432 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
433 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
434 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
435 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
436 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
437 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
438 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
439 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
440 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
444 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
445 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
446 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
447 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
448 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
449 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
450 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
451 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
452 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
453 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
454 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
455 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
458 /* 276 a bit special (not used, bypass is used instead) */
462 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
463 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
464 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
465 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
466 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
467 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
468 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
469 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
470 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
471 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
472 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
473 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
474 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
475 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
476 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
480 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
481 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
482 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
483 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
484 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
485 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
486 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
487 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
488 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
489 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
490 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
491 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
492 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
493 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
494 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
498 { 12, 40 }, { 11, 51 }, { 14, 59 },
499 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
500 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
501 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
502 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
503 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
504 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
505 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
506 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
507 { -8, 66 }, { -8, 76 },
510 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
511 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
512 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
513 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
514 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
515 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
518 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
519 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
520 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
521 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
522 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
523 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
524 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
525 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
526 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
527 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
528 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
529 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
530 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
531 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
532 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
533 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
534 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
535 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
536 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
537 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
538 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
539 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
540 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
541 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
542 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
543 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
544 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
545 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
546 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
547 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
548 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
549 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
550 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
551 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
552 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
553 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
554 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
555 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
556 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
557 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
558 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
559 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
560 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
561 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
562 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
563 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
564 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
565 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
566 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
567 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
568 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
569 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
570 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
571 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 },
572 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 },
573 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 },
574 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 },
575 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 },
576 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 },
577 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 },
578 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
579 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
580 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
581 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
582 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 },
583 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 },
584 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 },
585 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 },
586 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 },
587 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 },
588 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 },
589 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 },
590 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 },
591 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 },
592 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 },
593 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 },
594 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 },
595 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 },
596 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 },
597 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
598 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
599 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
600 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
601 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
602 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
603 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
604 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
605 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
606 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
607 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
608 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
609 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
610 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
611 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
612 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
613 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
614 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
615 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
616 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
617 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
618 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
619 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
620 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
621 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
622 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
623 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
624 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
625 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
626 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
627 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
628 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
629 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
630 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
631 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
632 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
633 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
634 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
635 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
636 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
637 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
638 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
639 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
640 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
641 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
642 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
643 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
644 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
645 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
646 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
647 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
648 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 },
649 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 },
650 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 },
651 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 },
652 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 },
653 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 },
654 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 },
655 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 },
656 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
657 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
658 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }
661 /* i_cabac_init_idc == 1 */
664 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
665 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
666 { -6, 53 }, { -1, 54 }, { 7, 51 },
669 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
670 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
671 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
675 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
676 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
677 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
678 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
681 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
682 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
683 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
684 { -7, 86 },{ -5, 95 },
687 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
688 { -5, 72 },{ 0, 61 },
691 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
692 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
693 { 13, 41 }, { 3, 62 },
696 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
697 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
698 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
699 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
700 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
701 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
702 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
703 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
704 { 0, 68 }, { -7, 74 }, { -9, 88 },
707 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
708 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
709 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
710 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
711 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
712 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
713 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
714 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
715 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
716 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
717 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
718 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
719 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
720 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
721 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
725 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
726 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
727 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
728 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
729 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
730 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
731 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
732 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
733 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
734 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
735 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
736 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
737 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
738 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
739 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
743 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
744 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
745 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
746 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
747 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
748 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
749 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
750 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
751 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
752 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
753 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
754 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
757 /* 276 a bit special (not used, bypass is used instead) */
761 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
762 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
763 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
764 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
765 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
766 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
767 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
768 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
769 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
770 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
771 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
772 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
773 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
774 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
775 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
779 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
780 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
781 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
782 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
783 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
784 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
785 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
786 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
787 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
788 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
789 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
790 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
791 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
792 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
793 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
797 { 25, 32 }, { 21, 49 }, { 21, 54 },
798 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
799 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
800 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
801 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
802 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
803 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
804 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
805 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
806 { -4, 67 }, { -7, 82 },
809 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
810 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
811 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
812 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
813 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
814 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
817 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
818 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
819 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
820 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
821 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
822 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
823 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
824 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
825 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
826 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
827 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
828 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
829 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
830 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
831 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
832 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
833 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
834 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
835 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
836 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
837 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
838 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
839 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
840 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
841 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
842 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
843 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
844 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
845 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
846 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
847 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
848 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
849 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
850 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
851 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
852 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
853 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
854 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
855 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
856 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
857 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
858 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
859 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
860 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
861 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
862 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
863 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
864 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
865 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
866 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
867 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
868 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
869 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
870 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 },
871 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 },
872 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 },
873 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 },
874 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 },
875 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 },
876 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 },
877 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
878 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
879 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
880 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
881 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 },
882 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 },
883 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 },
884 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 },
885 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 },
886 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 },
887 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 },
888 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 },
889 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 },
890 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 },
891 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 },
892 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 },
893 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 },
894 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 },
895 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 },
896 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
897 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
898 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
899 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
900 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
901 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
902 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
903 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
904 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
905 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
906 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
907 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
908 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
909 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
910 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
911 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
912 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
913 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
914 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
915 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
916 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
917 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
918 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
919 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
920 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
921 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
922 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
923 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
924 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
925 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
926 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
927 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
928 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
929 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
930 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
931 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
932 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
933 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
934 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
935 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
936 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
937 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
938 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
939 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
940 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
941 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
942 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
943 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
944 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
945 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
946 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
947 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 },
948 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 },
949 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 },
950 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 },
951 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 },
952 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 },
953 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 },
954 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 },
955 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
956 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
957 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }
960 /* i_cabac_init_idc == 2 */
963 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
964 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
965 { -6, 53 }, { -1, 54 }, { 7, 51 },
968 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
969 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
970 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
974 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
975 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
976 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
977 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
980 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
981 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
982 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
983 { -3, 90 },{ -1, 101 },
986 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
987 { -7, 50 },{ 1, 60 },
990 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
991 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
992 { 13, 41 }, { 3, 62 },
995 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
996 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
997 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
998 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
999 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1000 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1001 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1002 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1003 { 3, 68 }, { -8, 71 }, { -13, 98 },
1006 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1007 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1008 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1009 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1010 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1011 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1012 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1013 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1014 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1015 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1016 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1017 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1018 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1019 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1020 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1024 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1025 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1026 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1027 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1028 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1029 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1030 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1031 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1032 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1033 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1034 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1035 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1036 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1037 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1038 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1042 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1043 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1044 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1045 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1046 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1047 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1048 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1049 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1050 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1051 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1052 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1053 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1056 /* 276 a bit special (not used, bypass is used instead) */
1060 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1061 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1062 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1063 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1064 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1065 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1066 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1067 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1068 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1069 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1070 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1071 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1072 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1073 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1074 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1078 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1079 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1080 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1081 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1082 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1083 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1084 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1085 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1086 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1087 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1088 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1089 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1090 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1091 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1092 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1096 { 21, 33 }, { 19, 50 }, { 17, 61 },
1097 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1098 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1099 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1100 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1101 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1102 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1103 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1104 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1105 { -6, 68 }, { -10, 79 },
1108 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1109 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1110 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1111 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1112 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1113 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1116 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1117 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1118 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1119 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1120 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1121 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1122 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1123 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1124 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1125 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1126 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1127 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1128 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1129 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1130 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1131 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1132 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1133 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1134 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1135 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1136 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1137 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1138 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1139 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1140 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1141 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1142 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1143 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1144 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1145 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1146 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1147 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1148 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1149 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1150 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1151 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1152 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1153 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1154 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1155 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1156 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1157 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1158 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1159 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1160 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1161 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1162 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1163 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1164 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1165 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1166 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1167 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1168 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1169 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 },
1170 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 },
1171 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 },
1172 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 },
1173 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 },
1174 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 },
1175 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 },
1176 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1177 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1178 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1179 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1180 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 },
1181 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 },
1182 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 },
1183 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 },
1184 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 },
1185 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 },
1186 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 },
1187 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 },
1188 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 },
1189 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 },
1190 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 },
1191 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 },
1192 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 },
1193 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 },
1194 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 },
1195 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1196 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1197 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1198 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1199 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1200 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1201 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1202 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1203 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1204 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1205 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1206 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1207 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1208 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1209 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1210 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1211 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1212 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1213 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1214 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1215 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1216 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1217 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1218 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1219 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1220 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1221 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1222 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1223 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1224 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1225 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1226 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1227 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1228 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1229 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1230 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1231 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1232 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1233 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1234 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1235 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1236 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1237 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1238 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1239 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1240 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1241 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1242 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1243 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1244 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1245 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1246 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 },
1247 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 },
1248 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 },
1249 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 },
1250 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 },
1251 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 },
1252 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 },
1253 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 },
1254 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1255 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1256 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }
1260 void ff_h264_init_cabac_states(H264Context *h) {
1262 const int8_t (*tab)[2];
1263 const int slice_qp = av_clip(h->qscale - 6*(h->sps.bit_depth_luma-8), 0, 51);
1265 if( h->slice_type_nos == AV_PICTURE_TYPE_I ) tab = cabac_context_init_I;
1266 else tab = cabac_context_init_PB[h->cabac_init_idc];
1268 /* calculate pre-state */
1269 for( i= 0; i < 1024; i++ ) {
1270 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1276 h->cabac_state[i] = pre;
1280 static int decode_cabac_field_decoding_flag(H264Context *h) {
1281 const long mbb_xy = h->mb_xy - 2L*h->mb_stride;
1283 unsigned long ctx = 0;
1285 ctx += h->mb_field_decoding_flag & !!h->mb_x; //for FMO:(s->current_picture.mb_type[mba_xy] >> 7) & (h->slice_table[mba_xy] == h->slice_num);
1286 ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == h->slice_num);
1288 return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] );
1291 static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) {
1292 uint8_t *state= &h->cabac_state[ctx_base];
1297 if( h->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1299 if( h->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1301 if( get_cabac_noinline( &h->cabac, &state[ctx] ) == 0 )
1302 return 0; /* I4x4 */
1305 if( get_cabac_noinline( &h->cabac, state ) == 0 )
1306 return 0; /* I4x4 */
1309 if( get_cabac_terminate( &h->cabac ) )
1310 return 25; /* PCM */
1312 mb_type = 1; /* I16x16 */
1313 mb_type += 12 * get_cabac_noinline( &h->cabac, &state[1] ); /* cbp_luma != 0 */
1314 if( get_cabac_noinline( &h->cabac, &state[2] ) ) /* cbp_chroma */
1315 mb_type += 4 + 4 * get_cabac_noinline( &h->cabac, &state[2+intra_slice] );
1316 mb_type += 2 * get_cabac_noinline( &h->cabac, &state[3+intra_slice] );
1317 mb_type += 1 * get_cabac_noinline( &h->cabac, &state[3+2*intra_slice] );
1321 static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) {
1325 if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1326 int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1329 && h->slice_table[mba_xy] == h->slice_num
1330 && MB_FIELD(h) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1331 mba_xy += h->mb_stride;
1333 mbb_xy = mb_xy - h->mb_stride;
1335 && h->slice_table[mbb_xy] == h->slice_num
1336 && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
1337 mbb_xy -= h->mb_stride;
1339 mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1341 int mb_xy = h->mb_xy;
1343 mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1346 if( h->slice_table[mba_xy] == h->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1348 if( h->slice_table[mbb_xy] == h->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1351 if( h->slice_type_nos == AV_PICTURE_TYPE_B )
1353 return get_cabac_noinline( &h->cabac, &h->cabac_state[11+ctx] );
1356 static int decode_cabac_mb_intra4x4_pred_mode( H264Context *h, int pred_mode ) {
1359 if( get_cabac( &h->cabac, &h->cabac_state[68] ) )
1362 mode += 1 * get_cabac( &h->cabac, &h->cabac_state[69] );
1363 mode += 2 * get_cabac( &h->cabac, &h->cabac_state[69] );
1364 mode += 4 * get_cabac( &h->cabac, &h->cabac_state[69] );
1366 return mode + ( mode >= pred_mode );
1369 static int decode_cabac_mb_chroma_pre_mode( H264Context *h) {
1370 const int mba_xy = h->left_mb_xy[0];
1371 const int mbb_xy = h->top_mb_xy;
1375 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1376 if( h->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0 )
1379 if( h->top_type && h->chroma_pred_mode_table[mbb_xy] != 0 )
1382 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+ctx] ) == 0 )
1385 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 )
1387 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 )
1393 static int decode_cabac_mb_cbp_luma( H264Context *h) {
1394 int cbp_b, cbp_a, ctx, cbp = 0;
1396 cbp_a = h->left_cbp;
1399 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1400 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]);
1401 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1402 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 1;
1403 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1404 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 2;
1405 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1406 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 3;
1409 static int decode_cabac_mb_cbp_chroma( H264Context *h) {
1413 cbp_a = (h->left_cbp>>4)&0x03;
1414 cbp_b = (h-> top_cbp>>4)&0x03;
1417 if( cbp_a > 0 ) ctx++;
1418 if( cbp_b > 0 ) ctx += 2;
1419 if( get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] ) == 0 )
1423 if( cbp_a == 2 ) ctx++;
1424 if( cbp_b == 2 ) ctx += 2;
1425 return 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] );
1428 static int decode_cabac_p_mb_sub_type( H264Context *h ) {
1429 if( get_cabac( &h->cabac, &h->cabac_state[21] ) )
1431 if( !get_cabac( &h->cabac, &h->cabac_state[22] ) )
1433 if( get_cabac( &h->cabac, &h->cabac_state[23] ) )
1437 static int decode_cabac_b_mb_sub_type( H264Context *h ) {
1439 if( !get_cabac( &h->cabac, &h->cabac_state[36] ) )
1440 return 0; /* B_Direct_8x8 */
1441 if( !get_cabac( &h->cabac, &h->cabac_state[37] ) )
1442 return 1 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1444 if( get_cabac( &h->cabac, &h->cabac_state[38] ) ) {
1445 if( get_cabac( &h->cabac, &h->cabac_state[39] ) )
1446 return 11 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1449 type += 2*get_cabac( &h->cabac, &h->cabac_state[39] );
1450 type += get_cabac( &h->cabac, &h->cabac_state[39] );
1454 static int decode_cabac_mb_ref( H264Context *h, int list, int n ) {
1455 int refa = h->ref_cache[list][scan8[n] - 1];
1456 int refb = h->ref_cache[list][scan8[n] - 8];
1460 if( h->slice_type_nos == AV_PICTURE_TYPE_B) {
1461 if( refa > 0 && !(h->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1463 if( refb > 0 && !(h->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1472 while( get_cabac( &h->cabac, &h->cabac_state[54+ctx] ) ) {
1475 if(ref >= 32 /*h->ref_list[list]*/){
1482 static int decode_cabac_mb_mvd( H264Context *h, int ctxbase, int amvd, int *mvda) {
1485 if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1486 // if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1493 while( mvd < 9 && get_cabac( &h->cabac, &h->cabac_state[ctxbase] ) ) {
1501 while( get_cabac_bypass( &h->cabac ) ) {
1505 av_log(h->avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1510 mvd += get_cabac_bypass( &h->cabac )<<k;
1512 *mvda=mvd < 70 ? mvd : 70;
1515 return get_cabac_bypass_sign( &h->cabac, -mvd );
1518 #define DECODE_CABAC_MB_MVD( h, list, n )\
1520 int amvd0 = h->mvd_cache[list][scan8[n] - 1][0] +\
1521 h->mvd_cache[list][scan8[n] - 8][0];\
1522 int amvd1 = h->mvd_cache[list][scan8[n] - 1][1] +\
1523 h->mvd_cache[list][scan8[n] - 8][1];\
1525 mx += decode_cabac_mb_mvd( h, 40, amvd0, &mpx );\
1526 my += decode_cabac_mb_mvd( h, 47, amvd1, &mpy );\
1529 static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx, int max_coeff, int is_dc ) {
1532 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1536 idx -= CHROMA_DC_BLOCK_INDEX;
1537 nza = (h->left_cbp>>(6+idx))&0x01;
1538 nzb = (h-> top_cbp>>(6+idx))&0x01;
1540 idx -= LUMA_DC_BLOCK_INDEX;
1541 nza = h->left_cbp&(0x100<<idx);
1542 nzb = h-> top_cbp&(0x100<<idx);
1545 nza = h->non_zero_count_cache[scan8[idx] - 1];
1546 nzb = h->non_zero_count_cache[scan8[idx] - 8];
1555 return base_ctx[cat] + ctx;
1558 static av_always_inline void
1559 decode_cabac_residual_internal(H264Context *h, int16_t *block,
1560 int cat, int n, const uint8_t *scantable,
1561 const uint32_t *qmul, int max_coeff,
1562 int is_dc, int chroma422)
1564 static const int significant_coeff_flag_offset[2][14] = {
1565 { 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 },
1566 { 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 }
1568 static const int last_coeff_flag_offset[2][14] = {
1569 { 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 },
1570 { 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 }
1572 static const int coeff_abs_level_m1_offset[14] = {
1573 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
1575 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1576 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1577 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1578 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1579 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1580 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1581 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1582 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1583 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1585 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1586 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1587 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1588 * map node ctx => cabac ctx for level=1 */
1589 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1590 /* map node ctx => cabac ctx for level>1 */
1591 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1592 { 5, 5, 5, 5, 6, 7, 8, 9 },
1593 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1595 static const uint8_t coeff_abs_level_transition[2][8] = {
1596 /* update node ctx after decoding a level=1 */
1597 { 1, 2, 3, 3, 4, 5, 6, 7 },
1598 /* update node ctx after decoding a level>1 */
1599 { 4, 4, 4, 4, 5, 6, 7, 7 }
1605 int coeff_count = 0;
1608 uint8_t *significant_coeff_ctx_base;
1609 uint8_t *last_coeff_ctx_base;
1610 uint8_t *abs_level_m1_ctx_base;
1613 #define CABAC_ON_STACK
1615 #ifdef CABAC_ON_STACK
1618 cc.range = h->cabac.range;
1619 cc.low = h->cabac.low;
1620 cc.bytestream= h->cabac.bytestream;
1622 #define CC &h->cabac
1625 significant_coeff_ctx_base = h->cabac_state
1626 + significant_coeff_flag_offset[MB_FIELD(h)][cat];
1627 last_coeff_ctx_base = h->cabac_state
1628 + last_coeff_flag_offset[MB_FIELD(h)][cat];
1629 abs_level_m1_ctx_base = h->cabac_state
1630 + coeff_abs_level_m1_offset[cat];
1632 if( !is_dc && max_coeff == 64 ) {
1633 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1634 for(last= 0; last < coefs; last++) { \
1635 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1636 if( get_cabac( CC, sig_ctx )) { \
1637 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1638 index[coeff_count++] = last; \
1639 if( get_cabac( CC, last_ctx ) ) { \
1645 if( last == max_coeff -1 ) {\
1646 index[coeff_count++] = last;\
1648 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(h)];
1649 #ifdef decode_significance
1650 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1651 last_coeff_ctx_base, sig_off);
1653 if (is_dc && chroma422) { // dc 422
1654 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1656 coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1657 last_coeff_ctx_base-significant_coeff_ctx_base);
1660 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1662 if (is_dc && chroma422) { // dc 422
1663 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1665 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1669 av_assert2(coeff_count > 0);
1673 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1675 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1676 h->non_zero_count_cache[scan8[n]] = coeff_count;
1678 if( max_coeff == 64 )
1679 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1681 av_assert2( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1682 h->non_zero_count_cache[scan8[n]] = coeff_count;
1687 #define STORE_BLOCK(type) \
1689 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1691 int j= scantable[index[--coeff_count]]; \
1693 if( get_cabac( CC, ctx ) == 0 ) { \
1694 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1696 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1698 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1701 int coeff_abs = 2; \
1702 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1703 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1705 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1709 if( coeff_abs >= 15 ) { \
1711 while(get_cabac_bypass( CC ) && j<30) { \
1717 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1723 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1725 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1728 } while ( coeff_count );
1730 if (h->pixel_shift) {
1731 STORE_BLOCK(int32_t)
1733 STORE_BLOCK(int16_t)
1735 #ifdef CABAC_ON_STACK
1736 h->cabac.range = cc.range ;
1737 h->cabac.low = cc.low ;
1738 h->cabac.bytestream= cc.bytestream;
1743 static void decode_cabac_residual_dc_internal(H264Context *h, int16_t *block,
1745 const uint8_t *scantable,
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, int16_t *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, int16_t *block,
1760 const uint8_t *scantable,
1761 const uint32_t *qmul,
1764 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1767 /* cat: 0-> DC 16x16 n = 0
1768 * 1-> AC 16x16 n = luma4x4idx
1769 * 2-> Luma4x4 n = luma4x4idx
1770 * 3-> DC Chroma n = iCbCr
1771 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1772 * 5-> Luma8x8 n = 4 * luma8x8idx */
1774 /* Partially inline the CABAC residual decode: inline the coded block flag.
1775 * This has very little impact on binary size and improves performance
1776 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1777 * as well as because most blocks have zero CBFs. */
1779 static av_always_inline void decode_cabac_residual_dc(H264Context *h,
1782 const uint8_t *scantable,
1785 /* read coded block flag */
1786 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) {
1787 h->non_zero_count_cache[scan8[n]] = 0;
1790 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff );
1793 static av_always_inline void
1794 decode_cabac_residual_dc_422(H264Context *h, int16_t *block,
1795 int cat, int n, const uint8_t *scantable,
1798 /* read coded block flag */
1799 if (get_cabac(&h->cabac, &h->cabac_state[get_cabac_cbf_ctx(h, cat, n, max_coeff, 1)]) == 0) {
1800 h->non_zero_count_cache[scan8[n]] = 0;
1803 decode_cabac_residual_dc_internal_422(h, block, cat, n, scantable, max_coeff);
1806 static av_always_inline void decode_cabac_residual_nondc(H264Context *h,
1809 const uint8_t *scantable,
1810 const uint32_t *qmul,
1813 /* read coded block flag */
1814 if( (cat != 5 || CHROMA444(h)) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) {
1815 if( max_coeff == 64 ) {
1816 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1818 h->non_zero_count_cache[scan8[n]] = 0;
1822 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff );
1825 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 )
1827 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1828 const uint32_t *qmul;
1830 int qscale = p == 0 ? h->qscale : h->chroma_qp[p-1];
1831 if( IS_INTRA16x16( mb_type ) ) {
1832 AV_ZERO128(h->mb_luma_dc[p]+0);
1833 AV_ZERO128(h->mb_luma_dc[p]+8);
1834 AV_ZERO128(h->mb_luma_dc[p]+16);
1835 AV_ZERO128(h->mb_luma_dc[p]+24);
1836 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1839 qmul = h->dequant4_coeff[p][qscale];
1840 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1841 const int index = 16*p + i4x4;
1842 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1845 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1848 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1849 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1850 if( cbp & (1<<i8x8) ) {
1851 if( IS_8x8DCT(mb_type) ) {
1852 const int index = 16*p + 4*i8x8;
1853 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1854 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
1856 qmul = h->dequant4_coeff[cqm][qscale];
1857 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1858 const int index = 16*p + 4*i8x8 + i4x4;
1860 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1861 //STOP_TIMER("decode_residual")
1865 fill_rectangle(&h->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1872 * Decode a macroblock.
1873 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1875 int ff_h264_decode_mb_cabac(H264Context *h) {
1877 int mb_type, partition_count, cbp = 0;
1878 int dct8x8_allowed= h->pps.transform_8x8_mode;
1879 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
1880 const int pixel_shift = h->pixel_shift;
1881 unsigned local_ref_count[2];
1883 mb_xy = h->mb_xy = h->mb_x + h->mb_y*h->mb_stride;
1885 tprintf(h->avctx, "pic:%d mb:%d/%d\n", h->frame_num, h->mb_x, h->mb_y);
1886 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
1888 /* a skipped mb needs the aff flag from the following mb */
1889 if (FRAME_MBAFF(h) && (h->mb_y & 1) == 1 && h->prev_mb_skipped)
1890 skip = h->next_mb_skipped;
1892 skip = decode_cabac_mb_skip( h, h->mb_x, h->mb_y );
1893 /* read skip flags */
1895 if (FRAME_MBAFF(h) && (h->mb_y & 1) == 0) {
1896 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1897 h->next_mb_skipped = decode_cabac_mb_skip( h, h->mb_x, h->mb_y+1 );
1898 if(!h->next_mb_skipped)
1899 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1904 h->cbp_table[mb_xy] = 0;
1905 h->chroma_pred_mode_table[mb_xy] = 0;
1906 h->last_qscale_diff = 0;
1912 if (FRAME_MBAFF(h)) {
1913 if( (h->mb_y&1) == 0 )
1915 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
1918 h->prev_mb_skipped = 0;
1920 fill_decode_neighbors(h, -(MB_FIELD(h)));
1922 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
1924 av_assert2(h->slice_type_nos == AV_PICTURE_TYPE_B);
1926 if( !IS_DIRECT( h->left_type[LTOP]-1 ) )
1928 if( !IS_DIRECT( h->top_type-1 ) )
1931 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
1932 mb_type= 0; /* B_Direct_16x16 */
1933 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) {
1934 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */
1937 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3;
1938 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2;
1939 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1;
1940 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1942 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1943 }else if( bits == 13 ){
1944 mb_type= decode_cabac_intra_mb_type(h, 32, 0);
1945 goto decode_intra_mb;
1946 }else if( bits == 14 ){
1947 mb_type= 11; /* B_L1_L0_8x16 */
1948 }else if( bits == 15 ){
1949 mb_type= 22; /* B_8x8 */
1951 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
1952 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1955 partition_count= b_mb_type_info[mb_type].partition_count;
1956 mb_type= b_mb_type_info[mb_type].type;
1957 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) {
1958 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
1960 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
1961 /* P_L0_D16x16, P_8x8 */
1962 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
1964 /* P_L0_D8x16, P_L0_D16x8 */
1965 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
1967 partition_count= p_mb_type_info[mb_type].partition_count;
1968 mb_type= p_mb_type_info[mb_type].type;
1970 mb_type= decode_cabac_intra_mb_type(h, 17, 0);
1971 goto decode_intra_mb;
1974 mb_type= decode_cabac_intra_mb_type(h, 3, 1);
1975 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
1977 av_assert2(h->slice_type_nos == AV_PICTURE_TYPE_I);
1979 partition_count = 0;
1980 cbp= i_mb_type_info[mb_type].cbp;
1981 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
1982 mb_type= i_mb_type_info[mb_type].type;
1985 mb_type |= MB_TYPE_INTERLACED;
1987 h->slice_table[ mb_xy ]= h->slice_num;
1989 if(IS_INTRA_PCM(mb_type)) {
1990 const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
1991 h->sps.bit_depth_luma >> 3;
1994 // We assume these blocks are very rare so we do not optimize it.
1995 // FIXME The two following lines get the bitstream position in the cabac
1996 // decode, I think it should be done by a function in cabac.h (or cabac.c).
1997 ptr= h->cabac.bytestream;
1998 if(h->cabac.low&0x1) ptr--;
2000 if(h->cabac.low&0x1FF) ptr--;
2003 // The pixels are stored in the same order as levels in h->mb array.
2004 if ((int) (h->cabac.bytestream_end - ptr) < mb_size)
2006 h->intra_pcm_ptr = ptr;
2009 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr);
2011 // All blocks are present
2012 h->cbp_table[mb_xy] = 0xf7ef;
2013 h->chroma_pred_mode_table[mb_xy] = 0;
2014 // In deblocking, the quantizer is 0
2015 h->cur_pic.qscale_table[mb_xy] = 0;
2016 // All coeffs are present
2017 memset(h->non_zero_count[mb_xy], 16, 48);
2018 h->cur_pic.mb_type[mb_xy] = mb_type;
2019 h->last_qscale_diff = 0;
2023 local_ref_count[0] = h->ref_count[0] << MB_MBAFF(h);
2024 local_ref_count[1] = h->ref_count[1] << MB_MBAFF(h);
2026 fill_decode_caches(h, mb_type);
2028 if( IS_INTRA( mb_type ) ) {
2030 if( IS_INTRA4x4( mb_type ) ) {
2031 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) {
2032 mb_type |= MB_TYPE_8x8DCT;
2033 for( i = 0; i < 16; i+=4 ) {
2034 int pred = pred_intra_mode( h, i );
2035 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2036 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 );
2039 for( i = 0; i < 16; i++ ) {
2040 int pred = pred_intra_mode( h, i );
2041 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred );
2043 av_dlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2044 h->intra4x4_pred_mode_cache[scan8[i]]);
2047 write_back_intra_pred_mode(h);
2048 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
2050 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 );
2051 if( h->intra16x16_pred_mode < 0 ) return -1;
2054 h->chroma_pred_mode_table[mb_xy] =
2055 pred_mode = decode_cabac_mb_chroma_pre_mode( h );
2057 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 );
2058 if( pred_mode < 0 ) return -1;
2059 h->chroma_pred_mode= pred_mode;
2061 h->chroma_pred_mode= DC_128_PRED8x8;
2063 } else if( partition_count == 4 ) {
2064 int i, j, sub_partition_count[4], list, ref[2][4];
2066 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
2067 for( i = 0; i < 4; i++ ) {
2068 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h );
2069 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2070 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2072 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] |
2073 h->sub_mb_type[2] | h->sub_mb_type[3]) ) {
2074 ff_h264_pred_direct_motion(h, &mb_type);
2075 h->ref_cache[0][scan8[4]] =
2076 h->ref_cache[1][scan8[4]] =
2077 h->ref_cache[0][scan8[12]] =
2078 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2079 for( i = 0; i < 4; i++ )
2080 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 );
2083 for( i = 0; i < 4; i++ ) {
2084 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h );
2085 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
2086 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
2090 for( list = 0; list < h->list_count; list++ ) {
2091 for( i = 0; i < 4; i++ ) {
2092 if(IS_DIRECT(h->sub_mb_type[i])) continue;
2093 if(IS_DIR(h->sub_mb_type[i], 0, list)){
2094 if (local_ref_count[list] > 1) {
2095 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
2096 if (ref[list][i] >= (unsigned)local_ref_count[list]) {
2097 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], local_ref_count[list]);
2105 h->ref_cache[list][ scan8[4*i]+1 ]=
2106 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
2111 dct8x8_allowed = get_dct8x8_allowed(h);
2113 for(list=0; list<h->list_count; list++){
2115 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ];
2116 if(IS_DIRECT(h->sub_mb_type[i])){
2117 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2121 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){
2122 const int sub_mb_type= h->sub_mb_type[i];
2123 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2124 for(j=0; j<sub_partition_count[i]; j++){
2127 const int index= 4*i + block_width*j;
2128 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
2129 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ];
2130 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
2131 DECODE_CABAC_MB_MVD( h, list, index)
2132 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2134 if(IS_SUB_8X8(sub_mb_type)){
2136 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2138 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2141 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2143 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2144 }else if(IS_SUB_8X4(sub_mb_type)){
2145 mv_cache[ 1 ][0]= mx;
2146 mv_cache[ 1 ][1]= my;
2148 mvd_cache[ 1 ][0]= mpx;
2149 mvd_cache[ 1 ][1]= mpy;
2150 }else if(IS_SUB_4X8(sub_mb_type)){
2151 mv_cache[ 8 ][0]= mx;
2152 mv_cache[ 8 ][1]= my;
2154 mvd_cache[ 8 ][0]= mpx;
2155 mvd_cache[ 8 ][1]= mpy;
2157 mv_cache[ 0 ][0]= mx;
2158 mv_cache[ 0 ][1]= my;
2160 mvd_cache[ 0 ][0]= mpx;
2161 mvd_cache[ 0 ][1]= mpy;
2164 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2165 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2169 } else if( IS_DIRECT(mb_type) ) {
2170 ff_h264_pred_direct_motion(h, &mb_type);
2171 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2172 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2173 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
2176 if(IS_16X16(mb_type)){
2177 for(list=0; list<h->list_count; list++){
2178 if(IS_DIR(mb_type, 0, list)){
2180 if (local_ref_count[list] > 1) {
2181 ref= decode_cabac_mb_ref(h, list, 0);
2182 if (ref >= (unsigned)local_ref_count[list]) {
2183 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2188 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2191 for(list=0; list<h->list_count; list++){
2192 if(IS_DIR(mb_type, 0, list)){
2194 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
2195 DECODE_CABAC_MB_MVD( h, list, 0)
2196 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2198 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2199 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2203 else if(IS_16X8(mb_type)){
2204 for(list=0; list<h->list_count; list++){
2206 if(IS_DIR(mb_type, i, list)){
2208 if (local_ref_count[list] > 1) {
2209 ref= decode_cabac_mb_ref( h, list, 8*i );
2210 if (ref >= (unsigned)local_ref_count[list]) {
2211 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2216 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2218 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2221 for(list=0; list<h->list_count; list++){
2223 if(IS_DIR(mb_type, i, list)){
2225 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2226 DECODE_CABAC_MB_MVD( h, list, 8*i)
2227 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2229 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2230 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2232 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2233 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2238 av_assert2(IS_8X16(mb_type));
2239 for(list=0; list<h->list_count; list++){
2241 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2243 if (local_ref_count[list] > 1) {
2244 ref= decode_cabac_mb_ref( h, list, 4*i );
2245 if (ref >= (unsigned)local_ref_count[list]) {
2246 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, local_ref_count[list]);
2251 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2253 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2256 for(list=0; list<h->list_count; list++){
2258 if(IS_DIR(mb_type, i, list)){
2260 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2261 DECODE_CABAC_MB_MVD( h, list, 4*i)
2263 tprintf(h->avctx, "final mv:%d %d\n", mx, my);
2264 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2265 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2267 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2268 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2275 if( IS_INTER( mb_type ) ) {
2276 h->chroma_pred_mode_table[mb_xy] = 0;
2277 write_back_motion( h, mb_type );
2280 if( !IS_INTRA16x16( mb_type ) ) {
2281 cbp = decode_cabac_mb_cbp_luma( h );
2283 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4;
2285 if (!decode_chroma && cbp>15) {
2286 av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2287 return AVERROR_INVALIDDATA;
2291 h->cbp_table[mb_xy] = h->cbp = cbp;
2293 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2294 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] );
2297 /* It would be better to do this in fill_decode_caches, but we don't know
2298 * the transform mode of the current macroblock there. */
2299 if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2301 uint8_t *nnz_cache = h->non_zero_count_cache;
2302 for (i = 0; i < 2; i++){
2303 if (h->left_type[LEFT(i)] && !IS_8x8DCT(h->left_type[LEFT(i)])){
2304 nnz_cache[3+8* 1 + 2*8*i]=
2305 nnz_cache[3+8* 2 + 2*8*i]=
2306 nnz_cache[3+8* 6 + 2*8*i]=
2307 nnz_cache[3+8* 7 + 2*8*i]=
2308 nnz_cache[3+8*11 + 2*8*i]=
2309 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2312 if (h->top_type && !IS_8x8DCT(h->top_type)){
2313 uint32_t top_empty = CABAC(h) && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2314 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2315 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2316 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2319 h->cur_pic.mb_type[mb_xy] = mb_type;
2321 if( cbp || IS_INTRA16x16( mb_type ) ) {
2322 const uint8_t *scan, *scan8x8;
2323 const uint32_t *qmul;
2325 if(IS_INTERLACED(mb_type)){
2326 scan8x8= h->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2327 scan= h->qscale ? h->field_scan : h->field_scan_q0;
2329 scan8x8= h->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2330 scan= h->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2333 // decode_cabac_mb_dqp
2334 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){
2337 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
2339 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
2342 if(val > 2*max_qp){ //prevent infinite loop
2343 av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", h->mb_x, h->mb_y);
2351 val= -((val + 1)>>1);
2352 h->last_qscale_diff = val;
2354 if(((unsigned)h->qscale) > max_qp){
2355 if(h->qscale<0) h->qscale+= max_qp+1;
2356 else h->qscale-= max_qp+1;
2358 h->chroma_qp[0] = get_chroma_qp(h, 0, h->qscale);
2359 h->chroma_qp[1] = get_chroma_qp(h, 1, h->qscale);
2361 h->last_qscale_diff=0;
2363 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2365 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2366 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2367 } else if (CHROMA422(h)) {
2370 for (c = 0; c < 2; c++)
2371 decode_cabac_residual_dc_422(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3,
2372 CHROMA_DC_BLOCK_INDEX + c,
2373 chroma422_dc_scan, 8);
2378 for( c = 0; c < 2; c++ ) {
2379 int16_t *mb = h->mb + (16*(16 + 16*c) << pixel_shift);
2380 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2381 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2382 for (i = 0; i < 4; i++) {
2383 const int index = 16 + 16 * c + 8*i8x8 + i;
2384 decode_cabac_residual_nondc(h, mb, 4, index, scan + 1, qmul, 15);
2385 mb += 16<<pixel_shift;
2390 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2391 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2393 } else /* yuv420 */ {
2396 for (c = 0; c < 2; c++)
2397 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
2402 for( c = 0; c < 2; c++ ) {
2403 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
2404 for( i = 0; i < 4; i++ ) {
2405 const int index = 16 + 16 * c + i;
2406 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2410 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2411 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2415 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2416 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2417 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2418 h->last_qscale_diff = 0;
2421 h->cur_pic.qscale_table[mb_xy] = h->qscale;
2422 write_back_non_zero_count(h);