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