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