FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
h264_cabac.c
Go to the documentation of this file.
1 /*
2  * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
3  * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * H.264 / AVC / MPEG-4 part10 cabac decoding.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #define CABAC(h) 1
29 #define UNCHECKED_BITSTREAM_READER 1
30 #define INT_BIT (CHAR_BIT * sizeof(int))
31 
32 #include "libavutil/attributes.h"
33 #include "libavutil/avassert.h"
34 #include "libavutil/timer.h"
35 #include "config.h"
36 #include "cabac.h"
37 #include "cabac_functions.h"
38 #include "internal.h"
39 #include "avcodec.h"
40 #include "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 unused 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->ps.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->ps.pps->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->ps.pps->dequant8_coeff[cqm][qscale], 64);
1895  } else {
1896  qmul = h->ps.pps->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  const SPS *sps = h->ps.sps;
1918  int mb_xy;
1919  int mb_type, partition_count, cbp = 0;
1920  int dct8x8_allowed= h->ps.pps->transform_8x8_mode;
1921  int decode_chroma = sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2;
1922  const int pixel_shift = h->pixel_shift;
1923 
1924  mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
1925 
1926  ff_tlog(h->avctx, "pic:%d mb:%d/%d\n", h->poc.frame_num, sl->mb_x, sl->mb_y);
1927  if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1928  int skip;
1929  /* a skipped mb needs the aff flag from the following mb */
1930  if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
1931  skip = sl->next_mb_skipped;
1932  else
1933  skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
1934  /* read skip flags */
1935  if( skip ) {
1936  if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
1937  h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
1938  sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
1939  if(!sl->next_mb_skipped)
1941  }
1942 
1943  decode_mb_skip(h, sl);
1944 
1945  h->cbp_table[mb_xy] = 0;
1946  h->chroma_pred_mode_table[mb_xy] = 0;
1947  sl->last_qscale_diff = 0;
1948 
1949  return 0;
1950 
1951  }
1952  }
1953  if (FRAME_MBAFF(h)) {
1954  if ((sl->mb_y & 1) == 0)
1955  sl->mb_mbaff =
1957  }
1958 
1959  sl->prev_mb_skipped = 0;
1960 
1961  fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
1962 
1963  if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1964  int ctx = 0;
1966 
1967  if (!IS_DIRECT(sl->left_type[LTOP] - 1))
1968  ctx++;
1969  if (!IS_DIRECT(sl->top_type - 1))
1970  ctx++;
1971 
1972  if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
1973  mb_type= 0; /* B_Direct_16x16 */
1974  }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
1975  mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
1976  }else{
1977  int bits;
1978  bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
1979  bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
1980  bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
1981  bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1982  if( bits < 8 ){
1983  mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
1984  }else if( bits == 13 ){
1985  mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
1986  goto decode_intra_mb;
1987  }else if( bits == 14 ){
1988  mb_type= 11; /* B_L1_L0_8x16 */
1989  }else if( bits == 15 ){
1990  mb_type= 22; /* B_8x8 */
1991  }else{
1992  bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
1993  mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
1994  }
1995  }
1996  partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
1997  mb_type = ff_h264_b_mb_type_info[mb_type].type;
1998  } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
1999  if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
2000  /* P-type */
2001  if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
2002  /* P_L0_D16x16, P_8x8 */
2003  mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
2004  } else {
2005  /* P_L0_D8x16, P_L0_D16x8 */
2006  mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
2007  }
2008  partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
2009  mb_type = ff_h264_p_mb_type_info[mb_type].type;
2010  } else {
2011  mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
2012  goto decode_intra_mb;
2013  }
2014  } else {
2015  mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
2016  if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
2017  mb_type--;
2019 decode_intra_mb:
2020  partition_count = 0;
2021  cbp = ff_h264_i_mb_type_info[mb_type].cbp;
2023  mb_type = ff_h264_i_mb_type_info[mb_type].type;
2024  }
2025  if (MB_FIELD(sl))
2026  mb_type |= MB_TYPE_INTERLACED;
2027 
2028  h->slice_table[mb_xy] = sl->slice_num;
2029 
2030  if(IS_INTRA_PCM(mb_type)) {
2031  const int mb_size = ff_h264_mb_sizes[sps->chroma_format_idc] *
2032  sps->bit_depth_luma >> 3;
2033  const uint8_t *ptr;
2034  int ret;
2035 
2036  // We assume these blocks are very rare so we do not optimize it.
2037  // FIXME The two following lines get the bitstream position in the cabac
2038  // decode, I think it should be done by a function in cabac.h (or cabac.c).
2039  ptr= sl->cabac.bytestream;
2040  if(sl->cabac.low&0x1) ptr--;
2041  if(CABAC_BITS==16){
2042  if(sl->cabac.low&0x1FF) ptr--;
2043  }
2044 
2045  // The pixels are stored in the same order as levels in h->mb array.
2046  if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
2047  return -1;
2048  sl->intra_pcm_ptr = ptr;
2049  ptr += mb_size;
2050 
2051  ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
2052  if (ret < 0)
2053  return ret;
2054 
2055  // All blocks are present
2056  h->cbp_table[mb_xy] = 0xf7ef;
2057  h->chroma_pred_mode_table[mb_xy] = 0;
2058  // In deblocking, the quantizer is 0
2059  h->cur_pic.qscale_table[mb_xy] = 0;
2060  // All coeffs are present
2061  memset(h->non_zero_count[mb_xy], 16, 48);
2062  h->cur_pic.mb_type[mb_xy] = mb_type;
2063  sl->last_qscale_diff = 0;
2064  return 0;
2065  }
2066 
2067  fill_decode_caches(h, sl, mb_type);
2068 
2069  if( IS_INTRA( mb_type ) ) {
2070  int i, pred_mode;
2071  if( IS_INTRA4x4( mb_type ) ) {
2072  if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
2073  mb_type |= MB_TYPE_8x8DCT;
2074  for( i = 0; i < 16; i+=4 ) {
2075  int pred = pred_intra_mode(h, sl, i);
2076  int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
2077  fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
2078  }
2079  } else {
2080  for( i = 0; i < 16; i++ ) {
2081  int pred = pred_intra_mode(h, sl, i);
2083 
2084  ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
2086  }
2087  }
2091  return -1;
2092  } else {
2095  if (sl->intra16x16_pred_mode < 0) return -1;
2096  }
2097  if(decode_chroma){
2098  h->chroma_pred_mode_table[mb_xy] =
2099  pred_mode = decode_cabac_mb_chroma_pre_mode(h, sl);
2100 
2102  sl->left_samples_available, pred_mode, 1 );
2103  if( pred_mode < 0 ) return -1;
2104  sl->chroma_pred_mode = pred_mode;
2105  } else {
2107  }
2108  } else if( partition_count == 4 ) {
2109  int i, j, sub_partition_count[4], list, ref[2][4];
2110 
2111  if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
2112  for( i = 0; i < 4; i++ ) {
2114  sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2116  }
2117  if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
2118  sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
2119  ff_h264_pred_direct_motion(h, sl, &mb_type);
2120  sl->ref_cache[0][scan8[4]] =
2121  sl->ref_cache[1][scan8[4]] =
2122  sl->ref_cache[0][scan8[12]] =
2123  sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
2124  for( i = 0; i < 4; i++ )
2125  fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
2126  }
2127  } else {
2128  for( i = 0; i < 4; i++ ) {
2130  sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
2132  }
2133  }
2134 
2135  for( list = 0; list < sl->list_count; list++ ) {
2136  for( i = 0; i < 4; i++ ) {
2137  if(IS_DIRECT(sl->sub_mb_type[i])) continue;
2138  if(IS_DIR(sl->sub_mb_type[i], 0, list)){
2139  unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2140  if (rc > 1) {
2141  ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
2142  if (ref[list][i] >= rc) {
2143  av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
2144  return -1;
2145  }
2146  }else
2147  ref[list][i] = 0;
2148  } else {
2149  ref[list][i] = -1;
2150  }
2151  sl->ref_cache[list][scan8[4 * i] + 1] =
2152  sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
2153  }
2154  }
2155 
2156  if(dct8x8_allowed)
2157  dct8x8_allowed = get_dct8x8_allowed(h, sl);
2158 
2159  for (list = 0; list < sl->list_count; list++) {
2160  for(i=0; i<4; i++){
2161  sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
2162  if(IS_DIRECT(sl->sub_mb_type[i])){
2163  fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
2164  continue;
2165  }
2166 
2167  if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
2168  const int sub_mb_type= sl->sub_mb_type[i];
2169  const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
2170  for(j=0; j<sub_partition_count[i]; j++){
2171  int mpx, mpy;
2172  int mx, my;
2173  const int index= 4*i + block_width*j;
2174  int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
2175  uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
2176  pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
2177  DECODE_CABAC_MB_MVD(sl, list, index)
2178  ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2179 
2180  if(IS_SUB_8X8(sub_mb_type)){
2181  mv_cache[ 1 ][0]=
2182  mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
2183  mv_cache[ 1 ][1]=
2184  mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
2185 
2186  mvd_cache[ 1 ][0]=
2187  mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
2188  mvd_cache[ 1 ][1]=
2189  mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
2190  }else if(IS_SUB_8X4(sub_mb_type)){
2191  mv_cache[ 1 ][0]= mx;
2192  mv_cache[ 1 ][1]= my;
2193 
2194  mvd_cache[ 1 ][0]= mpx;
2195  mvd_cache[ 1 ][1]= mpy;
2196  }else if(IS_SUB_4X8(sub_mb_type)){
2197  mv_cache[ 8 ][0]= mx;
2198  mv_cache[ 8 ][1]= my;
2199 
2200  mvd_cache[ 8 ][0]= mpx;
2201  mvd_cache[ 8 ][1]= mpy;
2202  }
2203  mv_cache[ 0 ][0]= mx;
2204  mv_cache[ 0 ][1]= my;
2205 
2206  mvd_cache[ 0 ][0]= mpx;
2207  mvd_cache[ 0 ][1]= mpy;
2208  }
2209  }else{
2210  fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
2211  fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
2212  }
2213  }
2214  }
2215  } else if( IS_DIRECT(mb_type) ) {
2216  ff_h264_pred_direct_motion(h, sl, &mb_type);
2217  fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
2218  fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
2219  dct8x8_allowed &= sps->direct_8x8_inference_flag;
2220  } else {
2221  int list, i;
2222  if(IS_16X16(mb_type)){
2223  for (list = 0; list < sl->list_count; list++) {
2224  if(IS_DIR(mb_type, 0, list)){
2225  int ref;
2226  unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2227  if (rc > 1) {
2228  ref= decode_cabac_mb_ref(sl, list, 0);
2229  if (ref >= rc) {
2230  av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2231  return -1;
2232  }
2233  }else
2234  ref=0;
2235  fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
2236  }
2237  }
2238  for (list = 0; list < sl->list_count; list++) {
2239  if(IS_DIR(mb_type, 0, list)){
2240  int mx,my,mpx,mpy;
2241  pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
2242  DECODE_CABAC_MB_MVD(sl, list, 0)
2243  ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2244 
2245  fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
2246  fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
2247  }
2248  }
2249  }
2250  else if(IS_16X8(mb_type)){
2251  for (list = 0; list < sl->list_count; list++) {
2252  for(i=0; i<2; i++){
2253  if(IS_DIR(mb_type, i, list)){
2254  int ref;
2255  unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2256  if (rc > 1) {
2257  ref= decode_cabac_mb_ref(sl, list, 8 * i);
2258  if (ref >= rc) {
2259  av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2260  return -1;
2261  }
2262  }else
2263  ref=0;
2264  fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
2265  }else
2266  fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
2267  }
2268  }
2269  for (list = 0; list < sl->list_count; list++) {
2270  for(i=0; i<2; i++){
2271  if(IS_DIR(mb_type, i, list)){
2272  int mx,my,mpx,mpy;
2273  pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
2274  DECODE_CABAC_MB_MVD(sl, list, 8*i)
2275  ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2276 
2277  fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
2278  fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
2279  }else{
2280  fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
2281  fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
2282  }
2283  }
2284  }
2285  }else{
2286  av_assert2(IS_8X16(mb_type));
2287  for (list = 0; list < sl->list_count; list++) {
2288  for(i=0; i<2; i++){
2289  if(IS_DIR(mb_type, i, list)){ //FIXME optimize
2290  int ref;
2291  unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
2292  if (rc > 1) {
2293  ref = decode_cabac_mb_ref(sl, list, 4 * i);
2294  if (ref >= rc) {
2295  av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
2296  return -1;
2297  }
2298  }else
2299  ref=0;
2300  fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
2301  }else
2302  fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
2303  }
2304  }
2305  for (list = 0; list < sl->list_count; list++) {
2306  for(i=0; i<2; i++){
2307  if(IS_DIR(mb_type, i, list)){
2308  int mx,my,mpx,mpy;
2309  pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
2310  DECODE_CABAC_MB_MVD(sl, list, 4*i)
2311 
2312  ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
2313  fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
2314  fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
2315  }else{
2316  fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
2317  fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
2318  }
2319  }
2320  }
2321  }
2322  }
2323 
2324  if( IS_INTER( mb_type ) ) {
2325  h->chroma_pred_mode_table[mb_xy] = 0;
2326  write_back_motion(h, sl, mb_type);
2327  }
2328 
2329  if( !IS_INTRA16x16( mb_type ) ) {
2330  cbp = decode_cabac_mb_cbp_luma(sl);
2331  if(decode_chroma)
2332  cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
2333  } else {
2334  if (!decode_chroma && cbp>15) {
2335  av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
2336  return AVERROR_INVALIDDATA;
2337  }
2338  }
2339 
2340  h->cbp_table[mb_xy] = sl->cbp = cbp;
2341 
2342  if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
2343  mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
2344  }
2345 
2346  /* It would be better to do this in fill_decode_caches, but we don't know
2347  * the transform mode of the current macroblock there. */
2348  if (CHROMA444(h) && IS_8x8DCT(mb_type)){
2349  int i;
2350  uint8_t *nnz_cache = sl->non_zero_count_cache;
2351  for (i = 0; i < 2; i++){
2352  if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
2353  nnz_cache[3+8* 1 + 2*8*i]=
2354  nnz_cache[3+8* 2 + 2*8*i]=
2355  nnz_cache[3+8* 6 + 2*8*i]=
2356  nnz_cache[3+8* 7 + 2*8*i]=
2357  nnz_cache[3+8*11 + 2*8*i]=
2358  nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
2359  }
2360  }
2361  if (sl->top_type && !IS_8x8DCT(sl->top_type)){
2362  uint32_t top_empty = CABAC(h) && !IS_INTRA(mb_type) ? 0 : 0x40404040;
2363  AV_WN32A(&nnz_cache[4+8* 0], top_empty);
2364  AV_WN32A(&nnz_cache[4+8* 5], top_empty);
2365  AV_WN32A(&nnz_cache[4+8*10], top_empty);
2366  }
2367  }
2368  h->cur_pic.mb_type[mb_xy] = mb_type;
2369 
2370  if( cbp || IS_INTRA16x16( mb_type ) ) {
2371  const uint8_t *scan, *scan8x8;
2372  const uint32_t *qmul;
2373 
2374  if(IS_INTERLACED(mb_type)){
2375  scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
2376  scan = sl->qscale ? h->field_scan : h->field_scan_q0;
2377  }else{
2378  scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
2379  scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
2380  }
2381 
2382  // decode_cabac_mb_dqp
2383  if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
2384  int val = 1;
2385  int ctx= 2;
2386  const int max_qp = 51 + 6*(sps->bit_depth_luma-8);
2387 
2388  while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
2389  ctx= 3;
2390  val++;
2391  if(val > 2*max_qp){ //prevent infinite loop
2392  av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
2393  return -1;
2394  }
2395  }
2396 
2397  if( val&0x01 )
2398  val= (val + 1)>>1 ;
2399  else
2400  val= -((val + 1)>>1);
2401  sl->last_qscale_diff = val;
2402  sl->qscale += val;
2403  if (((unsigned)sl->qscale) > max_qp){
2404  if (sl->qscale < 0) sl->qscale += max_qp + 1;
2405  else sl->qscale -= max_qp + 1;
2406  }
2407  sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
2408  sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
2409  }else
2410  sl->last_qscale_diff=0;
2411 
2412  decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
2413  if (CHROMA444(h)) {
2414  decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
2415  decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
2416  } else if (CHROMA422(h)) {
2417  if( cbp&0x30 ){
2418  int c;
2419  for (c = 0; c < 2; c++)
2420  decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
2423  }
2424 
2425  if( cbp&0x20 ) {
2426  int c, i, i8x8;
2427  for( c = 0; c < 2; c++ ) {
2428  int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
2429  qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2430  for (i8x8 = 0; i8x8 < 2; i8x8++) {
2431  for (i = 0; i < 4; i++) {
2432  const int index = 16 + 16 * c + 8*i8x8 + i;
2433  decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
2434  mb += 16<<pixel_shift;
2435  }
2436  }
2437  }
2438  } else {
2439  fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2440  fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2441  }
2442  } else /* yuv420 */ {
2443  if( cbp&0x30 ){
2444  int c;
2445  for (c = 0; c < 2; c++)
2446  decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16 * 16 * c) << pixel_shift),
2448  }
2449 
2450  if( cbp&0x20 ) {
2451  int c, i;
2452  for( c = 0; c < 2; c++ ) {
2453  qmul = h->ps.pps->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
2454  for( i = 0; i < 4; i++ ) {
2455  const int index = 16 + 16 * c + i;
2456  decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
2457  }
2458  }
2459  } else {
2460  fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2461  fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2462  }
2463  }
2464  } else {
2465  fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
2466  fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
2467  fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
2468  sl->last_qscale_diff = 0;
2469  }
2470 
2471  h->cur_pic.qscale_table[mb_xy] = sl->qscale;
2473 
2474  return 0;
2475 }
int chroma_format_idc
Definition: h264.h:140
#define MB_TYPE_INTRA16x16
Definition: avcodec.h:1241
struct H264Context * h264
Definition: h264.h:317
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:1251
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:437
H264POCContext poc
Definition: h264.h:578
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:429
int neighbor_transform_size
number of neighbors (top and/or left) that used 8x8 dct
Definition: h264.h:386
#define CHROMA444(h)
Definition: h264.h:103
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:551
int left_mb_xy[LEFT_MBS]
Definition: h264.h:350
const uint8_t * bytestream_end
Definition: cabac.h:49
uint16_t * cbp_table
Definition: h264.h:534
uint8_t mvd_cache[2][5 *8][2]
Definition: h264.h:431
Sequence parameter set.
Definition: h264.h:136
#define CABAC_BITS
Definition: cabac.h:40
int prev_mb_skipped
Definition: h264.h:338
#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:456
static av_always_inline void write_back_motion(const H264Context *h, H264SliceContext *sl, int mb_type)
Definition: h264.h:934
static av_always_inline void write_back_non_zero_count(const H264Context *h, H264SliceContext *sl)
Definition: h264.h:874
#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:404
Macro definitions for various function/variable attributes.
Switching Intra.
Definition: avutil.h:270
uint8_t * chroma_pred_mode_table
Definition: h264.h:537
static int16_t block[64]
Definition: dct.c:113
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:826
#define IS_8x8DCT(a)
Definition: h264.h:110
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:434
#define MB_FIELD(sl)
Definition: h264.h:76
const PPS * pps
Definition: h264.h:236
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:322
#define LUMA_DC_BLOCK_INDEX
Definition: h264.h:797
#define MB_TYPE_INTRA_PCM
Definition: avcodec.h:1242
const uint8_t ff_h264_chroma_dc_scan[4]
Definition: h264data.c:54
#define IS_DIR(a, part, list)
Definition: mpegutils.h:98
uint32_t(*[6] dequant4_coeff)[16]
Definition: h264.h:225
static av_always_inline int pred_intra_mode(const H264Context *h, H264SliceContext *sl, int n)
Get the predicted intra4x4 prediction mode.
Definition: h264.h:846
uint32_t(*[6] dequant8_coeff)[64]
Definition: h264.h:226
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:103
static void fill_rectangle(SDL_Surface *screen, int x, int y, int w, int h, int color, int update)
Definition: ffplay.c:801
high precision timer, useful to profile code
int chroma_qp[2]
Definition: h264.h:327
#define av_log(a,...)
uint16_t type
Definition: h264data.h:42
const PMbInfo ff_h264_p_mb_type_info[5]
Definition: h264data.c:95
H.264 / AVC / MPEG-4 part10 codec.
int slice_num
Definition: h264.h:321
#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:961
static av_always_inline void write_back_intra_pred_mode(const H264Context *h, H264SliceContext *sl)
Definition: h264.h:862
#define CHROMA_DC_BLOCK_INDEX
Definition: h264.h:798
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:344
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:361
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
Definition: h264.h:817
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition: h264.h:323
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:542
static const uint8_t scan8[16 *3+3]
Definition: h264.h:801
uint8_t cabac_state[1024]
Definition: h264.h:449
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:438
#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:341
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:1248
#define IS_SUB_4X8(a)
Definition: mpegutils.h:94
uint16_t * slice_table
slice_table_base + 2*mb_stride + 1
Definition: h264.h:524
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:448
#define STORE_BLOCK(type)
#define FIELD_PICTURE(h)
Definition: h264.h:78
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:1247
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:274
int top_mb_xy
Definition: h264.h:348
int next_mb_skipped
Definition: h264.h:339
int32_t
AVFormatContext * ctx
Definition: movenc.c:48
int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size)
Definition: cabac.c:177
Context Adaptive Binary Arithmetic Coder inline functions.
int direct_8x8_inference_flag
Definition: h264.h:155
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:75
#define PART_NOT_AVAILABLE
Definition: h264.h:507
#define IS_INTRA16x16(a)
Definition: mpegutils.h:78
int top_type
Definition: h264.h:353
static const float pred[4]
Definition: siprdata.h:259
H.264 / AVC / MPEG-4 part10 codec.
uint8_t zigzag_scan_q0[16]
Definition: h264.h:547
int intra16x16_pred_mode
Definition: h264.h:342
int mb_stride
Definition: h264.h:556
#define IS_INTERLACED(a)
Definition: mpegutils.h:85
AVCodecContext * avctx
Definition: h264.h:458
uint8_t zigzag_scan8x8_q0[64]
Definition: h264.h:548
#define IS_SUB_8X4(a)
Definition: mpegutils.h:93
Libavcodec external API header.
int last_qscale_diff
Definition: h264.h:329
#define LTOP
Definition: h264.h:80
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:268
#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:102
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition: h264.h:424
int index
Definition: gxfenc.c:89
#define IS_8X16(a)
Definition: mpegutils.h:90
int pixel_shift
0 for 8-bit H.264, 1 for high-bit-depth H.264
Definition: h264.h:475
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:1243
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition: h264.h:379
uint8_t direct_cache[5 *8]
Definition: h264.h:432
#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
static struct @228 state
int transform_8x8_mode
transform_8x8_mode_flag
Definition: h264.h:215
uint8_t zigzag_scan[16]
Definition: h264.h:541
unsigned int list_count
Definition: h264.h:405
#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:355
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
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:107
int ff_h264_check_intra_pred_mode(void *logctx, int top_samples_available, int left_samples_available, int mode, int is_chroma)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
Definition: h264_parse.c:151
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
H264ParamSets ps
Definition: h264.h:574
H.264 / AVC / MPEG-4 part10 motion vector prediction.
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:1244
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:189
static av_always_inline int get_chroma_qp(const H264Context *h, int t, int qscale)
Get the chroma qp.
Definition: h264.h:838
#define IS_INTRA(x, y)
#define IS_INTRA4x4(a)
Definition: mpegutils.h:77
int8_t ref_cache[2][5 *8]
Definition: h264.h:430
#define FRAME_MBAFF(h)
Definition: h264.h:77
const uint16_t ff_h264_mb_sizes[4]
Definition: h264.c:58
H264Picture cur_pic
Definition: h264.h:467
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:410
SPS * sps
Definition: h264.h:238
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:363
uint8_t field_scan8x8[64]
Definition: h264.h:545
#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:550
#define LIST_NOT_USED
Definition: h264.h:506
int mb_field_decoding_flag
Definition: h264.h:378
uint8_t(* non_zero_count)[48]
Definition: h264.h:504
exp golomb vlc stuff
uint8_t field_scan[16]
Definition: h264.h:544
int cabac_init_idc
Definition: h264.h:450
for(j=16;j >0;--j)
Predicted.
Definition: avutil.h:267
#define MB_TYPE_8x8DCT
Definition: h264.h:108
Context Adaptive Binary Arithmetic Coder.
int left_cbp
Definition: h264.h:394
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