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