FFmpeg
h264_cabac.c
Go to the documentation of this file.
1 /*
2  * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
3  * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * H.264 / AVC / MPEG-4 part10 cabac decoding.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #define CABAC(h) 1
29 #define UNCHECKED_BITSTREAM_READER 1
30 #define INT_BIT (CHAR_BIT * sizeof(int))
31 
32 #include "libavutil/attributes.h"
33 #include "libavutil/avassert.h"
34 #include "config.h"
35 #include "cabac.h"
36 #include "cabac_functions.h"
37 #include "internal.h"
38 #include "avcodec.h"
39 #include "h264dec.h"
40 #include "h264data.h"
41 #include "h264_mvpred.h"
42 #include "mpegutils.h"
43 
44 #if ARCH_X86
45 #include "x86/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 
1284 {
1285  const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
1286 
1287  unsigned long ctx = 0;
1288 
1289  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);
1290  ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
1291 
1292  return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
1293 }
1294 
1296  int ctx_base, int intra_slice)
1297 {
1298  uint8_t *state= &sl->cabac_state[ctx_base];
1299  int mb_type;
1300 
1301  if(intra_slice){
1302  int ctx=0;
1304  ctx++;
1306  ctx++;
1307  if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
1308  return 0; /* I4x4 */
1309  state += 2;
1310  }else{
1311  if( get_cabac_noinline( &sl->cabac, state ) == 0 )
1312  return 0; /* I4x4 */
1313  }
1314 
1315  if( get_cabac_terminate( &sl->cabac ) )
1316  return 25; /* PCM */
1317 
1318  mb_type = 1; /* I16x16 */
1319  mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
1320  if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
1321  mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
1322  mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
1323  mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
1324  return mb_type;
1325 }
1326 
1328  int mb_x, int mb_y)
1329 {
1330  int mba_xy, mbb_xy;
1331  int ctx = 0;
1332 
1333  if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
1334  int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
1335  mba_xy = mb_xy - 1;
1336  if( (mb_y&1)
1337  && h->slice_table[mba_xy] == sl->slice_num
1338  && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
1339  mba_xy += h->mb_stride;
1340  if (MB_FIELD(sl)) {
1341  mbb_xy = mb_xy - h->mb_stride;
1342  if( !(mb_y&1)
1343  && h->slice_table[mbb_xy] == sl->slice_num
1344  && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
1345  mbb_xy -= h->mb_stride;
1346  }else
1347  mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
1348  }else{
1349  int mb_xy = sl->mb_xy;
1350  mba_xy = mb_xy - 1;
1351  mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
1352  }
1353 
1354  if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
1355  ctx++;
1356  if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
1357  ctx++;
1358 
1359  if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1360  ctx += 13;
1361  return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
1362 }
1363 
1365 {
1366  int mode = 0;
1367 
1368  if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
1369  return pred_mode;
1370 
1371  mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1372  mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1373  mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
1374 
1375  return mode + ( mode >= pred_mode );
1376 }
1377 
1379 {
1380  const int mba_xy = sl->left_mb_xy[0];
1381  const int mbb_xy = sl->top_mb_xy;
1382 
1383  int ctx = 0;
1384 
1385  /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
1386  if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
1387  ctx++;
1388 
1389  if (sl->top_type && h->chroma_pred_mode_table[mbb_xy] != 0)
1390  ctx++;
1391 
1392  if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
1393  return 0;
1394 
1395  if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1396  return 1;
1397  if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
1398  return 2;
1399  else
1400  return 3;
1401 }
1402 
1404 {
1405  int cbp_b, cbp_a, ctx, cbp = 0;
1406 
1407  cbp_a = sl->left_cbp;
1408  cbp_b = sl->top_cbp;
1409 
1410  ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
1411  cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
1412  ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08);
1413  cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
1414  ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01);
1415  cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
1416  ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02);
1417  cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
1418  return cbp;
1419 }
1421 {
1422  int ctx;
1423  int cbp_a, cbp_b;
1424 
1425  cbp_a = (sl->left_cbp>>4)&0x03;
1426  cbp_b = (sl-> top_cbp>>4)&0x03;
1427 
1428  ctx = 0;
1429  if( cbp_a > 0 ) ctx++;
1430  if( cbp_b > 0 ) ctx += 2;
1431  if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
1432  return 0;
1433 
1434  ctx = 4;
1435  if( cbp_a == 2 ) ctx++;
1436  if( cbp_b == 2 ) ctx += 2;
1437  return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
1438 }
1439 
1441 {
1442  if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
1443  return 0; /* 8x8 */
1444  if( !get_cabac( &sl->cabac, &sl->cabac_state[22] ) )
1445  return 1; /* 8x4 */
1446  if( get_cabac( &sl->cabac, &sl->cabac_state[23] ) )
1447  return 2; /* 4x8 */
1448  return 3; /* 4x4 */
1449 }
1451 {
1452  int type;
1453  if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
1454  return 0; /* B_Direct_8x8 */
1455  if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
1456  return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
1457  type = 3;
1458  if( get_cabac( &sl->cabac, &sl->cabac_state[38] ) ) {
1459  if( get_cabac( &sl->cabac, &sl->cabac_state[39] ) )
1460  return 11 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
1461  type += 4;
1462  }
1463  type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
1464  type += get_cabac( &sl->cabac, &sl->cabac_state[39] );
1465  return type;
1466 }
1467 
1468 static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
1469 {
1470  int refa = sl->ref_cache[list][scan8[n] - 1];
1471  int refb = sl->ref_cache[list][scan8[n] - 8];
1472  int ref = 0;
1473  int ctx = 0;
1474 
1475  if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1476  if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
1477  ctx++;
1478  if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
1479  ctx += 2;
1480  } else {
1481  if( refa > 0 )
1482  ctx++;
1483  if( refb > 0 )
1484  ctx += 2;
1485  }
1486 
1487  while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
1488  ref++;
1489  ctx = (ctx>>2)+4;
1490  if(ref >= 32 /*h->ref_list[list]*/){
1491  return -1;
1492  }
1493  }
1494  return ref;
1495 }
1496 
1497 static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
1498 {
1499  int mvd;
1500 
1501  if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
1502 // if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
1503  *mvda= 0;
1504  return 0;
1505  }
1506 
1507  mvd= 1;
1508  ctxbase+= 3;
1509  while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
1510  if( mvd < 4 )
1511  ctxbase++;
1512  mvd++;
1513  }
1514 
1515  if( mvd >= 9 ) {
1516  int k = 3;
1517  while( get_cabac_bypass( &sl->cabac ) ) {
1518  mvd += 1 << k;
1519  k++;
1520  if(k>24){
1521  av_log(sl->h264->avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
1522  return INT_MIN;
1523  }
1524  }
1525  while( k-- ) {
1526  mvd += get_cabac_bypass( &sl->cabac )<<k;
1527  }
1528  *mvda=mvd < 70 ? mvd : 70;
1529  }else
1530  *mvda=mvd;
1531  return get_cabac_bypass_sign( &sl->cabac, -mvd );
1532 }
1533 
1534 #define DECODE_CABAC_MB_MVD(sl, list, n )\
1535 {\
1536  int amvd0 = sl->mvd_cache[list][scan8[n] - 1][0] +\
1537  sl->mvd_cache[list][scan8[n] - 8][0];\
1538  int amvd1 = sl->mvd_cache[list][scan8[n] - 1][1] +\
1539  sl->mvd_cache[list][scan8[n] - 8][1];\
1540 \
1541  int mxd = decode_cabac_mb_mvd(sl, 40, amvd0, &mpx);\
1542  int myd = decode_cabac_mb_mvd(sl, 47, amvd1, &mpy);\
1543  if (mxd == INT_MIN || myd == INT_MIN) \
1544  return AVERROR_INVALIDDATA; \
1545  mx += mxd;\
1546  my += myd;\
1547 }
1548 
1550  int cat, int idx, int max_coeff,
1551  int is_dc)
1552 {
1553  int nza, nzb;
1554  int ctx = 0;
1555  static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
1556 
1557  if( is_dc ) {
1558  if( cat == 3 ) {
1559  idx -= CHROMA_DC_BLOCK_INDEX;
1560  nza = (sl->left_cbp>>(6+idx))&0x01;
1561  nzb = (sl-> top_cbp>>(6+idx))&0x01;
1562  } else {
1563  idx -= LUMA_DC_BLOCK_INDEX;
1564  nza = sl->left_cbp&(0x100<<idx);
1565  nzb = sl-> top_cbp&(0x100<<idx);
1566  }
1567  } else {
1568  nza = sl->non_zero_count_cache[scan8[idx] - 1];
1569  nzb = sl->non_zero_count_cache[scan8[idx] - 8];
1570  }
1571 
1572  if( nza > 0 )
1573  ctx++;
1574 
1575  if( nzb > 0 )
1576  ctx += 2;
1577 
1578  return base_ctx[cat] + ctx;
1579 }
1580 
1581 static av_always_inline void
1583  int16_t *block,
1584  int cat, int n, const uint8_t *scantable,
1585  const uint32_t *qmul, int max_coeff,
1586  int is_dc, int chroma422)
1587 {
1588  static const int significant_coeff_flag_offset[2][14] = {
1589  { 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 },
1590  { 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 }
1591  };
1592  static const int last_coeff_flag_offset[2][14] = {
1593  { 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 },
1594  { 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 }
1595  };
1596  static const int coeff_abs_level_m1_offset[14] = {
1597  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
1598  };
1599  static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
1600  { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
1601  4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
1602  7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
1603  12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
1604  { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
1605  6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
1606  9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
1607  9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
1608  };
1609  static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
1610  /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
1611  * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
1612  * map node ctx => cabac ctx for level=1 */
1613  static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
1614  /* map node ctx => cabac ctx for level>1 */
1615  static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
1616  { 5, 5, 5, 5, 6, 7, 8, 9 },
1617  { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
1618  };
1619  static const uint8_t coeff_abs_level_transition[2][8] = {
1620  /* update node ctx after decoding a level=1 */
1621  { 1, 2, 3, 3, 4, 5, 6, 7 },
1622  /* update node ctx after decoding a level>1 */
1623  { 4, 4, 4, 4, 5, 6, 7, 7 }
1624  };
1625 
1626  int index[64];
1627 
1628  int last;
1629  int coeff_count = 0;
1630  int node_ctx = 0;
1631 
1632  uint8_t *significant_coeff_ctx_base;
1633  uint8_t *last_coeff_ctx_base;
1634  uint8_t *abs_level_m1_ctx_base;
1635 
1636 #if !ARCH_X86
1637 #define CABAC_ON_STACK
1638 #endif
1639 #ifdef CABAC_ON_STACK
1640 #define CC &cc
1641  CABACContext cc;
1642  cc.range = sl->cabac.range;
1643  cc.low = sl->cabac.low;
1644  cc.bytestream= sl->cabac.bytestream;
1645 #if !UNCHECKED_BITSTREAM_READER || ARCH_AARCH64
1647 #endif
1648 #else
1649 #define CC &sl->cabac
1650 #endif
1651 
1652  significant_coeff_ctx_base = sl->cabac_state
1653  + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
1654  last_coeff_ctx_base = sl->cabac_state
1655  + last_coeff_flag_offset[MB_FIELD(sl)][cat];
1656  abs_level_m1_ctx_base = sl->cabac_state
1657  + coeff_abs_level_m1_offset[cat];
1658 
1659  if( !is_dc && max_coeff == 64 ) {
1660 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
1661  for(last= 0; last < coefs; last++) { \
1662  uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
1663  if( get_cabac( CC, sig_ctx )) { \
1664  uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
1665  index[coeff_count++] = last; \
1666  if( get_cabac( CC, last_ctx ) ) { \
1667  last= max_coeff; \
1668  break; \
1669  } \
1670  } \
1671  }\
1672  if( last == max_coeff -1 ) {\
1673  index[coeff_count++] = last;\
1674  }
1675  const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
1676 #ifdef decode_significance
1677  coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
1678  last_coeff_ctx_base, sig_off);
1679  } else {
1680  if (is_dc && chroma422) { // dc 422
1681  DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
1682  } else {
1683  coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
1684  last_coeff_ctx_base-significant_coeff_ctx_base);
1685  }
1686 #else
1687  DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
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  DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
1693  }
1694 #endif
1695  }
1696  av_assert2(coeff_count > 0);
1697 
1698  if( is_dc ) {
1699  if( cat == 3 )
1700  h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
1701  else
1702  h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
1703  sl->non_zero_count_cache[scan8[n]] = coeff_count;
1704  } else {
1705  if( max_coeff == 64 )
1706  fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
1707  else {
1708  av_assert2( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
1709  sl->non_zero_count_cache[scan8[n]] = coeff_count;
1710  }
1711  }
1712 
1713 #define STORE_BLOCK(type) \
1714  do { \
1715  uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
1716  \
1717  int j= scantable[index[--coeff_count]]; \
1718  \
1719  if( get_cabac( CC, ctx ) == 0 ) { \
1720  node_ctx = coeff_abs_level_transition[0][node_ctx]; \
1721  if( is_dc ) { \
1722  ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
1723  }else{ \
1724  ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
1725  } \
1726  } else { \
1727  unsigned coeff_abs = 2; \
1728  ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
1729  node_ctx = coeff_abs_level_transition[1][node_ctx]; \
1730 \
1731  while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
1732  coeff_abs++; \
1733  } \
1734 \
1735  if( coeff_abs >= 15 ) { \
1736  int j = 0; \
1737  while (get_cabac_bypass(CC) && j < 16+7) { \
1738  j++; \
1739  } \
1740 \
1741  coeff_abs=1; \
1742  while( j-- ) { \
1743  coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
1744  } \
1745  coeff_abs+= 14U; \
1746  } \
1747 \
1748  if( is_dc ) { \
1749  ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
1750  }else{ \
1751  ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
1752  } \
1753  } \
1754  } while ( coeff_count );
1755 
1756  if (h->pixel_shift) {
1758  } else {
1759  STORE_BLOCK(int16_t)
1760  }
1761 #ifdef CABAC_ON_STACK
1762  sl->cabac.range = cc.range ;
1763  sl->cabac.low = cc.low ;
1764  sl->cabac.bytestream= cc.bytestream;
1765 #endif
1766 
1767 }
1768 
1770  H264SliceContext *sl,
1771  int16_t *block,
1772  int cat, int n,
1773  const uint8_t *scantable,
1774  int max_coeff)
1775 {
1776  decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
1777 }
1778 
1780  H264SliceContext *sl,
1781  int16_t *block,
1782  int cat, int n,
1783  const uint8_t *scantable,
1784  int max_coeff)
1785 {
1786  decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
1787 }
1788 
1790  H264SliceContext *sl,
1791  int16_t *block,
1792  int cat, int n,
1793  const uint8_t *scantable,
1794  const uint32_t *qmul,
1795  int max_coeff)
1796 {
1797  decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
1798 }
1799 
1800 /* cat: 0-> DC 16x16 n = 0
1801  * 1-> AC 16x16 n = luma4x4idx
1802  * 2-> Luma4x4 n = luma4x4idx
1803  * 3-> DC Chroma n = iCbCr
1804  * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
1805  * 5-> Luma8x8 n = 4 * luma8x8idx */
1806 
1807 /* Partially inline the CABAC residual decode: inline the coded block flag.
1808  * This has very little impact on binary size and improves performance
1809  * because it allows improved constant propagation into get_cabac_cbf_ctx,
1810  * as well as because most blocks have zero CBFs. */
1811 
1813  H264SliceContext *sl,
1814  int16_t *block,
1815  int cat, int n,
1816  const uint8_t *scantable,
1817  int max_coeff)
1818 {
1819  /* read coded block flag */
1820  if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
1821  sl->non_zero_count_cache[scan8[n]] = 0;
1822  return;
1823  }
1824  decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
1825 }
1826 
1827 static av_always_inline void
1829  int16_t *block,
1830  int cat, int n, const uint8_t *scantable,
1831  int max_coeff)
1832 {
1833  /* read coded block flag */
1834  if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
1835  sl->non_zero_count_cache[scan8[n]] = 0;
1836  return;
1837  }
1838  decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
1839 }
1840 
1842  H264SliceContext *sl,
1843  int16_t *block,
1844  int cat, int n,
1845  const uint8_t *scantable,
1846  const uint32_t *qmul,
1847  int max_coeff)
1848 {
1849  /* read coded block flag */
1850  if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
1851  if( max_coeff == 64 ) {
1852  fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
1853  } else {
1854  sl->non_zero_count_cache[scan8[n]] = 0;
1855  }
1856  return;
1857  }
1858  decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
1859 }
1860 
1862  const uint8_t *scan, const uint8_t *scan8x8,
1863  int pixel_shift, int mb_type, int cbp, int p)
1864 {
1865  static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
1866  const uint32_t *qmul;
1867  int i8x8, i4x4;
1868  int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
1869  if( IS_INTRA16x16( mb_type ) ) {
1870  AV_ZERO128(sl->mb_luma_dc[p]+0);
1871  AV_ZERO128(sl->mb_luma_dc[p]+8);
1872  AV_ZERO128(sl->mb_luma_dc[p]+16);
1873  AV_ZERO128(sl->mb_luma_dc[p]+24);
1874  decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
1875 
1876  if( cbp&15 ) {
1877  qmul = h->ps.pps->dequant4_coeff[p][qscale];
1878  for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
1879  const int index = 16*p + i4x4;
1880  decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
1881  }
1882  } else {
1883  fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
1884  }
1885  } else {
1886  int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
1887  for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
1888  if( cbp & (1<<i8x8) ) {
1889  if( IS_8x8DCT(mb_type) ) {
1890  const int index = 16*p + 4*i8x8;
1891  decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
1892  scan8x8, h->ps.pps->dequant8_coeff[cqm][qscale], 64);
1893  } else {
1894  qmul = h->ps.pps->dequant4_coeff[cqm][qscale];
1895  for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
1896  const int index = 16*p + 4*i8x8 + i4x4;
1897  decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
1898  }
1899  }
1900  } else {
1901  fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
1902  }
1903  }
1904  }
1905 }
1906 
1907 /**
1908  * Decode a macroblock.
1909  * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
1910  */
1912 {
1913  const SPS *sps = h->ps.sps;
1914  int mb_xy;
1915  int mb_type, partition_count, cbp = 0;
1916  int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
1917  const int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1918  const int pixel_shift = h->pixel_shift;
1919 
1920  mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
1921 
1922  ff_tlog(h->avctx, "pic:%d mb:%d/%d\n", h->poc.frame_num, sl->mb_x, sl->mb_y);
1923  if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1924  int skip;
1925  /* a skipped mb needs the aff flag from the following mb */
1926  if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1927  skip = sl->next_mb_skipped;
1928  else
1929  skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1930  /* read skip flags */
1931  if( skip ) {
1932  if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1933  h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1934  sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1935  if(!sl->next_mb_skipped)
1937  }
1938 
1939  decode_mb_skip(h, sl);
1940 
1941  h->cbp_table[mb_xy] = 0;
1942  h->chroma_pred_mode_table[mb_xy] = 0;
1943  sl->last_qscale_diff = 0;
1944 
1945  return 0;
1946 
1947  }
1948  }
1949  if (FRAME_MBAFF(h)) {
1950  if ((sl->mb_y & 1) == 0)
1951  sl->mb_mbaff =
1953  }
1954 
1955  sl->prev_mb_skipped = 0;
1956 
1957  fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1958 
1959  if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1960  int ctx = 0;
1962 
1963  if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1964  ctx++;
1965  if (!IS_DIRECT(sl->top_type - 1))
1966  ctx++;
1967 
1968  if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1969  mb_type= 0; /* B_Direct_16x16 */
1970  }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1971  mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1972  }else{
1973  int bits;
1974  bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1975  bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1976  bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1977  bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1978  if( bits < 8 ){
1979  mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1980  }else if( bits == 13 ){
1981  mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1982  goto decode_intra_mb;
1983  }else if( bits == 14 ){
1984  mb_type= 11; /* B_L1_L0_8x16 */
1985  }else if( bits == 15 ){
1986  mb_type= 22; /* B_8x8 */
1987  }else{
1988  bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1989  mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1990  }
1991  }
1992  partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
1993  mb_type = ff_h264_b_mb_type_info[mb_type].type;
1994  } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1995  if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
1996  /* P-type */
1997  if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
1998  /* P_L0_D16x16, P_8x8 */
1999  mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2000  } else {
2001  /* P_L0_D8x16, P_L0_D16x8 */
2002  mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2003  }
2004  partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2005  mb_type = ff_h264_p_mb_type_info[mb_type].type;
2006  } else {
2007  mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2008  goto decode_intra_mb;
2009  }
2010  } else {
2011  mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2012  if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2013  mb_type--;
2015 decode_intra_mb:
2016  partition_count = 0;
2017  cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2019  mb_type = ff_h264_i_mb_type_info[mb_type].type;
2020  }
2021  if (MB_FIELD(sl))
2022  mb_type |= MB_TYPE_INTERLACED;
2023 
2024  h->slice_table[mb_xy] = sl->slice_num;
2025 
2026  if(IS_INTRA_PCM(mb_type)) {
2027  const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2028  sps->bit_depth_luma >> 3;
2029  const uint8_t *ptr;
2030  int ret;
2031 
2032  // We assume these blocks are very rare so we do not optimize it.
2033  // FIXME The two following lines get the bitstream position in the cabac
2034  // decode, I think it should be done by a function in cabac.h (or cabac.c).
2035  ptr= sl->cabac.bytestream;
2036  if(sl->cabac.low&0x1) ptr--;
2037  if(CABAC_BITS==16){
2038  if(sl->cabac.low&0x1FF) ptr--;
2039  }
2040 
2041  // The pixels are stored in the same order as levels in h->mb array.
2042  if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2043  return -1;
2044  sl->intra_pcm_ptr = ptr;
2045  ptr += mb_size;
2046 
2047  ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2048  if (ret < 0)
2049  return ret;
2050 
2051  // All blocks are present
2052  h->cbp_table[mb_xy] = 0xf7ef;
2053  h->chroma_pred_mode_table[mb_xy] = 0;
2054  // In deblocking, the quantizer is 0
2055  h->cur_pic.qscale_table[mb_xy] = 0;
2056  // All coeffs are present
2057  memset(h->non_zero_count[mb_xy], 16, 48);
2058  h->cur_pic.mb_type[mb_xy] = mb_type;
2059  sl->last_qscale_diff = 0;
2060  return 0;
2061  }
2062 
2063  fill_decode_caches(h, sl, mb_type);
2064 
2065  if( IS_INTRA( mb_type ) ) {
2066  int i, pred_mode;
2067  if( IS_INTRA4x4( mb_type ) ) {
2068  if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2069  mb_type |= MB_TYPE_8x8DCT;
2070  for( i = 0; i < 16; i+=4 ) {
2071  int pred = pred_intra_mode(h, sl, i);
2073  fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2074  }
2075  } else {
2076  for( i = 0; i < 16; i++ ) {
2077  int pred = pred_intra_mode(h, sl, i);
2079 
2080  ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2082  }
2083  }
2087  return -1;
2088  } else {
2091  if (sl->intra16x16_pred_mode < 0) return -1;
2092  }
2093  if(decode_chroma){
2094  h->chroma_pred_mode_table[mb_xy] =
2095  pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2096 
2097  pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available,
2098  sl->left_samples_available, pred_mode, 1 );
2099  if( pred_mode < 0 ) return -1;
2100  sl->chroma_pred_mode = pred_mode;
2101  } else {
2103  }
2104  } else if( partition_count == 4 ) {
2105  int i, j, sub_partition_count[4], list, ref[2][4];
2106 
2107  if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2108  for( i = 0; i < 4; i++ ) {
2110  sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2112  }
2113  if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2114  sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2115  ff_h264_pred_direct_motion(h, sl, &mb_type);
2116  sl->ref_cache[0][scan8[4]] =
2117  sl->ref_cache[1][scan8[4]] =
2118  sl->ref_cache[0][scan8[12]] =
2119  sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2120  for( i = 0; i < 4; i++ )
2121  fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2122  }
2123  } else {
2124  for( i = 0; i < 4; i++ ) {
2126  sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2128  }
2129  }
2130 
2131  for( list = 0; list < sl->list_count; list++ ) {
2132  for( i = 0; i < 4; i++ ) {
2133  if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2134  if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2135  unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2136  if (rc > 1) {
2137  ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2138  if (ref[list][i] >= rc) {
2139  av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2140  return -1;
2141  }
2142  }else
2143  ref[list][i] = 0;
2144  } else {
2145  ref[list][i] = -1;
2146  }
2147  sl->ref_cache[list][scan8[4 * i] + 1] =
2148  sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2149  }
2150  }
2151 
2152  if(dct8x8_allowed)
2153  dct8x8_allowed = get_dct8x8_allowed(h, sl);
2154 
2155  for (list = 0; list < sl->list_count; list++) {
2156  for(i=0; i<4; i++){
2157  sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2158  if(IS_DIRECT(sl->sub_mb_type[i])){
2159  fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2160  continue;
2161  }
2162 
2163  if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2164  const int sub_mb_type= sl->sub_mb_type[i];
2165  const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2166  for(j=0; j<sub_partition_count[i]; j++){
2167  int mpx, mpy;
2168  int mx, my;
2169  const int index= 4*i + block_width*j;
2170  int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2171  uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2172  pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2174  ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2175 
2176  if(IS_SUB_8X8(sub_mb_type)){
2177  mv_cache[ 1 ][0]=
2178  mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2179  mv_cache[ 1 ][1]=
2180  mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2181 
2182  mvd_cache[ 1 ][0]=
2183  mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2184  mvd_cache[ 1 ][1]=
2185  mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2186  }else if(IS_SUB_8X4(sub_mb_type)){
2187  mv_cache[ 1 ][0]= mx;
2188  mv_cache[ 1 ][1]= my;
2189 
2190  mvd_cache[ 1 ][0]= mpx;
2191  mvd_cache[ 1 ][1]= mpy;
2192  }else if(IS_SUB_4X8(sub_mb_type)){
2193  mv_cache[ 8 ][0]= mx;
2194  mv_cache[ 8 ][1]= my;
2195 
2196  mvd_cache[ 8 ][0]= mpx;
2197  mvd_cache[ 8 ][1]= mpy;
2198  }
2199  mv_cache[ 0 ][0]= mx;
2200  mv_cache[ 0 ][1]= my;
2201 
2202  mvd_cache[ 0 ][0]= mpx;
2203  mvd_cache[ 0 ][1]= mpy;
2204  }
2205  }else{
2206  fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2207  fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2208  }
2209  }
2210  }
2211  } else if( IS_DIRECT(mb_type) ) {
2212  ff_h264_pred_direct_motion(h, sl, &mb_type);
2213  fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2214  fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2215  dct8x8_allowed &= sps->direct_8x8_inference_flag;
2216  } else {
2217  int list, i;
2218  if(IS_16X16(mb_type)){
2219  for (list = 0; list < sl->list_count; list++) {
2220  if(IS_DIR(mb_type, 0, list)){
2221  int ref;
2222  unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2223  if (rc > 1) {
2224  ref= decode_cabac_mb_ref(sl, list, 0);
2225  if (ref >= rc) {
2226  av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2227  return -1;
2228  }
2229  }else
2230  ref=0;
2231  fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2232  }
2233  }
2234  for (list = 0; list < sl->list_count; list++) {
2235  if(IS_DIR(mb_type, 0, list)){
2236  int mx,my,mpx,mpy;
2237  pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2238  DECODE_CABAC_MB_MVD(sl, list, 0)
2239  ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2240 
2241  fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2242  fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2243  }
2244  }
2245  }
2246  else if(IS_16X8(mb_type)){
2247  for (list = 0; list < sl->list_count; list++) {
2248  for(i=0; i<2; i++){
2249  if(IS_DIR(mb_type, i, list)){
2250  int ref;
2251  unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2252  if (rc > 1) {
2253  ref= decode_cabac_mb_ref(sl, list, 8 * i);
2254  if (ref >= rc) {
2255  av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2256  return -1;
2257  }
2258  }else
2259  ref=0;
2260  fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2261  }else
2262  fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2263  }
2264  }
2265  for (list = 0; list < sl->list_count; list++) {
2266  for(i=0; i<2; i++){
2267  if(IS_DIR(mb_type, i, list)){
2268  int mx,my,mpx,mpy;
2269  pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2270  DECODE_CABAC_MB_MVD(sl, list, 8*i)
2271  ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2272 
2273  fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2274  fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2275  }else{
2276  fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2277  fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2278  }
2279  }
2280  }
2281  }else{
2282  av_assert2(IS_8X16(mb_type));
2283  for (list = 0; list < sl->list_count; list++) {
2284  for(i=0; i<2; i++){
2285  if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2286  int ref;
2287  unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2288  if (rc > 1) {
2289  ref = decode_cabac_mb_ref(sl, list, 4 * i);
2290  if (ref >= rc) {
2291  av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2292  return -1;
2293  }
2294  }else
2295  ref=0;
2296  fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2297  }else
2298  fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2299  }
2300  }
2301  for (list = 0; list < sl->list_count; list++) {
2302  for(i=0; i<2; i++){
2303  if(IS_DIR(mb_type, i, list)){
2304  int mx,my,mpx,mpy;
2305  pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2306  DECODE_CABAC_MB_MVD(sl, list, 4*i)
2307 
2308  ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2309  fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2310  fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2311  }else{
2312  fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2313  fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2314  }
2315  }
2316  }
2317  }
2318  }
2319 
2320  if( IS_INTER( mb_type ) ) {
2321  h->chroma_pred_mode_table[mb_xy] = 0;
2322  write_back_motion(h, sl, mb_type);
2323  }
2324 
2325  if( !IS_INTRA16x16( mb_type ) ) {
2326  cbp = decode_cabac_mb_cbp_luma(sl);
2327  if(decode_chroma)
2328  cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2329  } else {
2330  if (!decode_chroma && cbp>15) {
2331  av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2332  return AVERROR_INVALIDDATA;
2333  }
2334  }
2335 
2336  h->cbp_table[mb_xy] = sl->cbp = cbp;
2337 
2338  if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2339  mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2340  }
2341 
2342  /* It would be better to do this in fill_decode_caches, but we don't know
2343  * the transform mode of the current macroblock there. */
2344  if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2345  int i;
2346  uint8_t *nnz_cache = sl->non_zero_count_cache;
2347  if (h->x264_build < 151U) {
2348  for (i = 0; i < 2; i++){
2349  if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2350  nnz_cache[3+8* 1 + 2*8*i]=
2351  nnz_cache[3+8* 2 + 2*8*i]=
2352  nnz_cache[3+8* 6 + 2*8*i]=
2353  nnz_cache[3+8* 7 + 2*8*i]=
2354  nnz_cache[3+8*11 + 2*8*i]=
2355  nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2356  }
2357  }
2358  if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2359  uint32_t top_empty = !IS_INTRA(mb_type) ? 0 : 0x40404040;
2360  AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2361  AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2362  AV_WN32A(&nnz_cache[4+8*10], top_empty);
2363  }
2364  } else {
2365  for (i = 0; i < 2; i++){
2366  if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2367  nnz_cache[3+8* 1 + 2*8*i]=
2368  nnz_cache[3+8* 2 + 2*8*i]=
2369  nnz_cache[3+8* 6 + 2*8*i]=
2370  nnz_cache[3+8* 7 + 2*8*i]=
2371  nnz_cache[3+8*11 + 2*8*i]=
2372  nnz_cache[3+8*12 + 2*8*i]= !IS_INTRA_PCM(sl->left_type[LEFT(i)]) ? 0 : 64;
2373  }
2374  }
2375  if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2376  uint32_t top_empty = !IS_INTRA_PCM(sl->top_type) ? 0 : 0x40404040;
2377  AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2378  AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2379  AV_WN32A(&nnz_cache[4+8*10], top_empty);
2380  }
2381  }
2382  }
2383  h->cur_pic.mb_type[mb_xy] = mb_type;
2384 
2385  if( cbp || IS_INTRA16x16( mb_type ) ) {
2386  const uint8_t *scan, *scan8x8;
2387  const uint32_t *qmul;
2388 
2389  // decode_cabac_mb_dqp
2390  if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2391  int val = 1;
2392  int ctx= 2;
2393  const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2394 
2395  while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2396  ctx= 3;
2397  val++;
2398  if(val > 2*max_qp){ //prevent infinite loop
2399  av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2400  return -1;
2401  }
2402  }
2403 
2404  if( val&0x01 )
2405  val= (val + 1)>>1 ;
2406  else
2407  val= -((val + 1)>>1);
2408  sl->last_qscale_diff = val;
2409  sl->qscale += val;
2410  if (((unsigned)sl->qscale) > max_qp){
2411  if (sl->qscale < 0) sl->qscale += max_qp + 1;
2412  else sl->qscale -= max_qp + 1;
2413  }
2414  sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2415  sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2416  }else
2417  sl->last_qscale_diff=0;
2418 
2419  if(IS_INTERLACED(mb_type)){
2420  scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2421  scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2422  }else{
2423  scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2424  scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2425  }
2426 
2427  decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2428  if (CHROMA444(h)) {
2429  decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2430  decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2431  } else if (CHROMA422(h)) {
2432  if( cbp&0x30 ){
2433  int c;
2434  for (c = 0; c < 2; c++)
2435  decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2438  }
2439 
2440  if( cbp&0x20 ) {
2441  int c, i, i8x8;
2442  for( c = 0; c < 2; c++ ) {
2443  int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2444  qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2445  for (i8x8 = 0; i8x8 < 2; i8x8++) {
2446  for (i = 0; i < 4; i++) {
2447  const int index = 16 + 16 * c + 8*i8x8 + i;
2448  decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2449  mb += 16<<pixel_shift;
2450  }
2451  }
2452  }
2453  } else {
2454  fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2455  fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2456  }
2457  } else /* yuv420 */ {
2458  if( cbp&0x30 ){
2459  int c;
2460  for (c = 0; c < 2; c++)
2461  decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16 * 16 * c) << pixel_shift),
2463  }
2464 
2465  if( cbp&0x20 ) {
2466  int c, i;
2467  for( c = 0; c < 2; c++ ) {
2468  qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2469  for( i = 0; i < 4; i++ ) {
2470  const int index = 16 + 16 * c + i;
2471  decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2472  }
2473  }
2474  } else {
2475  fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2476  fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2477  }
2478  }
2479  } else {
2480  fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2481  fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2482  fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2483  sl->last_qscale_diff = 0;
2484  }
2485 
2486  h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2488 
2489  return 0;
2490 }
IS_INTRA4x4
#define IS_INTRA4x4(a)
Definition: mpegutils.h:75
H264SliceContext::mb_xy
int mb_xy
Definition: h264dec.h:237
H264SliceContext::ref_cache
int8_t ref_cache[2][5 *8]
Definition: h264dec.h:306
CHROMA422
#define CHROMA422(h)
Definition: h264dec.h:98
cabac.h
H264SliceContext::intra_pcm_ptr
const uint8_t * intra_pcm_ptr
Definition: h264dec.h:286
ff_h264_mb_sizes
const uint16_t ff_h264_mb_sizes[4]
Definition: h264dec.c:59
pred_16x8_motion
static av_always_inline void pred_16x8_motion(const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
Get the directionally predicted 16x8 MV.
Definition: h264_mvpred.h:160
decode_cabac_mb_cbp_luma
static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
Definition: h264_cabac.c:1403
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:1861
H264SliceContext::mb
int16_t mb[16 *48 *2]
Definition: h264dec.h:313
MB_TYPE_16x8
#define MB_TYPE_16x8
Definition: mpegutils.h:55
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:71
IMbInfo::cbp
uint8_t cbp
Definition: h264data.h:36
MB_TYPE_8x8DCT
#define MB_TYPE_8x8DCT
Definition: h264dec.h:102
internal.h
H264SliceContext::ref_count
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition: h264dec.h:273
MB_TYPE_16x16
#define MB_TYPE_16x16
Definition: mpegutils.h:54
H264SliceContext::h264
struct H264Context * h264
Definition: h264dec.h:184
H264SliceContext::left_mb_xy
int left_mb_xy[LEFT_MBS]
Definition: h264dec.h:217
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:1812
AV_WN32A
#define AV_WN32A(p, v)
Definition: intreadwrite.h:538
cat
#define cat(a, bpp, b)
Definition: vp9dsp_init.h:29
ff_tlog
#define ff_tlog(ctx,...)
Definition: internal.h:86
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:1779
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:310
mpegutils.h
MB_TYPE_INTRA16x16
#define MB_TYPE_INTRA16x16
Definition: mpegutils.h:52
CABACContext::low
int low
Definition: cabac.h:44
H264SliceContext::mb_x
int mb_x
Definition: h264dec.h:236
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:1769
H264SliceContext
Definition: h264dec.h:183
get_cabac
static int av_unused get_cabac(CABACContext *c, uint8_t *const state)
Definition: cabac_functions.h:138
ff_h264_last_coeff_flag_offset_8x8
static const uint8_t *const ff_h264_last_coeff_flag_offset_8x8
Definition: cabac_functions.h:55
MB_FIELD
#define MB_FIELD(sl)
Definition: h264dec.h:72
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:305
H264SliceContext::mvd_cache
uint8_t mvd_cache[2][5 *8][2]
Definition: h264dec.h:307
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:687
U
#define U(x)
Definition: vp56_arith.h:37
tab
static const struct twinvq_data tab
Definition: twinvq_data.h:11135
CABACContext::bytestream
const uint8_t * bytestream
Definition: cabac.h:48
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:1828
val
static double val(void *priv, double ch)
Definition: aeval.c:76
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:45
PMbInfo::partition_count
uint8_t partition_count
Definition: h264data.h:43
H264Context::avctx
AVCodecContext * avctx
Definition: h264dec.h:345
H264SliceContext::slice_num
int slice_num
Definition: h264dec.h:188
decode_cabac_b_mb_sub_type
static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
Definition: h264_cabac.c:1450
fill_decode_neighbors
static void fill_decode_neighbors(const H264Context *h, H264SliceContext *sl, int mb_type)
Definition: h264_mvpred.h:356
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:176
IS_16X8
#define IS_16X8(a)
Definition: mpegutils.h:87
H264SliceContext::next_mb_skipped
int next_mb_skipped
Definition: h264dec.h:206
FIELD_PICTURE
#define FIELD_PICTURE(h)
Definition: h264dec.h:74
pred_intra_mode
static av_always_inline int pred_intra_mode(const H264Context *h, H264SliceContext *sl, int n)
Get the predicted intra4x4 prediction mode.
Definition: h264dec.h:695
IS_SUB_4X8
#define IS_SUB_4X8(a)
Definition: mpegutils.h:92
bits
uint8_t bits
Definition: vp3data.h:202
h264data.h
DECODE_CABAC_MB_MVD
#define DECODE_CABAC_MB_MVD(sl, list, n)
Definition: h264_cabac.c:1534
ctx
AVFormatContext * ctx
Definition: movenc.c:48
IS_SKIP
#define IS_SKIP(a)
Definition: mpegutils.h:81
IS_INTRA
#define IS_INTRA(x, y)
ff_h264_pred_direct_motion
void ff_h264_pred_direct_motion(const H264Context *const h, H264SliceContext *sl, int *mb_type)
Definition: h264_direct.c:721
H264SliceContext::slice_type
int slice_type
Definition: h264dec.h:189
int32_t
int32_t
Definition: audio_convert.c:194
IMbInfo::pred_mode
uint8_t pred_mode
Definition: h264data.h:35
if
if(ret)
Definition: filter_design.txt:179
IS_DIR
#define IS_DIR(a, part, list)
Definition: mpegutils.h:96
NULL
#define NULL
Definition: coverity.c:32
IS_INTRA_PCM
#define IS_INTRA_PCM(a)
Definition: mpegutils.h:82
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:803
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:445
ff_h264_decode_mb_cabac
int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
Definition: h264_cabac.c:1911
AV_PICTURE_TYPE_SI
@ AV_PICTURE_TYPE_SI
Switching Intra.
Definition: avutil.h:278
decode_cabac_p_mb_sub_type
static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
Definition: h264_cabac.c:1440
H264SliceContext::chroma_qp
int chroma_qp[2]
Definition: h264dec.h:194
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:274
decode_cabac_residual_nondc_internal
static av_noinline void decode_cabac_residual_nondc_internal(const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff)
Definition: h264_cabac.c:1789
MB_TYPE_INTRA_PCM
#define MB_TYPE_INTRA_PCM
Definition: mpegutils.h:53
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:83
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:228
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:314
H264SliceContext::qscale
int qscale
Definition: h264dec.h:193
CHROMA_DC_BLOCK_INDEX
#define CHROMA_DC_BLOCK_INDEX
Definition: h264dec.h:647
write_back_motion
static av_always_inline void write_back_motion(const H264Context *h, H264SliceContext *sl, int mb_type)
Definition: h264dec.h:783
AV_ZERO128
#define AV_ZERO128(d)
Definition: intreadwrite.h:637
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:325
H264SliceContext::top_type
int top_type
Definition: h264dec.h:220
get_dct8x8_allowed
static av_always_inline int get_dct8x8_allowed(const H264Context *h, H264SliceContext *sl)
Definition: h264dec.h:810
for
for(j=16;j >0;--j)
Definition: h264pred_template.c:469
PMbInfo::type
uint16_t type
Definition: h264data.h:42
IMbInfo::type
uint16_t type
Definition: h264data.h:34
H264SliceContext::cabac
CABACContext cabac
Cabac.
Definition: h264dec.h:324
H264SliceContext::intra4x4_pred_mode_cache
int8_t intra4x4_pred_mode_cache[5 *8]
Definition: h264dec.h:211
get_cabac_noinline
static int av_noinline av_unused get_cabac_noinline(CABACContext *c, uint8_t *const state)
Definition: cabac_functions.h:134
H264SliceContext::intra16x16_pred_mode
int intra16x16_pred_mode
Definition: h264dec.h:209
state
static struct @314 state
H264SliceContext::top_mb_xy
int top_mb_xy
Definition: h264dec.h:215
decode_cabac_mb_chroma_pre_mode
static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
Definition: h264_cabac.c:1378
DC_128_PRED8x8
#define DC_128_PRED8x8
Definition: h264pred.h:76
get_cabac_bypass_sign
static av_always_inline int get_cabac_bypass_sign(CABACContext *c, int val)
Definition: cabac_functions.h:161
MB_TYPE_SKIP
#define MB_TYPE_SKIP
Definition: mpegutils.h:62
H264SliceContext::cbp
int cbp
Definition: h264dec.h:261
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:1468
LEFT
#define LEFT
Definition: cdgraphics.c:166
pack8to16
static av_always_inline uint16_t pack8to16(unsigned a, unsigned b)
Definition: h264dec.h:675
H264SliceContext::left_type
int left_type[LEFT_MBS]
Definition: h264dec.h:222
h264_cabac.c
MB_TYPE_INTERLACED
#define MB_TYPE_INTERLACED
Definition: mpegutils.h:58
LUMA_DC_BLOCK_INDEX
#define LUMA_DC_BLOCK_INDEX
Definition: h264dec.h:646
H264SliceContext::mb_y
int mb_y
Definition: h264dec.h:236
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:95
H264SliceContext::slice_type_nos
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition: h264dec.h:190
decode_cabac_mb_mvd
static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
Definition: h264_cabac.c:1497
IS_INTRA16x16
#define IS_INTRA16x16(a)
Definition: mpegutils.h:76
mb
#define mb
Definition: vf_colormatrix.c:101
FRAME_MBAFF
#define FRAME_MBAFF(h)
Definition: h264dec.h:73
IS_DIRECT
#define IS_DIRECT(a)
Definition: mpegutils.h:84
IS_16X16
#define IS_16X16(a)
Definition: mpegutils.h:86
ff_h264_b_mb_type_info
const PMbInfo ff_h264_b_mb_type_info[23]
Definition: h264data.c:110
pack16to32
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
Definition: h264dec.h:666
get_cabac_terminate
static int av_unused get_cabac_terminate(CABACContext *c)
Definition: cabac_functions.h:181
ff_init_cabac_decoder
int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size)
Definition: cabac.c:176
H264SliceContext::mb_mbaff
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition: h264dec.h:248
LIST_NOT_USED
#define LIST_NOT_USED
Definition: h264dec.h:396
IS_SUB_8X4
#define IS_SUB_8X4(a)
Definition: mpegutils.h:91
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:1582
H264SliceContext::chroma_pred_mode
int chroma_pred_mode
Definition: h264dec.h:208
av_assert2
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:64
H264SliceContext::top_cbp
int top_cbp
Definition: h264dec.h:262
H264Context
H264Context.
Definition: h264dec.h:343
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
get_cabac_bypass
static int av_unused get_cabac_bypass(CABACContext *c)
Definition: cabac_functions.h:143
av_always_inline
#define av_always_inline
Definition: attributes.h:49
uint8_t
uint8_t
Definition: audio_convert.c:194
cabac_functions.h
ff_h264_b_sub_mb_type_info
const PMbInfo ff_h264_b_sub_mb_type_info[13]
Definition: h264data.c:136
PART_NOT_AVAILABLE
#define PART_NOT_AVAILABLE
Definition: h264dec.h:397
H264SliceContext::list_count
unsigned int list_count
Definition: h264dec.h:274
avcodec.h
decode_cabac_mb_intra4x4_pred_mode
static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
Definition: h264_cabac.c:1364
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:196
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
ff_h264_p_mb_type_info
const PMbInfo ff_h264_p_mb_type_info[5]
Definition: h264data.c:95
pred_8x16_motion
static av_always_inline void pred_8x16_motion(const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
Get the directionally predicted 8x16 MV.
Definition: h264_mvpred.h:201
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:276
mode
mode
Definition: ebur128.h:83
ff_h264_check_intra4x4_pred_mode
int ff_h264_check_intra4x4_pred_mode(int8_t *pred_mode_cache, void *logctx, int top_samples_available, int left_samples_available)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
Definition: h264_parse.c:131
ff_h264_i_mb_type_info
const IMbInfo ff_h264_i_mb_type_info[26]
Definition: h264data.c:66
fill_rectangle
static void fill_rectangle(int x, int y, int w, int h)
Definition: ffplay.c:831
CC
#define CC
STORE_BLOCK
#define STORE_BLOCK(type)
scan8
static const uint8_t scan8[16 *3+3]
Definition: h264dec.h:650
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:107
H264SliceContext::left_cbp
int left_cbp
Definition: h264dec.h:263
IS_8X16
#define IS_8X16(a)
Definition: mpegutils.h:88
CABACContext::bytestream_end
const uint8_t * bytestream_end
Definition: cabac.h:49
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:1549
decode_cabac_intra_mb_type
static int decode_cabac_intra_mb_type(H264SliceContext *sl, int ctx_base, int intra_slice)
Definition: h264_cabac.c:1295
H264SliceContext::non_zero_count_cache
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition: h264dec.h:300
H264SliceContext::direct_cache
uint8_t direct_cache[5 *8]
Definition: h264dec.h:308
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:275
IS_INTER
#define IS_INTER(a)
Definition: mpegutils.h:79
decode_cabac_mb_cbp_chroma
static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
Definition: h264_cabac.c:1420
H264SliceContext::left_samples_available
unsigned int left_samples_available
Definition: h264dec.h:230
H264SliceContext::neighbor_transform_size
int neighbor_transform_size
number of neighbors (top and/or left) that used 8x8 dct
Definition: h264dec.h:255
INT_BIT
#define INT_BIT
Definition: h264_cabac.c:30
LTOP
#define LTOP
Definition: h264dec.h:76
MB_TYPE_DIRECT2
#define MB_TYPE_DIRECT2
Definition: mpegutils.h:59
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:28
CHROMA444
#define CHROMA444(h)
Definition: h264dec.h:99
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
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:326
write_back_intra_pred_mode
static av_always_inline void write_back_intra_pred_mode(const H264Context *h, H264SliceContext *sl)
Definition: h264dec.h:711
CABAC_BITS
#define CABAC_BITS
Definition: cabac.h:40
decode_cabac_field_decoding_flag
static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
Definition: h264_cabac.c:1283
write_back_non_zero_count
static av_always_inline void write_back_non_zero_count(const H264Context *h, H264SliceContext *sl)
Definition: h264dec.h:723
IS_8x8DCT
#define IS_8x8DCT(a)
Definition: h264dec.h:104
CABACContext
Definition: cabac.h:43
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:1327
H264SliceContext::prev_mb_skipped
int prev_mb_skipped
Definition: h264dec.h:205
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:1841
ff_h264_check_intra_pred_mode
int ff_h264_check_intra_pred_mode(void *logctx, int top_samples_available, int left_samples_available, int mode, int is_chroma)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
Definition: h264_parse.c:179
H264SliceContext::mb_field_decoding_flag
int mb_field_decoding_flag
Definition: h264dec.h:247
IS_SUB_8X8
#define IS_SUB_8X8(a)
Definition: mpegutils.h:90