FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/h264_cabac.c
Date: 2026-09-18 21:01:31
Exec Total Coverage
Lines: 627 644 97.4%
Functions: 23 23 100.0%
Branches: 514 542 94.8%

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 21568 void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
1263 {
1264 int i;
1265 const int8_t (*tab)[2];
1266 21568 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 2639 times.
✓ Branch 1 taken 18929 times.
21568 if (sl->slice_type_nos == AV_PICTURE_TYPE_I) tab = cabac_context_init_I;
1269 18929 else tab = cabac_context_init_PB[sl->cabac_init_idc];
1270
1271 /* calculate pre-state */
1272
2/2
✓ Branch 0 taken 22085632 times.
✓ Branch 1 taken 21568 times.
22107200 for( i= 0; i < 1024; i++ ) {
1273 22085632 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1274
1275 22085632 pre^= pre>>31;
1276
2/2
✓ Branch 0 taken 379065 times.
✓ Branch 1 taken 21706567 times.
22085632 if(pre > 124)
1277 379065 pre= 124 + (pre&1);
1278
1279 22085632 sl->cabac_state[i] = pre;
1280 }
1281 21568 }
1282
1283 4383501 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 4383501 return (a & 0xFF) + (b << 8);
1289 #endif
1290 }
1291
1292 809039 static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
1293 {
1294 809039 const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
1295
1296 809039 unsigned long ctx = 0;
1297
1298 809039 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 809039 ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
1300
1301 809039 return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
1302 }
1303
1304 2691013 static int decode_cabac_intra_mb_type(H264SliceContext *sl,
1305 int ctx_base, int intra_slice)
1306 {
1307 2691013 uint8_t *state= &sl->cabac_state[ctx_base];
1308 int mb_type;
1309
1310
2/2
✓ Branch 0 taken 1652430 times.
✓ Branch 1 taken 1038583 times.
2691013 if(intra_slice){
1311 1652430 int ctx=0;
1312
2/2
✓ Branch 0 taken 411598 times.
✓ Branch 1 taken 1240832 times.
1652430 if (sl->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1313 411598 ctx++;
1314
2/2
✓ Branch 0 taken 398893 times.
✓ Branch 1 taken 1253537 times.
1652430 if (sl->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1315 398893 ctx++;
1316
2/2
✓ Branch 1 taken 1232096 times.
✓ Branch 2 taken 420334 times.
1652430 if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
1317 1232096 return 0; /* I4x4 */
1318 420334 state += 2;
1319 }else{
1320
2/2
✓ Branch 1 taken 674798 times.
✓ Branch 2 taken 363785 times.
1038583 if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1321 674798 return 0; /* I4x4 */
1322 }
1323
1324
2/2
✓ Branch 1 taken 5659 times.
✓ Branch 2 taken 778460 times.
784119 if( get_cabac_terminate( &sl->cabac ) )
1325 5659 return 25; /* PCM */
1326
1327 778460 mb_type = 1; /* I16x16 */
1328 778460 mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1329
2/2
✓ Branch 1 taken 284751 times.
✓ Branch 2 taken 493709 times.
778460 if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1330 284751 mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1331 778460 mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1332 778460 mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1333 778460 return mb_type;
1334 }
1335
1336 9073413 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 9073413 int ctx = 0;
1341
1342
2/2
✓ Branch 0 taken 1374612 times.
✓ Branch 1 taken 7698801 times.
9073413 if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1343 1374612 int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1344 1374612 mba_xy = mb_xy - 1;
1345
2/2
✓ Branch 0 taken 687306 times.
✓ Branch 1 taken 687306 times.
1374612 if( (mb_y&1)
1346
2/2
✓ Branch 0 taken 669158 times.
✓ Branch 1 taken 18148 times.
687306 && h->slice_table[mba_xy] == sl->slice_num
1347
2/2
✓ Branch 0 taken 541563 times.
✓ Branch 1 taken 127595 times.
669158 && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1348 541563 mba_xy += h->mb_stride;
1349
2/2
✓ Branch 0 taken 374808 times.
✓ Branch 1 taken 999804 times.
1374612 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 999804 mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1357 }else{
1358 7698801 int mb_xy = sl->mb_xy;
1359 7698801 mba_xy = mb_xy - 1;
1360 7698801 mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1361 }
1362
1363
4/4
✓ Branch 0 taken 8834105 times.
✓ Branch 1 taken 239308 times.
✓ Branch 2 taken 5543546 times.
✓ Branch 3 taken 3290559 times.
9073413 if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1364 5543546 ctx++;
1365
4/4
✓ Branch 0 taken 8349046 times.
✓ Branch 1 taken 724367 times.
✓ Branch 2 taken 5301406 times.
✓ Branch 3 taken 3047640 times.
9073413 if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1366 5301406 ctx++;
1367
1368
2/2
✓ Branch 0 taken 5172618 times.
✓ Branch 1 taken 3900795 times.
9073413 if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1369 5172618 ctx += 13;
1370 9073413 return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1371 }
1372
1373 18452152 static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
1374 {
1375 18452152 int mode = 0;
1376
1377
2/2
✓ Branch 1 taken 10130463 times.
✓ Branch 2 taken 8321689 times.
18452152 if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1378 10130463 return pred_mode;
1379
1380 8321689 mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1381 8321689 mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1382 8321689 mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1383
1384 8321689 return mode + ( mode >= pred_mode );
1385 }
1386
1387 2591717 static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
1388 {
1389 2591717 const int mba_xy = sl->left_mb_xy[0];
1390 2591717 const int mbb_xy = sl->top_mb_xy;
1391
1392 2591717 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 2540569 times.
✓ Branch 1 taken 51148 times.
✓ Branch 2 taken 937979 times.
✓ Branch 3 taken 1602590 times.
2591717 if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1396 937979 ctx++;
1397
1398
4/4
✓ Branch 0 taken 2416483 times.
✓ Branch 1 taken 175234 times.
✓ Branch 2 taken 846879 times.
✓ Branch 3 taken 1569604 times.
2591717 if (sl->top_type && h->chroma_pred_mode_table[mbb_xy] != 0)
1399 846879 ctx++;
1400
1401
2/2
✓ Branch 1 taken 1462387 times.
✓ Branch 2 taken 1129330 times.
2591717 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1402 1462387 return 0;
1403
1404
2/2
✓ Branch 1 taken 633539 times.
✓ Branch 2 taken 495791 times.
1129330 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1405 633539 return 1;
1406
2/2
✓ Branch 1 taken 285333 times.
✓ Branch 2 taken 210458 times.
495791 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1407 285333 return 2;
1408 else
1409 210458 return 3;
1410 }
1411
1412 6577189 static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
1413 {
1414 6577189 int cbp_b, cbp_a, ctx, cbp = 0;
1415
1416 6577189 cbp_a = sl->left_cbp;
1417 6577189 cbp_b = sl->top_cbp;
1418
1419
2/2
✓ Branch 0 taken 2769944 times.
✓ Branch 1 taken 3807245 times.
6577189 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1420 6577189 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1421
2/2
✓ Branch 0 taken 2752784 times.
✓ Branch 1 taken 3824405 times.
6577189 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1422 6577189 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1423
2/2
✓ Branch 0 taken 2848718 times.
✓ Branch 1 taken 3728471 times.
6577189 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1424 6577189 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1425
2/2
✓ Branch 0 taken 2828423 times.
✓ Branch 1 taken 3748766 times.
6577189 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1426 6577189 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1427 6577189 return cbp;
1428 }
1429 6388419 static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
1430 {
1431 int ctx;
1432 int cbp_a, cbp_b;
1433
1434 6388419 cbp_a = (sl->left_cbp>>4)&0x03;
1435 6388419 cbp_b = (sl-> top_cbp>>4)&0x03;
1436
1437 6388419 ctx = 0;
1438
2/2
✓ Branch 0 taken 2747371 times.
✓ Branch 1 taken 3641048 times.
6388419 if( cbp_a > 0 ) ctx++;
1439
2/2
✓ Branch 0 taken 2597258 times.
✓ Branch 1 taken 3791161 times.
6388419 if( cbp_b > 0 ) ctx += 2;
1440
2/2
✓ Branch 1 taken 3453475 times.
✓ Branch 2 taken 2934944 times.
6388419 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1441 3453475 return 0;
1442
1443 2934944 ctx = 4;
1444
2/2
✓ Branch 0 taken 1365666 times.
✓ Branch 1 taken 1569278 times.
2934944 if( cbp_a == 2 ) ctx++;
1445
2/2
✓ Branch 0 taken 1253353 times.
✓ Branch 1 taken 1681591 times.
2934944 if( cbp_b == 2 ) ctx += 2;
1446 2934944 return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1447 }
1448
1449 2070244 static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
1450 {
1451
2/2
✓ Branch 1 taken 859277 times.
✓ Branch 2 taken 1210967 times.
2070244 if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1452 859277 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 1594700 static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
1460 {
1461 int type;
1462
2/2
✓ Branch 1 taken 163347 times.
✓ Branch 2 taken 1431353 times.
1594700 if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1463 163347 return 0; /* B_Direct_8x8 */
1464
2/2
✓ Branch 1 taken 301024 times.
✓ Branch 2 taken 1130329 times.
1431353 if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1465 301024 return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1466 1130329 type = 3;
1467
2/2
✓ Branch 1 taken 871434 times.
✓ Branch 2 taken 258895 times.
1130329 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 1119882 type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1473 1119882 type += get_cabac( &sl->cabac, &sl->cabac_state[39] );
1474 1119882 return type;
1475 }
1476
1477 5566803 static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
1478 {
1479 5566803 int refa = sl->ref_cache[list][scan8[n] - 1];
1480 5566803 int refb = sl->ref_cache[list][scan8[n] - 8];
1481 5566803 int ref = 0;
1482 5566803 int ctx = 0;
1483
1484
2/2
✓ Branch 0 taken 2479615 times.
✓ Branch 1 taken 3087188 times.
5566803 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1485
4/4
✓ Branch 0 taken 733163 times.
✓ Branch 1 taken 1746452 times.
✓ Branch 2 taken 702211 times.
✓ Branch 3 taken 30952 times.
2479615 if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1486 702211 ctx++;
1487
4/4
✓ Branch 0 taken 684498 times.
✓ Branch 1 taken 1795117 times.
✓ Branch 2 taken 653180 times.
✓ Branch 3 taken 31318 times.
2479615 if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1488 653180 ctx += 2;
1489 } else {
1490
2/2
✓ Branch 0 taken 1045712 times.
✓ Branch 1 taken 2041476 times.
3087188 if( refa > 0 )
1491 1045712 ctx++;
1492
2/2
✓ Branch 0 taken 1014784 times.
✓ Branch 1 taken 2072404 times.
3087188 if( refb > 0 )
1493 1014784 ctx += 2;
1494 }
1495
1496
2/2
✓ Branch 1 taken 3089756 times.
✓ Branch 2 taken 5566803 times.
8656559 while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
1497 3089756 ref++;
1498 3089756 ctx = (ctx>>2)+4;
1499
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3089756 times.
3089756 if(ref >= 32 /*h->ref_list[list]*/){
1500 return -1;
1501 }
1502 }
1503 5566803 return ref;
1504 }
1505
1506 27353000 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 16206047 times.
✓ Branch 2 taken 11146953 times.
27353000 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 16206047 *mvda= 0;
1513 16206047 return 0;
1514 }
1515
1516 11146953 mvd= 1;
1517 11146953 ctxbase+= 3;
1518
4/4
✓ Branch 0 taken 50070867 times.
✓ Branch 1 taken 3685214 times.
✓ Branch 3 taken 42609128 times.
✓ Branch 4 taken 7461739 times.
53756081 while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1519
2/2
✓ Branch 0 taken 20770534 times.
✓ Branch 1 taken 21838594 times.
42609128 if( mvd < 4 )
1520 20770534 ctxbase++;
1521 42609128 mvd++;
1522 }
1523
1524
2/2
✓ Branch 0 taken 3685214 times.
✓ Branch 1 taken 7461739 times.
11146953 if( mvd >= 9 ) {
1525 3685214 int k = 3;
1526
2/2
✓ Branch 1 taken 4085046 times.
✓ Branch 2 taken 3685214 times.
7770260 while( get_cabac_bypass( &sl->cabac ) ) {
1527 4085046 mvd += 1 << k;
1528 4085046 k++;
1529
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4085046 times.
4085046 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 15140688 times.
✓ Branch 1 taken 3685214 times.
18825902 while( k-- ) {
1535 15140688 mvd += get_cabac_bypass( &sl->cabac )<<k;
1536 }
1537 3685214 *mvda=mvd < 70 ? mvd : 70;
1538 }else
1539 7461739 *mvda=mvd;
1540 11146953 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 69146259 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 69146259 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 7224605 times.
✓ Branch 1 taken 61921654 times.
69146259 if( is_dc ) {
1567
2/2
✓ Branch 0 taken 6439388 times.
✓ Branch 1 taken 785217 times.
7224605 if( cat == 3 ) {
1568 6439388 idx -= CHROMA_DC_BLOCK_INDEX;
1569 6439388 nza = (sl->left_cbp>>(6+idx))&0x01;
1570 6439388 nzb = (sl-> top_cbp>>(6+idx))&0x01;
1571 } else {
1572 785217 idx -= LUMA_DC_BLOCK_INDEX;
1573 785217 nza = sl->left_cbp&(0x100<<idx);
1574 785217 nzb = sl-> top_cbp&(0x100<<idx);
1575 }
1576 } else {
1577 61921654 nza = sl->non_zero_count_cache[scan8[idx] - 1];
1578 61921654 nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1579 }
1580
1581
2/2
✓ Branch 0 taken 37942329 times.
✓ Branch 1 taken 31203930 times.
69146259 if( nza > 0 )
1582 37942329 ctx++;
1583
1584
2/2
✓ Branch 0 taken 37717995 times.
✓ Branch 1 taken 31428264 times.
69146259 if( nzb > 0 )
1585 37717995 ctx += 2;
1586
1587 69146259 return base_ctx[cat] + ctx;
1588 }
1589
1590 static av_always_inline void
1591 46797192 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 46797192 int coeff_count = 0;
1639 46797192 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 46797192 significant_coeff_ctx_base = sl->cabac_state
1662 46797192 + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1663 46797192 last_coeff_ctx_base = sl->cabac_state
1664 46797192 + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1665 46797192 abs_level_m1_ctx_base = sl->cabac_state
1666 46797192 + coeff_abs_level_m1_offset[cat];
1667
1668
4/4
✓ Branch 0 taken 41827684 times.
✓ Branch 1 taken 4969508 times.
✓ Branch 2 taken 5544311 times.
✓ Branch 3 taken 36283373 times.
52341503 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 5544311 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1685 #ifdef decode_significance
1686 5544311 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 4969508 times.
✓ Branch 1 taken 36283373 times.
✓ Branch 2 taken 669336 times.
✓ Branch 3 taken 4300172 times.
41252881 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 40583545 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 4969508 times.
✓ Branch 1 taken 41827684 times.
46797192 if( is_dc ) {
1708
2/2
✓ Branch 0 taken 4489509 times.
✓ Branch 1 taken 479999 times.
4969508 if( cat == 3 )
1709 4489509 h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1710 else
1711 479999 h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1712 4969508 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1713 } else {
1714
2/2
✓ Branch 0 taken 5544311 times.
✓ Branch 1 taken 36283373 times.
41827684 if( max_coeff == 64 )
1715 5544311 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 36283373 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 11189797 times.
✓ Branch 1 taken 35607395 times.
46797192 if (h->pixel_shift) {
1766
23/24
✓ Branch 1 taken 35882426 times.
✓ Branch 2 taken 16278290 times.
✓ Branch 3 taken 2693577 times.
✓ Branch 4 taken 33188849 times.
✓ Branch 7 taken 1326380 times.
✓ Branch 8 taken 14951910 times.
✓ Branch 9 taken 829131 times.
✓ Branch 10 taken 497249 times.
✓ Branch 11 taken 38568121 times.
✓ Branch 12 taken 178588 times.
✓ Branch 14 taken 22468419 times.
✓ Branch 15 taken 16099702 times.
✓ Branch 16 taken 178588 times.
✓ Branch 17 taken 16099702 times.
✓ Branch 19 taken 325163 times.
✓ Branch 20 taken 178588 times.
✓ Branch 21 taken 325163 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 325163 times.
✓ Branch 25 taken 178588 times.
✓ Branch 26 taken 1326380 times.
✓ Branch 27 taken 14951910 times.
✓ Branch 30 taken 40970919 times.
✓ Branch 31 taken 11189797 times.
75279461 STORE_BLOCK(int32_t)
1767 } else {
1768
23/24
✓ Branch 1 taken 78630625 times.
✓ Branch 2 taken 36861966 times.
✓ Branch 3 taken 4752127 times.
✓ Branch 4 taken 73878498 times.
✓ Branch 7 taken 3302487 times.
✓ Branch 8 taken 33559479 times.
✓ Branch 9 taken 26404 times.
✓ Branch 10 taken 3276083 times.
✓ Branch 11 taken 123520005 times.
✓ Branch 12 taken 2519565 times.
✓ Branch 14 taken 89177604 times.
✓ Branch 15 taken 34342401 times.
✓ Branch 16 taken 2519565 times.
✓ Branch 17 taken 34342401 times.
✓ Branch 19 taken 7333717 times.
✓ Branch 20 taken 2519565 times.
✓ Branch 21 taken 7333717 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 7333717 times.
✓ Branch 25 taken 2519565 times.
✓ Branch 26 taken 3302487 times.
✓ Branch 27 taken 33559479 times.
✓ Branch 30 taken 79885196 times.
✓ Branch 31 taken 35607395 times.
219337629 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 46797192 }
1777
1778 4300172 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 4300172 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1786 4300172 }
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 41827684 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 41827684 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1807 41827684 }
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 6437595 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 2137423 times.
✓ Branch 3 taken 4300172 times.
6437595 if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1830 2137423 sl->non_zero_count_cache[scan8[n]] = 0;
1831 2137423 return;
1832 }
1833 4300172 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 67444274 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 5535870 times.
✓ Branch 1 taken 61908404 times.
✓ Branch 2 taken 13250 times.
✓ Branch 3 taken 5522620 times.
✓ Branch 6 taken 25616590 times.
✓ Branch 7 taken 36305064 times.
67444274 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 25598531 times.
25616590 if( max_coeff == 64 ) {
1861 18059 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1862 } else {
1863 25598531 sl->non_zero_count_cache[scan8[n]] = 0;
1864 }
1865 25616590 return;
1866 }
1867 41827684 decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1868 }
1869
1870 6303133 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 6119249 times.
✓ Branch 1 taken 183884 times.
6303133 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1878
2/2
✓ Branch 0 taken 785217 times.
✓ Branch 1 taken 5517916 times.
6303133 if( IS_INTRA16x16( mb_type ) ) {
1879 785217 AV_ZERO128(sl->mb_luma_dc[p]+0);
1880 785217 AV_ZERO128(sl->mb_luma_dc[p]+8);
1881 785217 AV_ZERO128(sl->mb_luma_dc[p]+16);
1882 785217 AV_ZERO128(sl->mb_luma_dc[p]+24);
1883 785217 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 352911 times.
✓ Branch 1 taken 432306 times.
785217 if( cbp&15 ) {
1886 352911 qmul = h->ps.pps->dequant4_coeff[p][qscale];
1887
2/2
✓ Branch 0 taken 5646576 times.
✓ Branch 1 taken 352911 times.
5999487 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1888 5646576 const int index = 16*p + i4x4;
1889 5646576 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 432306 fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1893 }
1894 } else {
1895
2/2
✓ Branch 0 taken 1793510 times.
✓ Branch 1 taken 3724406 times.
5517916 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1896
2/2
✓ Branch 0 taken 22071664 times.
✓ Branch 1 taken 5517916 times.
27589580 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1897
2/2
✓ Branch 0 taken 15465990 times.
✓ Branch 1 taken 6605674 times.
22071664 if( cbp & (1<<i8x8) ) {
1898
2/2
✓ Branch 0 taken 5562370 times.
✓ Branch 1 taken 9903620 times.
15465990 if( IS_8x8DCT(mb_type) ) {
1899 5562370 const int index = 16*p + 4*i8x8;
1900 5562370 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1901 5562370 scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1902 } else {
1903 9903620 qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1904
2/2
✓ Branch 0 taken 39614480 times.
✓ Branch 1 taken 9903620 times.
49518100 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1905 39614480 const int index = 16*p + 4*i8x8 + i4x4;
1906 39614480 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 6605674 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1911 }
1912 }
1913 }
1914 6303133 }
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 10725843 int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1921 {
1922 10725843 const SPS *sps = h->ps.sps;
1923 int mb_xy;
1924 10725843 int mb_type, partition_count, cbp = 0;
1925 10725843 int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
1926
4/4
✓ Branch 0 taken 721099 times.
✓ Branch 1 taken 10004744 times.
✓ Branch 2 taken 485672 times.
✓ Branch 3 taken 235427 times.
10725843 const int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1927 10725843 const int pixel_shift = h->pixel_shift;
1928
1929 10725843 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 9073413 times.
✓ Branch 1 taken 1652430 times.
10725843 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 1374612 times.
✓ Branch 1 taken 7698801 times.
✓ Branch 2 taken 687306 times.
✓ Branch 3 taken 687306 times.
✓ Branch 4 taken 139885 times.
✓ Branch 5 taken 547421 times.
9073413 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1936 139885 skip = sl->next_mb_skipped;
1937 else
1938 8933528 skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1939 /* read skip flags */
1940
2/2
✓ Branch 0 taken 3364535 times.
✓ Branch 1 taken 5708878 times.
9073413 if( skip ) {
1941
4/4
✓ Branch 0 taken 273099 times.
✓ Branch 1 taken 3091436 times.
✓ Branch 2 taken 139885 times.
✓ Branch 3 taken 133214 times.
3364535 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1942 139885 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1943 139885 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1944
2/2
✓ Branch 0 taken 44976 times.
✓ Branch 1 taken 94909 times.
139885 if(!sl->next_mb_skipped)
1945 44976 sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1946 }
1947
1948 3364535 decode_mb_skip(h, sl);
1949
1950 3364535 h->cbp_table[mb_xy] = 0;
1951 3364535 h->chroma_pred_mode_table[mb_xy] = 0;
1952 3364535 sl->last_qscale_diff = 0;
1953
1954 3364535 return 0;
1955
1956 }
1957 }
1958
2/2
✓ Branch 0 taken 1534797 times.
✓ Branch 1 taken 5826511 times.
7361308 if (FRAME_MBAFF(h)) {
1959
2/2
✓ Branch 0 taken 764063 times.
✓ Branch 1 taken 770734 times.
1534797 if ((sl->mb_y & 1) == 0)
1960 764063 sl->mb_mbaff =
1961 764063 sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1962 }
1963
1964 7361308 sl->prev_mb_skipped = 0;
1965
1966 7361308 fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1967
1968
2/2
✓ Branch 0 taken 2921727 times.
✓ Branch 1 taken 4439581 times.
7361308 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1969 2921727 int ctx = 0;
1970 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1971
1972
2/2
✓ Branch 0 taken 2080375 times.
✓ Branch 1 taken 841352 times.
2921727 if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1973 2080375 ctx++;
1974
2/2
✓ Branch 0 taken 1942816 times.
✓ Branch 1 taken 978911 times.
2921727 if (!IS_DIRECT(sl->top_type - 1))
1975 1942816 ctx++;
1976
1977
2/2
✓ Branch 1 taken 513039 times.
✓ Branch 2 taken 2408688 times.
2921727 if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1978 513039 mb_type= 0; /* B_Direct_16x16 */
1979
2/2
✓ Branch 1 taken 911396 times.
✓ Branch 2 taken 1497292 times.
2408688 }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1980 911396 mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1981 }else{
1982 int bits;
1983 1497292 bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1984 1497292 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1985 1497292 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1986 1497292 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1987
2/2
✓ Branch 0 taken 451444 times.
✓ Branch 1 taken 1045848 times.
1497292 if( bits < 8 ){
1988 451444 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1989
2/2
✓ Branch 0 taken 492841 times.
✓ Branch 1 taken 553007 times.
1045848 }else if( bits == 13 ){
1990 492841 mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1991 492841 goto decode_intra_mb;
1992
2/2
✓ Branch 0 taken 16052 times.
✓ Branch 1 taken 536955 times.
553007 }else if( bits == 14 ){
1993 16052 mb_type= 11; /* B_L1_L0_8x16 */
1994
2/2
✓ Branch 0 taken 398675 times.
✓ Branch 1 taken 138280 times.
536955 }else if( bits == 15 ){
1995 398675 mb_type= 22; /* B_8x8 */
1996 }else{
1997 138280 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1998 138280 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1999 }
2000 }
2001 2428886 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
2002 2428886 mb_type = ff_h264_b_mb_type_info[mb_type].type;
2003
2/2
✓ Branch 0 taken 2787151 times.
✓ Branch 1 taken 1652430 times.
4439581 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
2004
2/2
✓ Branch 1 taken 2241409 times.
✓ Branch 2 taken 545742 times.
2787151 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
2005 /* P-type */
2006
2/2
✓ Branch 1 taken 1876720 times.
✓ Branch 2 taken 364689 times.
2241409 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
2007 /* P_L0_D16x16, P_8x8 */
2008 1876720 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2009 } else {
2010 /* P_L0_D8x16, P_L0_D16x8 */
2011 364689 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2012 }
2013 2241409 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2014 2241409 mb_type = ff_h264_p_mb_type_info[mb_type].type;
2015 } else {
2016 545742 mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2017 545742 goto decode_intra_mb;
2018 }
2019 } else {
2020 1652430 mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2021
1/4
✓ Branch 0 taken 1652430 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1652430 if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2022 mb_type--;
2023 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_I);
2024 1652430 decode_intra_mb:
2025 2691013 partition_count = 0;
2026 2691013 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2027 2691013 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2028 2691013 mb_type = ff_h264_i_mb_type_info[mb_type].type;
2029 }
2030
2/2
✓ Branch 0 taken 2836390 times.
✓ Branch 1 taken 4524918 times.
7361308 if (MB_FIELD(sl))
2031 2836390 mb_type |= MB_TYPE_INTERLACED;
2032
2033 7361308 h->slice_table[mb_xy] = sl->slice_num;
2034
2035
2/2
✓ Branch 0 taken 5659 times.
✓ Branch 1 taken 7355649 times.
7361308 if(IS_INTRA_PCM(mb_type)) {
2036 5659 const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2037 5659 sps->bit_depth_luma >> 3;
2038 const uint8_t *ptr;
2039 int ret;
2040
2041 // We assume these blocks are very rare so we do not optimize it.
2042 // FIXME The two following lines get the bitstream position in the cabac
2043 // decode, I think it should be done by a function in cabac.h (or cabac.c).
2044 5659 ptr= sl->cabac.bytestream;
2045
2/2
✓ Branch 0 taken 232 times.
✓ Branch 1 taken 5427 times.
5659 if(sl->cabac.low&0x1) ptr--;
2046 if(CABAC_BITS==16){
2047
2/2
✓ Branch 0 taken 2933 times.
✓ Branch 1 taken 2726 times.
5659 if(sl->cabac.low&0x1FF) ptr--;
2048 }
2049
2050 // The pixels are stored in the same order as levels in h->mb array.
2051
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5659 times.
5659 if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2052 return -1;
2053 5659 sl->intra_pcm_ptr = ptr;
2054 5659 ptr += mb_size;
2055
2056 5659 ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2057
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5659 times.
5659 if (ret < 0)
2058 return ret;
2059
2060 // All blocks are present
2061 5659 h->cbp_table[mb_xy] = 0xf7ef;
2062 5659 h->chroma_pred_mode_table[mb_xy] = 0;
2063 // In deblocking, the quantizer is 0
2064 5659 h->cur_pic.qscale_table[mb_xy] = 0;
2065 // All coeffs are present
2066 5659 memset(h->non_zero_count[mb_xy], 16, 48);
2067 5659 h->cur_pic.mb_type[mb_xy] = mb_type;
2068 5659 sl->last_qscale_diff = 0;
2069 5659 return 0;
2070 }
2071
2072 7355649 fill_decode_caches(h, sl, mb_type);
2073
2074
2/2
✓ Branch 0 taken 2685354 times.
✓ Branch 1 taken 4670295 times.
7355649 if( IS_INTRA( mb_type ) ) {
2075 int i, pred_mode;
2076
2/2
✓ Branch 0 taken 1906894 times.
✓ Branch 1 taken 778460 times.
2685354 if( IS_INTRA4x4( mb_type ) ) {
2077
4/4
✓ Branch 0 taken 1620792 times.
✓ Branch 1 taken 286102 times.
✓ Branch 3 taken 1004846 times.
✓ Branch 4 taken 615946 times.
1906894 if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2078 1004846 mb_type |= MB_TYPE_8x8DCT;
2079
2/2
✓ Branch 0 taken 4019384 times.
✓ Branch 1 taken 1004846 times.
5024230 for( i = 0; i < 16; i+=4 ) {
2080 4019384 int pred = pred_intra_mode(h, sl, i);
2081 4019384 int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2082 4019384 fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2083 }
2084 } else {
2085
2/2
✓ Branch 0 taken 14432768 times.
✓ Branch 1 taken 902048 times.
15334816 for( i = 0; i < 16; i++ ) {
2086 14432768 int pred = pred_intra_mode(h, sl, i);
2087 14432768 sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2088
2089 ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2090 sl->intra4x4_pred_mode_cache[scan8[i]]);
2091 }
2092 }
2093 1906894 write_back_intra_pred_mode(h, sl);
2094
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1906894 times.
1906894 if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2095 1906894 sl->top_samples_available, sl->left_samples_available) < 0 )
2096 return -1;
2097 } else {
2098 1556920 sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2099 778460 sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2100
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 778460 times.
778460 if (sl->intra16x16_pred_mode < 0) return -1;
2101 }
2102
2/2
✓ Branch 0 taken 2591717 times.
✓ Branch 1 taken 93637 times.
2685354 if(decode_chroma){
2103 2591717 h->chroma_pred_mode_table[mb_xy] =
2104 2591717 pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2105
2106 2591717 pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2107 2591717 sl->left_samples_available, pred_mode, 1 );
2108
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2591717 times.
2591717 if( pred_mode < 0 ) return -1;
2109 2591717 sl->chroma_pred_mode = pred_mode;
2110 } else {
2111 93637 sl->chroma_pred_mode = DC_128_PRED8x8;
2112 }
2113
2/2
✓ Branch 0 taken 916236 times.
✓ Branch 1 taken 3754059 times.
4670295 } else if( partition_count == 4 ) {
2114 int i, j, sub_partition_count[4], list, ref[2][4];
2115
2116
2/2
✓ Branch 0 taken 398675 times.
✓ Branch 1 taken 517561 times.
916236 if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2117
2/2
✓ Branch 0 taken 1594700 times.
✓ Branch 1 taken 398675 times.
1993375 for( i = 0; i < 4; i++ ) {
2118 1594700 sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2119 1594700 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2120 1594700 sl->sub_mb_type[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].type;
2121 }
2122
2/2
✓ Branch 0 taken 80377 times.
✓ Branch 1 taken 318298 times.
398675 if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2123 sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2124 80377 ff_h264_pred_direct_motion(h, sl, &mb_type);
2125 80377 sl->ref_cache[0][scan8[4]] =
2126 80377 sl->ref_cache[1][scan8[4]] =
2127 80377 sl->ref_cache[0][scan8[12]] =
2128 80377 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2129
2/2
✓ Branch 0 taken 321508 times.
✓ Branch 1 taken 80377 times.
401885 for( i = 0; i < 4; i++ )
2130 321508 fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2131 }
2132 } else {
2133
2/2
✓ Branch 0 taken 2070244 times.
✓ Branch 1 taken 517561 times.
2587805 for( i = 0; i < 4; i++ ) {
2134 2070244 sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2135 2070244 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2136 2070244 sl->sub_mb_type[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].type;
2137 }
2138 }
2139
2140
2/2
✓ Branch 0 taken 1314911 times.
✓ Branch 1 taken 916236 times.
2231147 for( list = 0; list < sl->list_count; list++ ) {
2141
2/2
✓ Branch 0 taken 5259644 times.
✓ Branch 1 taken 1314911 times.
6574555 for( i = 0; i < 4; i++ ) {
2142
2/2
✓ Branch 0 taken 326694 times.
✓ Branch 1 taken 4932950 times.
5259644 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2143
2/2
✓ Branch 0 taken 4498368 times.
✓ Branch 1 taken 434582 times.
4932950 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2144 4498368 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2145
2/2
✓ Branch 0 taken 2962250 times.
✓ Branch 1 taken 1536118 times.
4498368 if (rc > 1) {
2146 2962250 ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2147
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2962250 times.
2962250 if (ref[list][i] >= rc) {
2148 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2149 return -1;
2150 }
2151 }else
2152 1536118 ref[list][i] = 0;
2153 } else {
2154 434582 ref[list][i] = -1;
2155 }
2156 4932950 sl->ref_cache[list][scan8[4 * i] + 1] =
2157 4932950 sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2158 }
2159 }
2160
2161
2/2
✓ Branch 0 taken 253639 times.
✓ Branch 1 taken 662597 times.
916236 if(dct8x8_allowed)
2162 253639 dct8x8_allowed = get_dct8x8_allowed(h, sl);
2163
2164
2/2
✓ Branch 0 taken 1314911 times.
✓ Branch 1 taken 916236 times.
2231147 for (list = 0; list < sl->list_count; list++) {
2165
2/2
✓ Branch 0 taken 5259644 times.
✓ Branch 1 taken 1314911 times.
6574555 for(i=0; i<4; i++){
2166 5259644 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2167
2/2
✓ Branch 0 taken 326694 times.
✓ Branch 1 taken 4932950 times.
5259644 if(IS_DIRECT(sl->sub_mb_type[i])){
2168 326694 fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2169 326694 continue;
2170 }
2171
2172
3/4
✓ Branch 0 taken 4498368 times.
✓ Branch 1 taken 434582 times.
✓ Branch 2 taken 4498368 times.
✗ Branch 3 not taken.
9431318 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2173 4498368 const int sub_mb_type= sl->sub_mb_type[i];
2174
2/2
✓ Branch 0 taken 3312768 times.
✓ Branch 1 taken 1185600 times.
4498368 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2175
2/2
✓ Branch 0 taken 9292999 times.
✓ Branch 1 taken 4498368 times.
13791367 for(j=0; j<sub_partition_count[i]; j++){
2176 int mpx, mpy;
2177 int mx, my;
2178 9292999 const int index= 4*i + block_width*j;
2179 9292999 int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2180 9292999 uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2181 9292999 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2182
2/4
✓ Branch 2 taken 9292999 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 9292999 times.
9292999 DECODE_CABAC_MB_MVD(sl, list, index)
2183 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2184
2185
2/2
✓ Branch 0 taken 1486247 times.
✓ Branch 1 taken 7806752 times.
9292999 if(IS_SUB_8X8(sub_mb_type)){
2186 1486247 mv_cache[ 1 ][0]=
2187 1486247 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2188 1486247 mv_cache[ 1 ][1]=
2189 1486247 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2190
2191 1486247 mvd_cache[ 1 ][0]=
2192 1486247 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2193 1486247 mvd_cache[ 1 ][1]=
2194 1486247 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2195
2/2
✓ Branch 0 taken 3653042 times.
✓ Branch 1 taken 4153710 times.
7806752 }else if(IS_SUB_8X4(sub_mb_type)){
2196 3653042 mv_cache[ 1 ][0]= mx;
2197 3653042 mv_cache[ 1 ][1]= my;
2198
2199 3653042 mvd_cache[ 1 ][0]= mpx;
2200 3653042 mvd_cache[ 1 ][1]= mpy;
2201
2/2
✓ Branch 0 taken 588690 times.
✓ Branch 1 taken 3565020 times.
4153710 }else if(IS_SUB_4X8(sub_mb_type)){
2202 588690 mv_cache[ 8 ][0]= mx;
2203 588690 mv_cache[ 8 ][1]= my;
2204
2205 588690 mvd_cache[ 8 ][0]= mpx;
2206 588690 mvd_cache[ 8 ][1]= mpy;
2207 }
2208 9292999 mv_cache[ 0 ][0]= mx;
2209 9292999 mv_cache[ 0 ][1]= my;
2210
2211 9292999 mvd_cache[ 0 ][0]= mpx;
2212 9292999 mvd_cache[ 0 ][1]= mpy;
2213 }
2214 }else{
2215 434582 fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2216 434582 fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2217 }
2218 }
2219 }
2220
2/2
✓ Branch 0 taken 513039 times.
✓ Branch 1 taken 3241020 times.
3754059 } else if( IS_DIRECT(mb_type) ) {
2221 513039 ff_h264_pred_direct_motion(h, sl, &mb_type);
2222 513039 fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2223 513039 fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2224 513039 dct8x8_allowed &= sps->direct_8x8_inference_flag;
2225 } else {
2226 int list, i;
2227
2/2
✓ Branch 0 taken 2482688 times.
✓ Branch 1 taken 758332 times.
3241020 if(IS_16X16(mb_type)){
2228
2/2
✓ Branch 0 taken 3606217 times.
✓ Branch 1 taken 2482688 times.
6088905 for (list = 0; list < sl->list_count; list++) {
2229
2/2
✓ Branch 0 taken 2694821 times.
✓ Branch 1 taken 911396 times.
3606217 if(IS_DIR(mb_type, 0, list)){
2230 int ref;
2231 2694821 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2232
2/2
✓ Branch 0 taken 1584602 times.
✓ Branch 1 taken 1110219 times.
2694821 if (rc > 1) {
2233 1584602 ref= decode_cabac_mb_ref(sl, list, 0);
2234
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1584602 times.
1584602 if (ref >= rc) {
2235 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2236 return -1;
2237 }
2238 }else
2239 1110219 ref=0;
2240 2694821 fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2241 }
2242 }
2243
2/2
✓ Branch 0 taken 3606217 times.
✓ Branch 1 taken 2482688 times.
6088905 for (list = 0; list < sl->list_count; list++) {
2244
2/2
✓ Branch 0 taken 2694821 times.
✓ Branch 1 taken 911396 times.
3606217 if(IS_DIR(mb_type, 0, list)){
2245 int mx,my,mpx,mpy;
2246 2694821 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2247
2/4
✓ Branch 2 taken 2694821 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2694821 times.
2694821 DECODE_CABAC_MB_MVD(sl, list, 0)
2248 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2249
2250 2694821 fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2251 2694821 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2252 }
2253 }
2254 }
2255
2/2
✓ Branch 0 taken 396091 times.
✓ Branch 1 taken 362241 times.
758332 else if(IS_16X8(mb_type)){
2256
2/2
✓ Branch 0 taken 608401 times.
✓ Branch 1 taken 396091 times.
1004492 for (list = 0; list < sl->list_count; list++) {
2257
2/2
✓ Branch 0 taken 1216802 times.
✓ Branch 1 taken 608401 times.
1825203 for(i=0; i<2; i++){
2258
2/2
✓ Branch 0 taken 885514 times.
✓ Branch 1 taken 331288 times.
1216802 if(IS_DIR(mb_type, i, list)){
2259 int ref;
2260 885514 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2261
2/2
✓ Branch 0 taken 551464 times.
✓ Branch 1 taken 334050 times.
885514 if (rc > 1) {
2262 551464 ref= decode_cabac_mb_ref(sl, list, 8 * i);
2263
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 551464 times.
551464 if (ref >= rc) {
2264 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2265 return -1;
2266 }
2267 }else
2268 334050 ref=0;
2269 885514 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2270 }else
2271 331288 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2272 }
2273 }
2274
2/2
✓ Branch 0 taken 608401 times.
✓ Branch 1 taken 396091 times.
1004492 for (list = 0; list < sl->list_count; list++) {
2275
2/2
✓ Branch 0 taken 1216802 times.
✓ Branch 1 taken 608401 times.
1825203 for(i=0; i<2; i++){
2276
2/2
✓ Branch 0 taken 885514 times.
✓ Branch 1 taken 331288 times.
1216802 if(IS_DIR(mb_type, i, list)){
2277 int mx,my,mpx,mpy;
2278 885514 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2279
2/4
✓ Branch 2 taken 885514 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 885514 times.
885514 DECODE_CABAC_MB_MVD(sl, list, 8*i)
2280 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2281
2282 885514 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2283 885514 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2284 }else{
2285 331288 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2286 331288 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2287 }
2288 }
2289 }
2290 }else{
2291 av_assert2(IS_8X16(mb_type));
2292
2/2
✓ Branch 0 taken 543574 times.
✓ Branch 1 taken 362241 times.
905815 for (list = 0; list < sl->list_count; list++) {
2293
2/2
✓ Branch 0 taken 1087148 times.
✓ Branch 1 taken 543574 times.
1630722 for(i=0; i<2; i++){
2294
2/2
✓ Branch 0 taken 803166 times.
✓ Branch 1 taken 283982 times.
1087148 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2295 int ref;
2296 803166 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2297
2/2
✓ Branch 0 taken 468487 times.
✓ Branch 1 taken 334679 times.
803166 if (rc > 1) {
2298 468487 ref = decode_cabac_mb_ref(sl, list, 4 * i);
2299
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 468487 times.
468487 if (ref >= rc) {
2300 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2301 return -1;
2302 }
2303 }else
2304 334679 ref=0;
2305 803166 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2306 }else
2307 283982 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2308 }
2309 }
2310
2/2
✓ Branch 0 taken 543574 times.
✓ Branch 1 taken 362241 times.
905815 for (list = 0; list < sl->list_count; list++) {
2311
2/2
✓ Branch 0 taken 1087148 times.
✓ Branch 1 taken 543574 times.
1630722 for(i=0; i<2; i++){
2312
2/2
✓ Branch 0 taken 803166 times.
✓ Branch 1 taken 283982 times.
1087148 if(IS_DIR(mb_type, i, list)){
2313 int mx,my,mpx,mpy;
2314 803166 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2315
2/4
✓ Branch 2 taken 803166 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 803166 times.
803166 DECODE_CABAC_MB_MVD(sl, list, 4*i)
2316
2317 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2318 803166 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2319 803166 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2320 }else{
2321 283982 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2322 283982 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2323 }
2324 }
2325 }
2326 }
2327 }
2328
2329
2/2
✓ Branch 0 taken 4670295 times.
✓ Branch 1 taken 2685354 times.
7355649 if( IS_INTER( mb_type ) ) {
2330 4670295 h->chroma_pred_mode_table[mb_xy] = 0;
2331 4670295 write_back_motion(h, sl, mb_type);
2332 }
2333
2334
2/2
✓ Branch 0 taken 6577189 times.
✓ Branch 1 taken 778460 times.
7355649 if( !IS_INTRA16x16( mb_type ) ) {
2335 6577189 cbp = decode_cabac_mb_cbp_luma(sl);
2336
2/2
✓ Branch 0 taken 6388419 times.
✓ Branch 1 taken 188770 times.
6577189 if(decode_chroma)
2337 6388419 cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2338 } else {
2339
4/4
✓ Branch 0 taken 6527 times.
✓ Branch 1 taken 771933 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 6526 times.
778460 if (!decode_chroma && cbp>15) {
2340 1 av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2341 1 return AVERROR_INVALIDDATA;
2342 }
2343 }
2344
2345 7355648 h->cbp_table[mb_xy] = sl->cbp = cbp;
2346
2347
6/6
✓ Branch 0 taken 4639827 times.
✓ Branch 1 taken 2715821 times.
✓ Branch 2 taken 3297613 times.
✓ Branch 3 taken 1342214 times.
✓ Branch 4 taken 1591921 times.
✓ Branch 5 taken 1705692 times.
7355648 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2348 1591921 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2349 }
2350
2351 /* It would be better to do this in fill_decode_caches, but we don't know
2352 * the transform mode of the current macroblock there. */
2353
4/4
✓ Branch 0 taken 152992 times.
✓ Branch 1 taken 7202656 times.
✓ Branch 2 taken 58789 times.
✓ Branch 3 taken 94203 times.
7355648 if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2354 int i;
2355 58789 uint8_t *nnz_cache = sl->non_zero_count_cache;
2356
2/2
✓ Branch 0 taken 58752 times.
✓ Branch 1 taken 37 times.
58789 if (h->x264_build < 151U) {
2357
2/2
✓ Branch 0 taken 117504 times.
✓ Branch 1 taken 58752 times.
176256 for (i = 0; i < 2; i++){
2358
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)])) {
2359 10860 nnz_cache[3+8* 1 + 2*8*i]=
2360 10860 nnz_cache[3+8* 2 + 2*8*i]=
2361 10860 nnz_cache[3+8* 6 + 2*8*i]=
2362 10860 nnz_cache[3+8* 7 + 2*8*i]=
2363 10860 nnz_cache[3+8*11 + 2*8*i]=
2364
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;
2365 }
2366 }
2367
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)){
2368
2/2
✓ Branch 0 taken 4731 times.
✓ Branch 1 taken 572 times.
5303 uint32_t top_empty = !IS_INTRA(mb_type) ? 0 : 0x40404040;
2369 5303 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2370 5303 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2371 5303 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2372 }
2373 } else {
2374
2/2
✓ Branch 0 taken 74 times.
✓ Branch 1 taken 37 times.
111 for (i = 0; i < 2; i++){
2375
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)])) {
2376 40 nnz_cache[3+8* 1 + 2*8*i]=
2377 40 nnz_cache[3+8* 2 + 2*8*i]=
2378 40 nnz_cache[3+8* 6 + 2*8*i]=
2379 40 nnz_cache[3+8* 7 + 2*8*i]=
2380 40 nnz_cache[3+8*11 + 2*8*i]=
2381
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;
2382 }
2383 }
2384
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)){
2385
1/2
✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
7 uint32_t top_empty = !IS_INTRA_PCM(sl->top_type) ? 0 : 0x40404040;
2386 7 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2387 7 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2388 7 AV_WN32A(&nnz_cache[4+8*10], top_empty);
2389 }
2390 }
2391 }
2392 7355648 h->cur_pic.mb_type[mb_xy] = mb_type;
2393
2394
4/4
✓ Branch 0 taken 1587999 times.
✓ Branch 1 taken 5767649 times.
✓ Branch 2 taken 351600 times.
✓ Branch 3 taken 1236399 times.
13474897 if( cbp || IS_INTRA16x16( mb_type ) ) {
2395 const uint8_t *scan, *scan8x8;
2396 const uint32_t *qmul;
2397
2398 // decode_cabac_mb_dqp
2399
4/4
✓ Branch 0 taken 963380 times.
✓ Branch 1 taken 5155869 times.
✓ Branch 3 taken 1165422 times.
✓ Branch 4 taken 4953827 times.
6119249 if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2400 1165422 int val = 1;
2401 1165422 int ctx= 2;
2402 1165422 const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2403
2404
2/2
✓ Branch 1 taken 6849954 times.
✓ Branch 2 taken 1165422 times.
8015376 while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2405 6849954 ctx= 3;
2406 6849954 val++;
2407
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6849954 times.
6849954 if(val > 2*max_qp){ //prevent infinite loop
2408 av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2409 return -1;
2410 }
2411 }
2412
2413
2/2
✓ Branch 0 taken 580146 times.
✓ Branch 1 taken 585276 times.
1165422 if( val&0x01 )
2414 580146 val= (val + 1)>>1 ;
2415 else
2416 585276 val= -((val + 1)>>1);
2417 1165422 sl->last_qscale_diff = val;
2418 1165422 sl->qscale += val;
2419
2/2
✓ Branch 0 taken 10672 times.
✓ Branch 1 taken 1154750 times.
1165422 if (((unsigned)sl->qscale) > max_qp){
2420
2/2
✓ Branch 0 taken 5514 times.
✓ Branch 1 taken 5158 times.
10672 if (sl->qscale < 0) sl->qscale += max_qp + 1;
2421 5158 else sl->qscale -= max_qp + 1;
2422 }
2423 1165422 sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2424 1165422 sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2425 }else
2426 4953827 sl->last_qscale_diff=0;
2427
2428
2/2
✓ Branch 0 taken 2350652 times.
✓ Branch 1 taken 3768597 times.
6119249 if(IS_INTERLACED(mb_type)){
2429
2/2
✓ Branch 0 taken 2350618 times.
✓ Branch 1 taken 34 times.
2350652 scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2430
2/2
✓ Branch 0 taken 2350618 times.
✓ Branch 1 taken 34 times.
2350652 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2431 }else{
2432
2/2
✓ Branch 0 taken 3676465 times.
✓ Branch 1 taken 92132 times.
3768597 scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2433
2/2
✓ Branch 0 taken 3676465 times.
✓ Branch 1 taken 92132 times.
3768597 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2434 }
2435
2436 6119249 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2437
2/2
✓ Branch 0 taken 91942 times.
✓ Branch 1 taken 6027307 times.
6119249 if (CHROMA444(h)) {
2438 91942 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2439 91942 decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2440
2/2
✓ Branch 0 taken 473337 times.
✓ Branch 1 taken 5553970 times.
6027307 } else if (CHROMA422(h)) {
2441
2/2
✓ Branch 0 taken 393505 times.
✓ Branch 1 taken 79832 times.
473337 if( cbp&0x30 ){
2442 int c;
2443
2/2
✓ Branch 0 taken 787010 times.
✓ Branch 1 taken 393505 times.
1180515 for (c = 0; c < 2; c++)
2444 787010 decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2445 CHROMA_DC_BLOCK_INDEX + c,
2446 ff_h264_chroma422_dc_scan, 8);
2447 }
2448
2449
2/2
✓ Branch 0 taken 294838 times.
✓ Branch 1 taken 178499 times.
473337 if( cbp&0x20 ) {
2450 int c, i, i8x8;
2451
2/2
✓ Branch 0 taken 589676 times.
✓ Branch 1 taken 294838 times.
884514 for( c = 0; c < 2; c++ ) {
2452 589676 int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2453
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]];
2454
2/2
✓ Branch 0 taken 1179352 times.
✓ Branch 1 taken 589676 times.
1769028 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2455
2/2
✓ Branch 0 taken 4717408 times.
✓ Branch 1 taken 1179352 times.
5896760 for (i = 0; i < 4; i++) {
2456 4717408 const int index = 16 + 16 * c + 8*i8x8 + i;
2457 4717408 decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2458 4717408 mb += 16<<pixel_shift;
2459 }
2460 }
2461 }
2462 } else {
2463 178499 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2464 178499 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2465 }
2466 } else /* yuv420 */ {
2467
2/2
✓ Branch 0 taken 2826189 times.
✓ Branch 1 taken 2727781 times.
5553970 if( cbp&0x30 ){
2468 int c;
2469
2/2
✓ Branch 0 taken 5652378 times.
✓ Branch 1 taken 2826189 times.
8478567 for (c = 0; c < 2; c++)
2470 5652378 decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16 * 16 * c) << pixel_shift),
2471 3, CHROMA_DC_BLOCK_INDEX + c, ff_h264_chroma_dc_scan, 4);
2472 }
2473
2474
2/2
✓ Branch 0 taken 1487930 times.
✓ Branch 1 taken 4066040 times.
5553970 if( cbp&0x20 ) {
2475 int c, i;
2476
2/2
✓ Branch 0 taken 2975860 times.
✓ Branch 1 taken 1487930 times.
4463790 for( c = 0; c < 2; c++ ) {
2477
2/2
✓ Branch 0 taken 1616774 times.
✓ Branch 1 taken 1359086 times.
2975860 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2478
2/2
✓ Branch 0 taken 11903440 times.
✓ Branch 1 taken 2975860 times.
14879300 for( i = 0; i < 4; i++ ) {
2479 11903440 const int index = 16 + 16 * c + i;
2480 11903440 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2481 }
2482 }
2483 } else {
2484 4066040 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2485 4066040 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2486 }
2487 }
2488 } else {
2489 1236399 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2490 1236399 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2491 1236399 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2492 1236399 sl->last_qscale_diff = 0;
2493 }
2494
2495 7355648 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2496 7355648 write_back_non_zero_count(h, sl);
2497
2498 7355648 return 0;
2499 }
2500