FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/h264_cabac.c
Date: 2026-10-29 17:07:12
Exec Total Coverage
Lines: 626 642 97.5%
Functions: 23 23 100.0%
Branches: 513 538 95.4%

Line Branch Exec Source
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
32 #include "libavutil/attributes.h"
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
45 #include "loongarch/h264_cabac.c"
46 #endif
47
48 /* Cabac pre state table */
49
50 static 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
362 static 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
1262 21629 void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
1263 {
1264 int i;
1265 const int8_t (*tab)[2];
1266 21629 const int slice_qp = av_clip(sl->qscale - 6*(h->ps.sps->bit_depth_luma-8), 0, 51);
1267
1268
2/2
✓ Branch 0 taken 2674 times.
✓ Branch 1 taken 18955 times.
21629 if (sl->slice_type_nos == AV_PICTURE_TYPE_I) tab = cabac_context_init_I;
1269 18955 else tab = cabac_context_init_PB[sl->cabac_init_idc];
1270
1271 /* calculate pre-state */
1272
2/2
✓ Branch 0 taken 22148096 times.
✓ Branch 1 taken 21629 times.
22169725 for( i= 0; i < 1024; i++ ) {
1273 22148096 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1274
1275 22148096 pre^= pre>>31;
1276
2/2
✓ Branch 0 taken 381072 times.
✓ Branch 1 taken 21767024 times.
22148096 if(pre > 124)
1277 381072 pre= 124 + (pre&1);
1278
1279 22148096 sl->cabac_state[i] = pre;
1280 }
1281 21629 }
1282
1283 4413251 static av_always_inline uint16_t pack8to16(unsigned a, unsigned b)
1284 {
1285 #if HAVE_BIGENDIAN
1286 return (b & 0xFF) + (a << 8);
1287 #else
1288 4413251 return (a & 0xFF) + (b << 8);
1289 #endif
1290 }
1291
1292 809594 static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
1293 {
1294 809594 const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
1295
1296 809594 unsigned long ctx = 0;
1297
1298 809594 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 809594 ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
1300
1301 809594 return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
1302 }
1303
1304 2737934 static int decode_cabac_intra_mb_type(H264SliceContext *sl,
1305 int ctx_base, int intra_slice)
1306 {
1307 2737934 uint8_t *state= &sl->cabac_state[ctx_base];
1308 int mb_type;
1309
1310
2/2
✓ Branch 0 taken 1699094 times.
✓ Branch 1 taken 1038840 times.
2737934 if(intra_slice){
1311 1699094 int ctx=0;
1312
2/2
✓ Branch 0 taken 447620 times.
✓ Branch 1 taken 1251474 times.
1699094 if (sl->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1313 447620 ctx++;
1314
2/2
✓ Branch 0 taken 433147 times.
✓ Branch 1 taken 1265947 times.
1699094 if (sl->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1315 433147 ctx++;
1316
2/2
✓ Branch 1 taken 1242362 times.
✓ Branch 2 taken 456732 times.
1699094 if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
1317 1242362 return 0; /* I4x4 */
1318 456732 state += 2;
1319 }else{
1320
2/2
✓ Branch 1 taken 674873 times.
✓ Branch 2 taken 363967 times.
1038840 if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1321 674873 return 0; /* I4x4 */
1322 }
1323
1324
2/2
✓ Branch 1 taken 5659 times.
✓ Branch 2 taken 815040 times.
820699 if( get_cabac_terminate( &sl->cabac ) )
1325 5659 return 25; /* PCM */
1326
1327 815040 mb_type = 1; /* I16x16 */
1328 815040 mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1329
2/2
✓ Branch 1 taken 287421 times.
✓ Branch 2 taken 527619 times.
815040 if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1330 287421 mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1331 815040 mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1332 815040 mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1333 815040 return mb_type;
1334 }
1335
1336 9120489 static int decode_cabac_mb_skip(const H264Context *h, H264SliceContext *sl,
1337 int mb_x, int mb_y)
1338 {
1339 int mba_xy, mbb_xy;
1340 9120489 int ctx = 0;
1341
1342
2/2
✓ Branch 0 taken 1375008 times.
✓ Branch 1 taken 7745481 times.
9120489 if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1343 1375008 int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1344 1375008 mba_xy = mb_xy - 1;
1345
2/2
✓ Branch 0 taken 687504 times.
✓ Branch 1 taken 687504 times.
1375008 if( (mb_y&1)
1346
2/2
✓ Branch 0 taken 669347 times.
✓ Branch 1 taken 18157 times.
687504 && h->slice_table[mba_xy] == sl->slice_num
1347
2/2
✓ Branch 0 taken 541752 times.
✓ Branch 1 taken 127595 times.
669347 && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1348 541752 mba_xy += h->mb_stride;
1349
2/2
✓ Branch 0 taken 374808 times.
✓ Branch 1 taken 1000200 times.
1375008 if (MB_FIELD(sl)) {
1350 374808 mbb_xy = mb_xy - h->mb_stride;
1351
2/2
✓ Branch 0 taken 187113 times.
✓ Branch 1 taken 187695 times.
374808 if( !(mb_y&1)
1352
2/2
✓ Branch 0 taken 166669 times.
✓ Branch 1 taken 20444 times.
187113 && h->slice_table[mbb_xy] == sl->slice_num
1353
2/2
✓ Branch 0 taken 83345 times.
✓ Branch 1 taken 83324 times.
166669 && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
1354 83345 mbb_xy -= h->mb_stride;
1355 }else
1356 1000200 mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1357 }else{
1358 7745481 int mb_xy = sl->mb_xy;
1359 7745481 mba_xy = mb_xy - 1;
1360 7745481 mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1361 }
1362
1363
4/4
✓ Branch 0 taken 8880484 times.
✓ Branch 1 taken 240005 times.
✓ Branch 2 taken 5570225 times.
✓ Branch 3 taken 3310259 times.
9120489 if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1364 5570225 ctx++;
1365
4/4
✓ Branch 0 taken 8394786 times.
✓ Branch 1 taken 725703 times.
✓ Branch 2 taken 5327792 times.
✓ Branch 3 taken 3066994 times.
9120489 if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1366 5327792 ctx++;
1367
1368
2/2
✓ Branch 0 taken 5199618 times.
✓ Branch 1 taken 3920871 times.
9120489 if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1369 5199618 ctx += 13;
1370 9120489 return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1371 }
1372
1373 18541276 static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
1374 {
1375 18541276 int mode = 0;
1376
1377
2/2
✓ Branch 1 taken 10171696 times.
✓ Branch 2 taken 8369580 times.
18541276 if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1378 10171696 return pred_mode;
1379
1380 8369580 mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1381 8369580 mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1382 8369580 mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1383
1384 8369580 return mode + ( mode >= pred_mode );
1385 }
1386
1387 2638638 static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
1388 {
1389 2638638 const int mba_xy = sl->left_mb_xy[0];
1390 2638638 const int mbb_xy = sl->top_mb_xy;
1391
1392 2638638 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
4/4
✓ Branch 0 taken 2586948 times.
✓ Branch 1 taken 51690 times.
✓ Branch 2 taken 944558 times.
✓ Branch 3 taken 1642390 times.
2638638 if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1396 944558 ctx++;
1397
1398
4/4
✓ Branch 0 taken 2460792 times.
✓ Branch 1 taken 177846 times.
✓ Branch 2 taken 853279 times.
✓ Branch 3 taken 1607513 times.
2638638 if (sl->top_type && h->chroma_pred_mode_table[mbb_xy] != 0)
1399 853279 ctx++;
1400
1401
2/2
✓ Branch 1 taken 1502513 times.
✓ Branch 2 taken 1136125 times.
2638638 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1402 1502513 return 0;
1403
1404
2/2
✓ Branch 1 taken 637955 times.
✓ Branch 2 taken 498170 times.
1136125 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1405 637955 return 1;
1406
2/2
✓ Branch 1 taken 287122 times.
✓ Branch 2 taken 211048 times.
498170 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1407 287122 return 2;
1408 else
1409 211048 return 3;
1410 }
1411
1412 6614295 static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
1413 {
1414 6614295 int cbp_b, cbp_a, ctx, cbp = 0;
1415
1416 6614295 cbp_a = sl->left_cbp;
1417 6614295 cbp_b = sl->top_cbp;
1418
1419
2/2
✓ Branch 0 taken 2781897 times.
✓ Branch 1 taken 3832398 times.
6614295 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1420 6614295 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1421
2/2
✓ Branch 0 taken 2764727 times.
✓ Branch 1 taken 3849568 times.
6614295 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1422 6614295 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1423
2/2
✓ Branch 0 taken 2860352 times.
✓ Branch 1 taken 3753943 times.
6614295 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1424 6614295 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1425
2/2
✓ Branch 0 taken 2840187 times.
✓ Branch 1 taken 3774108 times.
6614295 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1426 6614295 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1427 6614295 return cbp;
1428 }
1429 6425525 static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
1430 {
1431 int ctx;
1432 int cbp_a, cbp_b;
1433
1434 6425525 cbp_a = (sl->left_cbp>>4)&0x03;
1435 6425525 cbp_b = (sl-> top_cbp>>4)&0x03;
1436
1437 6425525 ctx = 0;
1438
2/2
✓ Branch 0 taken 2760415 times.
✓ Branch 1 taken 3665110 times.
6425525 if( cbp_a > 0 ) ctx++;
1439
2/2
✓ Branch 0 taken 2609804 times.
✓ Branch 1 taken 3815721 times.
6425525 if( cbp_b > 0 ) ctx += 2;
1440
2/2
✓ Branch 1 taken 3477044 times.
✓ Branch 2 taken 2948481 times.
6425525 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1441 3477044 return 0;
1442
1443 2948481 ctx = 4;
1444
2/2
✓ Branch 0 taken 1369738 times.
✓ Branch 1 taken 1578743 times.
2948481 if( cbp_a == 2 ) ctx++;
1445
2/2
✓ Branch 0 taken 1257134 times.
✓ Branch 1 taken 1691347 times.
2948481 if( cbp_b == 2 ) ctx += 2;
1446 2948481 return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1447 }
1448
1449 2083072 static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
1450 {
1451
2/2
✓ Branch 1 taken 872105 times.
✓ Branch 2 taken 1210967 times.
2083072 if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1452 872105 return 0; /* 8x8 */
1453
2/2
✓ Branch 1 taken 194357 times.
✓ Branch 2 taken 1016610 times.
1210967 if( !get_cabac( &sl->cabac, &sl->cabac_state[22] ) )
1454 194357 return 1; /* 8x4 */
1455
2/2
✓ Branch 1 taken 150043 times.
✓ Branch 2 taken 866567 times.
1016610 if( get_cabac( &sl->cabac, &sl->cabac_state[23] ) )
1456 150043 return 2; /* 4x8 */
1457 866567 return 3; /* 4x4 */
1458 }
1459 1595380 static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
1460 {
1461 int type;
1462
2/2
✓ Branch 1 taken 163677 times.
✓ Branch 2 taken 1431703 times.
1595380 if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1463 163677 return 0; /* B_Direct_8x8 */
1464
2/2
✓ Branch 1 taken 301305 times.
✓ Branch 2 taken 1130398 times.
1431703 if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1465 301305 return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1466 1130398 type = 3;
1467
2/2
✓ Branch 1 taken 871434 times.
✓ Branch 2 taken 258964 times.
1130398 if( get_cabac( &sl->cabac, &sl->cabac_state[38] ) ) {
1468
2/2
✓ Branch 1 taken 10447 times.
✓ Branch 2 taken 860987 times.
871434 if( get_cabac( &sl->cabac, &sl->cabac_state[39] ) )
1469 10447 return 11 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1470 860987 type += 4;
1471 }
1472 1119951 type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1473 1119951 type += get_cabac( &sl->cabac, &sl->cabac_state[39] );
1474 1119951 return type;
1475 }
1476
1477 5583353 static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
1478 {
1479 5583353 int refa = sl->ref_cache[list][scan8[n] - 1];
1480 5583353 int refb = sl->ref_cache[list][scan8[n] - 8];
1481 5583353 int ref = 0;
1482 5583353 int ctx = 0;
1483
1484
2/2
✓ Branch 0 taken 2483432 times.
✓ Branch 1 taken 3099921 times.
5583353 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1485
4/4
✓ Branch 0 taken 733531 times.
✓ Branch 1 taken 1749901 times.
✓ Branch 2 taken 702460 times.
✓ Branch 3 taken 31071 times.
2483432 if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1486 702460 ctx++;
1487
4/4
✓ Branch 0 taken 684803 times.
✓ Branch 1 taken 1798629 times.
✓ Branch 2 taken 653375 times.
✓ Branch 3 taken 31428 times.
2483432 if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1488 653375 ctx += 2;
1489 } else {
1490
2/2
✓ Branch 0 taken 1051884 times.
✓ Branch 1 taken 2048037 times.
3099921 if( refa > 0 )
1491 1051884 ctx++;
1492
2/2
✓ Branch 0 taken 1020896 times.
✓ Branch 1 taken 2079025 times.
3099921 if( refb > 0 )
1493 1020896 ctx += 2;
1494 }
1495
1496
2/2
✓ Branch 1 taken 3098426 times.
✓ Branch 2 taken 5583353 times.
8681779 while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
1497 3098426 ref++;
1498 3098426 ctx = (ctx>>2)+4;
1499
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3098426 times.
3098426 if(ref >= 32 /*h->ref_list[list]*/){
1500 ✗ return -1;
1501 }
1502 }
1503 5583353 return ref;
1504 }
1505
1506 27438994 static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
1507 {
1508 int mvd;
1509
1510
2/2
✓ Branch 1 taken 16271142 times.
✓ Branch 2 taken 11167852 times.
27438994 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 16271142 *mvda= 0;
1513 16271142 return 0;
1514 }
1515
1516 11167852 mvd= 1;
1517 11167852 ctxbase+= 3;
1518
4/4
✓ Branch 0 taken 50114014 times.
✓ Branch 1 taken 3686935 times.
✓ Branch 3 taken 42633097 times.
✓ Branch 4 taken 7480917 times.
53800949 while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1519
2/2
✓ Branch 0 taken 20783577 times.
✓ Branch 1 taken 21849520 times.
42633097 if( mvd < 4 )
1520 20783577 ctxbase++;
1521 42633097 mvd++;
1522 }
1523
1524
2/2
✓ Branch 0 taken 3686935 times.
✓ Branch 1 taken 7480917 times.
11167852 if( mvd >= 9 ) {
1525 3686935 int k = 3;
1526
2/2
✓ Branch 1 taken 4086887 times.
✓ Branch 2 taken 3686935 times.
7773822 while( get_cabac_bypass( &sl->cabac ) ) {
1527 4086887 mvd += 1 << k;
1528 4086887 k++;
1529
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4086887 times.
4086887 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
2/2
✓ Branch 0 taken 15147692 times.
✓ Branch 1 taken 3686935 times.
18834627 while( k-- ) {
1535 15147692 mvd += get_cabac_bypass( &sl->cabac )<<k;
1536 }
1537 3686935 *mvda=mvd < 70 ? mvd : 70;
1538 }else
1539 7480917 *mvda=mvd;
1540 11167852 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
1558 69479609 static av_always_inline int get_cabac_cbf_ctx(H264SliceContext *sl,
1559 int cat, int idx, int max_coeff,
1560 int is_dc)
1561 {
1562 int nza, nzb;
1563 69479609 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
2/2
✓ Branch 0 taken 7293599 times.
✓ Branch 1 taken 62186010 times.
69479609 if( is_dc ) {
1567
2/2
✓ Branch 0 taken 6471802 times.
✓ Branch 1 taken 821797 times.
7293599 if( cat == 3 ) {
1568 6471802 idx -= CHROMA_DC_BLOCK_INDEX;
1569 6471802 nza = (sl->left_cbp>>(6+idx))&0x01;
1570 6471802 nzb = (sl-> top_cbp>>(6+idx))&0x01;
1571 } else {
1572 821797 idx -= LUMA_DC_BLOCK_INDEX;
1573 821797 nza = sl->left_cbp&(0x100<<idx);
1574 821797 nzb = sl-> top_cbp&(0x100<<idx);
1575 }
1576 } else {
1577 62186010 nza = sl->non_zero_count_cache[scan8[idx] - 1];
1578 62186010 nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1579 }
1580
1581
2/2
✓ Branch 0 taken 38148007 times.
✓ Branch 1 taken 31331602 times.
69479609 if( nza > 0 )
1582 38148007 ctx++;
1583
1584
2/2
✓ Branch 0 taken 37924922 times.
✓ Branch 1 taken 31554687 times.
69479609 if( nzb > 0 )
1585 37924922 ctx += 2;
1586
1587 69479609 return base_ctx[cat] + ctx;
1588 }
1589
1590 static av_always_inline void
1591 47070240 decode_cabac_residual_internal(const H264Context *h, H264SliceContext *sl,
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 47070240 int coeff_count = 0;
1639 47070240 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
1655 cc.bytestream_end = sl->cabac.bytestream_end;
1656 #endif
1657 #else
1658 #define CC &sl->cabac
1659 #endif
1660
1661 47070240 significant_coeff_ctx_base = sl->cabac_state
1662 47070240 + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1663 47070240 last_coeff_ctx_base = sl->cabac_state
1664 47070240 + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1665 47070240 abs_level_m1_ctx_base = sl->cabac_state
1666 47070240 + coeff_abs_level_m1_offset[cat];
1667
1668
4/4
✓ Branch 0 taken 42077046 times.
✓ Branch 1 taken 4993194 times.
✓ Branch 2 taken 5602030 times.
✓ Branch 3 taken 36475016 times.
52672270 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 5602030 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1685 #ifdef decode_significance
1686 5602030 coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1687 last_coeff_ctx_base, sig_off);
1688 } else {
1689
4/4
✓ Branch 0 taken 4993194 times.
✓ Branch 1 taken 36475016 times.
✓ Branch 2 taken 669336 times.
✓ Branch 3 taken 4323858 times.
41468210 if (is_dc && chroma422) { // dc 422
1690
8/8
✓ Branch 1 taken 2201126 times.
✓ Branch 2 taken 1249586 times.
✓ Branch 4 taken 492766 times.
✓ Branch 5 taken 1708360 times.
✓ Branch 6 taken 3450712 times.
✓ Branch 7 taken 176570 times.
✓ Branch 8 taken 176570 times.
✓ Branch 9 taken 492766 times.
3627282 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1691 } else {
1692 40798874 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
2/2
✓ Branch 0 taken 4993194 times.
✓ Branch 1 taken 42077046 times.
47070240 if( is_dc ) {
1708
2/2
✓ Branch 0 taken 4510039 times.
✓ Branch 1 taken 483155 times.
4993194 if( cat == 3 )
1709 4510039 h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1710 else
1711 483155 h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1712 4993194 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1713 } else {
1714
2/2
✓ Branch 0 taken 5602030 times.
✓ Branch 1 taken 36475016 times.
42077046 if( max_coeff == 64 )
1715 5602030 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 36475016 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
2/2
✓ Branch 0 taken 11343105 times.
✓ Branch 1 taken 35727135 times.
47070240 if (h->pixel_shift) {
1766
23/24
✓ Branch 1 taken 36859423 times.
✓ Branch 2 taken 16786443 times.
✓ Branch 3 taken 2707884 times.
✓ Branch 4 taken 34151539 times.
✓ Branch 7 taken 1327975 times.
✓ Branch 8 taken 15458468 times.
✓ Branch 9 taken 829131 times.
✓ Branch 10 taken 498844 times.
✓ Branch 11 taken 39905891 times.
✓ Branch 12 taken 182574 times.
✓ Branch 14 taken 23302022 times.
✓ Branch 15 taken 16603869 times.
✓ Branch 16 taken 182574 times.
✓ Branch 17 taken 16603869 times.
✓ Branch 19 taken 330469 times.
✓ Branch 20 taken 182574 times.
✓ Branch 21 taken 330469 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 330469 times.
✓ Branch 25 taken 182574 times.
✓ Branch 26 taken 1327975 times.
✓ Branch 27 taken 15458468 times.
✓ Branch 30 taken 42302761 times.
✓ Branch 31 taken 11343105 times.
77608826 STORE_BLOCK(int32_t)
1767 } else {
1768
23/24
✓ Branch 1 taken 78982074 times.
✓ Branch 2 taken 36964418 times.
✓ Branch 3 taken 4781629 times.
✓ Branch 4 taken 74200445 times.
✓ Branch 7 taken 3319929 times.
✓ Branch 8 taken 33644489 times.
✓ Branch 9 taken 26404 times.
✓ Branch 10 taken 3293525 times.
✓ Branch 11 taken 123718654 times.
✓ Branch 12 taken 2520096 times.
✓ Branch 14 taken 89274332 times.
✓ Branch 15 taken 34444322 times.
✓ Branch 16 taken 2520096 times.
✓ Branch 17 taken 34444322 times.
✓ Branch 19 taken 7334622 times.
✓ Branch 20 taken 2520096 times.
✓ Branch 21 taken 7334622 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 7334622 times.
✓ Branch 25 taken 2520096 times.
✓ Branch 26 taken 3319929 times.
✓ Branch 27 taken 33644489 times.
✓ Branch 30 taken 80219357 times.
✓ Branch 31 taken 35727135 times.
219890068 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 47070240 }
1777
1778 4323858 static av_noinline void decode_cabac_residual_dc_internal(const H264Context *h,
1779 H264SliceContext *sl,
1780 int16_t *block,
1781 int cat, int n,
1782 const uint8_t *scantable,
1783 int max_coeff)
1784 {
1785 4323858 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1786 4323858 }
1787
1788 669336 static av_noinline void decode_cabac_residual_dc_internal_422(const H264Context *h,
1789 H264SliceContext *sl,
1790 int16_t *block,
1791 int cat, int n,
1792 const uint8_t *scantable,
1793 int max_coeff)
1794 {
1795 669336 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1796 669336 }
1797
1798 42077046 static av_noinline void decode_cabac_residual_nondc_internal(const H264Context *h,
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 42077046 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1807 42077046 }
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
1821 6506589 static av_always_inline void decode_cabac_residual_dc(const H264Context *h,
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
2/2
✓ Branch 2 taken 2182731 times.
✓ Branch 3 taken 4323858 times.
6506589 if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1830 2182731 sl->non_zero_count_cache[scan8[n]] = 0;
1831 2182731 return;
1832 }
1833 4323858 decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1834 }
1835
1836 static av_always_inline void
1837 787010 decode_cabac_residual_dc_422(const H264Context *h, H264SliceContext *sl,
1838 int16_t *block,
1839 int cat, int n, const uint8_t *scantable,
1840 int max_coeff)
1841 {
1842 /* read coded block flag */
1843
2/2
✓ Branch 2 taken 117674 times.
✓ Branch 3 taken 669336 times.
787010 if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
1844 117674 sl->non_zero_count_cache[scan8[n]] = 0;
1845 117674 return;
1846 }
1847 669336 decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1848 }
1849
1850 67766349 static av_always_inline void decode_cabac_residual_nondc(const H264Context *h,
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
6/6
✓ Branch 0 taken 5593589 times.
✓ Branch 1 taken 62172760 times.
✓ Branch 2 taken 13250 times.
✓ Branch 3 taken 5580339 times.
✓ Branch 6 taken 25689303 times.
✓ Branch 7 taken 36496707 times.
67766349 if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1860
2/2
✓ Branch 0 taken 18059 times.
✓ Branch 1 taken 25671244 times.
25689303 if( max_coeff == 64 ) {
1861 18059 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1862 } else {
1863 25671244 sl->non_zero_count_cache[scan8[n]] = 0;
1864 }
1865 25689303 return;
1866 }
1867 42077046 decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1868 }
1869
1870 6369339 static av_always_inline void decode_cabac_luma_residual(const H264Context *h, H264SliceContext *sl,
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
2/2
✓ Branch 0 taken 6185455 times.
✓ Branch 1 taken 183884 times.
6369339 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1878
2/2
✓ Branch 0 taken 821797 times.
✓ Branch 1 taken 5547542 times.
6369339 if( IS_INTRA16x16( mb_type ) ) {
1879 821797 AV_ZERO128(sl->mb_luma_dc[p]+0);
1880 821797 AV_ZERO128(sl->mb_luma_dc[p]+8);
1881 821797 AV_ZERO128(sl->mb_luma_dc[p]+16);
1882 821797 AV_ZERO128(sl->mb_luma_dc[p]+24);
1883 821797 decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1884
1885
2/2
✓ Branch 0 taken 355922 times.
✓ Branch 1 taken 465875 times.
821797 if( cbp&15 ) {
1886 355922 qmul = h->ps.pps->dequant4_coeff[p][qscale];
1887
2/2
✓ Branch 0 taken 5694752 times.
✓ Branch 1 taken 355922 times.
6050674 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1888 5694752 const int index = 16*p + i4x4;
1889 5694752 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 465875 fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1893 }
1894 } else {
1895
2/2
✓ Branch 0 taken 1803809 times.
✓ Branch 1 taken 3743733 times.
5547542 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1896
2/2
✓ Branch 0 taken 22190168 times.
✓ Branch 1 taken 5547542 times.
27737710 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1897
2/2
✓ Branch 0 taken 15567514 times.
✓ Branch 1 taken 6622654 times.
22190168 if( cbp & (1<<i8x8) ) {
1898
2/2
✓ Branch 0 taken 5620089 times.
✓ Branch 1 taken 9947425 times.
15567514 if( IS_8x8DCT(mb_type) ) {
1899 5620089 const int index = 16*p + 4*i8x8;
1900 5620089 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1901 5620089 scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1902 } else {
1903 9947425 qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1904
2/2
✓ Branch 0 taken 39789700 times.
✓ Branch 1 taken 9947425 times.
49737125 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1905 39789700 const int index = 16*p + 4*i8x8 + i4x4;
1906 39789700 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 6622654 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1911 }
1912 }
1913 }
1914 6369339 }
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 */
1920 10819583 int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1921 {
1922 10819583 const SPS *sps = h->ps.sps;
1923 int mb_xy;
1924 10819583 int mb_type, partition_count, cbp = 0;
1925 10819583 int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
1926
4/4
✓ Branch 0 taken 721099 times.
✓ Branch 1 taken 10098484 times.
✓ Branch 2 taken 485672 times.
✓ Branch 3 taken 235427 times.
10819583 const int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1927 10819583 const int pixel_shift = h->pixel_shift;
1928
1929 10819583 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
2/2
✓ Branch 0 taken 9120489 times.
✓ Branch 1 taken 1699094 times.
10819583 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
6/6
✓ Branch 0 taken 1375008 times.
✓ Branch 1 taken 7745481 times.
✓ Branch 2 taken 687504 times.
✓ Branch 3 taken 687504 times.
✓ Branch 4 taken 139933 times.
✓ Branch 5 taken 547571 times.
9120489 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1936 139933 skip = sl->next_mb_skipped;
1937 else
1938 8980556 skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1939 /* read skip flags */
1940
2/2
✓ Branch 0 taken 3384589 times.
✓ Branch 1 taken 5735900 times.
9120489 if( skip ) {
1941
4/4
✓ Branch 0 taken 273231 times.
✓ Branch 1 taken 3111358 times.
✓ Branch 2 taken 139933 times.
✓ Branch 3 taken 133298 times.
3384589 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1942 139933 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1943 139933 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1944
2/2
✓ Branch 0 taken 44985 times.
✓ Branch 1 taken 94948 times.
139933 if(!sl->next_mb_skipped)
1945 44985 sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1946 }
1947
1948 3384589 decode_mb_skip(h, sl);
1949
1950 3384589 h->cbp_table[mb_xy] = 0;
1951 3384589 h->chroma_pred_mode_table[mb_xy] = 0;
1952 3384589 sl->last_qscale_diff = 0;
1953
1954 3384589 return 0;
1955
1956 }
1957 }
1958
2/2
✓ Branch 0 taken 1535853 times.
✓ Branch 1 taken 5899141 times.
7434994 if (FRAME_MBAFF(h)) {
1959
2/2
✓ Branch 0 taken 764609 times.
✓ Branch 1 taken 771244 times.
1535853 if ((sl->mb_y & 1) == 0)
1960 764609 sl->mb_mbaff =
1961 764609 sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1962 }
1963
1964 7434994 sl->prev_mb_skipped = 0;
1965
1966 7434994 fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1967
1968
2/2
✓ Branch 0 taken 2930651 times.
✓ Branch 1 taken 4504343 times.
7434994 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1969 2930651 int ctx = 0;
1970 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1971
1972
2/2
✓ Branch 0 taken 2085049 times.
✓ Branch 1 taken 845602 times.
2930651 if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1973 2085049 ctx++;
1974
2/2
✓ Branch 0 taken 1947103 times.
✓ Branch 1 taken 983548 times.
2930651 if (!IS_DIRECT(sl->top_type - 1))
1975 1947103 ctx++;
1976
1977
2/2
✓ Branch 1 taken 513244 times.
✓ Branch 2 taken 2417407 times.
2930651 if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1978 513244 mb_type= 0; /* B_Direct_16x16 */
1979
2/2
✓ Branch 1 taken 916767 times.
✓ Branch 2 taken 1500640 times.
2417407 }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1980 916767 mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1981 }else{
1982 int bits;
1983 1500640 bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1984 1500640 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1985 1500640 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1986 1500640 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1987
2/2
✓ Branch 0 taken 454409 times.
✓ Branch 1 taken 1046231 times.
1500640 if( bits < 8 ){
1988 454409 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1989
2/2
✓ Branch 0 taken 492859 times.
✓ Branch 1 taken 553372 times.
1046231 }else if( bits == 13 ){
1990 492859 mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1991 492859 goto decode_intra_mb;
1992
2/2
✓ Branch 0 taken 16063 times.
✓ Branch 1 taken 537309 times.
553372 }else if( bits == 14 ){
1993 16063 mb_type= 11; /* B_L1_L0_8x16 */
1994
2/2
✓ Branch 0 taken 398845 times.
✓ Branch 1 taken 138464 times.
537309 }else if( bits == 15 ){
1995 398845 mb_type= 22; /* B_8x8 */
1996 }else{
1997 138464 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1998 138464 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1999 }
2000 }
2001 2437792 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
2002 2437792 mb_type = ff_h264_b_mb_type_info[mb_type].type;
2003
2/2
✓ Branch 0 taken 2805249 times.
✓ Branch 1 taken 1699094 times.
4504343 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
2004
2/2
✓ Branch 1 taken 2259268 times.
✓ Branch 2 taken 545981 times.
2805249 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
2005 /* P-type */
2006
2/2
✓ Branch 1 taken 1891389 times.
✓ Branch 2 taken 367879 times.
2259268 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
2007 /* P_L0_D16x16, P_8x8 */
2008 1891389 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2009 } else {
2010 /* P_L0_D8x16, P_L0_D16x8 */
2011 367879 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2012 }
2013 2259268 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2014 2259268 mb_type = ff_h264_p_mb_type_info[mb_type].type;
2015 } else {
2016 545981 mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2017 545981 goto decode_intra_mb;
2018 }
2019 } else {
2020 1699094 mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2021 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_I);
2022 2737934 decode_intra_mb:
2023 2737934 partition_count = 0;
2024 2737934 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2025 2737934 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2026 2737934 mb_type = ff_h264_i_mb_type_info[mb_type].type;
2027 }
2028
2/2
✓ Branch 0 taken 2844241 times.
✓ Branch 1 taken 4590753 times.
7434994 if (MB_FIELD(sl))
2029 2844241 mb_type |= MB_TYPE_INTERLACED;
2030
2031 7434994 h->slice_table[mb_xy] = sl->slice_num;
2032
2033
2/2
✓ Branch 0 taken 5659 times.
✓ Branch 1 taken 7429335 times.
7434994 if(IS_INTRA_PCM(mb_type)) {
2034 5659 const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2035 5659 sps->bit_depth_luma >> 3;
2036 const uint8_t *ptr;
2037 int ret;
2038
2039 // We assume these blocks are very rare so we do not optimize it.
2040 // FIXME The two following lines get the bitstream position in the cabac
2041 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2042 5659 ptr= sl->cabac.bytestream;
2043
2/2
✓ Branch 0 taken 232 times.
✓ Branch 1 taken 5427 times.
5659 if(sl->cabac.low&0x1) ptr--;
2044 if(CABAC_BITS==16){
2045
2/2
✓ Branch 0 taken 2933 times.
✓ Branch 1 taken 2726 times.
5659 if(sl->cabac.low&0x1FF) ptr--;
2046 }
2047
2048 // The pixels are stored in the same order as levels in h->mb array.
2049
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5659 times.
5659 if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2050 ✗ return -1;
2051 5659 sl->intra_pcm_ptr = ptr;
2052 5659 ptr += mb_size;
2053
2054 5659 ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2055
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5659 times.
5659 if (ret < 0)
2056 ✗ return ret;
2057
2058 // All blocks are present
2059 5659 h->cbp_table[mb_xy] = 0xf7ef;
2060 5659 h->chroma_pred_mode_table[mb_xy] = 0;
2061 // In deblocking, the quantizer is 0
2062 5659 h->cur_pic.qscale_table[mb_xy] = 0;
2063 // All coeffs are present
2064 5659 memset(h->non_zero_count[mb_xy], 16, 48);
2065 5659 h->cur_pic.mb_type[mb_xy] = mb_type;
2066 5659 sl->last_qscale_diff = 0;
2067 5659 return 0;
2068 }
2069
2070 7429335 fill_decode_caches(h, sl, mb_type);
2071
2072
2/2
✓ Branch 0 taken 2732275 times.
✓ Branch 1 taken 4697060 times.
7429335 if( IS_INTRA( mb_type ) ) {
2073 int i, pred_mode;
2074
2/2
✓ Branch 0 taken 1917235 times.
✓ Branch 1 taken 815040 times.
2732275 if( IS_INTRA4x4( mb_type ) ) {
2075
4/4
✓ Branch 0 taken 1629656 times.
✓ Branch 1 taken 287579 times.
✓ Branch 3 taken 1011207 times.
✓ Branch 4 taken 618449 times.
1917235 if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2076 1011207 mb_type |= MB_TYPE_8x8DCT;
2077
2/2
✓ Branch 0 taken 4044828 times.
✓ Branch 1 taken 1011207 times.
5056035 for( i = 0; i < 16; i+=4 ) {
2078 4044828 int pred = pred_intra_mode(h, sl, i);
2079 4044828 int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2080 4044828 fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2081 }
2082 } else {
2083
2/2
✓ Branch 0 taken 14496448 times.
✓ Branch 1 taken 906028 times.
15402476 for( i = 0; i < 16; i++ ) {
2084 14496448 int pred = pred_intra_mode(h, sl, i);
2085 14496448 sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2086
2087 ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2088 sl->intra4x4_pred_mode_cache[scan8[i]]);
2089 }
2090 }
2091 1917235 write_back_intra_pred_mode(h, sl);
2092
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1917235 times.
1917235 if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2093 1917235 sl->top_samples_available, sl->left_samples_available) < 0 )
2094 ✗ return -1;
2095 } else {
2096 1630080 sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2097 815040 sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2098
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 815040 times.
815040 if (sl->intra16x16_pred_mode < 0) return -1;
2099 }
2100
2/2
✓ Branch 0 taken 2638638 times.
✓ Branch 1 taken 93637 times.
2732275 if(decode_chroma){
2101 2638638 h->chroma_pred_mode_table[mb_xy] =
2102 2638638 pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2103
2104 2638638 pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2105 2638638 sl->left_samples_available, pred_mode, 1 );
2106
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2638638 times.
2638638 if( pred_mode < 0 ) return -1;
2107 2638638 sl->chroma_pred_mode = pred_mode;
2108 } else {
2109 93637 sl->chroma_pred_mode = DC_128_PRED8x8;
2110 }
2111
2/2
✓ Branch 0 taken 919613 times.
✓ Branch 1 taken 3777447 times.
4697060 } else if( partition_count == 4 ) {
2112 int i, j, sub_partition_count[4], list, ref[2][4];
2113
2114
2/2
✓ Branch 0 taken 398845 times.
✓ Branch 1 taken 520768 times.
919613 if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2115
2/2
✓ Branch 0 taken 1595380 times.
✓ Branch 1 taken 398845 times.
1994225 for( i = 0; i < 4; i++ ) {
2116 1595380 sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2117 1595380 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2118 1595380 sl->sub_mb_type[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2119 }
2120
2/2
✓ Branch 0 taken 80528 times.
✓ Branch 1 taken 318317 times.
398845 if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2121 sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2122 80528 ff_h264_pred_direct_motion(h, sl, &mb_type);
2123 80528 sl->ref_cache[0][scan8[4]] =
2124 80528 sl->ref_cache[1][scan8[4]] =
2125 80528 sl->ref_cache[0][scan8[12]] =
2126 80528 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2127
2/2
✓ Branch 0 taken 322112 times.
✓ Branch 1 taken 80528 times.
402640 for( i = 0; i < 4; i++ )
2128 322112 fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2129 }
2130 } else {
2131
2/2
✓ Branch 0 taken 2083072 times.
✓ Branch 1 taken 520768 times.
2603840 for( i = 0; i < 4; i++ ) {
2132 2083072 sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2133 2083072 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2134 2083072 sl->sub_mb_type[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2135 }
2136 }
2137
2138
2/2
✓ Branch 0 taken 1318458 times.
✓ Branch 1 taken 919613 times.
2238071 for( list = 0; list < sl->list_count; list++ ) {
2139
2/2
✓ Branch 0 taken 5273832 times.
✓ Branch 1 taken 1318458 times.
6592290 for( i = 0; i < 4; i++ ) {
2140
2/2
✓ Branch 0 taken 327354 times.
✓ Branch 1 taken 4946478 times.
5273832 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2141
2/2
✓ Branch 0 taken 4511615 times.
✓ Branch 1 taken 434863 times.
4946478 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2142 4511615 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2143
2/2
✓ Branch 0 taken 2968559 times.
✓ Branch 1 taken 1543056 times.
4511615 if (rc > 1) {
2144 2968559 ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2145
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2968559 times.
2968559 if (ref[list][i] >= rc) {
2146 ✗ av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2147 ✗ return -1;
2148 }
2149 }else
2150 1543056 ref[list][i] = 0;
2151 } else {
2152 434863 ref[list][i] = -1;
2153 }
2154 4946478 sl->ref_cache[list][scan8[4 * i] + 1] =
2155 4946478 sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2156 }
2157 }
2158
2159
2/2
✓ Branch 0 taken 256835 times.
✓ Branch 1 taken 662778 times.
919613 if(dct8x8_allowed)
2160 256835 dct8x8_allowed = get_dct8x8_allowed(h, sl);
2161
2162
2/2
✓ Branch 0 taken 1318458 times.
✓ Branch 1 taken 919613 times.
2238071 for (list = 0; list < sl->list_count; list++) {
2163
2/2
✓ Branch 0 taken 5273832 times.
✓ Branch 1 taken 1318458 times.
6592290 for(i=0; i<4; i++){
2164 5273832 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2165
2/2
✓ Branch 0 taken 327354 times.
✓ Branch 1 taken 4946478 times.
5273832 if(IS_DIRECT(sl->sub_mb_type[i])){
2166 327354 fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2167 327354 continue;
2168 }
2169
2170
3/4
✓ Branch 0 taken 4511615 times.
✓ Branch 1 taken 434863 times.
✓ Branch 2 taken 4511615 times.
✗ Branch 3 not taken.
9458093 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2171 4511615 const int sub_mb_type= sl->sub_mb_type[i];
2172
2/2
✓ Branch 0 taken 3326015 times.
✓ Branch 1 taken 1185600 times.
4511615 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2173
2/2
✓ Branch 0 taken 9306246 times.
✓ Branch 1 taken 4511615 times.
13817861 for(j=0; j<sub_partition_count[i]; j++){
2174 int mpx, mpy;
2175 int mx, my;
2176 9306246 const int index= 4*i + block_width*j;
2177 9306246 int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2178 9306246 uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2179 9306246 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2180
2/4
✓ Branch 2 taken 9306246 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 9306246 times.
9306246 DECODE_CABAC_MB_MVD(sl, list, index)
2181 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2182
2183
2/2
✓ Branch 0 taken 1499494 times.
✓ Branch 1 taken 7806752 times.
9306246 if(IS_SUB_8X8(sub_mb_type)){
2184 1499494 mv_cache[ 1 ][0]=
2185 1499494 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2186 1499494 mv_cache[ 1 ][1]=
2187 1499494 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2188
2189 1499494 mvd_cache[ 1 ][0]=
2190 1499494 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2191 1499494 mvd_cache[ 1 ][1]=
2192 1499494 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2193
2/2
✓ Branch 0 taken 3653042 times.
✓ Branch 1 taken 4153710 times.
7806752 }else if(IS_SUB_8X4(sub_mb_type)){
2194 3653042 mv_cache[ 1 ][0]= mx;
2195 3653042 mv_cache[ 1 ][1]= my;
2196
2197 3653042 mvd_cache[ 1 ][0]= mpx;
2198 3653042 mvd_cache[ 1 ][1]= mpy;
2199
2/2
✓ Branch 0 taken 588690 times.
✓ Branch 1 taken 3565020 times.
4153710 }else if(IS_SUB_4X8(sub_mb_type)){
2200 588690 mv_cache[ 8 ][0]= mx;
2201 588690 mv_cache[ 8 ][1]= my;
2202
2203 588690 mvd_cache[ 8 ][0]= mpx;
2204 588690 mvd_cache[ 8 ][1]= mpy;
2205 }
2206 9306246 mv_cache[ 0 ][0]= mx;
2207 9306246 mv_cache[ 0 ][1]= my;
2208
2209 9306246 mvd_cache[ 0 ][0]= mpx;
2210 9306246 mvd_cache[ 0 ][1]= mpy;
2211 }
2212 }else{
2213 434863 fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2214 434863 fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2215 }
2216 }
2217 }
2218
2/2
✓ Branch 0 taken 513244 times.
✓ Branch 1 taken 3264203 times.
3777447 } else if( IS_DIRECT(mb_type) ) {
2219 513244 ff_h264_pred_direct_motion(h, sl, &mb_type);
2220 513244 fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2221 513244 fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2222 513244 dct8x8_allowed &= sps->direct_8x8_inference_flag;
2223 } else {
2224 int list, i;
2225
2/2
✓ Branch 0 taken 2502321 times.
✓ Branch 1 taken 761882 times.
3264203 if(IS_16X16(mb_type)){
2226
2/2
✓ Branch 0 taken 3634021 times.
✓ Branch 1 taken 2502321 times.
6136342 for (list = 0; list < sl->list_count; list++) {
2227
2/2
✓ Branch 0 taken 2717254 times.
✓ Branch 1 taken 916767 times.
3634021 if(IS_DIR(mb_type, 0, list)){
2228 int ref;
2229 2717254 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2230
2/2
✓ Branch 0 taken 1591796 times.
✓ Branch 1 taken 1125458 times.
2717254 if (rc > 1) {
2231 1591796 ref= decode_cabac_mb_ref(sl, list, 0);
2232
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1591796 times.
1591796 if (ref >= rc) {
2233 ✗ av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2234 ✗ return -1;
2235 }
2236 }else
2237 1125458 ref=0;
2238 2717254 fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2239 }
2240 }
2241
2/2
✓ Branch 0 taken 3634021 times.
✓ Branch 1 taken 2502321 times.
6136342 for (list = 0; list < sl->list_count; list++) {
2242
2/2
✓ Branch 0 taken 2717254 times.
✓ Branch 1 taken 916767 times.
3634021 if(IS_DIR(mb_type, 0, list)){
2243 int mx,my,mpx,mpy;
2244 2717254 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2245
2/4
✓ Branch 2 taken 2717254 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2717254 times.
2717254 DECODE_CABAC_MB_MVD(sl, list, 0)
2246 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2247
2248 2717254 fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2249 2717254 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2250 }
2251 }
2252 }
2253
2/2
✓ Branch 0 taken 398034 times.
✓ Branch 1 taken 363848 times.
761882 else if(IS_16X8(mb_type)){
2254
2/2
✓ Branch 0 taken 610540 times.
✓ Branch 1 taken 398034 times.
1008574 for (list = 0; list < sl->list_count; list++) {
2255
2/2
✓ Branch 0 taken 1221080 times.
✓ Branch 1 taken 610540 times.
1831620 for(i=0; i<2; i++){
2256
2/2
✓ Branch 0 taken 889521 times.
✓ Branch 1 taken 331559 times.
1221080 if(IS_DIR(mb_type, i, list)){
2257 int ref;
2258 889521 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2259
2/2
✓ Branch 0 taken 553199 times.
✓ Branch 1 taken 336322 times.
889521 if (rc > 1) {
2260 553199 ref= decode_cabac_mb_ref(sl, list, 8 * i);
2261
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 553199 times.
553199 if (ref >= rc) {
2262 ✗ av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2263 ✗ return -1;
2264 }
2265 }else
2266 336322 ref=0;
2267 889521 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2268 }else
2269 331559 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2270 }
2271 }
2272
2/2
✓ Branch 0 taken 610540 times.
✓ Branch 1 taken 398034 times.
1008574 for (list = 0; list < sl->list_count; list++) {
2273
2/2
✓ Branch 0 taken 1221080 times.
✓ Branch 1 taken 610540 times.
1831620 for(i=0; i<2; i++){
2274
2/2
✓ Branch 0 taken 889521 times.
✓ Branch 1 taken 331559 times.
1221080 if(IS_DIR(mb_type, i, list)){
2275 int mx,my,mpx,mpy;
2276 889521 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2277
2/4
✓ Branch 2 taken 889521 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 889521 times.
889521 DECODE_CABAC_MB_MVD(sl, list, 8*i)
2278 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2279
2280 889521 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2281 889521 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2282 }else{
2283 331559 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2284 331559 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2285 }
2286 }
2287 }
2288 }else{
2289 av_assert2(IS_8X16(mb_type));
2290
2/2
✓ Branch 0 taken 545345 times.
✓ Branch 1 taken 363848 times.
909193 for (list = 0; list < sl->list_count; list++) {
2291
2/2
✓ Branch 0 taken 1090690 times.
✓ Branch 1 taken 545345 times.
1636035 for(i=0; i<2; i++){
2292
2/2
✓ Branch 0 taken 806476 times.
✓ Branch 1 taken 284214 times.
1090690 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2293 int ref;
2294 806476 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2295
2/2
✓ Branch 0 taken 469799 times.
✓ Branch 1 taken 336677 times.
806476 if (rc > 1) {
2296 469799 ref = decode_cabac_mb_ref(sl, list, 4 * i);
2297
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 469799 times.
469799 if (ref >= rc) {
2298 ✗ av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2299 ✗ return -1;
2300 }
2301 }else
2302 336677 ref=0;
2303 806476 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2304 }else
2305 284214 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2306 }
2307 }
2308
2/2
✓ Branch 0 taken 545345 times.
✓ Branch 1 taken 363848 times.
909193 for (list = 0; list < sl->list_count; list++) {
2309
2/2
✓ Branch 0 taken 1090690 times.
✓ Branch 1 taken 545345 times.
1636035 for(i=0; i<2; i++){
2310
2/2
✓ Branch 0 taken 806476 times.
✓ Branch 1 taken 284214 times.
1090690 if(IS_DIR(mb_type, i, list)){
2311 int mx,my,mpx,mpy;
2312 806476 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2313
2/4
✓ Branch 2 taken 806476 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 806476 times.
806476 DECODE_CABAC_MB_MVD(sl, list, 4*i)
2314
2315 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2316 806476 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2317 806476 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2318 }else{
2319 284214 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2320 284214 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2321 }
2322 }
2323 }
2324 }
2325 }
2326
2327
2/2
✓ Branch 0 taken 4697060 times.
✓ Branch 1 taken 2732275 times.
7429335 if( IS_INTER( mb_type ) ) {
2328 4697060 h->chroma_pred_mode_table[mb_xy] = 0;
2329 4697060 write_back_motion(h, sl, mb_type);
2330 }
2331
2332
2/2
✓ Branch 0 taken 6614295 times.
✓ Branch 1 taken 815040 times.
7429335 if( !IS_INTRA16x16( mb_type ) ) {
2333 6614295 cbp = decode_cabac_mb_cbp_luma(sl);
2334
2/2
✓ Branch 0 taken 6425525 times.
✓ Branch 1 taken 188770 times.
6614295 if(decode_chroma)
2335 6425525 cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2336 } else {
2337
4/4
✓ Branch 0 taken 6527 times.
✓ Branch 1 taken 808513 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 6526 times.
815040 if (!decode_chroma && cbp>15) {
2338 1 av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2339 1 return AVERROR_INVALIDDATA;
2340 }
2341 }
2342
2343 7429334 h->cbp_table[mb_xy] = sl->cbp = cbp;
2344
2345
6/6
✓ Branch 0 taken 4705662 times.
✓ Branch 1 taken 2723672 times.
✓ Branch 2 taken 3322370 times.
✓ Branch 3 taken 1383292 times.
✓ Branch 4 taken 1607509 times.
✓ Branch 5 taken 1714861 times.
7429334 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2346 1607509 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2347 }
2348
2349 /* It would be better to do this in fill_decode_caches, but we don't know
2350 * the transform mode of the current macroblock there. */
2351
4/4
✓ Branch 0 taken 152992 times.
✓ Branch 1 taken 7276342 times.
✓ Branch 2 taken 58789 times.
✓ Branch 3 taken 94203 times.
7429334 if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2352 int i;
2353 58789 uint8_t *nnz_cache = sl->non_zero_count_cache;
2354
2/2
✓ Branch 0 taken 58752 times.
✓ Branch 1 taken 37 times.
58789 if (h->x264_build < 151U) {
2355
2/2
✓ Branch 0 taken 117504 times.
✓ Branch 1 taken 58752 times.
176256 for (i = 0; i < 2; i++){
2356
4/4
✓ Branch 0 taken 115742 times.
✓ Branch 1 taken 1762 times.
✓ Branch 2 taken 10860 times.
✓ Branch 3 taken 104882 times.
117504 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2357 10860 nnz_cache[3+8* 1 + 2*8*i]=
2358 10860 nnz_cache[3+8* 2 + 2*8*i]=
2359 10860 nnz_cache[3+8* 6 + 2*8*i]=
2360 10860 nnz_cache[3+8* 7 + 2*8*i]=
2361 10860 nnz_cache[3+8*11 + 2*8*i]=
2362
2/2
✓ Branch 0 taken 962 times.
✓ Branch 1 taken 9898 times.
10860 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2363 }
2364 }
2365
4/4
✓ Branch 0 taken 57258 times.
✓ Branch 1 taken 1494 times.
✓ Branch 2 taken 5303 times.
✓ Branch 3 taken 51955 times.
58752 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2366
2/2
✓ Branch 0 taken 4731 times.
✓ Branch 1 taken 572 times.
5303 uint32_t top_empty = !IS_INTRA(mb_type) ? 0 : 0x40404040;
2367 5303 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2368 5303 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2369 5303 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2370 }
2371 } else {
2372
2/2
✓ Branch 0 taken 74 times.
✓ Branch 1 taken 37 times.
111 for (i = 0; i < 2; i++){
2373
4/4
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 22 times.
✓ Branch 2 taken 40 times.
✓ Branch 3 taken 12 times.
74 if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2374 40 nnz_cache[3+8* 1 + 2*8*i]=
2375 40 nnz_cache[3+8* 2 + 2*8*i]=
2376 40 nnz_cache[3+8* 6 + 2*8*i]=
2377 40 nnz_cache[3+8* 7 + 2*8*i]=
2378 40 nnz_cache[3+8*11 + 2*8*i]=
2379
1/2
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
40 nnz_cache[3+8*12 + 2*8*i]= !IS_INTRA_PCM(sl->left_type[LEFT(i)]) ? 0 : 64;
2380 }
2381 }
2382
4/4
✓ Branch 0 taken 33 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 7 times.
✓ Branch 3 taken 26 times.
37 if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2383
1/2
✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
7 uint32_t top_empty = !IS_INTRA_PCM(sl->top_type) ? 0 : 0x40404040;
2384 7 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2385 7 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2386 7 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2387 }
2388 }
2389 }
2390 7429334 h->cur_pic.mb_type[mb_xy] = mb_type;
2391
2392
4/4
✓ Branch 0 taken 1628926 times.
✓ Branch 1 taken 5800408 times.
✓ Branch 2 taken 385047 times.
✓ Branch 3 taken 1243879 times.
13614789 if( cbp || IS_INTRA16x16( mb_type ) ) {
2393 const uint8_t *scan, *scan8x8;
2394 const uint32_t *qmul;
2395
2396 // decode_cabac_mb_dqp
2397
4/4
✓ Branch 0 taken 968217 times.
✓ Branch 1 taken 5217238 times.
✓ Branch 3 taken 1170787 times.
✓ Branch 4 taken 5014668 times.
6185455 if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2398 1170787 int val = 1;
2399 1170787 int ctx= 2;
2400 1170787 const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2401
2402
2/2
✓ Branch 1 taken 6875904 times.
✓ Branch 2 taken 1170787 times.
8046691 while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2403 6875904 ctx= 3;
2404 6875904 val++;
2405
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6875904 times.
6875904 if(val > 2*max_qp){ //prevent infinite loop
2406 ✗ av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2407 ✗ return -1;
2408 }
2409 }
2410
2411
2/2
✓ Branch 0 taken 582825 times.
✓ Branch 1 taken 587962 times.
1170787 if( val&0x01 )
2412 582825 val= (val + 1)>>1 ;
2413 else
2414 587962 val= -((val + 1)>>1);
2415 1170787 sl->last_qscale_diff = val;
2416 1170787 sl->qscale += val;
2417
2/2
✓ Branch 0 taken 10677 times.
✓ Branch 1 taken 1160110 times.
1170787 if (((unsigned)sl->qscale) > max_qp){
2418
2/2
✓ Branch 0 taken 5518 times.
✓ Branch 1 taken 5159 times.
10677 if (sl->qscale < 0) sl->qscale += max_qp + 1;
2419 5159 else sl->qscale -= max_qp + 1;
2420 }
2421 1170787 sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2422 1170787 sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2423 }else
2424 5014668 sl->last_qscale_diff=0;
2425
2426
2/2
✓ Branch 0 taken 2358359 times.
✓ Branch 1 taken 3827096 times.
6185455 if(IS_INTERLACED(mb_type)){
2427
2/2
✓ Branch 0 taken 2358325 times.
✓ Branch 1 taken 34 times.
2358359 scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2428
2/2
✓ Branch 0 taken 2358325 times.
✓ Branch 1 taken 34 times.
2358359 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2429 }else{
2430
2/2
✓ Branch 0 taken 3734950 times.
✓ Branch 1 taken 92146 times.
3827096 scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2431
2/2
✓ Branch 0 taken 3734950 times.
✓ Branch 1 taken 92146 times.
3827096 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2432 }
2433
2434 6185455 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2435
2/2
✓ Branch 0 taken 91942 times.
✓ Branch 1 taken 6093513 times.
6185455 if (CHROMA444(h)) {
2436 91942 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2437 91942 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2438
2/2
✓ Branch 0 taken 473337 times.
✓ Branch 1 taken 5620176 times.
6093513 } else if (CHROMA422(h)) {
2439
2/2
✓ Branch 0 taken 393505 times.
✓ Branch 1 taken 79832 times.
473337 if( cbp&0x30 ){
2440 int c;
2441
2/2
✓ Branch 0 taken 787010 times.
✓ Branch 1 taken 393505 times.
1180515 for (c = 0; c < 2; c++)
2442 787010 decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2443 CHROMA_DC_BLOCK_INDEX + c,
2444 ff_h264_chroma422_dc_scan, 8);
2445 }
2446
2447
2/2
✓ Branch 0 taken 294838 times.
✓ Branch 1 taken 178499 times.
473337 if( cbp&0x20 ) {
2448 int c, i, i8x8;
2449
2/2
✓ Branch 0 taken 589676 times.
✓ Branch 1 taken 294838 times.
884514 for( c = 0; c < 2; c++ ) {
2450 589676 int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2451
2/2
✓ Branch 0 taken 568778 times.
✓ Branch 1 taken 20898 times.
589676 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2452
2/2
✓ Branch 0 taken 1179352 times.
✓ Branch 1 taken 589676 times.
1769028 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2453
2/2
✓ Branch 0 taken 4717408 times.
✓ Branch 1 taken 1179352 times.
5896760 for (i = 0; i < 4; i++) {
2454 4717408 const int index = 16 + 16 * c + 8*i8x8 + i;
2455 4717408 decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2456 4717408 mb += 16<<pixel_shift;
2457 }
2458 }
2459 }
2460 } else {
2461 178499 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2462 178499 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2463 }
2464 } else /* yuv420 */ {
2465
2/2
✓ Branch 0 taken 2842396 times.
✓ Branch 1 taken 2777780 times.
5620176 if( cbp&0x30 ){
2466 int c;
2467
2/2
✓ Branch 0 taken 5684792 times.
✓ Branch 1 taken 2842396 times.
8527188 for (c = 0; c < 2; c++)
2468 5684792 decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16 * 16 * c) << pixel_shift),
2469 3, CHROMA_DC_BLOCK_INDEX + c, ff_h264_chroma_dc_scan, 4);
2470 }
2471
2472
2/2
✓ Branch 0 taken 1493050 times.
✓ Branch 1 taken 4127126 times.
5620176 if( cbp&0x20 ) {
2473 int c, i;
2474
2/2
✓ Branch 0 taken 2986100 times.
✓ Branch 1 taken 1493050 times.
4479150 for( c = 0; c < 2; c++ ) {
2475
2/2
✓ Branch 0 taken 1625780 times.
✓ Branch 1 taken 1360320 times.
2986100 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2476
2/2
✓ Branch 0 taken 11944400 times.
✓ Branch 1 taken 2986100 times.
14930500 for( i = 0; i < 4; i++ ) {
2477 11944400 const int index = 16 + 16 * c + i;
2478 11944400 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2479 }
2480 }
2481 } else {
2482 4127126 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2483 4127126 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2484 }
2485 }
2486 } else {
2487 1243879 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2488 1243879 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2489 1243879 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2490 1243879 sl->last_qscale_diff = 0;
2491 }
2492
2493 7429334 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2494 7429334 write_back_non_zero_count(h, sl);
2495
2496 7429334 return 0;
2497 }
2498