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