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