FFmpeg
Loading...
Searching...
No Matches
h264_cabac.c
Go to the documentation of this file.
1/*
2 * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4 *
5 * This file is part of FFmpeg.
6 *
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.
11 *
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.
16 *
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
20 */
21
22/**
23 * @file
24 * H.264 / AVC / MPEG-4 part10 cabac decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
26 */
27
28#define CABAC(h) 1
29#define UNCHECKED_BITSTREAM_READER 1
30#define INT_BIT (CHAR_BIT * sizeof(int))
31
33#include "libavutil/avassert.h"
34#include "config.h"
35#include "cabac.h"
36#include "cabac_functions.h"
37#include "h264dec.h"
38#include "h264data.h"
39#include "h264_mvpred.h"
40#include "mpegutils.h"
41
42#if ARCH_X86
43#include "x86/h264_cabac.c"
44#elif ARCH_LOONGARCH64
46#endif
47
48/* Cabac pre state table */
49
50static const int8_t cabac_context_init_I[1024][2] =
51{
52 /* 0 - 10 */
53 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
54 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
55 { -6, 53 }, { -1, 54 }, { 7, 51 },
56
57 /* 11 - 23 unused for I */
58 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
59 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
60 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
61 { 0, 0 },
62
63 /* 24- 39 */
64 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
65 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
66 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
67 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
68
69 /* 40 - 53 */
70 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
71 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
72 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
73 { 0, 0 }, { 0, 0 },
74
75 /* 54 - 59 */
76 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
77 { 0, 0 }, { 0, 0 },
78
79 /* 60 - 69 */
80 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
81 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
82 { 13, 41 }, { 3, 62 },
83
84 /* 70 -> 87 */
85 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 },
86 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 },
87 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 },
88 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 },
89 { -12, 115 },{ -16, 122 },
90
91 /* 88 -> 104 */
92 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 },
93 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 },
94 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 },
95 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 },
96 { -22, 125 },
97
98 /* 105 -> 135 */
99 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
100 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
101 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
102 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
103 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
104 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
105 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
106 { 14, 62 }, { -13, 108 },{ -15, 100 },
107
108 /* 136 -> 165 */
109 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 },
110 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 },
111 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 },
112 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 },
113 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 },
114 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 },
115 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 },
116 { 0, 62 }, { 12, 72 },
117
118 /* 166 -> 196 */
119 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
120 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
121 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
122 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
123 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
124 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
125 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
126 { 0, 89 }, { 26, -19 }, { 22, -17 },
127
128 /* 197 -> 226 */
129 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 },
130 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 },
131 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 },
132 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 },
133 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 },
134 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 },
135 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 },
136 { 12, 68 }, { 2, 97 },
137
138 /* 227 -> 251 */
139 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
140 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
141 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
142 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
143 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
144 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
145 { -4, 65 },
146
147 /* 252 -> 275 */
148 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 },
149 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 },
150 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 },
151 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 },
152 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 },
153 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 },
154
155 /* 276 a bit special (not used, bypass is used instead) */
156 { 0, 0 },
157
158 /* 277 -> 307 */
159 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
160 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
161 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
162 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
163 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
164 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
165 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
166 { 9, 64 }, { -12, 104 },{ -11, 97 },
167
168 /* 308 -> 337 */
169 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 },
170 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 },
171 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 },
172 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 },
173 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 },
174 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 },
175 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 },
176 { 5, 64 }, { 12, 70 },
177
178 /* 338 -> 368 */
179 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
180 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
181 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
182 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
183 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
184 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
185 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
186 { -12, 109 },{ 36, -35 }, { 36, -34 },
187
188 /* 369 -> 398 */
189 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 },
190 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 },
191 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
192 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
193 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
194 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
195 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
196 { 29, 39 }, { 19, 66 },
197
198 /* 399 -> 435 */
199 { 31, 21 }, { 31, 31 }, { 25, 50 },
200 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
201 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
202 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
203 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
204 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
205 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
206 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
207 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
208 { 0, 68 }, { -9, 92 },
209
210 /* 436 -> 459 */
211 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
212 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
213 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
214 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
215 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
216 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
217
218 /* 460 -> 1024 */
219 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
220 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
221 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
222 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
223 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 },
224 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
225 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
226 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
227 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
228 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
229 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
230 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
231 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
232 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
233 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
234 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
235 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
236 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 },
237 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 },
238 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 },
239 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 },
240 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 },
241 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 },
242 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 },
243 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
244 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 },
245 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 },
246 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 },
247 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
248 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
249 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
250 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
251 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
252 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
253 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
254 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
255 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
256 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
257 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
258 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 },
259 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 },
260 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 },
261 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 },
262 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 },
263 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 },
264 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 },
265 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 },
266 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 },
267 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 },
268 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 },
269 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
270 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
271 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
272 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 },
273 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 },
274 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 },
275 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 },
276 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 },
277 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 },
278 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 },
279 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
280 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 },
281 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
282 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
283 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 },
284 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 },
285 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 },
286 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 },
287 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 },
288 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 },
289 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 },
290 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 },
291 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 },
292 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 },
293 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 },
294 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 },
295 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 },
296 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 },
297 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 },
298 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
299 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
300 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
301 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
302 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
303 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
304 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
305 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
306 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
307 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
308 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
309 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 },
310 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 },
311 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 },
312 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 },
313 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 },
314 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 },
315 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 },
316 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 },
317 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 },
318 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 },
319 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 },
320 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
321 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
322 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
323 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
324 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
325 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
326 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
327 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
328 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
329 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
330 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
331 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 },
332 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 },
333 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 },
334 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 },
335 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 },
336 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 },
337 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 },
338 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 },
339 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 },
340 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 },
341 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 },
342 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 },
343 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 },
344 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 },
345 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 },
346 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 },
347 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 },
348 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 },
349 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 },
350 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 },
351 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 },
352 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 },
353 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 },
354 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 },
355 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 },
356 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 },
357 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
358 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 },
359 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }
360};
361
362static const int8_t cabac_context_init_PB[3][1024][2] =
363{
364 /* i_cabac_init_idc == 0 */
365 {
366 /* 0 - 10 */
367 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
368 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
369 { -6, 53 }, { -1, 54 }, { 7, 51 },
370
371 /* 11 - 23 */
372 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 },
373 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 },
374 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 },
375 { 17, 50 },
376
377 /* 24 - 39 */
378 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 },
379 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 },
380 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 },
381 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 },
382
383 /* 40 - 53 */
384 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 },
385 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 },
386 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 },
387 { -3, 81 }, { 0, 88 },
388
389 /* 54 - 59 */
390 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 },
391 { -7, 72 }, { 1, 58 },
392
393 /* 60 - 69 */
394 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
395 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
396 { 13, 41 }, { 3, 62 },
397
398 /* 70 - 87 */
399 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 },
400 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 },
401 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 },
402 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 },
403 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 },
404 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 },
405 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 },
406 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 },
407 { 0, 68 }, { -4, 69 }, { -8, 88 },
408
409 /* 105 -> 165 */
410 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
411 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
412 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
413 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
414 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
415 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
416 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
417 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
418 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
419 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
420 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
421 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 },
422 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 },
423 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 },
424 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 },
425 { 9, 69 },
426
427 /* 166 - 226 */
428 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
429 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
430 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
431 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
432 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
433 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
434 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
435 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
436 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
437 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
438 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
439 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 },
440 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 },
441 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 },
442 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 },
443 { -9, 108 },
444
445 /* 227 - 275 */
446 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
447 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
448 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
449 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
450 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
451 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
452 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
453 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 },
454 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 },
455 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 },
456 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 },
457 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 },
458 { -8, 85 },
459
460 /* 276 a bit special (not used, bypass is used instead) */
461 { 0, 0 },
462
463 /* 277 - 337 */
464 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
465 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
466 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
467 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
468 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
469 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
470 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
471 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
472 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
473 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
474 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
475 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 },
476 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 },
477 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 },
478 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 },
479 { 26, 43 },
480
481 /* 338 - 398 */
482 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
483 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
484 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
485 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
486 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
487 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
488 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
489 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
490 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
491 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
492 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
493 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 },
494 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
495 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
496 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
497 { 11, 86 },
498
499 /* 399 - 435 */
500 { 12, 40 }, { 11, 51 }, { 14, 59 },
501 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
502 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
503 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
504 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
505 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
506 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
507 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
508 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
509 { -8, 66 }, { -8, 76 },
510
511 /* 436 - 459 */
512 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
513 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
514 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
515 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
516 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
517 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
518
519 /* 460 - 1024 */
520 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
521 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
522 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
523 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 },
524 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 },
525 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
526 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
527 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
528 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
529 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
530 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
531 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
532 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
533 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
534 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
535 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
536 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
537 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 },
538 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 },
539 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 },
540 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 },
541 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 },
542 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 },
543 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 },
544 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 },
545 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 },
546 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 },
547 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 },
548 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
549 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
550 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
551 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
552 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
553 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
554 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
555 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
556 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
557 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
558 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
559 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 },
560 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 },
561 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 },
562 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 },
563 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 },
564 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 },
565 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 },
566 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 },
567 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 },
568 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 },
569 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 },
570 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
571 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
572 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
573 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 },
574 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 },
575 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 },
576 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 },
577 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 },
578 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 },
579 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 },
580 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
581 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
582 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
583 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
584 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 },
585 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 },
586 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 },
587 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 },
588 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 },
589 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 },
590 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 },
591 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 },
592 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 },
593 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 },
594 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 },
595 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 },
596 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 },
597 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 },
598 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 },
599 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
600 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
601 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
602 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
603 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
604 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
605 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
606 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
607 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
608 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
609 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
610 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 },
611 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 },
612 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
613 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 },
614 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 },
615 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 },
616 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 },
617 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 },
618 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 },
619 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 },
620 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 },
621 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
622 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
623 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
624 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
625 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
626 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
627 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
628 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
629 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
630 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
631 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
632 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 },
633 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 },
634 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 },
635 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 },
636 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 },
637 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 },
638 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 },
639 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 },
640 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 },
641 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 },
642 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 },
643 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 },
644 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 },
645 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 },
646 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 },
647 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 },
648 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 },
649 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 },
650 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 },
651 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 },
652 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 },
653 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 },
654 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 },
655 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 },
656 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 },
657 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 },
658 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
659 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 },
660 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }
661 },
662
663 /* i_cabac_init_idc == 1 */
664 {
665 /* 0 - 10 */
666 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
667 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
668 { -6, 53 }, { -1, 54 }, { 7, 51 },
669
670 /* 11 - 23 */
671 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 },
672 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 },
673 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 },
674 { 10, 54 },
675
676 /* 24 - 39 */
677 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 },
678 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 },
679 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 },
680 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 },
681
682 /* 40 - 53 */
683 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 },
684 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 },
685 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 },
686 { -7, 86 },{ -5, 95 },
687
688 /* 54 - 59 */
689 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 },
690 { -5, 72 },{ 0, 61 },
691
692 /* 60 - 69 */
693 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
694 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
695 { 13, 41 }, { 3, 62 },
696
697 /* 70 - 104 */
698 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 },
699 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 },
700 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 },
701 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 },
702 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 },
703 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 },
704 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 },
705 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 },
706 { 0, 68 }, { -7, 74 }, { -9, 88 },
707
708 /* 105 -> 165 */
709 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
710 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
711 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
712 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
713 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
714 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
715 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
716 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
717 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
718 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
719 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
720 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 },
721 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 },
722 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 },
723 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 },
724 { 0, 89 },
725
726 /* 166 - 226 */
727 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
728 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
729 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
730 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
731 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
732 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
733 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
734 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
735 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
736 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
737 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
738 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 },
739 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 },
740 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 },
741 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 },
742 { -10, 116 },
743
744 /* 227 - 275 */
745 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
746 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
747 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
748 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
749 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
750 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
751 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
752 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 },
753 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 },
754 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 },
755 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 },
756 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 },
757 { -4, 78 },
758
759 /* 276 a bit special (not used, bypass is used instead) */
760 { 0, 0 },
761
762 /* 277 - 337 */
763 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
764 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
765 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
766 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
767 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
768 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
769 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
770 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
771 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
772 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
773 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
774 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 },
775 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 },
776 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 },
777 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 },
778 { 18, 50 },
779
780 /* 338 - 398 */
781 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
782 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
783 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
784 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
785 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
786 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
787 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
788 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
789 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
790 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
791 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
792 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 },
793 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
794 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
795 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
796 { 11, 83 },
797
798 /* 399 - 435 */
799 { 25, 32 }, { 21, 49 }, { 21, 54 },
800 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
801 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
802 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
803 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
804 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
805 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
806 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
807 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
808 { -4, 67 }, { -7, 82 },
809
810 /* 436 - 459 */
811 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
812 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
813 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
814 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
815 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
816 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
817
818 /* 460 - 1024 */
819 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
820 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
821 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
822 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 },
823 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 },
824 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
825 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
826 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
827 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
828 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
829 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
830 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
831 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
832 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
833 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
834 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
835 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
836 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 },
837 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 },
838 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 },
839 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 },
840 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 },
841 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 },
842 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 },
843 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 },
844 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 },
845 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 },
846 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 },
847 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
848 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
849 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
850 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
851 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
852 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
853 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
854 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
855 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
856 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
857 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
858 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 },
859 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 },
860 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 },
861 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 },
862 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 },
863 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 },
864 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 },
865 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 },
866 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 },
867 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 },
868 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 },
869 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
870 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
871 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
872 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 },
873 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 },
874 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 },
875 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 },
876 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 },
877 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 },
878 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 },
879 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
880 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
881 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
882 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 },
883 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 },
884 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 },
885 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 },
886 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 },
887 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 },
888 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 },
889 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 },
890 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 },
891 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 },
892 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 },
893 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 },
894 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 },
895 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 },
896 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 },
897 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 },
898 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
899 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
900 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
901 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
902 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
903 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
904 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
905 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
906 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
907 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
908 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
909 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
910 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
911 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
912 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 },
913 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 },
914 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 },
915 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 },
916 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 },
917 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 },
918 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 },
919 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 },
920 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
921 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
922 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
923 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
924 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
925 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
926 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
927 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
928 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
929 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
930 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
931 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 },
932 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 },
933 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 },
934 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 },
935 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 },
936 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 },
937 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 },
938 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 },
939 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 },
940 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 },
941 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 },
942 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 },
943 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 },
944 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 },
945 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 },
946 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
947 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 },
948 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 },
949 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 },
950 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 },
951 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 },
952 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 },
953 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 },
954 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 },
955 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 },
956 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 },
957 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
958 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 },
959 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }
960 },
961
962 /* i_cabac_init_idc == 2 */
963 {
964 /* 0 - 10 */
965 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
966 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 },
967 { -6, 53 }, { -1, 54 }, { 7, 51 },
968
969 /* 11 - 23 */
970 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 },
971 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 },
972 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 },
973 { 14, 57 },
974
975 /* 24 - 39 */
976 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 },
977 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 },
978 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 },
979 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 },
980
981 /* 40 - 53 */
982 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 },
983 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 },
984 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 },
985 { -3, 90 },{ -1, 101 },
986
987 /* 54 - 59 */
988 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 },
989 { -7, 50 },{ 1, 60 },
990
991 /* 60 - 69 */
992 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 },
993 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 },
994 { 13, 41 }, { 3, 62 },
995
996 /* 70 - 104 */
997 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 },
998 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 },
999 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 },
1000 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 },
1001 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 },
1002 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 },
1003 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 },
1004 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 },
1005 { 3, 68 }, { -8, 71 }, { -13, 98 },
1006
1007 /* 105 -> 165 */
1008 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1009 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1010 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1011 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1012 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1013 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1014 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1015 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1016 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1017 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1018 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1019 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 },
1020 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 },
1021 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 },
1022 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 },
1023 { -22, 127 },
1024
1025 /* 166 - 226 */
1026 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1027 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1028 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1029 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1030 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1031 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1032 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1033 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1034 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1035 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1036 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1037 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 },
1038 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 },
1039 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 },
1040 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 },
1041 { -24, 127 },
1042
1043 /* 227 - 275 */
1044 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1045 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1046 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1047 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1048 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1049 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1050 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1051 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 },
1052 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 },
1053 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 },
1054 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 },
1055 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 },
1056 { -10, 87 },
1057
1058 /* 276 a bit special (not used, bypass is used instead) */
1059 { 0, 0 },
1060
1061 /* 277 - 337 */
1062 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1063 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1064 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1065 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1066 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1067 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1068 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1069 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1070 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1071 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1072 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1073 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 },
1074 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 },
1075 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 },
1076 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 },
1077 { 25, 42 },
1078
1079 /* 338 - 398 */
1080 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1081 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1082 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1083 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1084 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1085 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1086 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1087 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1088 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1089 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1090 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1091 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1092 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1093 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1094 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1095 { 25, 61 },
1096
1097 /* 399 - 435 */
1098 { 21, 33 }, { 19, 50 }, { 17, 61 },
1099 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1100 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1101 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1102 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1103 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1104 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1105 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1106 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1107 { -6, 68 }, { -10, 79 },
1108
1109 /* 436 - 459 */
1110 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1111 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1112 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1113 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1114 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1115 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1116
1117 /* 460 - 1024 */
1118 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1119 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1120 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1121 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 },
1122 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 },
1123 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1124 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1125 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1126 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1127 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1128 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1129 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1130 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1131 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1132 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1133 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1134 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1135 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 },
1136 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 },
1137 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 },
1138 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 },
1139 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 },
1140 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 },
1141 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 },
1142 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 },
1143 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 },
1144 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 },
1145 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 },
1146 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1147 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1148 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1149 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1150 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1151 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1152 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1153 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1154 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1155 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1156 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1157 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 },
1158 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 },
1159 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 },
1160 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 },
1161 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 },
1162 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 },
1163 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 },
1164 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 },
1165 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 },
1166 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 },
1167 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 },
1168 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1169 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1170 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1171 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 },
1172 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 },
1173 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 },
1174 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 },
1175 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 },
1176 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 },
1177 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 },
1178 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1179 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1180 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1181 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1182 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 },
1183 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 },
1184 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 },
1185 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 },
1186 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 },
1187 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 },
1188 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 },
1189 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 },
1190 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 },
1191 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 },
1192 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 },
1193 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 },
1194 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 },
1195 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 },
1196 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 },
1197 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1198 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1199 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1200 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1201 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1202 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1203 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1204 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1205 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1206 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1207 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1208 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
1209 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
1210 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
1211 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 },
1212 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 },
1213 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 },
1214 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 },
1215 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 },
1216 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 },
1217 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 },
1218 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 },
1219 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1220 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1221 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1222 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1223 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1224 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1225 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1226 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1227 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1228 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1229 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1230 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 },
1231 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 },
1232 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 },
1233 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 },
1234 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 },
1235 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 },
1236 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 },
1237 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 },
1238 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 },
1239 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 },
1240 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 },
1241 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 },
1242 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 },
1243 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 },
1244 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 },
1245 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 },
1246 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 },
1247 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 },
1248 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 },
1249 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 },
1250 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 },
1251 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 },
1252 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 },
1253 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 },
1254 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 },
1255 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 },
1256 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1257 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 },
1258 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }
1259 }
1260};
1261
1263{
1264 int i;
1265 const int8_t (*tab)[2];
1266 const int slice_qp = av_clip(sl->qscale - 6*(h->ps.sps->bit_depth_luma-8), 0, 51);
1267
1270
1271 /* calculate pre-state */
1272 for( i= 0; i < 1024; i++ ) {
1273 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1274
1275 pre^= pre>>31;
1276 if(pre > 124)
1277 pre= 124 + (pre&1);
1278
1279 sl->cabac_state[i] = pre;
1280 }
1281}
1282
1283static av_always_inline uint16_t pack8to16(unsigned a, unsigned b)
1284{
1285#if HAVE_BIGENDIAN
1286 return (b & 0xFF) + (a << 8);
1287#else
1288 return (a & 0xFF) + (b << 8);
1289#endif
1290}
1291
1293{
1294 const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
1295
1296 unsigned long ctx = 0;
1297
1298 ctx += sl->mb_field_decoding_flag & !!sl->mb_x; //for FMO:(s->current_picture.mb_type[mba_xy] >> 7) & (h->slice_table[mba_xy] == h->slice_num);
1299 ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
1300
1301 return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
1302}
1303
1305 int ctx_base, int intra_slice)
1306{
1307 uint8_t *state= &sl->cabac_state[ctx_base];
1308 int mb_type;
1309
1310 if(intra_slice){
1311 int ctx=0;
1313 ctx++;
1315 ctx++;
1316 if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
1317 return 0; /* I4x4 */
1318 state += 2;
1319 }else{
1320 if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1321 return 0; /* I4x4 */
1322 }
1323
1324 if( get_cabac_terminate( &sl->cabac ) )
1325 return 25; /* PCM */
1326
1327 mb_type = 1; /* I16x16 */
1328 mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1329 if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1330 mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1331 mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1332 mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1333 return mb_type;
1334}
1335
1337 int mb_x, int mb_y)
1338{
1339 int mba_xy, mbb_xy;
1340 int ctx = 0;
1341
1342 if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1343 int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1344 mba_xy = mb_xy - 1;
1345 if( (mb_y&1)
1346 && h->slice_table[mba_xy] == sl->slice_num
1347 && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1348 mba_xy += h->mb_stride;
1349 if (MB_FIELD(sl)) {
1350 mbb_xy = mb_xy - h->mb_stride;
1351 if( !(mb_y&1)
1352 && h->slice_table[mbb_xy] == sl->slice_num
1353 && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
1354 mbb_xy -= h->mb_stride;
1355 }else
1356 mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1357 }else{
1358 int mb_xy = sl->mb_xy;
1359 mba_xy = mb_xy - 1;
1360 mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1361 }
1362
1363 if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1364 ctx++;
1365 if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1366 ctx++;
1367
1369 ctx += 13;
1370 return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1371}
1372
1374{
1375 int mode = 0;
1376
1377 if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1378 return pred_mode;
1379
1380 mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1381 mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1382 mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1383
1384 return mode + ( mode >= pred_mode );
1385}
1386
1388{
1389 const int mba_xy = sl->left_mb_xy[0];
1390 const int mbb_xy = sl->top_mb_xy;
1391
1392 int ctx = 0;
1393
1394 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1395 if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1396 ctx++;
1397
1398 if (sl->top_type && h->chroma_pred_mode_table[mbb_xy] != 0)
1399 ctx++;
1400
1401 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1402 return 0;
1403
1404 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1405 return 1;
1406 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1407 return 2;
1408 else
1409 return 3;
1410}
1411
1413{
1414 int cbp_b, cbp_a, ctx, cbp = 0;
1415
1416 cbp_a = sl->left_cbp;
1417 cbp_b = sl->top_cbp;
1418
1419 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1420 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1421 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1422 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1423 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1424 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1425 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1426 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1427 return cbp;
1428}
1430{
1431 int ctx;
1432 int cbp_a, cbp_b;
1433
1434 cbp_a = (sl->left_cbp>>4)&0x03;
1435 cbp_b = (sl-> top_cbp>>4)&0x03;
1436
1437 ctx = 0;
1438 if( cbp_a > 0 ) ctx++;
1439 if( cbp_b > 0 ) ctx += 2;
1440 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1441 return 0;
1442
1443 ctx = 4;
1444 if( cbp_a == 2 ) ctx++;
1445 if( cbp_b == 2 ) ctx += 2;
1446 return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1447}
1448
1450{
1451 if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1452 return 0; /* 8x8 */
1453 if( !get_cabac( &sl->cabac, &sl->cabac_state[22] ) )
1454 return 1; /* 8x4 */
1455 if( get_cabac( &sl->cabac, &sl->cabac_state[23] ) )
1456 return 2; /* 4x8 */
1457 return 3; /* 4x4 */
1458}
1460{
1461 int type;
1462 if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1463 return 0; /* B_Direct_8x8 */
1464 if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1465 return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1466 type = 3;
1467 if( get_cabac( &sl->cabac, &sl->cabac_state[38] ) ) {
1468 if( get_cabac( &sl->cabac, &sl->cabac_state[39] ) )
1469 return 11 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1470 type += 4;
1471 }
1472 type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1473 type += get_cabac( &sl->cabac, &sl->cabac_state[39] );
1474 return type;
1475}
1476
1477static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
1478{
1479 int refa = sl->ref_cache[list][scan8[n] - 1];
1480 int refb = sl->ref_cache[list][scan8[n] - 8];
1481 int ref = 0;
1482 int ctx = 0;
1483
1484 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1485 if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1486 ctx++;
1487 if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1488 ctx += 2;
1489 } else {
1490 if( refa > 0 )
1491 ctx++;
1492 if( refb > 0 )
1493 ctx += 2;
1494 }
1495
1496 while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
1497 ref++;
1498 ctx = (ctx>>2)+4;
1499 if(ref >= 32 /*h->ref_list[list]*/){
1500 return -1;
1501 }
1502 }
1503 return ref;
1504}
1505
1506static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
1507{
1508 int mvd;
1509
1510 if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1511// if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1512 *mvda= 0;
1513 return 0;
1514 }
1515
1516 mvd= 1;
1517 ctxbase+= 3;
1518 while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1519 if( mvd < 4 )
1520 ctxbase++;
1521 mvd++;
1522 }
1523
1524 if( mvd >= 9 ) {
1525 int k = 3;
1526 while( get_cabac_bypass( &sl->cabac ) ) {
1527 mvd += 1 << k;
1528 k++;
1529 if(k>24){
1530 av_log(sl->h264->avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1531 return INT_MIN;
1532 }
1533 }
1534 while( k-- ) {
1535 mvd += get_cabac_bypass( &sl->cabac )<<k;
1536 }
1537 *mvda=mvd < 70 ? mvd : 70;
1538 }else
1539 *mvda=mvd;
1540 return get_cabac_bypass_sign( &sl->cabac, -mvd );
1541}
1542
1543#define DECODE_CABAC_MB_MVD(sl, list, n )\
1544{\
1545 int amvd0 = sl->mvd_cache[list][scan8[n] - 1][0] +\
1546 sl->mvd_cache[list][scan8[n] - 8][0];\
1547 int amvd1 = sl->mvd_cache[list][scan8[n] - 1][1] +\
1548 sl->mvd_cache[list][scan8[n] - 8][1];\
1549\
1550 int mxd = decode_cabac_mb_mvd(sl, 40, amvd0, &mpx);\
1551 int myd = decode_cabac_mb_mvd(sl, 47, amvd1, &mpy);\
1552 if (mxd == INT_MIN || myd == INT_MIN) \
1553 return AVERROR_INVALIDDATA; \
1554 mx += mxd;\
1555 my += myd;\
1556}
1557
1559 int cat, int idx, int max_coeff,
1560 int is_dc)
1561{
1562 int nza, nzb;
1563 int ctx = 0;
1564 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1565
1566 if( is_dc ) {
1567 if( cat == 3 ) {
1568 idx -= CHROMA_DC_BLOCK_INDEX;
1569 nza = (sl->left_cbp>>(6+idx))&0x01;
1570 nzb = (sl-> top_cbp>>(6+idx))&0x01;
1571 } else {
1572 idx -= LUMA_DC_BLOCK_INDEX;
1573 nza = sl->left_cbp&(0x100<<idx);
1574 nzb = sl-> top_cbp&(0x100<<idx);
1575 }
1576 } else {
1577 nza = sl->non_zero_count_cache[scan8[idx] - 1];
1578 nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1579 }
1580
1581 if( nza > 0 )
1582 ctx++;
1583
1584 if( nzb > 0 )
1585 ctx += 2;
1586
1587 return base_ctx[cat] + ctx;
1588}
1589
1590static av_always_inline void
1592 int16_t *block,
1593 int cat, int n, const uint8_t *scantable,
1594 const uint32_t *qmul, int max_coeff,
1595 int is_dc, int chroma422)
1596{
1597 static const int significant_coeff_flag_offset[2][14] = {
1598 { 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 },
1599 { 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 }
1600 };
1601 static const int last_coeff_flag_offset[2][14] = {
1602 { 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 },
1603 { 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 }
1604 };
1605 static const int coeff_abs_level_m1_offset[14] = {
1606 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
1607 };
1608 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1609 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1610 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1611 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1612 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1613 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1614 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1615 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1616 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1617 };
1618 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1619 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1620 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1621 * map node ctx => cabac ctx for level=1 */
1622 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1623 /* map node ctx => cabac ctx for level>1 */
1624 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1625 { 5, 5, 5, 5, 6, 7, 8, 9 },
1626 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1627 };
1628 static const uint8_t coeff_abs_level_transition[2][8] = {
1629 /* update node ctx after decoding a level=1 */
1630 { 1, 2, 3, 3, 4, 5, 6, 7 },
1631 /* update node ctx after decoding a level>1 */
1632 { 4, 4, 4, 4, 5, 6, 7, 7 }
1633 };
1634
1635 int index[64];
1636
1637 int last;
1638 int coeff_count = 0;
1639 int node_ctx = 0;
1640
1641 uint8_t *significant_coeff_ctx_base;
1642 uint8_t *last_coeff_ctx_base;
1643 uint8_t *abs_level_m1_ctx_base;
1644
1645#if !ARCH_X86
1646#define CABAC_ON_STACK
1647#endif
1648#ifdef CABAC_ON_STACK
1649#define CC &cc
1650 CABACContext cc;
1651 cc.range = sl->cabac.range;
1652 cc.low = sl->cabac.low;
1653 cc.bytestream= sl->cabac.bytestream;
1654#if !UNCHECKED_BITSTREAM_READER || ARCH_AARCH64
1656#endif
1657#else
1658#define CC &sl->cabac
1659#endif
1660
1661 significant_coeff_ctx_base = sl->cabac_state
1662 + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1663 last_coeff_ctx_base = sl->cabac_state
1664 + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1665 abs_level_m1_ctx_base = sl->cabac_state
1666 + coeff_abs_level_m1_offset[cat];
1667
1668 if( !is_dc && max_coeff == 64 ) {
1669#define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1670 for(last= 0; last < coefs; last++) { \
1671 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1672 if( get_cabac( CC, sig_ctx )) { \
1673 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1674 index[coeff_count++] = last; \
1675 if( get_cabac( CC, last_ctx ) ) { \
1676 last= max_coeff; \
1677 break; \
1678 } \
1679 } \
1680 }\
1681 if( last == max_coeff -1 ) {\
1682 index[coeff_count++] = last;\
1683 }
1684 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1685#ifdef decode_significance
1686 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1687 last_coeff_ctx_base, sig_off);
1688 } else {
1689 if (is_dc && chroma422) { // dc 422
1690 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1691 } else {
1692 coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1693 last_coeff_ctx_base-significant_coeff_ctx_base);
1694 }
1695#else
1696 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
1697 } else {
1698 if (is_dc && chroma422) { // dc 422
1699 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1700 } else {
1701 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1702 }
1703#endif
1704 }
1705 av_assert2(coeff_count > 0);
1706
1707 if( is_dc ) {
1708 if( cat == 3 )
1709 h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1710 else
1711 h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1712 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1713 } else {
1714 if( max_coeff == 64 )
1715 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1716 else {
1717 av_assert2( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1718 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1719 }
1720 }
1721
1722#define STORE_BLOCK(type) \
1723 do { \
1724 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1725 \
1726 int j= scantable[index[--coeff_count]]; \
1727 \
1728 if( get_cabac( CC, ctx ) == 0 ) { \
1729 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1730 if( is_dc ) { \
1731 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1732 }else{ \
1733 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1734 } \
1735 } else { \
1736 unsigned coeff_abs = 2; \
1737 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1738 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1739\
1740 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1741 coeff_abs++; \
1742 } \
1743\
1744 if( coeff_abs >= 15 ) { \
1745 int j = 0; \
1746 while (get_cabac_bypass(CC) && j < 16+7) { \
1747 j++; \
1748 } \
1749\
1750 coeff_abs=1; \
1751 while( j-- ) { \
1752 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1753 } \
1754 coeff_abs+= 14U; \
1755 } \
1756\
1757 if( is_dc ) { \
1758 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1759 }else{ \
1760 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1761 } \
1762 } \
1763 } while ( coeff_count );
1764
1765 if (h->pixel_shift) {
1767 } else {
1768 STORE_BLOCK(int16_t)
1769 }
1770#ifdef CABAC_ON_STACK
1771 sl->cabac.range = cc.range ;
1772 sl->cabac.low = cc.low ;
1773 sl->cabac.bytestream= cc.bytestream;
1774#endif
1775
1776}
1777
1779 H264SliceContext *sl,
1780 int16_t *block,
1781 int cat, int n,
1782 const uint8_t *scantable,
1783 int max_coeff)
1784{
1785 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1786}
1787
1789 H264SliceContext *sl,
1790 int16_t *block,
1791 int cat, int n,
1792 const uint8_t *scantable,
1793 int max_coeff)
1794{
1795 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1796}
1797
1799 H264SliceContext *sl,
1800 int16_t *block,
1801 int cat, int n,
1802 const uint8_t *scantable,
1803 const uint32_t *qmul,
1804 int max_coeff)
1805{
1806 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1807}
1808
1809/* cat: 0-> DC 16x16 n = 0
1810 * 1-> AC 16x16 n = luma4x4idx
1811 * 2-> Luma4x4 n = luma4x4idx
1812 * 3-> DC Chroma n = iCbCr
1813 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1814 * 5-> Luma8x8 n = 4 * luma8x8idx */
1815
1816/* Partially inline the CABAC residual decode: inline the coded block flag.
1817 * This has very little impact on binary size and improves performance
1818 * because it allows improved constant propagation into get_cabac_cbf_ctx,
1819 * as well as because most blocks have zero CBFs. */
1820
1822 H264SliceContext *sl,
1823 int16_t *block,
1824 int cat, int n,
1825 const uint8_t *scantable,
1826 int max_coeff)
1827{
1828 /* read coded block flag */
1829 if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1830 sl->non_zero_count_cache[scan8[n]] = 0;
1831 return;
1832 }
1833 decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1834}
1835
1836static av_always_inline void
1838 int16_t *block,
1839 int cat, int n, const uint8_t *scantable,
1840 int max_coeff)
1841{
1842 /* read coded block flag */
1843 if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
1844 sl->non_zero_count_cache[scan8[n]] = 0;
1845 return;
1846 }
1847 decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1848}
1849
1851 H264SliceContext *sl,
1852 int16_t *block,
1853 int cat, int n,
1854 const uint8_t *scantable,
1855 const uint32_t *qmul,
1856 int max_coeff)
1857{
1858 /* read coded block flag */
1859 if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1860 if( max_coeff == 64 ) {
1861 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1862 } else {
1863 sl->non_zero_count_cache[scan8[n]] = 0;
1864 }
1865 return;
1866 }
1867 decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1868}
1869
1871 const uint8_t *scan, const uint8_t *scan8x8,
1872 int pixel_shift, int mb_type, int cbp, int p)
1873{
1874 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1875 const uint32_t *qmul;
1876 int i8x8, i4x4;
1877 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1878 if( IS_INTRA16x16( mb_type ) ) {
1879 AV_ZERO128(sl->mb_luma_dc[p]+0);
1880 AV_ZERO128(sl->mb_luma_dc[p]+8);
1881 AV_ZERO128(sl->mb_luma_dc[p]+16);
1882 AV_ZERO128(sl->mb_luma_dc[p]+24);
1883 decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1884
1885 if( cbp&15 ) {
1886 qmul = h->ps.pps->dequant4_coeff[p][qscale];
1887 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1888 const int index = 16*p + i4x4;
1889 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1890 }
1891 } else {
1892 fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1893 }
1894 } else {
1895 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1896 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1897 if( cbp & (1<<i8x8) ) {
1898 if( IS_8x8DCT(mb_type) ) {
1899 const int index = 16*p + 4*i8x8;
1900 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1901 scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1902 } else {
1903 qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1904 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1905 const int index = 16*p + 4*i8x8 + i4x4;
1906 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1907 }
1908 }
1909 } else {
1910 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1911 }
1912 }
1913 }
1914}
1915
1916/**
1917 * Decode a macroblock.
1918 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1919 */
1921{
1922 const SPS *sps = h->ps.sps;
1923 int mb_xy;
1924 int mb_type, partition_count, cbp = 0;
1925 int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
1926 const int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1927 const int pixel_shift = h->pixel_shift;
1928
1929 mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
1930
1931 ff_tlog(h->avctx, "pic:%d mb:%d/%d\n", h->poc.frame_num, sl->mb_x, sl->mb_y);
1932 if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1933 int skip;
1934 /* a skipped mb needs the aff flag from the following mb */
1935 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1936 skip = sl->next_mb_skipped;
1937 else
1938 skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1939 /* read skip flags */
1940 if( skip ) {
1941 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1942 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1943 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1944 if(!sl->next_mb_skipped)
1946 }
1947
1948 decode_mb_skip(h, sl);
1949
1950 h->cbp_table[mb_xy] = 0;
1951 h->chroma_pred_mode_table[mb_xy] = 0;
1952 sl->last_qscale_diff = 0;
1953
1954 return 0;
1955
1956 }
1957 }
1958 if (FRAME_MBAFF(h)) {
1959 if ((sl->mb_y & 1) == 0)
1960 sl->mb_mbaff =
1962 }
1963
1964 sl->prev_mb_skipped = 0;
1965
1966 fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1967
1968 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1969 int ctx = 0;
1971
1972 if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1973 ctx++;
1974 if (!IS_DIRECT(sl->top_type - 1))
1975 ctx++;
1976
1977 if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1978 mb_type= 0; /* B_Direct_16x16 */
1979 }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1980 mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1981 }else{
1982 int bits;
1983 bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1984 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1985 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1986 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1987 if( bits < 8 ){
1988 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1989 }else if( bits == 13 ){
1990 mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1991 goto decode_intra_mb;
1992 }else if( bits == 14 ){
1993 mb_type= 11; /* B_L1_L0_8x16 */
1994 }else if( bits == 15 ){
1995 mb_type= 22; /* B_8x8 */
1996 }else{
1997 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1998 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1999 }
2000 }
2001 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
2002 mb_type = ff_h264_b_mb_type_info[mb_type].type;
2003 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
2004 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
2005 /* P-type */
2006 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
2007 /* P_L0_D16x16, P_8x8 */
2008 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2009 } else {
2010 /* P_L0_D8x16, P_L0_D16x8 */
2011 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2012 }
2013 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2014 mb_type = ff_h264_p_mb_type_info[mb_type].type;
2015 } else {
2016 mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2017 goto decode_intra_mb;
2018 }
2019 } else {
2020 mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2021 if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2022 mb_type--;
2024decode_intra_mb:
2025 partition_count = 0;
2026 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2027 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2028 mb_type = ff_h264_i_mb_type_info[mb_type].type;
2029 }
2030 if (MB_FIELD(sl))
2031 mb_type |= MB_TYPE_INTERLACED;
2032
2033 h->slice_table[mb_xy] = sl->slice_num;
2034
2035 if(IS_INTRA_PCM(mb_type)) {
2036 const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2037 sps->bit_depth_luma >> 3;
2038 const uint8_t *ptr;
2039 int ret;
2040
2041 // We assume these blocks are very rare so we do not optimize it.
2042 // FIXME The two following lines get the bitstream position in the cabac
2043 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2044 ptr= sl->cabac.bytestream;
2045 if(sl->cabac.low&0x1) ptr--;
2046 if(CABAC_BITS==16){
2047 if(sl->cabac.low&0x1FF) ptr--;
2048 }
2049
2050 // The pixels are stored in the same order as levels in h->mb array.
2051 if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2052 return -1;
2053 sl->intra_pcm_ptr = ptr;
2054 ptr += mb_size;
2055
2056 ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2057 if (ret < 0)
2058 return ret;
2059
2060 // All blocks are present
2061 h->cbp_table[mb_xy] = 0xf7ef;
2062 h->chroma_pred_mode_table[mb_xy] = 0;
2063 // In deblocking, the quantizer is 0
2064 h->cur_pic.qscale_table[mb_xy] = 0;
2065 // All coeffs are present
2066 memset(h->non_zero_count[mb_xy], 16, 48);
2067 h->cur_pic.mb_type[mb_xy] = mb_type;
2068 sl->last_qscale_diff = 0;
2069 return 0;
2070 }
2071
2072 fill_decode_caches(h, sl, mb_type);
2073
2074 if( IS_INTRA( mb_type ) ) {
2075 int i, pred_mode;
2076 if( IS_INTRA4x4( mb_type ) ) {
2077 if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2078 mb_type |= MB_TYPE_8x8DCT;
2079 for( i = 0; i < 16; i+=4 ) {
2080 int pred = pred_intra_mode(h, sl, i);
2082 fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2083 }
2084 } else {
2085 for( i = 0; i < 16; i++ ) {
2086 int pred = pred_intra_mode(h, sl, i);
2088
2089 ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2091 }
2092 }
2096 return -1;
2097 } else {
2100 if (sl->intra16x16_pred_mode < 0) return -1;
2101 }
2102 if(decode_chroma){
2103 h->chroma_pred_mode_table[mb_xy] =
2104 pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2105
2107 sl->left_samples_available, pred_mode, 1 );
2108 if( pred_mode < 0 ) return -1;
2109 sl->chroma_pred_mode = pred_mode;
2110 } else {
2112 }
2113 } else if( partition_count == 4 ) {
2114 int i, j, sub_partition_count[4], list, ref[2][4];
2115
2116 if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2117 for( i = 0; i < 4; i++ ) {
2119 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2121 }
2122 if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2123 sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2124 ff_h264_pred_direct_motion(h, sl, &mb_type);
2125 sl->ref_cache[0][scan8[4]] =
2126 sl->ref_cache[1][scan8[4]] =
2127 sl->ref_cache[0][scan8[12]] =
2128 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2129 for( i = 0; i < 4; i++ )
2130 fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2131 }
2132 } else {
2133 for( i = 0; i < 4; i++ ) {
2135 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2137 }
2138 }
2139
2140 for( list = 0; list < sl->list_count; list++ ) {
2141 for( i = 0; i < 4; i++ ) {
2142 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2143 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2144 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2145 if (rc > 1) {
2146 ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2147 if (ref[list][i] >= rc) {
2148 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2149 return -1;
2150 }
2151 }else
2152 ref[list][i] = 0;
2153 } else {
2154 ref[list][i] = -1;
2155 }
2156 sl->ref_cache[list][scan8[4 * i] + 1] =
2157 sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2158 }
2159 }
2160
2161 if(dct8x8_allowed)
2162 dct8x8_allowed = get_dct8x8_allowed(h, sl);
2163
2164 for (list = 0; list < sl->list_count; list++) {
2165 for(i=0; i<4; i++){
2166 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2167 if(IS_DIRECT(sl->sub_mb_type[i])){
2168 fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2169 continue;
2170 }
2171
2172 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2173 const int sub_mb_type= sl->sub_mb_type[i];
2174 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2175 for(j=0; j<sub_partition_count[i]; j++){
2176 int mpx, mpy;
2177 int mx, my;
2178 const int index= 4*i + block_width*j;
2179 int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2180 uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2181 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2182 DECODE_CABAC_MB_MVD(sl, list, index)
2183 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2184
2185 if(IS_SUB_8X8(sub_mb_type)){
2186 mv_cache[ 1 ][0]=
2187 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2188 mv_cache[ 1 ][1]=
2189 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2190
2191 mvd_cache[ 1 ][0]=
2192 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2193 mvd_cache[ 1 ][1]=
2194 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2195 }else if(IS_SUB_8X4(sub_mb_type)){
2196 mv_cache[ 1 ][0]= mx;
2197 mv_cache[ 1 ][1]= my;
2198
2199 mvd_cache[ 1 ][0]= mpx;
2200 mvd_cache[ 1 ][1]= mpy;
2201 }else if(IS_SUB_4X8(sub_mb_type)){
2202 mv_cache[ 8 ][0]= mx;
2203 mv_cache[ 8 ][1]= my;
2204
2205 mvd_cache[ 8 ][0]= mpx;
2206 mvd_cache[ 8 ][1]= mpy;
2207 }
2208 mv_cache[ 0 ][0]= mx;
2209 mv_cache[ 0 ][1]= my;
2210
2211 mvd_cache[ 0 ][0]= mpx;
2212 mvd_cache[ 0 ][1]= mpy;
2213 }
2214 }else{
2215 fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2216 fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2217 }
2218 }
2219 }
2220 } else if( IS_DIRECT(mb_type) ) {
2221 ff_h264_pred_direct_motion(h, sl, &mb_type);
2222 fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2223 fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2224 dct8x8_allowed &= sps->direct_8x8_inference_flag;
2225 } else {
2226 int list, i;
2227 if(IS_16X16(mb_type)){
2228 for (list = 0; list < sl->list_count; list++) {
2229 if(IS_DIR(mb_type, 0, list)){
2230 int ref;
2231 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2232 if (rc > 1) {
2233 ref= decode_cabac_mb_ref(sl, list, 0);
2234 if (ref >= rc) {
2235 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2236 return -1;
2237 }
2238 }else
2239 ref=0;
2240 fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2241 }
2242 }
2243 for (list = 0; list < sl->list_count; list++) {
2244 if(IS_DIR(mb_type, 0, list)){
2245 int mx,my,mpx,mpy;
2246 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2247 DECODE_CABAC_MB_MVD(sl, list, 0)
2248 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2249
2250 fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2251 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2252 }
2253 }
2254 }
2255 else if(IS_16X8(mb_type)){
2256 for (list = 0; list < sl->list_count; list++) {
2257 for(i=0; i<2; i++){
2258 if(IS_DIR(mb_type, i, list)){
2259 int ref;
2260 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2261 if (rc > 1) {
2262 ref= decode_cabac_mb_ref(sl, list, 8 * i);
2263 if (ref >= rc) {
2264 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2265 return -1;
2266 }
2267 }else
2268 ref=0;
2269 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2270 }else
2271 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2272 }
2273 }
2274 for (list = 0; list < sl->list_count; list++) {
2275 for(i=0; i<2; i++){
2276 if(IS_DIR(mb_type, i, list)){
2277 int mx,my,mpx,mpy;
2278 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2279 DECODE_CABAC_MB_MVD(sl, list, 8*i)
2280 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2281
2282 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2283 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2284 }else{
2285 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2286 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2287 }
2288 }
2289 }
2290 }else{
2291 av_assert2(IS_8X16(mb_type));
2292 for (list = 0; list < sl->list_count; list++) {
2293 for(i=0; i<2; i++){
2294 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2295 int ref;
2296 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2297 if (rc > 1) {
2298 ref = decode_cabac_mb_ref(sl, list, 4 * i);
2299 if (ref >= rc) {
2300 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2301 return -1;
2302 }
2303 }else
2304 ref=0;
2305 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2306 }else
2307 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2308 }
2309 }
2310 for (list = 0; list < sl->list_count; list++) {
2311 for(i=0; i<2; i++){
2312 if(IS_DIR(mb_type, i, list)){
2313 int mx,my,mpx,mpy;
2314 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2315 DECODE_CABAC_MB_MVD(sl, list, 4*i)
2316
2317 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2318 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2319 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2320 }else{
2321 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2322 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2323 }
2324 }
2325 }
2326 }
2327 }
2328
2329 if( IS_INTER( mb_type ) ) {
2330 h->chroma_pred_mode_table[mb_xy] = 0;
2331 write_back_motion(h, sl, mb_type);
2332 }
2333
2334 if( !IS_INTRA16x16( mb_type ) ) {
2335 cbp = decode_cabac_mb_cbp_luma(sl);
2336 if(decode_chroma)
2337 cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2338 } else {
2339 if (!decode_chroma && cbp>15) {
2340 av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2341 return AVERROR_INVALIDDATA;
2342 }
2343 }
2344
2345 h->cbp_table[mb_xy] = sl->cbp = cbp;
2346
2347 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2349 }
2350
2351 /* It would be better to do this in fill_decode_caches, but we don't know
2352 * the transform mode of the current macroblock there. */
2353 if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2354 int i;
2355 uint8_t *nnz_cache = sl->non_zero_count_cache;
2356 if (h->x264_build < 151U) {
2357 for (i = 0; i < 2; i++){
2358 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2359 nnz_cache[3+8* 1 + 2*8*i]=
2360 nnz_cache[3+8* 2 + 2*8*i]=
2361 nnz_cache[3+8* 6 + 2*8*i]=
2362 nnz_cache[3+8* 7 + 2*8*i]=
2363 nnz_cache[3+8*11 + 2*8*i]=
2364 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2365 }
2366 }
2367 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2368 uint32_t top_empty = !IS_INTRA(mb_type) ? 0 : 0x40404040;
2369 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2370 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2371 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2372 }
2373 } else {
2374 for (i = 0; i < 2; i++){
2375 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2376 nnz_cache[3+8* 1 + 2*8*i]=
2377 nnz_cache[3+8* 2 + 2*8*i]=
2378 nnz_cache[3+8* 6 + 2*8*i]=
2379 nnz_cache[3+8* 7 + 2*8*i]=
2380 nnz_cache[3+8*11 + 2*8*i]=
2381 nnz_cache[3+8*12 + 2*8*i]= !IS_INTRA_PCM(sl->left_type[LEFT(i)]) ? 0 : 64;
2382 }
2383 }
2384 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2385 uint32_t top_empty = !IS_INTRA_PCM(sl->top_type) ? 0 : 0x40404040;
2386 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2387 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2388 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2389 }
2390 }
2391 }
2392 h->cur_pic.mb_type[mb_xy] = mb_type;
2393
2394 if( cbp || IS_INTRA16x16( mb_type ) ) {
2395 const uint8_t *scan, *scan8x8;
2396 const uint32_t *qmul;
2397
2398 // decode_cabac_mb_dqp
2399 if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2400 int val = 1;
2401 int ctx= 2;
2402 const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2403
2404 while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2405 ctx= 3;
2406 val++;
2407 if(val > 2*max_qp){ //prevent infinite loop
2408 av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2409 return -1;
2410 }
2411 }
2412
2413 if( val&0x01 )
2414 val= (val + 1)>>1 ;
2415 else
2416 val= -((val + 1)>>1);
2417 sl->last_qscale_diff = val;
2418 sl->qscale += val;
2419 if (((unsigned)sl->qscale) > max_qp){
2420 if (sl->qscale < 0) sl->qscale += max_qp + 1;
2421 else sl->qscale -= max_qp + 1;
2422 }
2423 sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2424 sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2425 }else
2426 sl->last_qscale_diff=0;
2427
2428 if(IS_INTERLACED(mb_type)){
2429 scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2430 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2431 }else{
2432 scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2433 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2434 }
2435
2436 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2437 if (CHROMA444(h)) {
2438 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2439 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2440 } else if (CHROMA422(h)) {
2441 if( cbp&0x30 ){
2442 int c;
2443 for (c = 0; c < 2; c++)
2444 decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2447 }
2448
2449 if( cbp&0x20 ) {
2450 int c, i, i8x8;
2451 for( c = 0; c < 2; c++ ) {
2452 int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2453 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2454 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2455 for (i = 0; i < 4; i++) {
2456 const int index = 16 + 16 * c + 8*i8x8 + i;
2457 decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2458 mb += 16<<pixel_shift;
2459 }
2460 }
2461 }
2462 } else {
2463 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2464 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2465 }
2466 } else /* yuv420 */ {
2467 if( cbp&0x30 ){
2468 int c;
2469 for (c = 0; c < 2; c++)
2470 decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16 * 16 * c) << pixel_shift),
2472 }
2473
2474 if( cbp&0x20 ) {
2475 int c, i;
2476 for( c = 0; c < 2; c++ ) {
2477 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2478 for( i = 0; i < 4; i++ ) {
2479 const int index = 16 + 16 * c + i;
2480 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2481 }
2482 }
2483 } else {
2484 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2485 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2486 }
2487 }
2488 } else {
2489 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2490 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2491 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2492 sl->last_qscale_diff = 0;
2493 }
2494
2495 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2497
2498 return 0;
2499}
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t my
Definition dsp.h:57
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t mx
Definition dsp.h:57
static double val(void *priv, double ch)
Definition aeval.c:77
static AVFormatContext * ctx
int32_t
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition avassert.h:68
static void BS_FUNC skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size)
Definition cabac.c:162
Context Adaptive Binary Arithmetic Coder.
#define CABAC_BITS
Definition cabac.h:38
Context Adaptive Binary Arithmetic Coder inline functions.
static const uint8_t *const ff_h264_last_coeff_flag_offset_8x8
static av_unused int get_cabac_terminate(CABACContext *c)
av_unused static av_noinline int get_cabac_noinline(CABACContext *c, uint8_t *const state)
static av_unused int get_cabac(CABACContext *c, uint8_t *const state)
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
static int FUNC sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
#define mb(name)
Definition cbs_lcevc.c:95
#define LEFT
Definition cdgraphics.c:168
#define av_clip
Definition common.h:100
#define NULL
Definition coverity.c:32
static int16_t block[64]
Definition dct.c:125
static struct @346255127015250356166251341105367306144006377143 state
static const uint8_t bits[8]
Definition fastaudio.c:100
static void fill_rectangle(int x, int y, int w, int h)
Definition ffplay.c:829
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
@ AV_PICTURE_TYPE_I
Intra.
Definition avutil.h:278
@ AV_PICTURE_TYPE_P
Predicted.
Definition avutil.h:279
@ AV_PICTURE_TYPE_SI
Switching Intra.
Definition avutil.h:282
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition avutil.h:280
int index
Definition gxfenc.c:90
static av_always_inline void decode_cabac_residual_internal(const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff, int is_dc, int chroma422)
static av_always_inline void decode_cabac_luma_residual(const H264Context *h, H264SliceContext *sl, const uint8_t *scan, const uint8_t *scan8x8, int pixel_shift, int mb_type, int cbp, int p)
#define INT_BIT
Definition h264_cabac.c:30
static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
#define DECODE_SIGNIFICANCE(coefs, sig_off, last_off)
static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
static int decode_cabac_intra_mb_type(H264SliceContext *sl, int ctx_base, int intra_slice)
static av_always_inline void decode_cabac_residual_nondc(const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff)
static av_noinline void decode_cabac_residual_dc_internal_422(const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, int max_coeff)
static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
#define CC
static const int8_t cabac_context_init_PB[3][1024][2]
Definition h264_cabac.c:362
static av_always_inline uint16_t pack8to16(unsigned a, unsigned b)
static av_always_inline int get_cabac_cbf_ctx(H264SliceContext *sl, int cat, int idx, int max_coeff, int is_dc)
static av_always_inline void decode_cabac_residual_dc(const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, int max_coeff)
#define STORE_BLOCK(type)
static int decode_cabac_mb_skip(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y)
static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
static av_noinline void decode_cabac_residual_nondc_internal(const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff)
static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
static av_noinline void decode_cabac_residual_dc_internal(const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, int max_coeff)
#define DECODE_CABAC_MB_MVD(sl, list, n)
static av_always_inline void decode_cabac_residual_dc_422(const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, int max_coeff)
void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
static const int8_t cabac_context_init_I[1024][2]
Definition h264_cabac.c:50
void ff_h264_pred_direct_motion(const H264Context *const h, H264SliceContext *sl, int *mb_type)
H.264 / AVC / MPEG-4 part10 motion vector prediction.
static void fill_decode_neighbors(const H264Context *h, H264SliceContext *sl, int mb_type)
static av_always_inline void write_back_motion(const H264Context *h, H264SliceContext *sl, int mb_type)
static av_always_inline int pred_intra_mode(const H264Context *h, H264SliceContext *sl, int n)
Get the predicted intra4x4 prediction mode.
Definition h264_mvpred.h:42
static av_always_inline int get_dct8x8_allowed(const H264Context *h, H264SliceContext *sl)
static av_always_inline void write_back_non_zero_count(const H264Context *h, H264SliceContext *sl)
Definition h264_mvpred.h:70
static av_unused void decode_mb_skip(const H264Context *h, H264SliceContext *sl)
decodes a P_SKIP or B_SKIP macroblock
static av_always_inline void pred_motion(const H264Context *const h, H264SliceContext *sl, int n, int part_width, int list, int ref, int *const mx, int *const my)
Get the predicted MV.
static void fill_decode_caches(const H264Context *h, H264SliceContext *sl, int mb_type)
static av_always_inline void pred_8x16_motion(const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
Get the directionally predicted 8x16 MV.
static av_always_inline void write_back_intra_pred_mode(const H264Context *h, H264SliceContext *sl)
Definition h264_mvpred.h:58
static av_always_inline void pred_16x8_motion(const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
Get the directionally predicted 16x8 MV.
int ff_h264_check_intra4x4_pred_mode(int8_t *pred_mode_cache, void *logctx, int top_samples_available, int left_samples_available)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
Definition h264_parse.c:134
int ff_h264_check_intra_pred_mode(void *logctx, int top_samples_available, int left_samples_available, int mode, int is_chroma)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
Definition h264_parse.c:182
static const uint8_t scan8[16 *3+3]
Definition h264_parse.h:40
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
Definition h264_parse.h:127
#define MB_TYPE_8x8DCT
Definition h264_parse.h:37
const IMbInfo ff_h264_i_mb_type_info[26]
Definition h264data.c:66
const PMbInfo ff_h264_p_mb_type_info[5]
Definition h264data.c:95
const uint8_t ff_h264_chroma422_dc_scan[8]
Definition h264data.c:59
const PMbInfo ff_h264_b_sub_mb_type_info[13]
Definition h264data.c:136
const uint8_t ff_h264_chroma_dc_scan[4]
Definition h264data.c:54
const PMbInfo ff_h264_b_mb_type_info[23]
Definition h264data.c:110
const PMbInfo ff_h264_p_sub_mb_type_info[4]
Definition h264data.c:103
H.264 / AVC / MPEG-4 part10 codec.
#define MB_MBAFF(h)
Definition h264dec.h:62
#define IS_SUB_8X8(a)
Definition h264dec.h:94
#define CHROMA444(h)
Definition h264dec.h:90
#define IS_DIR(a, part, list)
Definition h264dec.h:98
#define IS_8x8DCT(a)
Definition h264dec.h:93
#define MB_FIELD(sl)
Definition h264dec.h:63
#define FIELD_PICTURE(h)
Definition h264dec.h:65
#define IS_SUB_4X8(a)
Definition h264dec.h:96
#define IS_SUB_8X4(a)
Definition h264dec.h:95
#define LIST_NOT_USED
Definition h264dec.h:395
static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
Get the chroma qp.
Definition h264dec.h:672
#define CHROMA422(h)
Definition h264dec.h:89
#define LUMA_DC_BLOCK_INDEX
Definition h264dec.h:666
#define CHROMA_DC_BLOCK_INDEX
Definition h264dec.h:667
#define FRAME_MBAFF(h)
Definition h264dec.h:64
#define LTOP
Definition h264dec.h:67
#define PART_NOT_AVAILABLE
Definition h264pred.h:89
#define DC_128_PRED8x8
Definition h264pred.h:76
int a
cl_device_type type
#define b
Definition input.c:43
#define AV_ZERO128(d)
#define AV_WN32A(p, v)
const uint16_t ff_h264_mb_sizes[4]
Definition h264dec.c:60
Macro definitions for various function/variable attributes.
#define av_always_inline
Definition attributes.h:72
#define av_noinline
Definition attributes.h:97
#define get_cabac_bypass
Definition cabac.h:149
#define get_cabac_bypass_sign
Definition cabac.h:193
#define decode_significance
Definition h264_cabac.c:27
#define decode_significance_8x8
Definition h264_cabac.c:83
#define IS_INTRA_PCM(a)
Definition mpegutils.h:76
#define MB_TYPE_INTRA_PCM
Definition mpegutils.h:40
#define IS_INTERLACED(a)
Definition mpegutils.h:77
#define IS_DIRECT(a)
Definition mpegutils.h:78
#define IS_INTRA4x4(a)
Definition mpegutils.h:69
#define MB_TYPE_SKIP
Definition mpegutils.h:61
#define IS_INTER(a)
Definition mpegutils.h:73
#define IS_16X8(a)
Definition mpegutils.h:81
#define IS_8X16(a)
Definition mpegutils.h:82
#define MB_TYPE_DIRECT2
Definition mpegutils.h:46
#define MB_TYPE_16x8
Definition mpegutils.h:42
#define IS_16X16(a)
Definition mpegutils.h:80
#define MB_TYPE_INTRA16x16
Definition mpegutils.h:39
#define MB_TYPE_INTERLACED
Definition mpegutils.h:45
#define MB_TYPE_16x16
Definition mpegutils.h:41
#define IS_SKIP(a)
Definition mpegutils.h:75
#define IS_INTRA16x16(a)
Definition mpegutils.h:70
#define IS_INTRA(x, y)
static const float pred[4]
Definition siprdata.h:259
const uint8_t * bytestream_end
Definition cabac.h:46
int range
Definition cabac.h:43
const uint8_t * bytestream
Definition cabac.h:45
int low
Definition cabac.h:42
H264Context.
Definition h264dec.h:338
AVCodecContext * avctx
Definition h264dec.h:340
int mb_field_decoding_flag
Definition h264dec.h:242
unsigned int list_count
Definition h264dec.h:269
int8_t ref_cache[2][5 *8]
Definition h264dec.h:300
int left_type[LEFT_MBS]
Definition h264dec.h:217
uint16_t sub_mb_type[4]
Definition h264dec.h:304
const uint8_t * intra_pcm_ptr
Definition h264dec.h:281
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
Definition h264dec.h:299
int left_mb_xy[LEFT_MBS]
Definition h264dec.h:212
CABACContext cabac
Cabac.
Definition h264dec.h:318
unsigned int left_samples_available
Definition h264dec.h:225
uint8_t mvd_cache[2][5 *8][2]
Definition h264dec.h:301
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition h264dec.h:185
unsigned int top_samples_available
Definition h264dec.h:223
int16_t mb[16 *48 *2]
as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
Definition h264dec.h:307
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition h264dec.h:243
int chroma_qp[2]
Definition h264dec.h:189
const struct H264Context * h264
Definition h264dec.h:179
uint8_t direct_cache[5 *8]
Definition h264dec.h:302
int8_t intra4x4_pred_mode_cache[5 *8]
Definition h264dec.h:206
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition h264dec.h:294
uint8_t cabac_state[1024]
Definition h264dec.h:319
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition h264dec.h:268
int16_t mb_luma_dc[3][16 *2]
Definition h264dec.h:308
int intra16x16_pred_mode
Definition h264dec.h:204
int neighbor_transform_size
number of neighbors (top and/or left) that used 8x8 dct
Definition h264dec.h:250
Sequence parameter set.
Definition h264_ps.h:44
Definition swscale.c:71
#define ff_tlog(a,...)
#define av_log(a,...)
static int ref[MAX_W *MAX_W]
static const struct twinvq_data tab
static double c[64]
H.264 / AVC / MPEG-4 part10 codec.
#define cat(a, bpp, b)
Definition vp9dsp_init.h:32