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