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