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