FFmpeg coverage


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

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