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