Mercurial > libavcodec.hg
annotate vp8data.h @ 12494:94eaea836bf4 libavcodec
Check avctx width/height more thoroughly (e.g. all values 0 except width would
have been accepted before).
Also do not fail if they are invalid but instead override them to 0.
This allows decoding e.g. MPEG video when only the container values are corrupted.
For encoding a value of 0,0 of course makes no sense, but was allowed
through before and will be caught by an extra check in the encode function.
author | reimar |
---|---|
date | Wed, 15 Sep 2010 04:46:55 +0000 |
parents | d596749eb0bc |
children |
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 | |
11989
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
58 enum inter_splitmvmode { |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
59 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
|
60 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
|
61 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
|
62 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
|
63 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
|
64 }; |
176c5deb6756
Optimize split MC, so we don't always do 4x4 blocks of 4x4pixels each, but
rbultje
parents:
11930
diff
changeset
|
65 |
11921 | 66 static const uint8_t vp8_pred4x4_mode[] = |
67 { | |
68 [DC_PRED8x8] = DC_PRED, | |
69 [VERT_PRED8x8] = VERT_PRED, | |
70 [HOR_PRED8x8] = HOR_PRED, | |
71 [PLANE_PRED8x8] = TM_VP8_PRED, | |
72 }; | |
73 | |
74 static const int8_t vp8_pred16x16_tree_intra[4][2] = | |
75 { | |
76 { -MODE_I4x4, 1 }, // '0' | |
77 { 2, 3 }, | |
78 { -DC_PRED8x8, -VERT_PRED8x8 }, // '100', '101' | |
79 { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111' | |
80 }; | |
81 | |
82 static const int8_t vp8_pred16x16_tree_inter[4][2] = | |
83 { | |
84 { -DC_PRED8x8, 1 }, // '0' | |
85 { 2, 3 }, | |
86 { -VERT_PRED8x8, -HOR_PRED8x8 }, // '100', '101' | |
87 { -PLANE_PRED8x8, -MODE_I4x4 }, // '110', '111' | |
88 }; | |
89 | |
90 static const int vp8_mode_contexts[6][4] = { | |
91 { 7, 1, 1, 143 }, | |
92 { 14, 18, 14, 107 }, | |
93 { 135, 64, 57, 68 }, | |
94 { 60, 56, 128, 65 }, | |
95 { 159, 134, 128, 34 }, | |
96 { 234, 188, 128, 28 }, | |
97 }; | |
98 | |
11990
3c51d7ac41c9
Simplify MV parsing, removes laying out 2 or 4 (16x8/8x8/8x16) MVs over all
rbultje
parents:
11989
diff
changeset
|
99 static const uint8_t vp8_mbsplits[5][16] = { |
11921 | 100 { 0, 0, 0, 0, 0, 0, 0, 0, |
101 1, 1, 1, 1, 1, 1, 1, 1 }, | |
102 { 0, 0, 1, 1, 0, 0, 1, 1, | |
103 0, 0, 1, 1, 0, 0, 1, 1 }, | |
104 { 0, 0, 1, 1, 0, 0, 1, 1, | |
105 2, 2, 3, 3, 2, 2, 3, 3 }, | |
106 { 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
|
107 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
|
108 { 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
|
109 0, 0, 0, 0, 0, 0, 0, 0 } |
11921 | 110 }; |
111 | |
112 static const uint8_t vp8_mbfirstidx[4][16] = { | |
113 { 0, 8 }, { 0, 2 }, { 0, 2, 8, 10 }, | |
114 { 0, 1, 2, 3, 4, 5, 6, 7, | |
115 8, 9, 10, 11, 12, 13, 14, 15 } | |
116 }; | |
117 | |
118 static const uint8_t vp8_mbsplit_count[4] = { 2, 2, 4, 16 }; | |
119 static const uint8_t vp8_mbsplit_prob[3] = { 110, 111, 150 }; | |
120 | |
121 static const uint8_t vp8_submv_prob[5][3] = { | |
122 { 147, 136, 18 }, | |
123 { 106, 145, 1 }, | |
124 { 179, 121, 1 }, | |
125 { 223, 1, 34 }, | |
126 { 208, 1, 1 } | |
127 }; | |
128 | |
129 static const uint8_t vp8_pred16x16_prob_intra[4] = { 145, 156, 163, 128 }; | |
130 static const uint8_t vp8_pred16x16_prob_inter[4] = { 112, 86, 140, 37 }; | |
131 | |
132 static const int8_t vp8_pred4x4_tree[9][2] = | |
133 { | |
134 { -DC_PRED, 1 }, // '0' | |
135 { -TM_VP8_PRED, 2 }, // '10' | |
136 { -VERT_PRED, 3 }, // '110' | |
137 { 4, 6 }, | |
138 { -HOR_PRED, 5 }, // '11100' | |
139 { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED }, // '111010', '111011' | |
140 { -DIAG_DOWN_LEFT_PRED, 7 }, // '11110' | |
141 { -VERT_LEFT_PRED, 8 }, // '111110' | |
142 { -HOR_DOWN_PRED, -HOR_UP_PRED }, // '1111110', '1111111' | |
143 }; | |
144 | |
145 static const int8_t vp8_pred8x8c_tree[3][2] = | |
146 { | |
147 { -DC_PRED8x8, 1 }, // '0' | |
148 { -VERT_PRED8x8, 2 }, // '10 | |
149 { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111' | |
150 }; | |
151 | |
152 static const uint8_t vp8_pred8x8c_prob_intra[3] = { 142, 114, 183 }; | |
153 static const uint8_t vp8_pred8x8c_prob_inter[3] = { 162, 101, 204 }; | |
154 | |
155 static const uint8_t vp8_pred4x4_prob_inter[9] = | |
156 { | |
157 120, 90, 79, 133, 87, 85, 80, 111, 151 | |
158 }; | |
159 | |
160 static const uint8_t vp8_pred4x4_prob_intra[10][10][9] = | |
161 { | |
162 { | |
163 { 39, 53, 200, 87, 26, 21, 43, 232, 171 }, | |
164 { 56, 34, 51, 104, 114, 102, 29, 93, 77 }, | |
165 { 88, 88, 147, 150, 42, 46, 45, 196, 205 }, | |
166 { 107, 54, 32, 26, 51, 1, 81, 43, 31 }, | |
167 { 39, 28, 85, 171, 58, 165, 90, 98, 64 }, | |
168 { 34, 22, 116, 206, 23, 34, 43, 166, 73 }, | |
169 { 34, 19, 21, 102, 132, 188, 16, 76, 124 }, | |
170 { 68, 25, 106, 22, 64, 171, 36, 225, 114 }, | |
171 { 62, 18, 78, 95, 85, 57, 50, 48, 51 }, | |
172 { 43, 97, 183, 117, 85, 38, 35, 179, 61 }, | |
173 }, | |
174 { | |
175 { 112, 113, 77, 85, 179, 255, 38, 120, 114 }, | |
176 { 40, 42, 1, 196, 245, 209, 10, 25, 109 }, | |
177 { 193, 101, 35, 159, 215, 111, 89, 46, 111 }, | |
178 { 100, 80, 8, 43, 154, 1, 51, 26, 71 }, | |
179 { 88, 43, 29, 140, 166, 213, 37, 43, 154 }, | |
180 { 61, 63, 30, 155, 67, 45, 68, 1, 209 }, | |
181 { 41, 40, 5, 102, 211, 183, 4, 1, 221 }, | |
182 { 142, 78, 78, 16, 255, 128, 34, 197, 171 }, | |
183 { 51, 50, 17, 168, 209, 192, 23, 25, 82 }, | |
184 { 60, 148, 31, 172, 219, 228, 21, 18, 111 }, | |
185 }, | |
186 { | |
187 { 175, 69, 143, 80, 85, 82, 72, 155, 103 }, | |
188 { 56, 58, 10, 171, 218, 189, 17, 13, 152 }, | |
189 { 231, 120, 48, 89, 115, 113, 120, 152, 112 }, | |
190 { 144, 71, 10, 38, 171, 213, 144, 34, 26 }, | |
191 { 114, 26, 17, 163, 44, 195, 21, 10, 173 }, | |
192 { 121, 24, 80, 195, 26, 62, 44, 64, 85 }, | |
193 { 63, 20, 8, 114, 114, 208, 12, 9, 226 }, | |
194 { 170, 46, 55, 19, 136, 160, 33, 206, 71 }, | |
195 { 81, 40, 11, 96, 182, 84, 29, 16, 36 }, | |
196 { 152, 179, 64, 126, 170, 118, 46, 70, 95 }, | |
197 }, | |
198 { | |
199 { 75, 79, 123, 47, 51, 128, 81, 171, 1 }, | |
200 { 57, 17, 5, 71, 102, 57, 53, 41, 49 }, | |
201 { 125, 98, 42, 88, 104, 85, 117, 175, 82 }, | |
202 { 115, 21, 2, 10, 102, 255, 166, 23, 6 }, | |
203 { 38, 33, 13, 121, 57, 73, 26, 1, 85 }, | |
204 { 41, 10, 67, 138, 77, 110, 90, 47, 114 }, | |
205 { 57, 18, 10, 102, 102, 213, 34, 20, 43 }, | |
206 { 101, 29, 16, 10, 85, 128, 101, 196, 26 }, | |
207 { 117, 20, 15, 36, 163, 128, 68, 1, 26 }, | |
208 { 95, 84, 53, 89, 128, 100, 113, 101, 45 }, | |
209 }, | |
210 { | |
211 { 63, 59, 90, 180, 59, 166, 93, 73, 154 }, | |
212 { 40, 40, 21, 116, 143, 209, 34, 39, 175 }, | |
213 { 138, 31, 36, 171, 27, 166, 38, 44, 229 }, | |
214 { 57, 46, 22, 24, 128, 1, 54, 17, 37 }, | |
215 { 47, 15, 16, 183, 34, 223, 49, 45, 183 }, | |
216 { 46, 17, 33, 183, 6, 98, 15, 32, 183 }, | |
217 { 40, 3, 9, 115, 51, 192, 18, 6, 223 }, | |
218 { 65, 32, 73, 115, 28, 128, 23, 128, 205 }, | |
219 { 87, 37, 9, 115, 59, 77, 64, 21, 47 }, | |
220 { 67, 87, 58, 169, 82, 115, 26, 59, 179 }, | |
221 }, | |
222 { | |
223 { 54, 57, 112, 184, 5, 41, 38, 166, 213 }, | |
224 { 30, 34, 26, 133, 152, 116, 10, 32, 134 }, | |
225 { 104, 55, 44, 218, 9, 54, 53, 130, 226 }, | |
226 { 75, 32, 12, 51, 192, 255, 160, 43, 51 }, | |
227 { 39, 19, 53, 221, 26, 114, 32, 73, 255 }, | |
228 { 31, 9, 65, 234, 2, 15, 1, 118, 73 }, | |
229 { 56, 21, 23, 111, 59, 205, 45, 37, 192 }, | |
230 { 88, 31, 35, 67, 102, 85, 55, 186, 85 }, | |
231 { 55, 38, 70, 124, 73, 102, 1, 34, 98 }, | |
232 { 64, 90, 70, 205, 40, 41, 23, 26, 57 }, | |
233 }, | |
234 { | |
235 { 86, 40, 64, 135, 148, 224, 45, 183, 128 }, | |
236 { 22, 26, 17, 131, 240, 154, 14, 1, 209 }, | |
237 { 164, 50, 31, 137, 154, 133, 25, 35, 218 }, | |
238 { 83, 12, 13, 54, 192, 255, 68, 47, 28 }, | |
239 { 45, 16, 21, 91, 64, 222, 7, 1, 197 }, | |
240 { 56, 21, 39, 155, 60, 138, 23, 102, 213 }, | |
241 { 18, 11, 7, 63, 144, 171, 4, 4, 246 }, | |
242 { 85, 26, 85, 85, 128, 128, 32, 146, 171 }, | |
243 { 35, 27, 10, 146, 174, 171, 12, 26, 128 }, | |
244 { 51, 103, 44, 131, 131, 123, 31, 6, 158 }, | |
245 }, | |
246 { | |
247 { 68, 45, 128, 34, 1, 47, 11, 245, 171 }, | |
248 { 62, 17, 19, 70, 146, 85, 55, 62, 70 }, | |
249 { 102, 61, 71, 37, 34, 53, 31, 243, 192 }, | |
250 { 75, 15, 9, 9, 64, 255, 184, 119, 16 }, | |
251 { 37, 43, 37, 154, 100, 163, 85, 160, 1 }, | |
252 { 63, 9, 92, 136, 28, 64, 32, 201, 85 }, | |
253 { 56, 8, 17, 132, 137, 255, 55, 116, 128 }, | |
254 { 86, 6, 28, 5, 64, 255, 25, 248, 1 }, | |
255 { 58, 15, 20, 82, 135, 57, 26, 121, 40 }, | |
256 { 69, 60, 71, 38, 73, 119, 28, 222, 37 }, | |
257 }, | |
258 { | |
259 { 101, 75, 128, 139, 118, 146, 116, 128, 85 }, | |
260 { 56, 41, 15, 176, 236, 85, 37, 9, 62 }, | |
261 { 190, 80, 35, 99, 180, 80, 126, 54, 45 }, | |
262 { 146, 36, 19, 30, 171, 255, 97, 27, 20 }, | |
263 { 71, 30, 17, 119, 118, 255, 17, 18, 138 }, | |
264 { 101, 38, 60, 138, 55, 70, 43, 26, 142 }, | |
265 { 32, 41, 20, 117, 151, 142, 20, 21, 163 }, | |
266 { 138, 45, 61, 62, 219, 1, 81, 188, 64 }, | |
267 { 112, 19, 12, 61, 195, 128, 48, 4, 24 }, | |
268 { 85, 126, 47, 87, 176, 51, 41, 20, 32 }, | |
269 }, | |
270 { | |
271 { 66, 102, 167, 99, 74, 62, 40, 234, 128 }, | |
272 { 41, 53, 9, 178, 241, 141, 26, 8, 107 }, | |
273 { 134, 183, 89, 137, 98, 101, 106, 165, 148 }, | |
274 { 104, 79, 12, 27, 217, 255, 87, 17, 7 }, | |
275 { 74, 43, 26, 146, 73, 166, 49, 23, 157 }, | |
276 { 65, 38, 105, 160, 51, 52, 31, 115, 128 }, | |
277 { 47, 41, 14, 110, 182, 183, 21, 17, 194 }, | |
278 { 87, 68, 71, 44, 114, 51, 15, 186, 23 }, | |
279 { 66, 45, 25, 102, 197, 189, 23, 18, 22 }, | |
280 { 72, 187, 100, 130, 157, 111, 32, 75, 80 }, | |
281 }, | |
282 }; | |
283 | |
284 static const int8_t vp8_segmentid_tree[][2] = | |
285 { | |
286 { 1, 2 }, | |
287 { -0, -1 }, // '00', '01' | |
288 { -2, -3 }, // '10', '11' | |
289 }; | |
290 | |
12343
a18ab740d2db
VP8: eliminate a dereference in coefficient decoding
darkshikari
parents:
12336
diff
changeset
|
291 static const uint8_t vp8_coeff_band[16] = |
11921 | 292 { |
12343
a18ab740d2db
VP8: eliminate a dereference in coefficient decoding
darkshikari
parents:
12336
diff
changeset
|
293 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7 |
11921 | 294 }; |
295 | |
12358
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
296 /* Inverse of vp8_coeff_band: mappings of bands to coefficient indexes. |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
297 * Each list is -1-terminated. */ |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
298 static const int8_t vp8_coeff_band_indexes[8][10] = |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
299 { |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
300 {0, -1}, |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
301 {1, -1}, |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
302 {2, -1}, |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
303 {3, -1}, |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
304 {5, -1}, |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
305 {6, -1}, |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
306 {4, 7, 8, 9, 10, 11, 12, 13, 14, -1}, |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
307 {15, -1} |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
308 }; |
d596749eb0bc
VP8: slightly faster DCT coefficient probability update
darkshikari
parents:
12352
diff
changeset
|
309 |
11921 | 310 static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 }; |
311 static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 }; | |
312 static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 }; | |
313 static const uint8_t vp8_dct_cat4_prob[] = { 176, 155, 140, 135, 0 }; | |
314 static const uint8_t vp8_dct_cat5_prob[] = { 180, 157, 141, 134, 130, 0 }; | |
315 static const uint8_t vp8_dct_cat6_prob[] = { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 }; | |
316 | |
12253
112b3a0db187
Decode DCT tokens by branching to a different code path for each branch
conrad
parents:
12229
diff
changeset
|
317 // 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
|
318 static const uint8_t * const vp8_dct_cat_prob[] = |
11921 | 319 { |
320 vp8_dct_cat3_prob, | |
321 vp8_dct_cat4_prob, | |
322 vp8_dct_cat5_prob, | |
323 vp8_dct_cat6_prob, | |
324 }; | |
325 | |
326 static const uint8_t vp8_token_default_probs[4][8][3][NUM_DCT_TOKENS-1] = | |
327 { | |
328 { | |
329 { | |
330 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
331 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
332 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
333 }, | |
334 { | |
335 { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 }, | |
336 { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 }, | |
337 { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 }, | |
338 }, | |
339 { | |
340 { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 }, | |
341 { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 }, | |
342 { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 }, | |
343 }, | |
344 { | |
345 { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 }, | |
346 { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 }, | |
347 { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 }, | |
348 }, | |
349 { | |
350 { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 }, | |
351 { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 }, | |
352 { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 }, | |
353 }, | |
354 { | |
355 { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 }, | |
356 { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 }, | |
357 { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 }, | |
358 }, | |
359 { | |
360 { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 }, | |
361 { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 }, | |
362 { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 }, | |
363 }, | |
364 { | |
365 { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
366 { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
367 { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
368 }, | |
369 }, | |
370 { | |
371 { | |
372 { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 }, | |
373 { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 }, | |
374 { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 }, | |
375 }, | |
376 { | |
377 { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 }, | |
378 { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 }, | |
379 { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 }, | |
380 }, | |
381 { | |
382 { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 }, | |
383 { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 }, | |
384 { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 }, | |
385 }, | |
386 { | |
387 { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 }, | |
388 { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 }, | |
389 { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 }, | |
390 }, | |
391 { | |
392 { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 }, | |
393 { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 }, | |
394 { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 }, | |
395 }, | |
396 { | |
397 { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 }, | |
398 { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 }, | |
399 { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 }, | |
400 }, | |
401 { | |
402 { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 }, | |
403 { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 }, | |
404 { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 }, | |
405 }, | |
406 { | |
407 { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 }, | |
408 { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
409 { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 }, | |
410 }, | |
411 }, | |
412 { | |
413 { | |
414 { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 }, | |
415 { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 }, | |
416 { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 }, | |
417 }, | |
418 { | |
419 { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 }, | |
420 { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 }, | |
421 { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 }, | |
422 }, | |
423 { | |
424 { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 }, | |
425 { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 }, | |
426 { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 }, | |
427 }, | |
428 { | |
429 { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
430 { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 }, | |
431 { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
432 }, | |
433 { | |
434 { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
435 { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 }, | |
436 { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
437 }, | |
438 { | |
439 { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
440 { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
441 { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
442 }, | |
443 { | |
444 { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
445 { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 }, | |
446 { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
447 }, | |
448 { | |
449 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
450 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
451 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
452 }, | |
453 }, | |
454 { | |
455 { | |
456 { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 }, | |
457 { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 }, | |
458 { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 }, | |
459 }, | |
460 { | |
461 { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 }, | |
462 { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 }, | |
463 { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 }, | |
464 }, | |
465 { | |
466 { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 }, | |
467 { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 }, | |
468 { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 }, | |
469 }, | |
470 { | |
471 { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 }, | |
472 { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 }, | |
473 { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 }, | |
474 }, | |
475 { | |
476 { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 }, | |
477 { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 }, | |
478 { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 }, | |
479 }, | |
480 { | |
481 { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 }, | |
482 { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 }, | |
483 { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 }, | |
484 }, | |
485 { | |
486 { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 }, | |
487 { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 }, | |
488 { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 }, | |
489 }, | |
490 { | |
491 { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
492 { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
493 { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, | |
494 }, | |
495 }, | |
496 }; | |
497 | |
498 static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS-1] = | |
499 { | |
500 { | |
501 { | |
502 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
503 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
504 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
505 }, | |
506 { | |
507 { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
508 { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
509 { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
510 }, | |
511 { | |
512 { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
513 { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
514 { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
515 }, | |
516 { | |
517 { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
518 { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
519 { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
520 }, | |
521 { | |
522 { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
523 { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
524 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
525 }, | |
526 { | |
527 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
528 { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
529 { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
530 }, | |
531 { | |
532 { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 }, | |
533 { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 }, | |
534 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
535 }, | |
536 { | |
537 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
538 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
539 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
540 }, | |
541 }, | |
542 { | |
543 { | |
544 { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
545 { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 }, | |
546 { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 }, | |
547 }, | |
548 { | |
549 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
550 { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
551 { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 }, | |
552 }, | |
553 { | |
554 { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
555 { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
556 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
557 }, | |
558 { | |
559 { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
560 { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
561 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
562 }, | |
563 { | |
564 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
565 { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
566 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
567 }, | |
568 { | |
569 { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
570 { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
571 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
572 }, | |
573 { | |
574 { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
575 { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
576 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
577 }, | |
578 { | |
579 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
580 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
581 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
582 }, | |
583 }, | |
584 { | |
585 { | |
586 { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
587 { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 }, | |
588 { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 }, | |
589 }, | |
590 { | |
591 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
592 { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
593 { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 }, | |
594 }, | |
595 { | |
596 { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
597 { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
598 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
599 }, | |
600 { | |
601 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
602 { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
603 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
604 }, | |
605 { | |
606 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
607 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
608 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
609 }, | |
610 { | |
611 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
612 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
613 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
614 }, | |
615 { | |
616 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
617 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
618 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
619 }, | |
620 { | |
621 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
622 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
623 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
624 }, | |
625 }, | |
626 { | |
627 { | |
628 { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
629 { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 }, | |
630 { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 }, | |
631 }, | |
632 { | |
633 { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
634 { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
635 { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 }, | |
636 }, | |
637 { | |
638 { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
639 { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
640 { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 }, | |
641 }, | |
642 { | |
643 { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
644 { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
645 { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
646 }, | |
647 { | |
648 { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
649 { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
650 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
651 }, | |
652 { | |
653 { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
654 { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
655 { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
656 }, | |
657 { | |
658 { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
659 { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
660 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
661 }, | |
662 { | |
663 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
664 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
665 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, | |
666 }, | |
667 }, | |
668 }; | |
669 | |
670 // fixme: copied from h264data.h | |
671 static const uint8_t zigzag_scan[16]={ | |
672 0+0*4, 1+0*4, 0+1*4, 0+2*4, | |
673 1+1*4, 2+0*4, 3+0*4, 2+1*4, | |
674 1+2*4, 0+3*4, 1+3*4, 2+2*4, | |
675 3+1*4, 3+2*4, 2+3*4, 3+3*4, | |
676 }; | |
677 | |
678 static const uint8_t vp8_dc_qlookup[VP8_MAX_QUANT+1] = | |
679 { | |
680 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, | |
681 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, | |
682 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, | |
683 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, | |
684 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, | |
685 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, | |
686 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, | |
687 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157, | |
688 }; | |
689 | |
690 static const uint16_t vp8_ac_qlookup[VP8_MAX_QUANT+1] = | |
691 { | |
692 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, | |
693 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, | |
694 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, | |
695 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, | |
696 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, | |
697 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, | |
698 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, | |
699 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284, | |
700 }; | |
701 | |
702 static const uint8_t vp8_mv_update_prob[2][19] = { | |
703 { 237, | |
704 246, | |
705 253, 253, 254, 254, 254, 254, 254, | |
706 254, 254, 254, 254, 254, 250, 250, 252, 254, 254 }, | |
707 { 231, | |
708 243, | |
709 245, 253, 254, 254, 254, 254, 254, | |
710 254, 254, 254, 254, 254, 251, 251, 254, 254, 254 } | |
711 }; | |
712 | |
713 static const uint8_t vp8_mv_default_prob[2][19] = { | |
714 { 162, | |
715 128, | |
716 225, 146, 172, 147, 214, 39, 156, | |
717 128, 129, 132, 75, 145, 178, 206, 239, 254, 254 }, | |
718 { 164, | |
719 128, | |
720 204, 170, 119, 235, 140, 230, 228, | |
721 128, 130, 130, 74, 148, 180, 203, 236, 254, 254 } | |
722 }; |