FFmpeg coverage


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