FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/h264_cabac.c
Date: 2024-03-28 14:59:00
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 20623 void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
1263 {
1264 int i;
1265 const int8_t (*tab)[2];
1266 20623 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 2537 times.
✓ Branch 1 taken 18086 times.
20623 if (sl->slice_type_nos == AV_PICTURE_TYPE_I) tab = cabac_context_init_I;
1269 18086 else tab = cabac_context_init_PB[sl->cabac_init_idc];
1270
1271 /* calculate pre-state */
1272
2/2
✓ Branch 0 taken 21117952 times.
✓ Branch 1 taken 20623 times.
21138575 for( i= 0; i < 1024; i++ ) {
1273 21117952 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
1274
1275 21117952 pre^= pre>>31;
1276
2/2
✓ Branch 0 taken 353569 times.
✓ Branch 1 taken 20764383 times.
21117952 if(pre > 124)
1277 353569 pre= 124 + (pre&1);
1278
1279 21117952 sl->cabac_state[i] = pre;
1280 }
1281 20623 }
1282
1283 4281349 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 4281349 return (a & 0xFF) + (b << 8);
1289 #endif
1290 }
1291
1292 807673 static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
1293 {
1294 807673 const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
1295
1296 807673 unsigned long ctx = 0;
1297
1298 807673 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 807673 ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
1300
1301 807673 return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
1302 }
1303
1304 2595216 static int decode_cabac_intra_mb_type(H264SliceContext *sl,
1305 int ctx_base, int intra_slice)
1306 {
1307 2595216 uint8_t *state= &sl->cabac_state[ctx_base];
1308 int mb_type;
1309
1310
2/2
✓ Branch 0 taken 1573842 times.
✓ Branch 1 taken 1021374 times.
2595216 if(intra_slice){
1311 1573842 int ctx=0;
1312
2/2
✓ Branch 0 taken 348342 times.
✓ Branch 1 taken 1225500 times.
1573842 if (sl->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1313 348342 ctx++;
1314
2/2
✓ Branch 0 taken 336384 times.
✓ Branch 1 taken 1237458 times.
1573842 if (sl->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
1315 336384 ctx++;
1316
2/2
✓ Branch 1 taken 1217741 times.
✓ Branch 2 taken 356101 times.
1573842 if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
1317 1217741 return 0; /* I4x4 */
1318 356101 state += 2;
1319 }else{
1320
2/2
✓ Branch 1 taken 667815 times.
✓ Branch 2 taken 353559 times.
1021374 if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1321 667815 return 0; /* I4x4 */
1322 }
1323
1324
2/2
✓ Branch 1 taken 5659 times.
✓ Branch 2 taken 704001 times.
709660 if( get_cabac_terminate( &sl->cabac ) )
1325 5659 return 25; /* PCM */
1326
1327 704001 mb_type = 1; /* I16x16 */
1328 704001 mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1329
2/2
✓ Branch 1 taken 281587 times.
✓ Branch 2 taken 422414 times.
704001 if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1330 281587 mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1331 704001 mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1332 704001 mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1333 704001 return mb_type;
1334 }
1335
1336 8707623 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 8707623 int ctx = 0;
1341
1342
2/2
✓ Branch 0 taken 1372860 times.
✓ Branch 1 taken 7334763 times.
8707623 if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1343 1372860 int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1344 1372860 mba_xy = mb_xy - 1;
1345
2/2
✓ Branch 0 taken 686430 times.
✓ Branch 1 taken 686430 times.
1372860 if( (mb_y&1)
1346
2/2
✓ Branch 0 taken 668340 times.
✓ Branch 1 taken 18090 times.
686430 && h->slice_table[mba_xy] == sl->slice_num
1347
2/2
✓ Branch 0 taken 541072 times.
✓ Branch 1 taken 127268 times.
668340 && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1348 541072 mba_xy += h->mb_stride;
1349
2/2
✓ Branch 0 taken 374001 times.
✓ Branch 1 taken 998859 times.
1372860 if (MB_FIELD(sl)) {
1350 374001 mbb_xy = mb_xy - h->mb_stride;
1351
2/2
✓ Branch 0 taken 186703 times.
✓ Branch 1 taken 187298 times.
374001 if( !(mb_y&1)
1352
2/2
✓ Branch 0 taken 166327 times.
✓ Branch 1 taken 20376 times.
186703 && h->slice_table[mbb_xy] == sl->slice_num
1353
2/2
✓ Branch 0 taken 83155 times.
✓ Branch 1 taken 83172 times.
166327 && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
1354 83155 mbb_xy -= h->mb_stride;
1355 }else
1356 998859 mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1357 }else{
1358 7334763 int mb_xy = sl->mb_xy;
1359 7334763 mba_xy = mb_xy - 1;
1360 7334763 mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1361 }
1362
1363
4/4
✓ Branch 0 taken 8480440 times.
✓ Branch 1 taken 227183 times.
✓ Branch 2 taken 5436322 times.
✓ Branch 3 taken 3044118 times.
8707623 if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1364 5436322 ctx++;
1365
4/4
✓ Branch 0 taken 8004695 times.
✓ Branch 1 taken 702928 times.
✓ Branch 2 taken 5194083 times.
✓ Branch 3 taken 2810612 times.
8707623 if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1366 5194083 ctx++;
1367
1368
2/2
✓ Branch 0 taken 5030058 times.
✓ Branch 1 taken 3677565 times.
8707623 if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1369 5030058 ctx += 13;
1370 8707623 return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1371 }
1372
1373 18226196 static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
1374 {
1375 18226196 int mode = 0;
1376
1377
2/2
✓ Branch 1 taken 10001948 times.
✓ Branch 2 taken 8224248 times.
18226196 if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1378 10001948 return pred_mode;
1379
1380 8224248 mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1381 8224248 mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1382 8224248 mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1383
1384 8224248 return mode + ( mode >= pred_mode );
1385 }
1386
1387 2495920 static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
1388 {
1389 2495920 const int mba_xy = sl->left_mb_xy[0];
1390 2495920 const int mbb_xy = sl->top_mb_xy;
1391
1392 2495920 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 2446443 times.
✓ Branch 1 taken 49477 times.
✓ Branch 2 taken 928442 times.
✓ Branch 3 taken 1518001 times.
2495920 if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1396 928442 ctx++;
1397
1398
4/4
✓ Branch 0 taken 2323807 times.
✓ Branch 1 taken 172113 times.
✓ Branch 2 taken 837843 times.
✓ Branch 3 taken 1485964 times.
2495920 if (sl->top_type && h->chroma_pred_mode_table[mbb_xy] != 0)
1399 837843 ctx++;
1400
1401
2/2
✓ Branch 1 taken 1380106 times.
✓ Branch 2 taken 1115814 times.
2495920 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1402 1380106 return 0;
1403
1404
2/2
✓ Branch 1 taken 626260 times.
✓ Branch 2 taken 489554 times.
1115814 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1405 626260 return 1;
1406
2/2
✓ Branch 1 taken 281481 times.
✓ Branch 2 taken 208073 times.
489554 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1407 281481 return 2;
1408 else
1409 208073 return 3;
1410 }
1411
1412 6461779 static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
1413 {
1414 6461779 int cbp_b, cbp_a, ctx, cbp = 0;
1415
1416 6461779 cbp_a = sl->left_cbp;
1417 6461779 cbp_b = sl->top_cbp;
1418
1419
2/2
✓ Branch 0 taken 2699040 times.
✓ Branch 1 taken 3762739 times.
6461779 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1420 6461779 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1421
2/2
✓ Branch 0 taken 2681976 times.
✓ Branch 1 taken 3779803 times.
6461779 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1422 6461779 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1423
2/2
✓ Branch 0 taken 2779726 times.
✓ Branch 1 taken 3682053 times.
6461779 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1424 6461779 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1425
2/2
✓ Branch 0 taken 2759680 times.
✓ Branch 1 taken 3702099 times.
6461779 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1426 6461779 cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1427 6461779 return cbp;
1428 }
1429 6273009 static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
1430 {
1431 int ctx;
1432 int cbp_a, cbp_b;
1433
1434 6273009 cbp_a = (sl->left_cbp>>4)&0x03;
1435 6273009 cbp_b = (sl-> top_cbp>>4)&0x03;
1436
1437 6273009 ctx = 0;
1438
2/2
✓ Branch 0 taken 2712868 times.
✓ Branch 1 taken 3560141 times.
6273009 if( cbp_a > 0 ) ctx++;
1439
2/2
✓ Branch 0 taken 2563381 times.
✓ Branch 1 taken 3709628 times.
6273009 if( cbp_b > 0 ) ctx += 2;
1440
2/2
✓ Branch 1 taken 3376739 times.
✓ Branch 2 taken 2896270 times.
6273009 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1441 3376739 return 0;
1442
1443 2896270 ctx = 4;
1444
2/2
✓ Branch 0 taken 1347078 times.
✓ Branch 1 taken 1549192 times.
2896270 if( cbp_a == 2 ) ctx++;
1445
2/2
✓ Branch 0 taken 1235332 times.
✓ Branch 1 taken 1660938 times.
2896270 if( cbp_b == 2 ) ctx += 2;
1446 2896270 return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1447 }
1448
1449 2034288 static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
1450 {
1451
2/2
✓ Branch 1 taken 823321 times.
✓ Branch 2 taken 1210967 times.
2034288 if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1452 823321 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 1589812 static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
1460 {
1461 int type;
1462
2/2
✓ Branch 1 taken 161816 times.
✓ Branch 2 taken 1427996 times.
1589812 if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1463 161816 return 0; /* B_Direct_8x8 */
1464
2/2
✓ Branch 1 taken 298246 times.
✓ Branch 2 taken 1129750 times.
1427996 if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1465 298246 return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1466 1129750 type = 3;
1467
2/2
✓ Branch 1 taken 871434 times.
✓ Branch 2 taken 258316 times.
1129750 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 1119303 type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1473 1119303 type += get_cabac( &sl->cabac, &sl->cabac_state[39] );
1474 1119303 return type;
1475 }
1476
1477 5536469 static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
1478 {
1479 5536469 int refa = sl->ref_cache[list][scan8[n] - 1];
1480 5536469 int refb = sl->ref_cache[list][scan8[n] - 8];
1481 5536469 int ref = 0;
1482 5536469 int ctx = 0;
1483
1484
2/2
✓ Branch 0 taken 2469177 times.
✓ Branch 1 taken 3067292 times.
5536469 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1485
4/4
✓ Branch 0 taken 730695 times.
✓ Branch 1 taken 1738482 times.
✓ Branch 2 taken 700089 times.
✓ Branch 3 taken 30606 times.
2469177 if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1486 700089 ctx++;
1487
4/4
✓ Branch 0 taken 682127 times.
✓ Branch 1 taken 1787050 times.
✓ Branch 2 taken 651209 times.
✓ Branch 3 taken 30918 times.
2469177 if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1488 651209 ctx += 2;
1489 } else {
1490
2/2
✓ Branch 0 taken 1037798 times.
✓ Branch 1 taken 2029494 times.
3067292 if( refa > 0 )
1491 1037798 ctx++;
1492
2/2
✓ Branch 0 taken 1007034 times.
✓ Branch 1 taken 2060258 times.
3067292 if( refb > 0 )
1493 1007034 ctx += 2;
1494 }
1495
1496
2/2
✓ Branch 1 taken 3063490 times.
✓ Branch 2 taken 5536469 times.
8599959 while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
1497 3063490 ref++;
1498 3063490 ctx = (ctx>>2)+4;
1499
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3063490 times.
3063490 if(ref >= 32 /*h->ref_list[list]*/){
1500 return -1;
1501 }
1502 }
1503 5536469 return ref;
1504 }
1505
1506 27068912 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 16042566 times.
✓ Branch 2 taken 11026346 times.
27068912 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 16042566 *mvda= 0;
1513 16042566 return 0;
1514 }
1515
1516 11026346 mvd= 1;
1517 11026346 ctxbase+= 3;
1518
4/4
✓ Branch 0 taken 49647244 times.
✓ Branch 1 taken 3656314 times.
✓ Branch 3 taken 42277212 times.
✓ Branch 4 taken 7370032 times.
53303558 while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1519
2/2
✓ Branch 0 taken 20606183 times.
✓ Branch 1 taken 21671029 times.
42277212 if( mvd < 4 )
1520 20606183 ctxbase++;
1521 42277212 mvd++;
1522 }
1523
1524
2/2
✓ Branch 0 taken 3656314 times.
✓ Branch 1 taken 7370032 times.
11026346 if( mvd >= 9 ) {
1525 3656314 int k = 3;
1526
2/2
✓ Branch 1 taken 4043885 times.
✓ Branch 2 taken 3656314 times.
7700199 while( get_cabac_bypass( &sl->cabac ) ) {
1527 4043885 mvd += 1 << k;
1528 4043885 k++;
1529
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4043885 times.
4043885 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 15012827 times.
✓ Branch 1 taken 3656314 times.
18669141 while( k-- ) {
1535 15012827 mvd += get_cabac_bypass( &sl->cabac )<<k;
1536 }
1537 3656314 *mvda=mvd < 70 ? mvd : 70;
1538 }else
1539 7370032 *mvda=mvd;
1540 11026346 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 68260356 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 68260356 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 7066470 times.
✓ Branch 1 taken 61193886 times.
68260356 if( is_dc ) {
1567
2/2
✓ Branch 0 taken 6355712 times.
✓ Branch 1 taken 710758 times.
7066470 if( cat == 3 ) {
1568 6355712 idx -= CHROMA_DC_BLOCK_INDEX;
1569 6355712 nza = (sl->left_cbp>>(6+idx))&0x01;
1570 6355712 nzb = (sl-> top_cbp>>(6+idx))&0x01;
1571 } else {
1572 710758 idx -= LUMA_DC_BLOCK_INDEX;
1573 710758 nza = sl->left_cbp&(0x100<<idx);
1574 710758 nzb = sl-> top_cbp&(0x100<<idx);
1575 }
1576 } else {
1577 61193886 nza = sl->non_zero_count_cache[scan8[idx] - 1];
1578 61193886 nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1579 }
1580
1581
2/2
✓ Branch 0 taken 37508637 times.
✓ Branch 1 taken 30751719 times.
68260356 if( nza > 0 )
1582 37508637 ctx++;
1583
1584
2/2
✓ Branch 0 taken 37282052 times.
✓ Branch 1 taken 30978304 times.
68260356 if( nzb > 0 )
1585 37282052 ctx += 2;
1586
1587 68260356 return base_ctx[cat] + ctx;
1588 }
1589
1590 static av_always_inline void
1591 46239165 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 46239165 int coeff_count = 0;
1639 46239165 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 46239165 significant_coeff_ctx_base = sl->cabac_state
1662 46239165 + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1663 46239165 last_coeff_ctx_base = sl->cabac_state
1664 46239165 + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1665 46239165 abs_level_m1_ctx_base = sl->cabac_state
1666 46239165 + coeff_abs_level_m1_offset[cat];
1667
1668
4/4
✓ Branch 0 taken 41338167 times.
✓ Branch 1 taken 4900998 times.
✓ Branch 2 taken 5462822 times.
✓ Branch 3 taken 35875345 times.
51701987 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 5462822 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1685 #ifdef decode_significance
1686 5462822 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 4900998 times.
✓ Branch 1 taken 35875345 times.
✓ Branch 2 taken 654202 times.
✓ Branch 3 taken 4246796 times.
40776343 if (is_dc && chroma422) { // dc 422
1690
8/8
✓ Branch 1 taken 2143961 times.
✓ Branch 2 taken 1217582 times.
✓ Branch 4 taken 482832 times.
✓ Branch 5 taken 1661129 times.
✓ Branch 6 taken 3361543 times.
✓ Branch 7 taken 171370 times.
✓ Branch 8 taken 171370 times.
✓ Branch 9 taken 482832 times.
3532913 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1691 } else {
1692 40122141 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 4900998 times.
✓ Branch 1 taken 41338167 times.
46239165 if( is_dc ) {
1708
2/2
✓ Branch 0 taken 4428379 times.
✓ Branch 1 taken 472619 times.
4900998 if( cat == 3 )
1709 4428379 h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1710 else
1711 472619 h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1712 4900998 sl->non_zero_count_cache[scan8[n]] = coeff_count;
1713 } else {
1714
2/2
✓ Branch 0 taken 5462822 times.
✓ Branch 1 taken 35875345 times.
41338167 if( max_coeff == 64 )
1715 5462822 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 35875345 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 11015971 times.
✓ Branch 1 taken 35223194 times.
46239165 if (h->pixel_shift) {
1766
23/24
✓ Branch 1 taken 35295482 times.
✓ Branch 2 taken 15912944 times.
✓ Branch 3 taken 2637567 times.
✓ Branch 4 taken 32657915 times.
✓ Branch 7 taken 1284423 times.
✓ Branch 8 taken 14628521 times.
✓ Branch 9 taken 806045 times.
✓ Branch 10 taken 478378 times.
✓ Branch 11 taken 37268473 times.
✓ Branch 12 taken 156245 times.
✓ Branch 14 taken 21511774 times.
✓ Branch 15 taken 15756699 times.
✓ Branch 16 taken 156245 times.
✓ Branch 17 taken 15756699 times.
✓ Branch 19 taken 271291 times.
✓ Branch 20 taken 156245 times.
✓ Branch 21 taken 271291 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 271291 times.
✓ Branch 25 taken 156245 times.
✓ Branch 26 taken 1284423 times.
✓ Branch 27 taken 14628521 times.
✓ Branch 30 taken 40192455 times.
✓ Branch 31 taken 11015971 times.
73262782 STORE_BLOCK(int32_t)
1767 } else {
1768
23/24
✓ Branch 1 taken 77596208 times.
✓ Branch 2 taken 36487472 times.
✓ Branch 3 taken 4686059 times.
✓ Branch 4 taken 72910149 times.
✓ Branch 7 taken 3266427 times.
✓ Branch 8 taken 33221045 times.
✓ Branch 9 taken 26404 times.
✓ Branch 10 taken 3240023 times.
✓ Branch 11 taken 122627149 times.
✓ Branch 12 taken 2513636 times.
✓ Branch 14 taken 88653313 times.
✓ Branch 15 taken 33973836 times.
✓ Branch 16 taken 2513636 times.
✓ Branch 17 taken 33973836 times.
✓ Branch 19 taken 7320681 times.
✓ Branch 20 taken 2513636 times.
✓ Branch 21 taken 7320681 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 7320681 times.
✓ Branch 25 taken 2513636 times.
✓ Branch 26 taken 3266427 times.
✓ Branch 27 taken 33221045 times.
✓ Branch 30 taken 78860486 times.
✓ Branch 31 taken 35223194 times.
217378355 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 46239165 }
1777
1778 4246796 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 4246796 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1786 4246796 }
1787
1788 654202 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 654202 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1796 654202 }
1797
1798 41338167 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 41338167 decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1807 41338167 }
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 6295462 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 2048666 times.
✓ Branch 3 taken 4246796 times.
6295462 if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1830 2048666 sl->non_zero_count_cache[scan8[n]] = 0;
1831 2048666 return;
1832 }
1833 4246796 decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1834 }
1835
1836 static av_always_inline void
1837 771008 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 116806 times.
✓ Branch 3 taken 654202 times.
771008 if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
1844 116806 sl->non_zero_count_cache[scan8[n]] = 0;
1845 116806 return;
1846 }
1847 654202 decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1848 }
1849
1850 66635017 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 5454381 times.
✓ Branch 1 taken 61180636 times.
✓ Branch 2 taken 13250 times.
✓ Branch 3 taken 5441131 times.
✓ Branch 6 taken 25296850 times.
✓ Branch 7 taken 35897036 times.
66635017 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 25278791 times.
25296850 if( max_coeff == 64 ) {
1861 18059 fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1862 } else {
1863 25278791 sl->non_zero_count_cache[scan8[n]] = 0;
1864 }
1865 25296850 return;
1866 }
1867 41338167 decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1868 }
1869
1870 6155054 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 5971170 times.
✓ Branch 1 taken 183884 times.
6155054 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1878
2/2
✓ Branch 0 taken 710758 times.
✓ Branch 1 taken 5444296 times.
6155054 if( IS_INTRA16x16( mb_type ) ) {
1879 710758 AV_ZERO128(sl->mb_luma_dc[p]+0);
1880 710758 AV_ZERO128(sl->mb_luma_dc[p]+8);
1881 710758 AV_ZERO128(sl->mb_luma_dc[p]+16);
1882 710758 AV_ZERO128(sl->mb_luma_dc[p]+24);
1883 710758 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 349425 times.
✓ Branch 1 taken 361333 times.
710758 if( cbp&15 ) {
1886 349425 qmul = h->ps.pps->dequant4_coeff[p][qscale];
1887
2/2
✓ Branch 0 taken 5590800 times.
✓ Branch 1 taken 349425 times.
5940225 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1888 5590800 const int index = 16*p + i4x4;
1889 5590800 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 361333 fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1893 }
1894 } else {
1895
2/2
✓ Branch 0 taken 1775470 times.
✓ Branch 1 taken 3668826 times.
5444296 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1896
2/2
✓ Branch 0 taken 21777184 times.
✓ Branch 1 taken 5444296 times.
27221480 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1897
2/2
✓ Branch 0 taken 15280789 times.
✓ Branch 1 taken 6496395 times.
21777184 if( cbp & (1<<i8x8) ) {
1898
2/2
✓ Branch 0 taken 5480881 times.
✓ Branch 1 taken 9799908 times.
15280789 if( IS_8x8DCT(mb_type) ) {
1899 5480881 const int index = 16*p + 4*i8x8;
1900 5480881 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1901 5480881 scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1902 } else {
1903 9799908 qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1904
2/2
✓ Branch 0 taken 39199632 times.
✓ Branch 1 taken 9799908 times.
48999540 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1905 39199632 const int index = 16*p + 4*i8x8 + i4x4;
1906 39199632 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 6496395 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1911 }
1912 }
1913 }
1914 6155054 }
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 10281465 int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
1921 {
1922 10281465 const SPS *sps = h->ps.sps;
1923 int mb_xy;
1924 10281465 int mb_type, partition_count, cbp = 0;
1925 10281465 int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
1926
4/4
✓ Branch 0 taken 712939 times.
✓ Branch 1 taken 9568526 times.
✓ Branch 2 taken 477512 times.
✓ Branch 3 taken 235427 times.
10281465 const int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1927 10281465 const int pixel_shift = h->pixel_shift;
1928
1929 10281465 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 8707623 times.
✓ Branch 1 taken 1573842 times.
10281465 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 1372860 times.
✓ Branch 1 taken 7334763 times.
✓ Branch 2 taken 686430 times.
✓ Branch 3 taken 686430 times.
✓ Branch 4 taken 139851 times.
✓ Branch 5 taken 546579 times.
8707623 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1936 139851 skip = sl->next_mb_skipped;
1937 else
1938 8567772 skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1939 /* read skip flags */
1940
2/2
✓ Branch 0 taken 3110026 times.
✓ Branch 1 taken 5597597 times.
8707623 if( skip ) {
1941
4/4
✓ Branch 0 taken 273036 times.
✓ Branch 1 taken 2836990 times.
✓ Branch 2 taken 139851 times.
✓ Branch 3 taken 133185 times.
3110026 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1942 139851 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1943 139851 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1944
2/2
✓ Branch 0 taken 44944 times.
✓ Branch 1 taken 94907 times.
139851 if(!sl->next_mb_skipped)
1945 44944 sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1946 }
1947
1948 3110026 decode_mb_skip(h, sl);
1949
1950 3110026 h->cbp_table[mb_xy] = 0;
1951 3110026 h->chroma_pred_mode_table[mb_xy] = 0;
1952 3110026 sl->last_qscale_diff = 0;
1953
1954 3110026 return 0;
1955
1956 }
1957 }
1958
2/2
✓ Branch 0 taken 1532124 times.
✓ Branch 1 taken 5639315 times.
7171439 if (FRAME_MBAFF(h)) {
1959
2/2
✓ Branch 0 taken 762729 times.
✓ Branch 1 taken 769395 times.
1532124 if ((sl->mb_y & 1) == 0)
1960 762729 sl->mb_mbaff =
1961 762729 sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
1962 }
1963
1964 7171439 sl->prev_mb_skipped = 0;
1965
1966 7171439 fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1967
1968
2/2
✓ Branch 0 taken 2887312 times.
✓ Branch 1 taken 4284127 times.
7171439 if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1969 2887312 int ctx = 0;
1970 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
1971
1972
2/2
✓ Branch 0 taken 2063047 times.
✓ Branch 1 taken 824265 times.
2887312 if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1973 2063047 ctx++;
1974
2/2
✓ Branch 0 taken 1925926 times.
✓ Branch 1 taken 961386 times.
2887312 if (!IS_DIRECT(sl->top_type - 1))
1975 1925926 ctx++;
1976
1977
2/2
✓ Branch 1 taken 507798 times.
✓ Branch 2 taken 2379514 times.
2887312 if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1978 507798 mb_type= 0; /* B_Direct_16x16 */
1979
2/2
✓ Branch 1 taken 890212 times.
✓ Branch 2 taken 1489302 times.
2379514 }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1980 890212 mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1981 }else{
1982 int bits;
1983 1489302 bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1984 1489302 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1985 1489302 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1986 1489302 bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1987
2/2
✓ Branch 0 taken 447921 times.
✓ Branch 1 taken 1041381 times.
1489302 if( bits < 8 ){
1988 447921 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1989
2/2
✓ Branch 0 taken 490846 times.
✓ Branch 1 taken 550535 times.
1041381 }else if( bits == 13 ){
1990 490846 mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1991 490846 goto decode_intra_mb;
1992
2/2
✓ Branch 0 taken 15714 times.
✓ Branch 1 taken 534821 times.
550535 }else if( bits == 14 ){
1993 15714 mb_type= 11; /* B_L1_L0_8x16 */
1994
2/2
✓ Branch 0 taken 397453 times.
✓ Branch 1 taken 137368 times.
534821 }else if( bits == 15 ){
1995 397453 mb_type= 22; /* B_8x8 */
1996 }else{
1997 137368 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1998 137368 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1999 }
2000 }
2001 2396466 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
2002 2396466 mb_type = ff_h264_b_mb_type_info[mb_type].type;
2003
2/2
✓ Branch 0 taken 2710285 times.
✓ Branch 1 taken 1573842 times.
4284127 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
2004
2/2
✓ Branch 1 taken 2179757 times.
✓ Branch 2 taken 530528 times.
2710285 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
2005 /* P-type */
2006
2/2
✓ Branch 1 taken 1832747 times.
✓ Branch 2 taken 347010 times.
2179757 if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
2007 /* P_L0_D16x16, P_8x8 */
2008 1832747 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2009 } else {
2010 /* P_L0_D8x16, P_L0_D16x8 */
2011 347010 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2012 }
2013 2179757 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2014 2179757 mb_type = ff_h264_p_mb_type_info[mb_type].type;
2015 } else {
2016 530528 mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2017 530528 goto decode_intra_mb;
2018 }
2019 } else {
2020 1573842 mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2021
1/4
✓ Branch 0 taken 1573842 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1573842 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 1573842 decode_intra_mb:
2025 2595216 partition_count = 0;
2026 2595216 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2027 2595216 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
2028 2595216 mb_type = ff_h264_i_mb_type_info[mb_type].type;
2029 }
2030
2/2
✓ Branch 0 taken 2814646 times.
✓ Branch 1 taken 4356793 times.
7171439 if (MB_FIELD(sl))
2031 2814646 mb_type |= MB_TYPE_INTERLACED;
2032
2033 7171439 h->slice_table[mb_xy] = sl->slice_num;
2034
2035
2/2
✓ Branch 0 taken 5659 times.
✓ Branch 1 taken 7165780 times.
7171439 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 7165780 fill_decode_caches(h, sl, mb_type);
2073
2074
2/2
✓ Branch 0 taken 2589557 times.
✓ Branch 1 taken 4576223 times.
7165780 if( IS_INTRA( mb_type ) ) {
2075 int i, pred_mode;
2076
2/2
✓ Branch 0 taken 1885556 times.
✓ Branch 1 taken 704001 times.
2589557 if( IS_INTRA4x4( mb_type ) ) {
2077
4/4
✓ Branch 0 taken 1602415 times.
✓ Branch 1 taken 283141 times.
✓ Branch 3 taken 995225 times.
✓ Branch 4 taken 607190 times.
1885556 if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2078 995225 mb_type |= MB_TYPE_8x8DCT;
2079
2/2
✓ Branch 0 taken 3980900 times.
✓ Branch 1 taken 995225 times.
4976125 for( i = 0; i < 16; i+=4 ) {
2080 3980900 int pred = pred_intra_mode(h, sl, i);
2081 3980900 int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2082 3980900 fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2083 }
2084 } else {
2085
2/2
✓ Branch 0 taken 14245296 times.
✓ Branch 1 taken 890331 times.
15135627 for( i = 0; i < 16; i++ ) {
2086 14245296 int pred = pred_intra_mode(h, sl, i);
2087 14245296 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 1885556 write_back_intra_pred_mode(h, sl);
2094
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1885556 times.
1885556 if (ff_h264_check_intra4x4_pred_mode(sl->intra4x4_pred_mode_cache, h->avctx,
2095 1885556 sl->top_samples_available, sl->left_samples_available) < 0 )
2096 return -1;
2097 } else {
2098 1408002 sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2099 704001 sl->left_samples_available, sl->intra16x16_pred_mode, 0);
2100
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 704001 times.
704001 if (sl->intra16x16_pred_mode < 0) return -1;
2101 }
2102
2/2
✓ Branch 0 taken 2495920 times.
✓ Branch 1 taken 93637 times.
2589557 if(decode_chroma){
2103 2495920 h->chroma_pred_mode_table[mb_xy] =
2104 2495920 pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2105
2106 2495920 pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2107 2495920 sl->left_samples_available, pred_mode, 1 );
2108
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2495920 times.
2495920 if( pred_mode < 0 ) return -1;
2109 2495920 sl->chroma_pred_mode = pred_mode;
2110 } else {
2111 93637 sl->chroma_pred_mode = DC_128_PRED8x8;
2112 }
2113
2/2
✓ Branch 0 taken 906025 times.
✓ Branch 1 taken 3670198 times.
4576223 } else if( partition_count == 4 ) {
2114 int i, j, sub_partition_count[4], list, ref[2][4];
2115
2116
2/2
✓ Branch 0 taken 397453 times.
✓ Branch 1 taken 508572 times.
906025 if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2117
2/2
✓ Branch 0 taken 1589812 times.
✓ Branch 1 taken 397453 times.
1987265 for( i = 0; i < 4; i++ ) {
2118 1589812 sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
2119 1589812 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2120 1589812 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 79620 times.
✓ Branch 1 taken 317833 times.
397453 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 79620 ff_h264_pred_direct_motion(h, sl, &mb_type);
2125 79620 sl->ref_cache[0][scan8[4]] =
2126 79620 sl->ref_cache[1][scan8[4]] =
2127 79620 sl->ref_cache[0][scan8[12]] =
2128 79620 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2129
2/2
✓ Branch 0 taken 318480 times.
✓ Branch 1 taken 79620 times.
398100 for( i = 0; i < 4; i++ )
2130 318480 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 2034288 times.
✓ Branch 1 taken 508572 times.
2542860 for( i = 0; i < 4; i++ ) {
2134 2034288 sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
2135 2034288 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2136 2034288 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 1303478 times.
✓ Branch 1 taken 906025 times.
2209503 for( list = 0; list < sl->list_count; list++ ) {
2141
2/2
✓ Branch 0 taken 5213912 times.
✓ Branch 1 taken 1303478 times.
6517390 for( i = 0; i < 4; i++ ) {
2142
2/2
✓ Branch 0 taken 323632 times.
✓ Branch 1 taken 4890280 times.
5213912 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2143
2/2
✓ Branch 0 taken 4458476 times.
✓ Branch 1 taken 431804 times.
4890280 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2144 4458476 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2145
2/2
✓ Branch 0 taken 2955534 times.
✓ Branch 1 taken 1502942 times.
4458476 if (rc > 1) {
2146 2955534 ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2147
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2955534 times.
2955534 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 1502942 ref[list][i] = 0;
2153 } else {
2154 431804 ref[list][i] = -1;
2155 }
2156 4890280 sl->ref_cache[list][scan8[4 * i] + 1] =
2157 4890280 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 243980 times.
✓ Branch 1 taken 662045 times.
906025 if(dct8x8_allowed)
2162 243980 dct8x8_allowed = get_dct8x8_allowed(h, sl);
2163
2164
2/2
✓ Branch 0 taken 1303478 times.
✓ Branch 1 taken 906025 times.
2209503 for (list = 0; list < sl->list_count; list++) {
2165
2/2
✓ Branch 0 taken 5213912 times.
✓ Branch 1 taken 1303478 times.
6517390 for(i=0; i<4; i++){
2166 5213912 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2167
2/2
✓ Branch 0 taken 323632 times.
✓ Branch 1 taken 4890280 times.
5213912 if(IS_DIRECT(sl->sub_mb_type[i])){
2168 323632 fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2169 323632 continue;
2170 }
2171
2172
3/4
✓ Branch 0 taken 4458476 times.
✓ Branch 1 taken 431804 times.
✓ Branch 2 taken 4458476 times.
✗ Branch 3 not taken.
9348756 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2173 4458476 const int sub_mb_type= sl->sub_mb_type[i];
2174
2/2
✓ Branch 0 taken 3272876 times.
✓ Branch 1 taken 1185600 times.
4458476 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2175
2/2
✓ Branch 0 taken 9253107 times.
✓ Branch 1 taken 4458476 times.
13711583 for(j=0; j<sub_partition_count[i]; j++){
2176 int mpx, mpy;
2177 int mx, my;
2178 9253107 const int index= 4*i + block_width*j;
2179 9253107 int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2180 9253107 uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2181 9253107 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2182
2/4
✓ Branch 2 taken 9253107 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 9253107 times.
9253107 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 1446355 times.
✓ Branch 1 taken 7806752 times.
9253107 if(IS_SUB_8X8(sub_mb_type)){
2186 1446355 mv_cache[ 1 ][0]=
2187 1446355 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2188 1446355 mv_cache[ 1 ][1]=
2189 1446355 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2190
2191 1446355 mvd_cache[ 1 ][0]=
2192 1446355 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2193 1446355 mvd_cache[ 1 ][1]=
2194 1446355 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 9253107 mv_cache[ 0 ][0]= mx;
2209 9253107 mv_cache[ 0 ][1]= my;
2210
2211 9253107 mvd_cache[ 0 ][0]= mpx;
2212 9253107 mvd_cache[ 0 ][1]= mpy;
2213 }
2214 }else{
2215 431804 fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2216 431804 fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2217 }
2218 }
2219 }
2220
2/2
✓ Branch 0 taken 507798 times.
✓ Branch 1 taken 3162400 times.
3670198 } else if( IS_DIRECT(mb_type) ) {
2221 507798 ff_h264_pred_direct_motion(h, sl, &mb_type);
2222 507798 fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2223 507798 fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2224 507798 dct8x8_allowed &= sps->direct_8x8_inference_flag;
2225 } else {
2226 int list, i;
2227
2/2
✓ Branch 0 taken 2425163 times.
✓ Branch 1 taken 737237 times.
3162400 if(IS_16X16(mb_type)){
2228
2/2
✓ Branch 0 taken 3526151 times.
✓ Branch 1 taken 2425163 times.
5951314 for (list = 0; list < sl->list_count; list++) {
2229
2/2
✓ Branch 0 taken 2635939 times.
✓ Branch 1 taken 890212 times.
3526151 if(IS_DIR(mb_type, 0, list)){
2230 int ref;
2231 2635939 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2232
2/2
✓ Branch 0 taken 1571892 times.
✓ Branch 1 taken 1064047 times.
2635939 if (rc > 1) {
2233 1571892 ref= decode_cabac_mb_ref(sl, list, 0);
2234
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1571892 times.
1571892 if (ref >= rc) {
2235 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2236 return -1;
2237 }
2238 }else
2239 1064047 ref=0;
2240 2635939 fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2241 }
2242 }
2243
2/2
✓ Branch 0 taken 3526151 times.
✓ Branch 1 taken 2425163 times.
5951314 for (list = 0; list < sl->list_count; list++) {
2244
2/2
✓ Branch 0 taken 2635939 times.
✓ Branch 1 taken 890212 times.
3526151 if(IS_DIR(mb_type, 0, list)){
2245 int mx,my,mpx,mpy;
2246 2635939 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2247
2/4
✓ Branch 2 taken 2635939 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2635939 times.
2635939 DECODE_CABAC_MB_MVD(sl, list, 0)
2248 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2249
2250 2635939 fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2251 2635939 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2252 }
2253 }
2254 }
2255
2/2
✓ Branch 0 taken 386491 times.
✓ Branch 1 taken 350746 times.
737237 else if(IS_16X8(mb_type)){
2256
2/2
✓ Branch 0 taken 597261 times.
✓ Branch 1 taken 386491 times.
983752 for (list = 0; list < sl->list_count; list++) {
2257
2/2
✓ Branch 0 taken 1194522 times.
✓ Branch 1 taken 597261 times.
1791783 for(i=0; i<2; i++){
2258
2/2
✓ Branch 0 taken 865882 times.
✓ Branch 1 taken 328640 times.
1194522 if(IS_DIR(mb_type, i, list)){
2259 int ref;
2260 865882 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2261
2/2
✓ Branch 0 taken 546052 times.
✓ Branch 1 taken 319830 times.
865882 if (rc > 1) {
2262 546052 ref= decode_cabac_mb_ref(sl, list, 8 * i);
2263
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 546052 times.
546052 if (ref >= rc) {
2264 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2265 return -1;
2266 }
2267 }else
2268 319830 ref=0;
2269 865882 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2270 }else
2271 328640 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 597261 times.
✓ Branch 1 taken 386491 times.
983752 for (list = 0; list < sl->list_count; list++) {
2275
2/2
✓ Branch 0 taken 1194522 times.
✓ Branch 1 taken 597261 times.
1791783 for(i=0; i<2; i++){
2276
2/2
✓ Branch 0 taken 865882 times.
✓ Branch 1 taken 328640 times.
1194522 if(IS_DIR(mb_type, i, list)){
2277 int mx,my,mpx,mpy;
2278 865882 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2279
2/4
✓ Branch 2 taken 865882 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 865882 times.
865882 DECODE_CABAC_MB_MVD(sl, list, 8*i)
2280 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2281
2282 865882 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2283 865882 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2284 }else{
2285 328640 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2286 328640 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 530203 times.
✓ Branch 1 taken 350746 times.
880949 for (list = 0; list < sl->list_count; list++) {
2293
2/2
✓ Branch 0 taken 1060406 times.
✓ Branch 1 taken 530203 times.
1590609 for(i=0; i<2; i++){
2294
2/2
✓ Branch 0 taken 779528 times.
✓ Branch 1 taken 280878 times.
1060406 if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2295 int ref;
2296 779528 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2297
2/2
✓ Branch 0 taken 462991 times.
✓ Branch 1 taken 316537 times.
779528 if (rc > 1) {
2298 462991 ref = decode_cabac_mb_ref(sl, list, 4 * i);
2299
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 462991 times.
462991 if (ref >= rc) {
2300 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2301 return -1;
2302 }
2303 }else
2304 316537 ref=0;
2305 779528 fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2306 }else
2307 280878 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 530203 times.
✓ Branch 1 taken 350746 times.
880949 for (list = 0; list < sl->list_count; list++) {
2311
2/2
✓ Branch 0 taken 1060406 times.
✓ Branch 1 taken 530203 times.
1590609 for(i=0; i<2; i++){
2312
2/2
✓ Branch 0 taken 779528 times.
✓ Branch 1 taken 280878 times.
1060406 if(IS_DIR(mb_type, i, list)){
2313 int mx,my,mpx,mpy;
2314 779528 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2315
2/4
✓ Branch 2 taken 779528 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 779528 times.
779528 DECODE_CABAC_MB_MVD(sl, list, 4*i)
2316
2317 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2318 779528 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2319 779528 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2320 }else{
2321 280878 fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2322 280878 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 4576223 times.
✓ Branch 1 taken 2589557 times.
7165780 if( IS_INTER( mb_type ) ) {
2330 4576223 h->chroma_pred_mode_table[mb_xy] = 0;
2331 4576223 write_back_motion(h, sl, mb_type);
2332 }
2333
2334
2/2
✓ Branch 0 taken 6461779 times.
✓ Branch 1 taken 704001 times.
7165780 if( !IS_INTRA16x16( mb_type ) ) {
2335 6461779 cbp = decode_cabac_mb_cbp_luma(sl);
2336
2/2
✓ Branch 0 taken 6273009 times.
✓ Branch 1 taken 188770 times.
6461779 if(decode_chroma)
2337 6273009 cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2338 } else {
2339
4/4
✓ Branch 0 taken 6527 times.
✓ Branch 1 taken 697474 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 6526 times.
704001 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 7165779 h->cbp_table[mb_xy] = sl->cbp = cbp;
2346
2347
6/6
✓ Branch 0 taken 4481153 times.
✓ Branch 1 taken 2684626 times.
✓ Branch 2 taken 3236338 times.
✓ Branch 3 taken 1244815 times.
✓ Branch 4 taken 1547775 times.
✓ Branch 5 taken 1688563 times.
7165779 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2348 1547775 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 7012787 times.
✓ Branch 2 taken 58789 times.
✓ Branch 3 taken 94203 times.
7165779 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 7165779 h->cur_pic.mb_type[mb_xy] = mb_type;
2393
2394
4/4
✓ Branch 0 taken 1475722 times.
✓ Branch 1 taken 5690057 times.
✓ Branch 2 taken 281113 times.
✓ Branch 3 taken 1194609 times.
13136949 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 934309 times.
✓ Branch 1 taken 5036861 times.
✓ Branch 3 taken 1129052 times.
✓ Branch 4 taken 4842118 times.
5971170 if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2400 1129052 int val = 1;
2401 1129052 int ctx= 2;
2402 1129052 const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2403
2404
2/2
✓ Branch 1 taken 6627951 times.
✓ Branch 2 taken 1129052 times.
7757003 while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2405 6627951 ctx= 3;
2406 6627951 val++;
2407
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6627951 times.
6627951 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 561963 times.
✓ Branch 1 taken 567089 times.
1129052 if( val&0x01 )
2414 561963 val= (val + 1)>>1 ;
2415 else
2416 567089 val= -((val + 1)>>1);
2417 1129052 sl->last_qscale_diff = val;
2418 1129052 sl->qscale += val;
2419
2/2
✓ Branch 0 taken 10602 times.
✓ Branch 1 taken 1118450 times.
1129052 if (((unsigned)sl->qscale) > max_qp){
2420
2/2
✓ Branch 0 taken 5475 times.
✓ Branch 1 taken 5127 times.
10602 if (sl->qscale < 0) sl->qscale += max_qp + 1;
2421 5127 else sl->qscale -= max_qp + 1;
2422 }
2423 1129052 sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2424 1129052 sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2425 }else
2426 4842118 sl->last_qscale_diff=0;
2427
2428
2/2
✓ Branch 0 taken 2331965 times.
✓ Branch 1 taken 3639205 times.
5971170 if(IS_INTERLACED(mb_type)){
2429
2/2
✓ Branch 0 taken 2331931 times.
✓ Branch 1 taken 34 times.
2331965 scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2430
2/2
✓ Branch 0 taken 2331931 times.
✓ Branch 1 taken 34 times.
2331965 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2431 }else{
2432
2/2
✓ Branch 0 taken 3547193 times.
✓ Branch 1 taken 92012 times.
3639205 scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2433
2/2
✓ Branch 0 taken 3547193 times.
✓ Branch 1 taken 92012 times.
3639205 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2434 }
2435
2436 5971170 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 5879228 times.
5971170 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 465190 times.
✓ Branch 1 taken 5414038 times.
5879228 } else if (CHROMA422(h)) {
2441
2/2
✓ Branch 0 taken 385504 times.
✓ Branch 1 taken 79686 times.
465190 if( cbp&0x30 ){
2442 int c;
2443
2/2
✓ Branch 0 taken 771008 times.
✓ Branch 1 taken 385504 times.
1156512 for (c = 0; c < 2; c++)
2444 771008 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 288034 times.
✓ Branch 1 taken 177156 times.
465190 if( cbp&0x20 ) {
2450 int c, i, i8x8;
2451
2/2
✓ Branch 0 taken 576068 times.
✓ Branch 1 taken 288034 times.
864102 for( c = 0; c < 2; c++ ) {
2452 576068 int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2453
2/2
✓ Branch 0 taken 560490 times.
✓ Branch 1 taken 15578 times.
576068 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2454
2/2
✓ Branch 0 taken 1152136 times.
✓ Branch 1 taken 576068 times.
1728204 for (i8x8 = 0; i8x8 < 2; i8x8++) {
2455
2/2
✓ Branch 0 taken 4608544 times.
✓ Branch 1 taken 1152136 times.
5760680 for (i = 0; i < 4; i++) {
2456 4608544 const int index = 16 + 16 * c + 8*i8x8 + i;
2457 4608544 decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2458 4608544 mb += 16<<pixel_shift;
2459 }
2460 }
2461 }
2462 } else {
2463 177156 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2464 177156 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2465 }
2466 } else /* yuv420 */ {
2467
2/2
✓ Branch 0 taken 2792352 times.
✓ Branch 1 taken 2621686 times.
5414038 if( cbp&0x30 ){
2468 int c;
2469
2/2
✓ Branch 0 taken 5584704 times.
✓ Branch 1 taken 2792352 times.
8377056 for (c = 0; c < 2; c++)
2470 5584704 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 1469395 times.
✓ Branch 1 taken 3944643 times.
5414038 if( cbp&0x20 ) {
2475 int c, i;
2476
2/2
✓ Branch 0 taken 2938790 times.
✓ Branch 1 taken 1469395 times.
4408185 for( c = 0; c < 2; c++ ) {
2477
2/2
✓ Branch 0 taken 1599424 times.
✓ Branch 1 taken 1339366 times.
2938790 qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2478
2/2
✓ Branch 0 taken 11755160 times.
✓ Branch 1 taken 2938790 times.
14693950 for( i = 0; i < 4; i++ ) {
2479 11755160 const int index = 16 + 16 * c + i;
2480 11755160 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2481 }
2482 }
2483 } else {
2484 3944643 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2485 3944643 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2486 }
2487 }
2488 } else {
2489 1194609 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2490 1194609 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2491 1194609 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2492 1194609 sl->last_qscale_diff = 0;
2493 }
2494
2495 7165779 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2496 7165779 write_back_non_zero_count(h, sl);
2497
2498 7165779 return 0;
2499 }
2500