FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/h264_cabac.c
Date: 2021-09-23 20:34:37
Exec Total Coverage
Lines: 625 642 97.4%
Branches: 514 542 94.8%

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