Mercurial > libavcodec.hg
annotate vp8data.h @ 12266:48d6738904a9 libavcodec
Fix SPLATB_REG mess. Used to be a if/elseif/elseif/elseif spaghetti, so this
splits it into small optimization-specific macros which are selected for each
DSP function. The advantage of this approach is that the sse4 functions now
use the ssse3 codepath also without needing an explicit sse4 codepath.
author | rbultje |
---|---|
date | Sat, 24 Jul 2010 19:33:05 +0000 |
parents | 7db147ea02c4 |
children | e84378ff89ca |
rev | line source |
---|---|
11921 | 1 /** |
2 * VP8 compatible video decoder | |
3 * | |
4 * Copyright (C) 2010 David Conrad | |
5 * Copyright (C) 2010 Ronald S. Bultje | |
6 * | |
7 * This file is part of FFmpeg. | |
8 * | |
9 * FFmpeg is free software; you can redistribute it and/or | |
10 * modify it under the terms of the GNU Lesser General Public | |
11 * License as published by the Free Software Foundation; either | |
12 * version 2.1 of the License, or (at your option) any later version. | |
13 * | |
14 * FFmpeg is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
17 * Lesser General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU Lesser General Public | |
20 * License along with FFmpeg; if not, write to the Free Software | |
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
22 */ | |
23 | |
11930 | 24 // TODO: move these #define and enum to a better header... |
11921 | 25 |
26 #define VP8_MAX_QUANT 127 | |
27 | |
28 enum dct_token { | |
29 DCT_0, | |
30 DCT_1, | |
31 DCT_2, | |
32 DCT_3, | |
33 DCT_4, | |
34 DCT_CAT1, | |
35 DCT_CAT2, | |
36 DCT_CAT3, | |
37 DCT_CAT4, | |
38 DCT_CAT5, | |
39 DCT_CAT6, | |
40 DCT_EOB, | |
41 | |
42 NUM_DCT_TOKENS | |
43 }; | |
44 | |
45 #include "h264pred.h" | |
46 | |
47 // used to signal 4x4 intra pred in luma MBs | |
48 #define MODE_I4x4 4 | |
49 | |
50 enum inter_mvmode { | |
51 VP8_MVMODE_NEAREST = MODE_I4x4 + 1, | |
52 VP8_MVMODE_NEAR, | |
53 VP8_MVMODE_ZERO, | |
54 VP8_MVMODE_NEW, | |
55 VP8_MVMODE_SPLIT | |
56 }; | |
57 | |
58 enum inter_submvmode { | |
59 VP8_SUBMVMODE_LEFT4X4, | |
60 VP8_SUBMVMODE_TOP4X4, | |
61 VP8_SUBMVMODE_ZERO4X4, | |
62 VP8_SUBMVMODE_NEW4X4 | |
63 }; | |
64 | |
11989
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
65 enum inter_splitmvmode { |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
66 VP8_SPLITMVMODE_16x8 = 0, ///< 2 16x8 blocks (vertical) |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
67 VP8_SPLITMVMODE_8x16, ///< 2 8x16 blocks (horizontal) |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
68 VP8_SPLITMVMODE_8x8, ///< 2x2 blocks of 8x8px each |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
69 VP8_SPLITMVMODE_4x4, ///< 4x4 blocks of 4x4px each |
11990
3c51d7ac41c9
Simplify MV parsing, removes laying out 2 or 4 (16x8/8x8/8x16) MVs over all
rbultje
parents:
11989
diff
changeset
|
70 VP8_SPLITMVMODE_NONE, ///< (only used in prediction) no split MVs |
11989
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
71 }; |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
72 |
11921 | 73 static const uint8_t vp8_pred4x4_mode[] = |
74 { | |
75 [DC_PRED8x8] = DC_PRED, | |
76 [VERT_PRED8x8] = VERT_PRED, | |
77 [HOR_PRED8x8] = HOR_PRED, | |
78 [PLANE_PRED8x8] = TM_VP8_PRED, | |
79 }; | |
80 | |
81 static const int8_t vp8_pred16x16_tree_intra[4][2] = | |
82 { | |
83 { -MODE_I4x4, 1 }, // '0' | |
84 { 2, 3 }, | |
85 { -DC_PRED8x8, -VERT_PRED8x8 }, // '100', '101' | |
86 { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111' | |
87 }; | |
88 | |
89 static const int8_t vp8_pred16x16_tree_inter[4][2] = | |
90 { | |
91 { -DC_PRED8x8, 1 }, // '0' | |
92 { 2, 3 }, | |
93 { -VERT_PRED8x8, -HOR_PRED8x8 }, // '100', '101' | |
94 { -PLANE_PRED8x8, -MODE_I4x4 }, // '110', '111' | |
95 }; | |
96 | |
97 static const int vp8_mode_contexts[6][4] = { | |
98 { 7, 1, 1, 143 }, | |
99 { 14, 18, 14, 107 }, | |
100 { 135, 64, 57, 68 }, | |
101 { 60, 56, 128, 65 }, | |
102 { 159, 134, 128, 34 }, | |
103 { 234, 188, 128, 28 }, | |
104 }; | |
105 | |
106 static const int8_t vp8_pred16x16_tree_mvinter[4][2] = { | |
107 { -VP8_MVMODE_ZERO, 1 }, // '0' | |
108 { -VP8_MVMODE_NEAREST, 2 }, // '10' | |
109 { -VP8_MVMODE_NEAR, 3 }, // '110' | |
110 { -VP8_MVMODE_NEW, -VP8_MVMODE_SPLIT } // '1110', '1111' | |
111 }; | |
112 | |
11990
3c51d7ac41c9
Simplify MV parsing, removes laying out 2 or 4 (16x8/8x8/8x16) MVs over all
rbultje
parents:
11989
diff
changeset
|
113 static const uint8_t vp8_mbsplits[5][16] = { |
11921 | 114 { 0, 0, 0, 0, 0, 0, 0, 0, |
115 1, 1, 1, 1, 1, 1, 1, 1 }, | |
116 { 0, 0, 1, 1, 0, 0, 1, 1, | |
117 0, 0, 1, 1, 0, 0, 1, 1 }, | |
118 { 0, 0, 1, 1, 0, 0, 1, 1, | |
119 2, 2, 3, 3, 2, 2, 3, 3 }, | |
120 { 0, 1, 2, 3, 4, 5, 6, 7, | |
11990
3c51d7ac41c9
Simplify MV parsing, removes laying out 2 or 4 (16x8/8x8/8x16) MVs over all
rbultje
parents:
11989
diff
changeset
|
121 8, 9, 10, 11, 12, 13, 14, 15 }, |
3c51d7ac41c9
Simplify MV parsing, removes laying out 2 or 4 (16x8/8x8/8x16) MVs over all
rbultje
parents:
11989
diff
changeset
|
122 { 0, 0, 0, 0, 0, 0, 0, 0, |
3c51d7ac41c9
Simplify MV parsing, removes laying out 2 or 4 (16x8/8x8/8x16) MVs over all
rbultje
parents:
11989
diff
changeset
|
123 0, 0, 0, 0, 0, 0, 0, 0 } |
11921 | 124 }; |
125 | |
126 static const uint8_t vp8_mbfirstidx[4][16] = { | |
127 { 0, 8 }, { 0, 2 }, { 0, 2, 8, 10 }, | |
128 { 0, 1, 2, 3, 4, 5, 6, 7, | |
129 8, 9, 10, 11, 12, 13, 14, 15 } | |
130 }; | |
131 | |
132 static const int8_t vp8_mbsplit_tree[3][2] = { | |
11989
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
133 { -VP8_SPLITMVMODE_4x4, 1 }, // '0' - 16 individual MVs |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
134 { -VP8_SPLITMVMODE_8x8, 2 }, // '10' - quarter-based MVs |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
135 { -VP8_SPLITMVMODE_16x8, // '110' - top/bottom MVs |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
136 -VP8_SPLITMVMODE_8x16 } // '111' - left/right MVs |
11921 | 137 }; |
138 static const uint8_t vp8_mbsplit_count[4] = { 2, 2, 4, 16 }; | |
139 static const uint8_t vp8_mbsplit_prob[3] = { 110, 111, 150 }; | |
140 | |
141 static const uint8_t vp8_submv_prob[5][3] = { | |
142 { 147, 136, 18 }, | |
143 { 106, 145, 1 }, | |
144 { 179, 121, 1 }, | |
145 { 223, 1, 34 }, | |
146 { 208, 1, 1 } | |
147 }; | |
148 | |
149 static const int8_t vp8_submv_ref_tree[3][2] = { | |
150 { -VP8_SUBMVMODE_LEFT4X4, 1 }, // '0' | |
151 { -VP8_SUBMVMODE_TOP4X4, 2 }, // '10' | |
152 { -VP8_SUBMVMODE_ZERO4X4, -VP8_SUBMVMODE_NEW4X4 } // '110', '111' | |
153 }; | |
154 | |
155 static const uint8_t vp8_pred16x16_prob_intra[4] = { 145, 156, 163, 128 }; | |
156 static const uint8_t vp8_pred16x16_prob_inter[4] = { 112, 86, 140, 37 }; | |
157 | |
158 static const int8_t vp8_pred4x4_tree[9][2] = | |
159 { | |
160 { -DC_PRED, 1 }, // '0' | |
161 { -TM_VP8_PRED, 2 }, // '10' | |
162 { -VERT_PRED, 3 }, // '110' | |
163 { 4, 6 }, | |
164 { -HOR_PRED, 5 }, // '11100' | |
165 { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED }, // '111010', '111011' | |
166 { -DIAG_DOWN_LEFT_PRED, 7 }, // '11110' | |
167 { -VERT_LEFT_PRED, 8 }, // '111110' | |
168 { -HOR_DOWN_PRED, -HOR_UP_PRED }, // '1111110', '1111111' | |
169 }; | |
170 | |
171 static const int8_t vp8_pred8x8c_tree[3][2] = | |
172 { | |
173 { -DC_PRED8x8, 1 }, // '0' | |
174 { -VERT_PRED8x8, 2 }, // '10 | |
175 { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111' | |
176 }; | |
177 | |
178 static const uint8_t vp8_pred8x8c_prob_intra[3] = { 142, 114, 183 }; | |
179 static const uint8_t vp8_pred8x8c_prob_inter[3] = { 162, 101, 204 }; | |
180 | |
181 static const uint8_t vp8_pred4x4_prob_inter[9] = | |
182 { | |
183 120, 90, 79, 133, 87, 85, 80, 111, 151 | |
184 }; | |
185 | |
186 static const uint8_t vp8_pred4x4_prob_intra[10][10][9] = | |
187 { | |
188 { | |
189 { 39, 53, 200, 87, 26, 21, 43, 232, 171 }, | |
190 { 56, 34, 51, 104, 114, 102, 29, 93, 77 }, | |
191 { 88, 88, 147, 150, 42, 46, 45, 196, 205 }, | |
192 { 107, 54, 32, 26, 51, 1, 81, 43, 31 }, | |
193 { 39, 28, 85, 171, 58, 165, 90, 98, 64 }, | |
194 { 34, 22, 116, 206, 23, 34, 43, 166, 73 }, | |
195 { 34, 19, 21, 102, 132, 188, 16, 76, 124 }, | |
196 { 68, 25, 106, 22, 64, 171, 36, 225, 114 }, | |
197 { 62, 18, 78, 95, 85, 57, 50, 48, 51 }, | |
198 { 43, 97, 183, 117, 85, 38, 35, 179, 61 }, | |
199 }, | |
200 { | |
201 { 112, 113, 77, 85, 179, 255, 38, 120, 114 }, | |
202 { 40, 42, 1, 196, 245, 209, 10, 25, 109 }, | |
203 { 193, 101, 35, 159, 215, 111, 89, 46, 111 }, | |
204 { 100, 80, 8, 43, 154, 1, 51, 26, 71 }, | |
205 { 88, 43, 29, 140, 166, 213, 37, 43, 154 }, | |
206 { 61, 63, 30, 155, 67, 45, 68, 1, 209 }, | |
207 { 41, 40, 5, 102, 211, 183, 4, 1, 221 }, | |
208 { 142, 78, 78, 16, 255, 128, 34, 197, 171 }, | |
209 { 51, 50, 17, 168, 209, 192, 23, 25, 82 }, | |
210 { 60, 148, 31, 172, 219, 228, 21, 18, 111 }, | |
211 }, | |
212 { | |
213 { 175, 69, 143, 80, 85, 82, 72, 155, 103 }, | |
214 { 56, 58, 10, 171, 218, 189, 17, 13, 152 }, | |
215 { 231, 120, 48, 89, 115, 113, 120, 152, 112 }, | |
216 { 144, 71, 10, 38, 171, 213, 144, 34, 26 }, | |
217 { 114, 26, 17, 163, 44, 195, 21, 10, 173 }, | |
218 { 121, 24, 80, 195, 26, 62, 44, 64, 85 }, | |
219 { 63, 20, 8, 114, 114, 208, 12, 9, 226 }, | |
220 { 170, 46, 55, 19, 136, 160, 33, 206, 71 }, | |
221 { 81, 40, 11, 96, 182, 84, 29, 16, 36 }, | |
222 { 152, 179, 64, 126, 170, 118, 46, 70, 95 }, | |
223 }, | |
224 { | |
225 { 75, 79, 123, 47, 51, 128, 81, 171, 1 }, | |
226 { 57, 17, 5, 71, 102, 57, 53, 41, 49 }, | |
227 { 125, 98, 42, 88, 104, 85, 117, 175, 82 }, | |
228 { 115, 21, 2, 10, 102, 255, 166, 23, 6 }, | |
229 { 38, 33, 13, 121, 57, 73, 26, 1, 85 }, | |
230 { 41, 10, 67, 138, 77, 110, 90, 47, 114 }, | |
231 { 57, 18, 10, 102, 102, 213, 34, 20, 43 }, | |
232 { 101, 29, 16, 10, 85, 128, 101, 196, 26 }, | |
233 { 117, 20, 15, 36, 163, 128, 68, 1, 26 }, | |
234 { 95, 84, 53, 89, 128, 100, 113, 101, 45 }, | |
235 }, | |
236 { | |
237 { 63, 59, 90, 180, 59, 166, 93, 73, 154 }, | |
238 { 40, 40, 21, 116, 143, 209, 34, 39, 175 }, | |
239 { 138, 31, 36, 171, 27, 166, 38, 44, 229 }, | |
240 { 57, 46, 22, 24, 128, 1, 54, 17, 37 }, | |
241 { 47, 15, 16, 183, 34, 223, 49, 45, 183 }, | |
242 { 46, 17, 33, 183, 6, 98, 15, 32, 183 }, | |
243 { 40, 3, 9, 115, 51, 192, 18, 6, 223 }, | |
244 { 65, 32, 73, 115, 28, 128, 23, 128, 205 }, | |
245 { 87, 37, 9, 115, 59, 77, 64, 21, 47 }, | |
246 { 67, 87, 58, 169, 82, 115, 26, 59, 179 }, | |
247 }, | |
248 { | |
249 { 54, 57, 112, 184, 5, 41, 38, 166, 213 }, | |
250 { 30, 34, 26, 133, 152, 116, 10, 32, 134 }, | |
251 { 104, 55, 44, 218, 9, 54, 53, 130, 226 }, | |
252 { 75, 32, 12, 51, 192, 255, 160, 43, 51 }, | |
253 { 39, 19, 53, 221, 26, 114, 32, 73, 255 }, | |
254 { 31, 9, 65, 234, 2, 15, 1, 118, 73 }, | |
255 { 56, 21, 23, 111, 59, 205, 45, 37, 192 }, | |
256 { 88, 31, 35, 67, 102, 85, 55, 186, 85 }, | |
257 { 55, 38, 70, 124, 73, 102, 1, 34, 98 }, | |
258 { 64, 90, 70, 205, 40, 41, 23, 26, 57 }, | |
259 }, | |
260 { | |
261 { 86, 40, 64, 135, 148, 224, 45, 183, 128 }, | |
262 { 22, 26, 17, 131, 240, 154, 14, 1, 209 }, | |
263 { 164, 50, 31, 137, 154, 133, 25, 35, 218 }, | |
264 { 83, 12, 13, 54, 192, 255, 68, 47, 28 }, | |
265 { 45, 16, 21, 91, 64, 222, 7, 1, 197 }, | |
266 { 56, 21, 39, 155, 60, 138, 23, 102, 213 }, | |
267 { 18, 11, 7, 63, 144, 171, 4, 4, 246 }, | |
268 { 85, 26, 85, 85, 128, 128, 32, 146, 171 }, | |
269 { 35, 27, 10, 146, 174, 171, 12, 26, 128 }, | |
270 { 51, 103, 44, 131, 131, 123, 31, 6, 158 }, | |
271 }, | |
272 { | |
273 { 68, 45, 128, 34, 1, 47, 11, 245, 171 }, | |
274 { 62, 17, 19, 70, 146, 85, 55, 62, 70 }, | |
275 { 102, 61, 71, 37, 34, 53, 31, 243, 192 }, | |
276 { 75, 15, 9, 9, 64, 255, 184, 119, 16 }, | |
277 { 37, 43, 37, 154, 100, 163, 85, 160, 1 }, | |
278 { 63, 9, 92, 136, 28, 64, 32, 201, 85 }, | |
279 { 56, 8, 17, 132, 137, 255, 55, 116, 128 }, | |
280 { 86, 6, 28, 5, 64, 255, 25, 248, 1 }, | |
281 { 58, 15, 20, 82, 135, 57, 26, 121, 40 }, | |
282 { 69, 60, 71, 38, 73, 119, 28, 222, 37 }, | |
283 }, | |
284 { | |
285 { 101, 75, 128, 139, 118, 146, 116, 128, 85 }, | |
286 { 56, 41, 15, 176, 236, 85, 37, 9, 62 }, | |
287 { 190, 80, 35, 99, 180, 80, 126, 54, 45 }, | |
288 { 146, 36, 19, 30, 171, 255, 97, 27, 20 }, | |
289 { 71, 30, 17, 119, 118, 255, 17, 18, 138 }, | |
290 { 101, 38, 60, 138, 55, 70, 43, 26, 142 }, | |
291 { 32, 41, 20, 117, 151, 142, 20, 21, 163 }, | |
292 { 138, 45, 61, 62, 219, 1, 81, 188, 64 }, | |
293 { 112, 19, 12, 61, 195, 128, 48, 4, 24 }, | |
294 { 85, 126, 47, 87, 176, 51, 41, 20, 32 }, | |
295 }, | |
296 { | |
297 { 66, 102, 167, 99, 74, 62, 40, 234, 128 }, | |
298 { 41, 53, 9, 178, 241, 141, 26, 8, 107 }, | |
299 { 134, 183, 89, 137, 98, 101, 106, 165, 148 }, | |
300 { 104, 79, 12, 27, 217, 255, 87, 17, 7 }, | |
301 { 74, 43, 26, 146, 73, 166, 49, 23, 157 }, | |
302 { 65, 38, 105, 160, 51, 52, 31, 115, 128 }, | |
303 { 47, 41, 14, 110, 182, 183, 21, 17, 194 }, | |
304 { 87, 68, 71, 44, 114, 51, 15, 186, 23 }, | |
305 { 66, 45, 25, 102, 197, 189, 23, 18, 22 }, | |
306 { 72, 187, 100, 130, 157, 111, 32, 75, 80 }, | |
307 }, | |
308 }; | |
309 | |
310 static const int8_t vp8_segmentid_tree[][2] = | |
311 { | |
312 { 1, 2 }, | |
313 { -0, -1 }, // '00', '01' | |
314 { -2, -3 }, // '10', '11' | |
315 }; | |
316 | |
317 static const uint8_t vp8_coeff_band[16] = | |
318 { | |
319 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7 | |
320 }; | |
321 | |
322 static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 }; | |
323 static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 }; | |
324 static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 }; | |
325 static const uint8_t vp8_dct_cat4_prob[] = { 176, 155, 140, 135, 0 }; | |
326 static const uint8_t vp8_dct_cat5_prob[] = { 180, 157, 141, 134, 130, 0 }; | |
327 static const uint8_t vp8_dct_cat6_prob[] = { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 }; | |
328 | |
12253
112b3a0db187
Decode DCT tokens by branching to a different code path for each branch
conrad
parents:
12229
diff
changeset
|
329 // only used for cat3 and above; cat 1 and 2 are referenced directly |
112b3a0db187
Decode DCT tokens by branching to a different code path for each branch
conrad
parents:
12229
diff
changeset
|
330 static const uint8_t * const vp8_dct_cat_prob[] = |
11921 | 331 { |
332 vp8_dct_cat3_prob, | |
333 vp8_dct_cat4_prob, | |
334 vp8_dct_cat5_prob, | |
335 vp8_dct_cat6_prob, | |
336 }; | |
337 | |
338 static const uint8_t vp8_token_default_probs[4][8][3][NUM_DCT_TOKENS-1] = | |
339 { | |
340 { | |
341 { | |
342 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
343 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
344 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
345 }, | |
346 { | |
347 { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 }, | |
348 { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 }, | |
349 { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 }, | |
350 }, | |
351 { | |
352 { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 }, | |
353 { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 }, | |
354 { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 }, | |
355 }, | |
356 { | |
357 { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 }, | |
358 { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 }, | |
359 { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 }, | |
360 }, | |
361 { | |
362 { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 }, | |
363 { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 }, | |
364 { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 }, | |
365 }, | |
366 { | |
367 { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 }, | |
368 { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 }, | |
369 { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 }, | |
370 }, | |
371 { | |
372 { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 }, | |
373 { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 }, | |
374 { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 }, | |
375 }, | |
376 { | |
377 { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
378 { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
379 { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
380 }, | |
381 }, | |
382 { | |
383 { | |
384 { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 }, | |
385 { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 }, | |
386 { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 }, | |
387 }, | |
388 { | |
389 { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 }, | |
390 { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 }, | |
391 { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 }, | |
392 }, | |
393 { | |
394 { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 }, | |
395 { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 }, | |
396 { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 }, | |
397 }, | |
398 { | |
399 { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 }, | |
400 { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 }, | |
401 { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 }, | |
402 }, | |
403 { | |
404 { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 }, | |
405 { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 }, | |
406 { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 }, | |
407 }, | |
408 { | |
409 { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 }, | |
410 { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 }, | |
411 { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 }, | |
412 }, | |
413 { | |
414 { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 }, | |
415 { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 }, | |
416 { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 }, | |
417 }, | |
418 { | |
419 { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 }, | |
420 { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
421 { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 }, | |
422 }, | |
423 }, | |
424 { | |
425 { | |
426 { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 }, | |
427 { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 }, | |
428 { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 }, | |
429 }, | |
430 { | |
431 { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 }, | |
432 { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 }, | |
433 { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 }, | |
434 }, | |
435 { | |
436 { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 }, | |
437 { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 }, | |
438 { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 }, | |
439 }, | |
440 { | |
441 { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
442 { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 }, | |
443 { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
444 }, | |
445 { | |
446 { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
447 { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 }, | |
448 { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
449 }, | |
450 { | |
451 { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
452 { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
453 { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
454 }, | |
455 { | |
456 { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
457 { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
458 { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
459 }, | |
460 { | |
461 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
462 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
463 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
464 }, | |
465 }, | |
466 { | |
467 { | |
468 { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 }, | |
469 { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 }, | |
470 { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 }, | |
471 }, | |
472 { | |
473 { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 }, | |
474 { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 }, | |
475 { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 }, | |
476 }, | |
477 { | |
478 { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 }, | |
479 { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 }, | |
480 { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 }, | |
481 }, | |
482 { | |
483 { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 }, | |
484 { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 }, | |
485 { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 }, | |
486 }, | |
487 { | |
488 { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 }, | |
489 { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 }, | |
490 { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 }, | |
491 }, | |
492 { | |
493 { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 }, | |
494 { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 }, | |
495 { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 }, | |
496 }, | |
497 { | |
498 { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 }, | |
499 { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 }, | |
500 { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 }, | |
501 }, | |
502 { | |
503 { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
504 { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
505 { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
506 }, | |
507 }, | |
508 }; | |
509 | |
510 static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS-1] = | |
511 { | |
512 { | |
513 { | |
514 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
515 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
516 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
517 }, | |
518 { | |
519 { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
520 { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
521 { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
522 }, | |
523 { | |
524 { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
525 { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
526 { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
527 }, | |
528 { | |
529 { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
530 { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
531 { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
532 }, | |
533 { | |
534 { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
535 { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
536 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
537 }, | |
538 { | |
539 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
540 { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
541 { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
542 }, | |
543 { | |
544 { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 }, | |
545 { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 }, | |
546 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
547 }, | |
548 { | |
549 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
550 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
551 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
552 }, | |
553 }, | |
554 { | |
555 { | |
556 { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
557 { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 }, | |
558 { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 }, | |
559 }, | |
560 { | |
561 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
562 { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
563 { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 }, | |
564 }, | |
565 { | |
566 { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
567 { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
568 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
569 }, | |
570 { | |
571 { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
572 { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
573 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
574 }, | |
575 { | |
576 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
577 { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
578 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
579 }, | |
580 { | |
581 { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
582 { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
583 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
584 }, | |
585 { | |
586 { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
587 { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
588 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
589 }, | |
590 { | |
591 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
592 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
593 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
594 }, | |
595 }, | |
596 { | |
597 { | |
598 { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
599 { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 }, | |
600 { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 }, | |
601 }, | |
602 { | |
603 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
604 { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
605 { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 }, | |
606 }, | |
607 { | |
608 { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
609 { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
610 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
611 }, | |
612 { | |
613 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
614 { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
615 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
616 }, | |
617 { | |
618 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
619 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
620 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
621 }, | |
622 { | |
623 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
624 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
625 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
626 }, | |
627 { | |
628 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
629 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
630 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
631 }, | |
632 { | |
633 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
634 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
635 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
636 }, | |
637 }, | |
638 { | |
639 { | |
640 { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
641 { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 }, | |
642 { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 }, | |
643 }, | |
644 { | |
645 { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
646 { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
647 { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 }, | |
648 }, | |
649 { | |
650 { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
651 { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
652 { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 }, | |
653 }, | |
654 { | |
655 { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
656 { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
657 { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
658 }, | |
659 { | |
660 { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
661 { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
662 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
663 }, | |
664 { | |
665 { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
666 { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
667 { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
668 }, | |
669 { | |
670 { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
671 { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
672 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
673 }, | |
674 { | |
675 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
676 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
677 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
678 }, | |
679 }, | |
680 }; | |
681 | |
682 // fixme: copied from h264data.h | |
683 static const uint8_t zigzag_scan[16]={ | |
684 0+0*4, 1+0*4, 0+1*4, 0+2*4, | |
685 1+1*4, 2+0*4, 3+0*4, 2+1*4, | |
686 1+2*4, 0+3*4, 1+3*4, 2+2*4, | |
687 3+1*4, 3+2*4, 2+3*4, 3+3*4, | |
688 }; | |
689 | |
690 static const uint8_t vp8_dc_qlookup[VP8_MAX_QUANT+1] = | |
691 { | |
692 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, | |
693 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, | |
694 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, | |
695 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, | |
696 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, | |
697 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, | |
698 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, | |
699 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157, | |
700 }; | |
701 | |
702 static const uint16_t vp8_ac_qlookup[VP8_MAX_QUANT+1] = | |
703 { | |
704 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, | |
705 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, | |
706 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, | |
707 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, | |
708 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, | |
709 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, | |
710 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, | |
711 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284, | |
712 }; | |
713 | |
714 static const uint8_t vp8_mv_update_prob[2][19] = { | |
715 { 237, | |
716 246, | |
717 253, 253, 254, 254, 254, 254, 254, | |
718 254, 254, 254, 254, 254, 250, 250, 252, 254, 254 }, | |
719 { 231, | |
720 243, | |
721 245, 253, 254, 254, 254, 254, 254, | |
722 254, 254, 254, 254, 254, 251, 251, 254, 254, 254 } | |
723 }; | |
724 | |
725 static const uint8_t vp8_mv_default_prob[2][19] = { | |
726 { 162, | |
727 128, | |
728 225, 146, 172, 147, 214, 39, 156, | |
729 128, 129, 132, 75, 145, 178, 206, 239, 254, 254 }, | |
730 { 164, | |
731 128, | |
732 204, 170, 119, 235, 140, 230, 228, | |
733 128, 130, 130, 74, 148, 180, 203, 236, 254, 254 } | |
734 }; |