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