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