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