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