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
30 #define INT_BIT (CHAR_BIT * sizeof(int))
32 #include "libavutil/attributes.h"
33 #include "libavutil/avassert.h"
34 #include "libavutil/timer.h"
37 #include "cabac_functions.h"
42 #include "h264_mvpred.h"
44 #include "mpegutils.h"
47 #include "x86/h264_i386.h"
50 /* Cabac pre state table */
52 static const int8_t cabac_context_init_I
[1024][2] =
55 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
56 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
57 { -6, 53 }, { -1, 54 }, { 7, 51 },
59 /* 11 - 23 unsused for I */
60 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
61 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
62 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
66 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
67 { 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 },
72 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
73 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
74 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
78 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
82 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
83 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
84 { 13, 41 }, { 3, 62 },
87 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
88 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
89 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
90 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
91 { -12, 115 },{ -16, 122 },
94 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
95 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
96 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
97 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
101 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
102 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
103 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
104 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
105 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
106 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
107 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
108 { 14, 62 }, { -13, 108 },{ -15, 100 },
111 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
112 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
113 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
114 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
115 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
116 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
117 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
118 { 0, 62 }, { 12, 72 },
121 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
122 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
123 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
124 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
125 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
126 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
127 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
128 { 0, 89 }, { 26, -19 }, { 22, -17 },
131 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
132 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
133 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
134 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
135 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
136 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
137 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
138 { 12, 68 }, { 2, 97 },
141 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
142 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
143 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
144 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
145 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
146 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
150 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
151 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
152 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
153 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
154 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
155 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
157 /* 276 a bit special (not used, bypass is used instead) */
161 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
162 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
163 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
164 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
165 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
166 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
167 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
168 { 9, 64 }, { -12, 104 },{ -11, 97 },
171 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
172 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
173 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
174 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
175 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
176 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
177 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
178 { 5, 64 }, { 12, 70 },
181 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
182 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
183 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
184 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
185 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
186 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
187 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
188 { -12, 109 },{ 36, -35 }, { 36, -34 },
191 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
192 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
193 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
194 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
195 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
196 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
197 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
198 { 29, 39 }, { 19, 66 },
201 { 31, 21 }, { 31, 31 }, { 25, 50 },
202 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
203 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
204 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
205 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
206 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
207 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
208 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
209 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
210 { 0, 68 }, { -9, 92 },
213 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
214 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
215 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
216 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
217 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
218 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
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 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
225 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
226 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
227 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
228 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
229 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
230 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
231 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
232 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
233 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
234 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
235 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
236 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
237 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
238 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
239 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
240 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
241 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
242 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
243 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
244 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
245 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
246 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
247 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
248 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
249 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
250 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
251 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
252 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
253 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
254 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
255 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
256 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
257 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
258 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
259 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
260 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
261 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
262 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
263 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
264 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
265 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
266 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
267 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
268 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
269 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
270 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
271 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
272 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
273 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
274 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 },
275 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 },
276 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 },
277 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 },
278 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 },
279 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 },
280 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 },
281 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
282 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
283 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
284 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
285 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 },
286 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 },
287 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 },
288 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 },
289 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 },
290 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 },
291 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 },
292 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 },
293 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 },
294 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 },
295 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 },
296 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 },
297 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 },
298 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 },
299 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 },
300 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
301 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
302 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
303 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
304 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
305 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
306 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
307 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
308 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
309 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
310 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
311 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
312 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
313 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
314 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
315 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
316 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
317 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
318 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
319 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
320 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
321 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
322 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
323 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
324 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
325 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
326 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
327 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
328 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
329 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
330 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
331 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
332 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
333 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
334 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
335 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
336 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
337 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
338 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
339 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
340 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
341 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
342 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
343 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
344 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
345 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
346 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
347 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
348 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
349 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
350 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 },
351 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 },
352 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 },
353 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 },
354 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 },
355 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 },
356 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 },
357 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 },
358 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 },
359 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
360 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
361 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }
364 static const int8_t cabac_context_init_PB
[3][1024][2] =
366 /* i_cabac_init_idc == 0 */
369 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
370 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
371 { -6, 53 }, { -1, 54 }, { 7, 51 },
374 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
375 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
376 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
380 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
381 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
382 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
383 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
386 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
387 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
388 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
389 { -3, 81 }, { 0, 88 },
392 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
393 { -7, 72 }, { 1, 58 },
396 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
397 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
398 { 13, 41 }, { 3, 62 },
401 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
402 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
403 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
404 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
405 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
406 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
407 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
408 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
409 { 0, 68 }, { -4, 69 }, { -8, 88 },
412 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
413 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
414 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
415 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
416 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
417 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
418 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
419 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
420 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
421 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
422 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
423 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
424 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
425 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
426 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
430 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
431 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
432 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
433 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
434 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
435 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
436 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
437 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
438 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
439 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
440 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
441 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
442 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
443 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
444 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
448 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
449 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
450 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
451 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
452 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
453 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
454 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
455 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
456 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
457 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
458 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
459 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
462 /* 276 a bit special (not used, bypass is used instead) */
466 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
467 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
468 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
469 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
470 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
471 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
472 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
473 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
474 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
475 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
476 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
477 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
478 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
479 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
480 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
484 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
485 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
486 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
487 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
488 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
489 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
490 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
491 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
492 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
493 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
494 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
495 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
496 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
497 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
498 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
502 { 12, 40 }, { 11, 51 }, { 14, 59 },
503 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
504 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
505 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
506 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
507 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
508 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
509 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
510 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
511 { -8, 66 }, { -8, 76 },
514 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
515 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
516 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
517 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
518 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
519 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
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 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
526 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
527 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
528 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
529 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
530 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
531 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
532 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
533 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
534 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
535 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
536 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
537 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
538 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
539 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
540 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
541 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
542 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
543 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
544 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
545 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
546 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
547 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
548 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
549 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
550 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
551 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
552 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
553 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
554 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
555 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
556 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
557 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
558 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
559 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
560 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
561 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
562 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
563 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
564 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
565 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
566 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
567 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
568 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
569 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
570 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
571 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
572 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
573 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
574 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
575 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 },
576 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 },
577 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 },
578 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 },
579 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 },
580 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 },
581 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 },
582 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
583 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
584 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
585 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
586 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 },
587 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 },
588 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 },
589 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 },
590 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 },
591 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 },
592 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 },
593 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 },
594 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 },
595 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 },
596 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 },
597 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 },
598 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 },
599 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 },
600 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 },
601 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
602 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
603 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
604 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
605 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
606 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
607 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
608 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
609 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
610 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
611 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
612 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
613 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
614 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
615 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
616 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
617 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
618 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
619 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
620 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
621 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
622 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
623 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
624 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
625 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
626 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
627 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
628 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
629 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
630 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
631 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
632 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
633 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
634 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
635 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
636 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
637 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
638 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
639 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
640 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
641 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
642 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
643 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
644 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
645 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
646 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
647 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
648 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
649 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
650 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
651 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
652 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 },
653 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 },
654 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 },
655 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 },
656 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 },
657 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 },
658 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 },
659 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 },
660 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
661 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
662 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }
665 /* i_cabac_init_idc == 1 */
668 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
669 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
670 { -6, 53 }, { -1, 54 }, { 7, 51 },
673 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
674 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
675 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
679 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
680 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
681 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
682 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
685 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
686 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
687 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
688 { -7, 86 },{ -5, 95 },
691 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
692 { -5, 72 },{ 0, 61 },
695 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
696 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
697 { 13, 41 }, { 3, 62 },
700 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
701 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
702 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
703 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
704 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
705 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
706 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
707 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
708 { 0, 68 }, { -7, 74 }, { -9, 88 },
711 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
712 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
713 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
714 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
715 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
716 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
717 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
718 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
719 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
720 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
721 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
722 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
723 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
724 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
725 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
729 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
730 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
731 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
732 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
733 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
734 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
735 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
736 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
737 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
738 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
739 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
740 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
741 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
742 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
743 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
747 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
748 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
749 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
750 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
751 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
752 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
753 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
754 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
755 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
756 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
757 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
758 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
761 /* 276 a bit special (not used, bypass is used instead) */
765 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
766 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
767 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
768 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
769 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
770 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
771 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
772 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
773 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
774 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
775 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
776 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
777 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
778 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
779 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
783 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
784 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
785 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
786 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
787 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
788 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
789 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
790 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
791 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
792 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
793 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
794 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
795 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
796 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
797 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
801 { 25, 32 }, { 21, 49 }, { 21, 54 },
802 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
803 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
804 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
805 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
806 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
807 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
808 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
809 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
810 { -4, 67 }, { -7, 82 },
813 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
814 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
815 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
816 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
817 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
818 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
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 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
825 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
826 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
827 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
828 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
829 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
830 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
831 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
832 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
833 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
834 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
835 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
836 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
837 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
838 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
839 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
840 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
841 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
842 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
843 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
844 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
845 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
846 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
847 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
848 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
849 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
850 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
851 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
852 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
853 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
854 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
855 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
856 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
857 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
858 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
859 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
860 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
861 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
862 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
863 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
864 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
865 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
866 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
867 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
868 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
869 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
870 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
871 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
872 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
873 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
874 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 },
875 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 },
876 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 },
877 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 },
878 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 },
879 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 },
880 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 },
881 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
882 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
883 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
884 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
885 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 },
886 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 },
887 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 },
888 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 },
889 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 },
890 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 },
891 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 },
892 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 },
893 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 },
894 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 },
895 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 },
896 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 },
897 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 },
898 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 },
899 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 },
900 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
901 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
902 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
903 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
904 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
905 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
906 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
907 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
908 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
909 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
910 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
911 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
912 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
913 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
914 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
915 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
916 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
917 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
918 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
919 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
920 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
921 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
922 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
923 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
924 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
925 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
926 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
927 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
928 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
929 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
930 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
931 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
932 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
933 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
934 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
935 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
936 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
937 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
938 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
939 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
940 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
941 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
942 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
943 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
944 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
945 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
946 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
947 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
948 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
949 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
950 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
951 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 },
952 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 },
953 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 },
954 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 },
955 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 },
956 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 },
957 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 },
958 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 },
959 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
960 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
961 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }
964 /* i_cabac_init_idc == 2 */
967 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
968 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
969 { -6, 53 }, { -1, 54 }, { 7, 51 },
972 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
973 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
974 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
978 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
979 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
980 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
981 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
984 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
985 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
986 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
987 { -3, 90 },{ -1, 101 },
990 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
991 { -7, 50 },{ 1, 60 },
994 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
995 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
996 { 13, 41 }, { 3, 62 },
999 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
1000 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
1001 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
1002 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
1003 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1004 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1005 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1006 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1007 { 3, 68 }, { -8, 71 }, { -13, 98 },
1010 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1011 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1012 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1013 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1014 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1015 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1016 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1017 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1018 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1019 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1020 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1021 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1022 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1023 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1024 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1028 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1029 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1030 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1031 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1032 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1033 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1034 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1035 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1036 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1037 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1038 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1039 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1040 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1041 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1042 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1046 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1047 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1048 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1049 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1050 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1051 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1052 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1053 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1054 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1055 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1056 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1057 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1060 /* 276 a bit special (not used, bypass is used instead) */
1064 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1065 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1066 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1067 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1068 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1069 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1070 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1071 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1072 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1073 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1074 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1075 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1076 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1077 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1078 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1082 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1083 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1084 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1085 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1086 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1087 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1088 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1089 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1090 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1091 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1092 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1093 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1094 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1095 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1096 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1100 { 21, 33 }, { 19, 50 }, { 17, 61 },
1101 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1102 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1103 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1104 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1105 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1106 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1107 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1108 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1109 { -6, 68 }, { -10, 79 },
1112 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1113 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1114 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1115 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1116 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1117 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
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 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1124 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1125 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1126 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1127 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1128 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1129 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1130 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1131 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1132 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1133 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1134 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1135 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1136 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1137 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1138 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1139 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1140 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1141 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1142 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1143 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1144 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1145 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1146 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1147 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1148 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1149 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1150 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1151 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1152 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1153 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1154 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1155 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1156 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1157 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1158 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1159 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1160 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1161 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1162 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1163 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1164 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1165 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1166 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1167 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1168 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1169 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1170 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1171 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1172 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1173 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 },
1174 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 },
1175 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 },
1176 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 },
1177 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 },
1178 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 },
1179 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 },
1180 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1181 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1182 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1183 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1184 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 },
1185 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 },
1186 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 },
1187 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 },
1188 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 },
1189 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 },
1190 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 },
1191 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 },
1192 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 },
1193 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 },
1194 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 },
1195 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 },
1196 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 },
1197 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 },
1198 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 },
1199 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1200 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1201 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1202 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1203 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1204 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1205 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1206 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1207 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1208 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1209 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1210 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1211 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1212 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1213 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1214 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1215 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1216 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1217 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1218 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1219 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1220 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1221 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1222 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1223 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1224 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1225 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1226 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1227 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1228 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1229 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1230 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1231 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1232 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1233 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1234 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1235 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1236 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1237 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1238 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1239 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1240 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1241 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1242 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1243 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1244 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1245 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1246 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1247 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1248 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1249 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1250 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 },
1251 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 },
1252 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 },
1253 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 },
1254 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 },
1255 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 },
1256 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 },
1257 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 },
1258 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1259 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1260 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }
1264 void ff_h264_init_cabac_states(H264Context
*h
) {
1266 const int8_t (*tab
)[2];
1267 const int slice_qp
= av_clip(h
->qscale
- 6*(h
->sps
.bit_depth_luma
-8), 0, 51);
1269 if( h
->slice_type_nos
== AV_PICTURE_TYPE_I
) tab
= cabac_context_init_I
;
1270 else tab
= cabac_context_init_PB
[h
->cabac_init_idc
];
1272 /* calculate pre-state */
1273 for( i
= 0; i
< 1024; i
++ ) {
1274 int pre
= 2*(((tab
[i
][0] * slice_qp
) >>4 ) + tab
[i
][1]) - 127;
1280 h
->cabac_state
[i
] = pre
;
1284 static int decode_cabac_field_decoding_flag(H264Context
*h
) {
1285 const long mbb_xy
= h
->mb_xy
- 2L*h
->mb_stride
;
1287 unsigned long ctx
= 0;
1289 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);
1290 ctx
+= (h
->cur_pic
.mb_type
[mbb_xy
] >> 7) & (h
->slice_table
[mbb_xy
] == h
->slice_num
);
1292 return get_cabac_noinline( &h
->cabac
, &(h
->cabac_state
+70)[ctx
] );
1295 static int decode_cabac_intra_mb_type(H264Context
*h
, int ctx_base
, int intra_slice
) {
1296 uint8_t *state
= &h
->cabac_state
[ctx_base
];
1301 if( h
->left_type
[LTOP
] & (MB_TYPE_INTRA16x16
|MB_TYPE_INTRA_PCM
))
1303 if( h
->top_type
& (MB_TYPE_INTRA16x16
|MB_TYPE_INTRA_PCM
))
1305 if( get_cabac_noinline( &h
->cabac
, &state
[ctx
] ) == 0 )
1306 return 0; /* I4x4 */
1309 if( get_cabac_noinline( &h
->cabac
, state
) == 0 )
1310 return 0; /* I4x4 */
1313 if( get_cabac_terminate( &h
->cabac
) )
1314 return 25; /* PCM */
1316 mb_type
= 1; /* I16x16 */
1317 mb_type
+= 12 * get_cabac_noinline( &h
->cabac
, &state
[1] ); /* cbp_luma != 0 */
1318 if( get_cabac_noinline( &h
->cabac
, &state
[2] ) ) /* cbp_chroma */
1319 mb_type
+= 4 + 4 * get_cabac_noinline( &h
->cabac
, &state
[2+intra_slice
] );
1320 mb_type
+= 2 * get_cabac_noinline( &h
->cabac
, &state
[3+intra_slice
] );
1321 mb_type
+= 1 * get_cabac_noinline( &h
->cabac
, &state
[3+2*intra_slice
] );
1325 static int decode_cabac_mb_skip( H264Context
*h
, int mb_x
, int mb_y
) {
1329 if (FRAME_MBAFF(h
)) { //FIXME merge with the stuff in fill_caches?
1330 int mb_xy
= mb_x
+ (mb_y
&~1)*h
->mb_stride
;
1333 && h
->slice_table
[mba_xy
] == h
->slice_num
1334 && MB_FIELD(h
) == !!IS_INTERLACED( h
->cur_pic
.mb_type
[mba_xy
] ) )
1335 mba_xy
+= h
->mb_stride
;
1337 mbb_xy
= mb_xy
- h
->mb_stride
;
1339 && h
->slice_table
[mbb_xy
] == h
->slice_num
1340 && IS_INTERLACED( h
->cur_pic
.mb_type
[mbb_xy
] ) )
1341 mbb_xy
-= h
->mb_stride
;
1343 mbb_xy
= mb_x
+ (mb_y
-1)*h
->mb_stride
;
1345 int mb_xy
= h
->mb_xy
;
1347 mbb_xy
= mb_xy
- (h
->mb_stride
<< FIELD_PICTURE(h
));
1350 if( h
->slice_table
[mba_xy
] == h
->slice_num
&& !IS_SKIP(h
->cur_pic
.mb_type
[mba_xy
] ))
1352 if( h
->slice_table
[mbb_xy
] == h
->slice_num
&& !IS_SKIP(h
->cur_pic
.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
->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
;
1625 #if !UNCHECKED_BITSTREAM_READER || ARCH_AARCH64
1626 cc
.bytestream_end
= h
->cabac
.bytestream_end
;
1629 #define CC &h->cabac
1632 significant_coeff_ctx_base
= h
->cabac_state
1633 + significant_coeff_flag_offset
[MB_FIELD(h
)][cat
];
1634 last_coeff_ctx_base
= h
->cabac_state
1635 + last_coeff_flag_offset
[MB_FIELD(h
)][cat
];
1636 abs_level_m1_ctx_base
= h
->cabac_state
1637 + coeff_abs_level_m1_offset
[cat
];
1639 if( !is_dc
&& max_coeff
== 64 ) {
1640 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1641 for(last= 0; last < coefs; last++) { \
1642 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1643 if( get_cabac( CC, sig_ctx )) { \
1644 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1645 index[coeff_count++] = last; \
1646 if( get_cabac( CC, last_ctx ) ) { \
1652 if( last == max_coeff -1 ) {\
1653 index[coeff_count++] = last;\
1655 const uint8_t *sig_off
= significant_coeff_flag_offset_8x8
[MB_FIELD(h
)];
1656 #ifdef decode_significance
1657 coeff_count
= decode_significance_8x8(CC
, significant_coeff_ctx_base
, index
,
1658 last_coeff_ctx_base
, sig_off
);
1660 if (is_dc
&& chroma422
) { // dc 422
1661 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc
[last
], sig_coeff_offset_dc
[last
]);
1663 coeff_count
= decode_significance(CC
, max_coeff
, significant_coeff_ctx_base
, index
,
1664 last_coeff_ctx_base
-significant_coeff_ctx_base
);
1667 DECODE_SIGNIFICANCE( 63, sig_off
[last
], ff_h264_last_coeff_flag_offset_8x8
[last
] );
1669 if (is_dc
&& chroma422
) { // dc 422
1670 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc
[last
], sig_coeff_offset_dc
[last
]);
1672 DECODE_SIGNIFICANCE(max_coeff
- 1, last
, last
);
1676 av_assert2(coeff_count
> 0);
1680 h
->cbp_table
[h
->mb_xy
] |= 0x40 << (n
- CHROMA_DC_BLOCK_INDEX
);
1682 h
->cbp_table
[h
->mb_xy
] |= 0x100 << (n
- LUMA_DC_BLOCK_INDEX
);
1683 h
->non_zero_count_cache
[scan8
[n
]] = coeff_count
;
1685 if( max_coeff
== 64 )
1686 fill_rectangle(&h
->non_zero_count_cache
[scan8
[n
]], 2, 2, 8, coeff_count
, 1);
1688 av_assert2( cat
== 1 || cat
== 2 || cat
== 4 || cat
== 7 || cat
== 8 || cat
== 11 || cat
== 12 );
1689 h
->non_zero_count_cache
[scan8
[n
]] = coeff_count
;
1693 #define STORE_BLOCK(type) \
1695 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1697 int j= scantable[index[--coeff_count]]; \
1699 if( get_cabac( CC, ctx ) == 0 ) { \
1700 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1702 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1704 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1707 int coeff_abs = 2; \
1708 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1709 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1711 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1715 if( coeff_abs >= 15 ) { \
1717 while(get_cabac_bypass( CC ) && j<30) { \
1723 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1729 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1731 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1734 } while ( coeff_count );
1736 if (h
->pixel_shift
) {
1737 STORE_BLOCK(int32_t)
1739 STORE_BLOCK(int16_t)
1741 #ifdef CABAC_ON_STACK
1742 h
->cabac
.range
= cc
.range
;
1743 h
->cabac
.low
= cc
.low
;
1744 h
->cabac
.bytestream
= cc
.bytestream
;
1749 static av_noinline
void decode_cabac_residual_dc_internal(H264Context
*h
,
1752 const uint8_t *scantable
,
1755 decode_cabac_residual_internal(h
, block
, cat
, n
, scantable
, NULL
, max_coeff
, 1, 0);
1758 static av_noinline
void decode_cabac_residual_dc_internal_422(H264Context
*h
,
1761 const uint8_t *scantable
,
1764 decode_cabac_residual_internal(h
, block
, cat
, n
, scantable
, NULL
, max_coeff
, 1, 1);
1767 static av_noinline
void decode_cabac_residual_nondc_internal(H264Context
*h
,
1770 const uint8_t *scantable
,
1771 const uint32_t *qmul
,
1774 decode_cabac_residual_internal(h
, block
, cat
, n
, scantable
, qmul
, max_coeff
, 0, 0);
1777 /* cat: 0-> DC 16x16 n = 0
1778 * 1-> AC 16x16 n = luma4x4idx
1779 * 2-> Luma4x4 n = luma4x4idx
1780 * 3-> DC Chroma n = iCbCr
1781 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1782 * 5-> Luma8x8 n = 4 * luma8x8idx */
1784 /* Partially inline the CABAC residual decode: inline the coded block flag.
1785 * This has very little impact on binary size and improves performance
1786 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1787 * as well as because most blocks have zero CBFs. */
1789 static av_always_inline
void decode_cabac_residual_dc(H264Context
*h
,
1792 const uint8_t *scantable
,
1795 /* read coded block flag */
1796 if( get_cabac( &h
->cabac
, &h
->cabac_state
[get_cabac_cbf_ctx( h
, cat
, n
, max_coeff
, 1 ) ] ) == 0 ) {
1797 h
->non_zero_count_cache
[scan8
[n
]] = 0;
1800 decode_cabac_residual_dc_internal( h
, block
, cat
, n
, scantable
, max_coeff
);
1803 static av_always_inline
void
1804 decode_cabac_residual_dc_422(H264Context
*h
, int16_t *block
,
1805 int cat
, int n
, const uint8_t *scantable
,
1808 /* read coded block flag */
1809 if (get_cabac(&h
->cabac
, &h
->cabac_state
[get_cabac_cbf_ctx(h
, cat
, n
, max_coeff
, 1)]) == 0) {
1810 h
->non_zero_count_cache
[scan8
[n
]] = 0;
1813 decode_cabac_residual_dc_internal_422(h
, block
, cat
, n
, scantable
, max_coeff
);
1816 static av_always_inline
void decode_cabac_residual_nondc(H264Context
*h
,
1819 const uint8_t *scantable
,
1820 const uint32_t *qmul
,
1823 /* read coded block flag */
1824 if( (cat
!= 5 || CHROMA444(h
)) && get_cabac( &h
->cabac
, &h
->cabac_state
[get_cabac_cbf_ctx( h
, cat
, n
, max_coeff
, 0 ) ] ) == 0 ) {
1825 if( max_coeff
== 64 ) {
1826 fill_rectangle(&h
->non_zero_count_cache
[scan8
[n
]], 2, 2, 8, 0, 1);
1828 h
->non_zero_count_cache
[scan8
[n
]] = 0;
1832 decode_cabac_residual_nondc_internal( h
, block
, cat
, n
, scantable
, qmul
, max_coeff
);
1835 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
)
1837 static const uint8_t ctx_cat
[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1838 const uint32_t *qmul
;
1840 int qscale
= p
== 0 ? h
->qscale
: h
->chroma_qp
[p
-1];
1841 if( IS_INTRA16x16( mb_type
) ) {
1842 AV_ZERO128(h
->mb_luma_dc
[p
]+0);
1843 AV_ZERO128(h
->mb_luma_dc
[p
]+8);
1844 AV_ZERO128(h
->mb_luma_dc
[p
]+16);
1845 AV_ZERO128(h
->mb_luma_dc
[p
]+24);
1846 decode_cabac_residual_dc(h
, h
->mb_luma_dc
[p
], ctx_cat
[0][p
], LUMA_DC_BLOCK_INDEX
+p
, scan
, 16);
1849 qmul
= h
->dequant4_coeff
[p
][qscale
];
1850 for( i4x4
= 0; i4x4
< 16; i4x4
++ ) {
1851 const int index
= 16*p
+ i4x4
;
1852 decode_cabac_residual_nondc(h
, h
->mb
+ (16*index
<< pixel_shift
), ctx_cat
[1][p
], index
, scan
+ 1, qmul
, 15);
1855 fill_rectangle(&h
->non_zero_count_cache
[scan8
[16*p
]], 4, 4, 8, 0, 1);
1858 int cqm
= (IS_INTRA( mb_type
) ? 0:3) + p
;
1859 for( i8x8
= 0; i8x8
< 4; i8x8
++ ) {
1860 if( cbp
& (1<<i8x8
) ) {
1861 if( IS_8x8DCT(mb_type
) ) {
1862 const int index
= 16*p
+ 4*i8x8
;
1863 decode_cabac_residual_nondc(h
, h
->mb
+ (16*index
<< pixel_shift
), ctx_cat
[3][p
], index
,
1864 scan8x8
, h
->dequant8_coeff
[cqm
][qscale
], 64);
1866 qmul
= h
->dequant4_coeff
[cqm
][qscale
];
1867 for( i4x4
= 0; i4x4
< 4; i4x4
++ ) {
1868 const int index
= 16*p
+ 4*i8x8
+ i4x4
;
1870 decode_cabac_residual_nondc(h
, h
->mb
+ (16*index
<< pixel_shift
), ctx_cat
[2][p
], index
, scan
, qmul
, 16);
1871 //STOP_TIMER("decode_residual")
1875 fill_rectangle(&h
->non_zero_count_cache
[scan8
[4*i8x8
+16*p
]], 2, 2, 8, 0, 1);
1882 * Decode a macroblock.
1883 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1885 int ff_h264_decode_mb_cabac(H264Context
*h
) {
1887 int mb_type
, partition_count
, cbp
= 0;
1888 int dct8x8_allowed
= h
->pps
.transform_8x8_mode
;
1889 int decode_chroma
= h
->sps
.chroma_format_idc
== 1 || h
->sps
.chroma_format_idc
== 2;
1890 const int pixel_shift
= h
->pixel_shift
;
1891 unsigned local_ref_count
[2];
1893 mb_xy
= h
->mb_xy
= h
->mb_x
+ h
->mb_y
*h
->mb_stride
;
1895 tprintf(h
->avctx
, "pic:%d mb:%d/%d\n", h
->frame_num
, h
->mb_x
, h
->mb_y
);
1896 if( h
->slice_type_nos
!= AV_PICTURE_TYPE_I
) {
1898 /* a skipped mb needs the aff flag from the following mb */
1899 if (FRAME_MBAFF(h
) && (h
->mb_y
& 1) == 1 && h
->prev_mb_skipped
)
1900 skip
= h
->next_mb_skipped
;
1902 skip
= decode_cabac_mb_skip( h
, h
->mb_x
, h
->mb_y
);
1903 /* read skip flags */
1905 if (FRAME_MBAFF(h
) && (h
->mb_y
& 1) == 0) {
1906 h
->cur_pic
.mb_type
[mb_xy
] = MB_TYPE_SKIP
;
1907 h
->next_mb_skipped
= decode_cabac_mb_skip( h
, h
->mb_x
, h
->mb_y
+1 );
1908 if(!h
->next_mb_skipped
)
1909 h
->mb_mbaff
= h
->mb_field_decoding_flag
= decode_cabac_field_decoding_flag(h
);
1914 h
->cbp_table
[mb_xy
] = 0;
1915 h
->chroma_pred_mode_table
[mb_xy
] = 0;
1916 h
->last_qscale_diff
= 0;
1922 if (FRAME_MBAFF(h
)) {
1923 if( (h
->mb_y
&1) == 0 )
1925 h
->mb_field_decoding_flag
= decode_cabac_field_decoding_flag(h
);
1928 h
->prev_mb_skipped
= 0;
1930 fill_decode_neighbors(h
, -(MB_FIELD(h
)));
1932 if( h
->slice_type_nos
== AV_PICTURE_TYPE_B
) {
1934 av_assert2(h
->slice_type_nos
== AV_PICTURE_TYPE_B
);
1936 if( !IS_DIRECT( h
->left_type
[LTOP
]-1 ) )
1938 if( !IS_DIRECT( h
->top_type
-1 ) )
1941 if( !get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[27+ctx
] ) ){
1942 mb_type
= 0; /* B_Direct_16x16 */
1943 }else if( !get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[27+3] ) ) {
1944 mb_type
= 1 + get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[27+5] ); /* B_L[01]_16x16 */
1947 bits
= get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[27+4] ) << 3;
1948 bits
+= get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[27+5] ) << 2;
1949 bits
+= get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[27+5] ) << 1;
1950 bits
+= get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[27+5] );
1952 mb_type
= bits
+ 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1953 }else if( bits
== 13 ){
1954 mb_type
= decode_cabac_intra_mb_type(h
, 32, 0);
1955 goto decode_intra_mb
;
1956 }else if( bits
== 14 ){
1957 mb_type
= 11; /* B_L1_L0_8x16 */
1958 }else if( bits
== 15 ){
1959 mb_type
= 22; /* B_8x8 */
1961 bits
= ( bits
<<1 ) + get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[27+5] );
1962 mb_type
= bits
- 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1965 partition_count
= b_mb_type_info
[mb_type
].partition_count
;
1966 mb_type
= b_mb_type_info
[mb_type
].type
;
1967 } else if( h
->slice_type_nos
== AV_PICTURE_TYPE_P
) {
1968 if( get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[14] ) == 0 ) {
1970 if( get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[15] ) == 0 ) {
1971 /* P_L0_D16x16, P_8x8 */
1972 mb_type
= 3 * get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[16] );
1974 /* P_L0_D8x16, P_L0_D16x8 */
1975 mb_type
= 2 - get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[17] );
1977 partition_count
= p_mb_type_info
[mb_type
].partition_count
;
1978 mb_type
= p_mb_type_info
[mb_type
].type
;
1980 mb_type
= decode_cabac_intra_mb_type(h
, 17, 0);
1981 goto decode_intra_mb
;
1984 mb_type
= decode_cabac_intra_mb_type(h
, 3, 1);
1985 if(h
->slice_type
== AV_PICTURE_TYPE_SI
&& mb_type
)
1987 av_assert2(h
->slice_type_nos
== AV_PICTURE_TYPE_I
);
1989 partition_count
= 0;
1990 cbp
= i_mb_type_info
[mb_type
].cbp
;
1991 h
->intra16x16_pred_mode
= i_mb_type_info
[mb_type
].pred_mode
;
1992 mb_type
= i_mb_type_info
[mb_type
].type
;
1995 mb_type
|= MB_TYPE_INTERLACED
;
1997 h
->slice_table
[ mb_xy
]= h
->slice_num
;
1999 if(IS_INTRA_PCM(mb_type
)) {
2000 const int mb_size
= ff_h264_mb_sizes
[h
->sps
.chroma_format_idc
] *
2001 h
->sps
.bit_depth_luma
>> 3;
2004 // We assume these blocks are very rare so we do not optimize it.
2005 // FIXME The two following lines get the bitstream position in the cabac
2006 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2007 ptr
= h
->cabac
.bytestream
;
2008 if(h
->cabac
.low
&0x1) ptr
--;
2010 if(h
->cabac
.low
&0x1FF) ptr
--;
2013 // The pixels are stored in the same order as levels in h->mb array.
2014 if ((int) (h
->cabac
.bytestream_end
- ptr
) < mb_size
)
2016 h
->intra_pcm_ptr
= ptr
;
2019 ff_init_cabac_decoder(&h
->cabac
, ptr
, h
->cabac
.bytestream_end
- ptr
);
2021 // All blocks are present
2022 h
->cbp_table
[mb_xy
] = 0xf7ef;
2023 h
->chroma_pred_mode_table
[mb_xy
] = 0;
2024 // In deblocking, the quantizer is 0
2025 h
->cur_pic
.qscale_table
[mb_xy
] = 0;
2026 // All coeffs are present
2027 memset(h
->non_zero_count
[mb_xy
], 16, 48);
2028 h
->cur_pic
.mb_type
[mb_xy
] = mb_type
;
2029 h
->last_qscale_diff
= 0;
2033 local_ref_count
[0] = h
->ref_count
[0] << MB_MBAFF(h
);
2034 local_ref_count
[1] = h
->ref_count
[1] << MB_MBAFF(h
);
2036 fill_decode_caches(h
, mb_type
);
2038 if( IS_INTRA( mb_type
) ) {
2040 if( IS_INTRA4x4( mb_type
) ) {
2041 if( dct8x8_allowed
&& get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[399 + h
->neighbor_transform_size
] ) ) {
2042 mb_type
|= MB_TYPE_8x8DCT
;
2043 for( i
= 0; i
< 16; i
+=4 ) {
2044 int pred
= pred_intra_mode( h
, i
);
2045 int mode
= decode_cabac_mb_intra4x4_pred_mode( h
, pred
);
2046 fill_rectangle( &h
->intra4x4_pred_mode_cache
[ scan8
[i
] ], 2, 2, 8, mode
, 1 );
2049 for( i
= 0; i
< 16; i
++ ) {
2050 int pred
= pred_intra_mode( h
, i
);
2051 h
->intra4x4_pred_mode_cache
[ scan8
[i
] ] = decode_cabac_mb_intra4x4_pred_mode( h
, pred
);
2053 av_dlog(h
->avctx
, "i4x4 pred=%d mode=%d\n", pred
,
2054 h
->intra4x4_pred_mode_cache
[scan8
[i
]]);
2057 write_back_intra_pred_mode(h
);
2058 if( ff_h264_check_intra4x4_pred_mode(h
) < 0 ) return -1;
2060 h
->intra16x16_pred_mode
= ff_h264_check_intra_pred_mode( h
, h
->intra16x16_pred_mode
, 0 );
2061 if( h
->intra16x16_pred_mode
< 0 ) return -1;
2064 h
->chroma_pred_mode_table
[mb_xy
] =
2065 pred_mode
= decode_cabac_mb_chroma_pre_mode( h
);
2067 pred_mode
= ff_h264_check_intra_pred_mode( h
, pred_mode
, 1 );
2068 if( pred_mode
< 0 ) return -1;
2069 h
->chroma_pred_mode
= pred_mode
;
2071 h
->chroma_pred_mode
= DC_128_PRED8x8
;
2073 } else if( partition_count
== 4 ) {
2074 int i
, j
, sub_partition_count
[4], list
, ref
[2][4];
2076 if( h
->slice_type_nos
== AV_PICTURE_TYPE_B
) {
2077 for( i
= 0; i
< 4; i
++ ) {
2078 h
->sub_mb_type
[i
] = decode_cabac_b_mb_sub_type( h
);
2079 sub_partition_count
[i
]= b_sub_mb_type_info
[ h
->sub_mb_type
[i
] ].partition_count
;
2080 h
->sub_mb_type
[i
]= b_sub_mb_type_info
[ h
->sub_mb_type
[i
] ].type
;
2082 if( IS_DIRECT(h
->sub_mb_type
[0] | h
->sub_mb_type
[1] |
2083 h
->sub_mb_type
[2] | h
->sub_mb_type
[3]) ) {
2084 ff_h264_pred_direct_motion(h
, &mb_type
);
2085 h
->ref_cache
[0][scan8
[4]] =
2086 h
->ref_cache
[1][scan8
[4]] =
2087 h
->ref_cache
[0][scan8
[12]] =
2088 h
->ref_cache
[1][scan8
[12]] = PART_NOT_AVAILABLE
;
2089 for( i
= 0; i
< 4; i
++ )
2090 fill_rectangle( &h
->direct_cache
[scan8
[4*i
]], 2, 2, 8, (h
->sub_mb_type
[i
]>>1)&0xFF, 1 );
2093 for( i
= 0; i
< 4; i
++ ) {
2094 h
->sub_mb_type
[i
] = decode_cabac_p_mb_sub_type( h
);
2095 sub_partition_count
[i
]= p_sub_mb_type_info
[ h
->sub_mb_type
[i
] ].partition_count
;
2096 h
->sub_mb_type
[i
]= p_sub_mb_type_info
[ h
->sub_mb_type
[i
] ].type
;
2100 for( list
= 0; list
< h
->list_count
; list
++ ) {
2101 for( i
= 0; i
< 4; i
++ ) {
2102 if(IS_DIRECT(h
->sub_mb_type
[i
])) continue;
2103 if(IS_DIR(h
->sub_mb_type
[i
], 0, list
)){
2104 if (local_ref_count
[list
] > 1) {
2105 ref
[list
][i
] = decode_cabac_mb_ref( h
, list
, 4*i
);
2106 if (ref
[list
][i
] >= (unsigned)local_ref_count
[list
]) {
2107 av_log(h
->avctx
, AV_LOG_ERROR
, "Reference %d >= %d\n", ref
[list
][i
], local_ref_count
[list
]);
2115 h
->ref_cache
[list
][ scan8
[4*i
]+1 ]=
2116 h
->ref_cache
[list
][ scan8
[4*i
]+8 ]=h
->ref_cache
[list
][ scan8
[4*i
]+9 ]= ref
[list
][i
];
2121 dct8x8_allowed
= get_dct8x8_allowed(h
);
2123 for(list
=0; list
<h
->list_count
; list
++){
2125 h
->ref_cache
[list
][ scan8
[4*i
] ]=h
->ref_cache
[list
][ scan8
[4*i
]+1 ];
2126 if(IS_DIRECT(h
->sub_mb_type
[i
])){
2127 fill_rectangle(h
->mvd_cache
[list
][scan8
[4*i
]], 2, 2, 8, 0, 2);
2131 if(IS_DIR(h
->sub_mb_type
[i
], 0, list
) && !IS_DIRECT(h
->sub_mb_type
[i
])){
2132 const int sub_mb_type
= h
->sub_mb_type
[i
];
2133 const int block_width
= (sub_mb_type
& (MB_TYPE_16x16
|MB_TYPE_16x8
)) ? 2 : 1;
2134 for(j
=0; j
<sub_partition_count
[i
]; j
++){
2137 const int index
= 4*i
+ block_width
*j
;
2138 int16_t (* mv_cache
)[2]= &h
->mv_cache
[list
][ scan8
[index
] ];
2139 uint8_t (* mvd_cache
)[2]= &h
->mvd_cache
[list
][ scan8
[index
] ];
2140 pred_motion(h
, index
, block_width
, list
, h
->ref_cache
[list
][ scan8
[index
] ], &mx
, &my
);
2141 DECODE_CABAC_MB_MVD( h
, list
, index
)
2142 tprintf(h
->avctx
, "final mv:%d %d\n", mx
, my
);
2144 if(IS_SUB_8X8(sub_mb_type
)){
2146 mv_cache
[ 8 ][0]= mv_cache
[ 9 ][0]= mx
;
2148 mv_cache
[ 8 ][1]= mv_cache
[ 9 ][1]= my
;
2151 mvd_cache
[ 8 ][0]= mvd_cache
[ 9 ][0]= mpx
;
2153 mvd_cache
[ 8 ][1]= mvd_cache
[ 9 ][1]= mpy
;
2154 }else if(IS_SUB_8X4(sub_mb_type
)){
2155 mv_cache
[ 1 ][0]= mx
;
2156 mv_cache
[ 1 ][1]= my
;
2158 mvd_cache
[ 1 ][0]= mpx
;
2159 mvd_cache
[ 1 ][1]= mpy
;
2160 }else if(IS_SUB_4X8(sub_mb_type
)){
2161 mv_cache
[ 8 ][0]= mx
;
2162 mv_cache
[ 8 ][1]= my
;
2164 mvd_cache
[ 8 ][0]= mpx
;
2165 mvd_cache
[ 8 ][1]= mpy
;
2167 mv_cache
[ 0 ][0]= mx
;
2168 mv_cache
[ 0 ][1]= my
;
2170 mvd_cache
[ 0 ][0]= mpx
;
2171 mvd_cache
[ 0 ][1]= mpy
;
2174 fill_rectangle(h
->mv_cache
[list
][ scan8
[4*i
] ], 2, 2, 8, 0, 4);
2175 fill_rectangle(h
->mvd_cache
[list
][ scan8
[4*i
] ], 2, 2, 8, 0, 2);
2179 } else if( IS_DIRECT(mb_type
) ) {
2180 ff_h264_pred_direct_motion(h
, &mb_type
);
2181 fill_rectangle(h
->mvd_cache
[0][scan8
[0]], 4, 4, 8, 0, 2);
2182 fill_rectangle(h
->mvd_cache
[1][scan8
[0]], 4, 4, 8, 0, 2);
2183 dct8x8_allowed
&= h
->sps
.direct_8x8_inference_flag
;
2186 if(IS_16X16(mb_type
)){
2187 for(list
=0; list
<h
->list_count
; list
++){
2188 if(IS_DIR(mb_type
, 0, list
)){
2190 if (local_ref_count
[list
] > 1) {
2191 ref
= decode_cabac_mb_ref(h
, list
, 0);
2192 if (ref
>= (unsigned)local_ref_count
[list
]) {
2193 av_log(h
->avctx
, AV_LOG_ERROR
, "Reference %d >= %d\n", ref
, local_ref_count
[list
]);
2198 fill_rectangle(&h
->ref_cache
[list
][ scan8
[0] ], 4, 4, 8, ref
, 1);
2201 for(list
=0; list
<h
->list_count
; list
++){
2202 if(IS_DIR(mb_type
, 0, list
)){
2204 pred_motion(h
, 0, 4, list
, h
->ref_cache
[list
][ scan8
[0] ], &mx
, &my
);
2205 DECODE_CABAC_MB_MVD( h
, list
, 0)
2206 tprintf(h
->avctx
, "final mv:%d %d\n", mx
, my
);
2208 fill_rectangle(h
->mvd_cache
[list
][ scan8
[0] ], 4, 4, 8, pack8to16(mpx
,mpy
), 2);
2209 fill_rectangle(h
->mv_cache
[list
][ scan8
[0] ], 4, 4, 8, pack16to32(mx
,my
), 4);
2213 else if(IS_16X8(mb_type
)){
2214 for(list
=0; list
<h
->list_count
; list
++){
2216 if(IS_DIR(mb_type
, i
, list
)){
2218 if (local_ref_count
[list
] > 1) {
2219 ref
= decode_cabac_mb_ref( h
, list
, 8*i
);
2220 if (ref
>= (unsigned)local_ref_count
[list
]) {
2221 av_log(h
->avctx
, AV_LOG_ERROR
, "Reference %d >= %d\n", ref
, local_ref_count
[list
]);
2226 fill_rectangle(&h
->ref_cache
[list
][ scan8
[0] + 16*i
], 4, 2, 8, ref
, 1);
2228 fill_rectangle(&h
->ref_cache
[list
][ scan8
[0] + 16*i
], 4, 2, 8, (LIST_NOT_USED
&0xFF), 1);
2231 for(list
=0; list
<h
->list_count
; list
++){
2233 if(IS_DIR(mb_type
, i
, list
)){
2235 pred_16x8_motion(h
, 8*i
, list
, h
->ref_cache
[list
][scan8
[0] + 16*i
], &mx
, &my
);
2236 DECODE_CABAC_MB_MVD( h
, list
, 8*i
)
2237 tprintf(h
->avctx
, "final mv:%d %d\n", mx
, my
);
2239 fill_rectangle(h
->mvd_cache
[list
][ scan8
[0] + 16*i
], 4, 2, 8, pack8to16(mpx
,mpy
), 2);
2240 fill_rectangle(h
->mv_cache
[list
][ scan8
[0] + 16*i
], 4, 2, 8, pack16to32(mx
,my
), 4);
2242 fill_rectangle(h
->mvd_cache
[list
][ scan8
[0] + 16*i
], 4, 2, 8, 0, 2);
2243 fill_rectangle(h
-> mv_cache
[list
][ scan8
[0] + 16*i
], 4, 2, 8, 0, 4);
2248 av_assert2(IS_8X16(mb_type
));
2249 for(list
=0; list
<h
->list_count
; list
++){
2251 if(IS_DIR(mb_type
, i
, list
)){ //FIXME optimize
2253 if (local_ref_count
[list
] > 1) {
2254 ref
= decode_cabac_mb_ref( h
, list
, 4*i
);
2255 if (ref
>= (unsigned)local_ref_count
[list
]) {
2256 av_log(h
->avctx
, AV_LOG_ERROR
, "Reference %d >= %d\n", ref
, local_ref_count
[list
]);
2261 fill_rectangle(&h
->ref_cache
[list
][ scan8
[0] + 2*i
], 2, 4, 8, ref
, 1);
2263 fill_rectangle(&h
->ref_cache
[list
][ scan8
[0] + 2*i
], 2, 4, 8, (LIST_NOT_USED
&0xFF), 1);
2266 for(list
=0; list
<h
->list_count
; list
++){
2268 if(IS_DIR(mb_type
, i
, list
)){
2270 pred_8x16_motion(h
, i
*4, list
, h
->ref_cache
[list
][ scan8
[0] + 2*i
], &mx
, &my
);
2271 DECODE_CABAC_MB_MVD( h
, list
, 4*i
)
2273 tprintf(h
->avctx
, "final mv:%d %d\n", mx
, my
);
2274 fill_rectangle(h
->mvd_cache
[list
][ scan8
[0] + 2*i
], 2, 4, 8, pack8to16(mpx
,mpy
), 2);
2275 fill_rectangle(h
->mv_cache
[list
][ scan8
[0] + 2*i
], 2, 4, 8, pack16to32(mx
,my
), 4);
2277 fill_rectangle(h
->mvd_cache
[list
][ scan8
[0] + 2*i
], 2, 4, 8, 0, 2);
2278 fill_rectangle(h
-> mv_cache
[list
][ scan8
[0] + 2*i
], 2, 4, 8, 0, 4);
2285 if( IS_INTER( mb_type
) ) {
2286 h
->chroma_pred_mode_table
[mb_xy
] = 0;
2287 write_back_motion( h
, mb_type
);
2290 if( !IS_INTRA16x16( mb_type
) ) {
2291 cbp
= decode_cabac_mb_cbp_luma( h
);
2293 cbp
|= decode_cabac_mb_cbp_chroma( h
) << 4;
2295 if (!decode_chroma
&& cbp
>15) {
2296 av_log(h
->avctx
, AV_LOG_ERROR
, "gray chroma\n");
2297 return AVERROR_INVALIDDATA
;
2301 h
->cbp_table
[mb_xy
] = h
->cbp
= cbp
;
2303 if( dct8x8_allowed
&& (cbp
&15) && !IS_INTRA( mb_type
) ) {
2304 mb_type
|= MB_TYPE_8x8DCT
* get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[399 + h
->neighbor_transform_size
] );
2307 /* It would be better to do this in fill_decode_caches, but we don't know
2308 * the transform mode of the current macroblock there. */
2309 if (CHROMA444(h
) && IS_8x8DCT(mb_type
)){
2311 uint8_t *nnz_cache
= h
->non_zero_count_cache
;
2312 for (i
= 0; i
< 2; i
++){
2313 if (h
->left_type
[LEFT(i
)] && !IS_8x8DCT(h
->left_type
[LEFT(i
)])){
2314 nnz_cache
[3+8* 1 + 2*8*i
]=
2315 nnz_cache
[3+8* 2 + 2*8*i
]=
2316 nnz_cache
[3+8* 6 + 2*8*i
]=
2317 nnz_cache
[3+8* 7 + 2*8*i
]=
2318 nnz_cache
[3+8*11 + 2*8*i
]=
2319 nnz_cache
[3+8*12 + 2*8*i
]= IS_INTRA(mb_type
) ? 64 : 0;
2322 if (h
->top_type
&& !IS_8x8DCT(h
->top_type
)){
2323 uint32_t top_empty
= CABAC(h
) && !IS_INTRA(mb_type
) ? 0 : 0x40404040;
2324 AV_WN32A(&nnz_cache
[4+8* 0], top_empty
);
2325 AV_WN32A(&nnz_cache
[4+8* 5], top_empty
);
2326 AV_WN32A(&nnz_cache
[4+8*10], top_empty
);
2329 h
->cur_pic
.mb_type
[mb_xy
] = mb_type
;
2331 if( cbp
|| IS_INTRA16x16( mb_type
) ) {
2332 const uint8_t *scan
, *scan8x8
;
2333 const uint32_t *qmul
;
2335 if(IS_INTERLACED(mb_type
)){
2336 scan8x8
= h
->qscale
? h
->field_scan8x8
: h
->field_scan8x8_q0
;
2337 scan
= h
->qscale
? h
->field_scan
: h
->field_scan_q0
;
2339 scan8x8
= h
->qscale
? h
->zigzag_scan8x8
: h
->zigzag_scan8x8_q0
;
2340 scan
= h
->qscale
? h
->zigzag_scan
: h
->zigzag_scan_q0
;
2343 // decode_cabac_mb_dqp
2344 if(get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[60 + (h
->last_qscale_diff
!= 0)])){
2347 const int max_qp
= 51 + 6*(h
->sps
.bit_depth_luma
-8);
2349 while( get_cabac_noinline( &h
->cabac
, &h
->cabac_state
[60 + ctx
] ) ) {
2352 if(val
> 2*max_qp
){ //prevent infinite loop
2353 av_log(h
->avctx
, AV_LOG_ERROR
, "cabac decode of qscale diff failed at %d %d\n", h
->mb_x
, h
->mb_y
);
2361 val
= -((val
+ 1)>>1);
2362 h
->last_qscale_diff
= val
;
2364 if(((unsigned)h
->qscale
) > max_qp
){
2365 if(h
->qscale
<0) h
->qscale
+= max_qp
+1;
2366 else h
->qscale
-= max_qp
+1;
2368 h
->chroma_qp
[0] = get_chroma_qp(h
, 0, h
->qscale
);
2369 h
->chroma_qp
[1] = get_chroma_qp(h
, 1, h
->qscale
);
2371 h
->last_qscale_diff
=0;
2373 decode_cabac_luma_residual(h
, scan
, scan8x8
, pixel_shift
, mb_type
, cbp
, 0);
2375 decode_cabac_luma_residual(h
, scan
, scan8x8
, pixel_shift
, mb_type
, cbp
, 1);
2376 decode_cabac_luma_residual(h
, scan
, scan8x8
, pixel_shift
, mb_type
, cbp
, 2);
2377 } else if (CHROMA422(h
)) {
2380 for (c
= 0; c
< 2; c
++)
2381 decode_cabac_residual_dc_422(h
, h
->mb
+ ((256 + 16*16*c
) << pixel_shift
), 3,
2382 CHROMA_DC_BLOCK_INDEX
+ c
,
2383 chroma422_dc_scan
, 8);
2388 for( c
= 0; c
< 2; c
++ ) {
2389 int16_t *mb
= h
->mb
+ (16*(16 + 16*c
) << pixel_shift
);
2390 qmul
= h
->dequant4_coeff
[c
+1+(IS_INTRA( mb_type
) ? 0:3)][h
->chroma_qp
[c
]];
2391 for (i8x8
= 0; i8x8
< 2; i8x8
++) {
2392 for (i
= 0; i
< 4; i
++) {
2393 const int index
= 16 + 16 * c
+ 8*i8x8
+ i
;
2394 decode_cabac_residual_nondc(h
, mb
, 4, index
, scan
+ 1, qmul
, 15);
2395 mb
+= 16<<pixel_shift
;
2400 fill_rectangle(&h
->non_zero_count_cache
[scan8
[16]], 4, 4, 8, 0, 1);
2401 fill_rectangle(&h
->non_zero_count_cache
[scan8
[32]], 4, 4, 8, 0, 1);
2403 } else /* yuv420 */ {
2406 for (c
= 0; c
< 2; c
++)
2407 decode_cabac_residual_dc(h
, h
->mb
+ ((256 + 16*16*c
) << pixel_shift
), 3, CHROMA_DC_BLOCK_INDEX
+c
, chroma_dc_scan
, 4);
2412 for( c
= 0; c
< 2; c
++ ) {
2413 qmul
= h
->dequant4_coeff
[c
+1+(IS_INTRA( mb_type
) ? 0:3)][h
->chroma_qp
[c
]];
2414 for( i
= 0; i
< 4; i
++ ) {
2415 const int index
= 16 + 16 * c
+ i
;
2416 decode_cabac_residual_nondc(h
, h
->mb
+ (16*index
<< pixel_shift
), 4, index
, scan
+ 1, qmul
, 15);
2420 fill_rectangle(&h
->non_zero_count_cache
[scan8
[16]], 4, 4, 8, 0, 1);
2421 fill_rectangle(&h
->non_zero_count_cache
[scan8
[32]], 4, 4, 8, 0, 1);
2425 fill_rectangle(&h
->non_zero_count_cache
[scan8
[ 0]], 4, 4, 8, 0, 1);
2426 fill_rectangle(&h
->non_zero_count_cache
[scan8
[16]], 4, 4, 8, 0, 1);
2427 fill_rectangle(&h
->non_zero_count_cache
[scan8
[32]], 4, 4, 8, 0, 1);
2428 h
->last_qscale_diff
= 0;
2431 h
->cur_pic
.qscale_table
[mb_xy
] = h
->qscale
;
2432 write_back_non_zero_count(h
);