1 /* 2 * Copyright (C) 2010 David Conrad 3 * Copyright (C) 2010 Ronald S. Bultje 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 * VP8 compatible video decoder 25 */ 26 27 #ifndef AVCODEC_VP8DATA_H 28 #define AVCODEC_VP8DATA_H 29 30 #include "vp8.h" 31 #include "h264pred.h" 32 33 static const uint8_t vp7_pred4x4_mode[] = { 34 [DC_PRED8x8] = DC_PRED, 35 [VERT_PRED8x8] = TM_VP8_PRED, 36 [HOR_PRED8x8] = TM_VP8_PRED, 37 [PLANE_PRED8x8] = TM_VP8_PRED, 38 }; 39 40 static const uint8_t vp8_pred4x4_mode[] = { 41 [DC_PRED8x8] = DC_PRED, 42 [VERT_PRED8x8] = VERT_PRED, 43 [HOR_PRED8x8] = HOR_PRED, 44 [PLANE_PRED8x8] = TM_VP8_PRED, 45 }; 46 47 static const int8_t vp8_pred16x16_tree_intra[4][2] = { 48 { -MODE_I4x4, 1 }, // '0' 49 { 2, 3 }, 50 { -DC_PRED8x8, -VERT_PRED8x8 }, // '100', '101' 51 { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111' 52 }; 53 54 static const int8_t vp8_pred16x16_tree_inter[4][2] = { 55 { -DC_PRED8x8, 1 }, // '0' 56 { 2, 3 }, 57 { -VERT_PRED8x8, -HOR_PRED8x8 }, // '100', '101' 58 { -PLANE_PRED8x8, -MODE_I4x4 }, // '110', '111' 59 }; 60 61 typedef struct VP7MVPred { 62 int8_t yoffset; 63 int8_t xoffset; 64 uint8_t subblock; 65 uint8_t score; 66 } VP7MVPred; 67 68 #define VP7_MV_PRED_COUNT 12 69 static const VP7MVPred vp7_mv_pred[VP7_MV_PRED_COUNT] = { 70 { -1, 0, 12, 8 }, 71 { 0, -1, 3, 8 }, 72 { -1, -1, 15, 2 }, 73 { -1, 1, 12, 2 }, 74 { -2, 0, 12, 2 }, 75 { 0, -2, 3, 2 }, 76 { -1, -2, 15, 1 }, 77 { -2, -1, 15, 1 }, 78 { -2, 1, 12, 1 }, 79 { -1, 2, 12, 1 }, 80 { -2, -2, 15, 1 }, 81 { -2, 2, 12, 1 }, 82 }; 83 84 static const int vp7_mode_contexts[31][4] = { 85 { 3, 3, 1, 246 }, 86 { 7, 89, 66, 239 }, 87 { 10, 90, 78, 238 }, 88 { 14, 118, 95, 241 }, 89 { 14, 123, 106, 238 }, 90 { 20, 140, 109, 240 }, 91 { 13, 155, 103, 238 }, 92 { 21, 158, 99, 240 }, 93 { 27, 82, 108, 232 }, 94 { 19, 99, 123, 217 }, 95 { 45, 139, 148, 236 }, 96 { 50, 117, 144, 235 }, 97 { 57, 128, 164, 238 }, 98 { 69, 139, 171, 239 }, 99 { 74, 154, 179, 238 }, 100 { 112, 165, 186, 242 }, 101 { 98, 143, 185, 245 }, 102 { 105, 153, 190, 250 }, 103 { 124, 167, 192, 245 }, 104 { 131, 186, 203, 246 }, 105 { 59, 184, 222, 224 }, 106 { 148, 215, 214, 213 }, 107 { 137, 211, 210, 219 }, 108 { 190, 227, 128, 228 }, 109 { 183, 228, 128, 228 }, 110 { 194, 234, 128, 228 }, 111 { 202, 236, 128, 228 }, 112 { 205, 240, 128, 228 }, 113 { 205, 244, 128, 228 }, 114 { 225, 246, 128, 228 }, 115 { 233, 251, 128, 228 }, 116 }; 117 118 static const int vp8_mode_contexts[6][4] = { 119 { 7, 1, 1, 143 }, 120 { 14, 18, 14, 107 }, 121 { 135, 64, 57, 68 }, 122 { 60, 56, 128, 65 }, 123 { 159, 134, 128, 34 }, 124 { 234, 188, 128, 28 }, 125 }; 126 127 static const uint8_t vp8_mbsplits[5][16] = { 128 { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }, 129 { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, 130 { 0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3 }, 131 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, 132 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } 133 }; 134 135 static const uint8_t vp8_mbfirstidx[4][16] = { 136 { 0, 8 }, 137 { 0, 2 }, 138 { 0, 2, 8, 10 }, 139 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } 140 }; 141 142 static const uint8_t vp8_mbsplit_count[4] = { 143 2, 2, 4, 16 144 }; 145 static const uint8_t vp8_mbsplit_prob[3] = { 146 110, 111, 150 147 }; 148 149 static const uint8_t vp7_submv_prob[3] = { 150 180, 162, 25 151 }; 152 153 static const uint8_t vp8_submv_prob[5][3] = { 154 { 147, 136, 18 }, 155 { 106, 145, 1 }, 156 { 179, 121, 1 }, 157 { 223, 1, 34 }, 158 { 208, 1, 1 } 159 }; 160 161 static const uint8_t vp8_pred16x16_prob_intra[4] = { 162 145, 156, 163, 128 163 }; 164 static const uint8_t vp8_pred16x16_prob_inter[4] = { 165 112, 86, 140, 37 166 }; 167 168 static const int8_t vp8_pred4x4_tree[9][2] = { 169 { -DC_PRED, 1 }, // '0' 170 { -TM_VP8_PRED, 2 }, // '10' 171 { -VERT_PRED, 3 }, // '110' 172 { 4, 6 }, 173 { -HOR_PRED, 5 }, // '11100' 174 { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED }, // '111010', '111011' 175 { -DIAG_DOWN_LEFT_PRED, 7 }, // '11110' 176 { -VERT_LEFT_PRED, 8 }, // '111110' 177 { -HOR_DOWN_PRED, -HOR_UP_PRED }, // '1111110', '1111111' 178 }; 179 180 static const int8_t vp8_pred8x8c_tree[3][2] = { 181 { -DC_PRED8x8, 1 }, // '0' 182 { -VERT_PRED8x8, 2 }, // '10 183 { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111' 184 }; 185 186 static const uint8_t vp8_pred8x8c_prob_intra[3] = { 187 142, 114, 183 188 }; 189 static const uint8_t vp8_pred8x8c_prob_inter[3] = { 190 162, 101, 204 191 }; 192 static const uint8_t vp8_pred4x4_prob_inter[9] = { 193 120, 90, 79, 133, 87, 85, 80, 111, 151 194 }; 195 196 static const uint8_t vp8_pred4x4_prob_intra[10][10][9] = { 197 { 198 { 39, 53, 200, 87, 26, 21, 43, 232, 171 }, 199 { 56, 34, 51, 104, 114, 102, 29, 93, 77 }, 200 { 88, 88, 147, 150, 42, 46, 45, 196, 205 }, 201 { 107, 54, 32, 26, 51, 1, 81, 43, 31 }, 202 { 39, 28, 85, 171, 58, 165, 90, 98, 64 }, 203 { 34, 22, 116, 206, 23, 34, 43, 166, 73 }, 204 { 34, 19, 21, 102, 132, 188, 16, 76, 124 }, 205 { 68, 25, 106, 22, 64, 171, 36, 225, 114 }, 206 { 62, 18, 78, 95, 85, 57, 50, 48, 51 }, 207 { 43, 97, 183, 117, 85, 38, 35, 179, 61 }, 208 }, 209 { 210 { 112, 113, 77, 85, 179, 255, 38, 120, 114 }, 211 { 40, 42, 1, 196, 245, 209, 10, 25, 109 }, 212 { 193, 101, 35, 159, 215, 111, 89, 46, 111 }, 213 { 100, 80, 8, 43, 154, 1, 51, 26, 71 }, 214 { 88, 43, 29, 140, 166, 213, 37, 43, 154 }, 215 { 61, 63, 30, 155, 67, 45, 68, 1, 209 }, 216 { 41, 40, 5, 102, 211, 183, 4, 1, 221 }, 217 { 142, 78, 78, 16, 255, 128, 34, 197, 171 }, 218 { 51, 50, 17, 168, 209, 192, 23, 25, 82 }, 219 { 60, 148, 31, 172, 219, 228, 21, 18, 111 }, 220 }, 221 { 222 { 175, 69, 143, 80, 85, 82, 72, 155, 103 }, 223 { 56, 58, 10, 171, 218, 189, 17, 13, 152 }, 224 { 231, 120, 48, 89, 115, 113, 120, 152, 112 }, 225 { 144, 71, 10, 38, 171, 213, 144, 34, 26 }, 226 { 114, 26, 17, 163, 44, 195, 21, 10, 173 }, 227 { 121, 24, 80, 195, 26, 62, 44, 64, 85 }, 228 { 63, 20, 8, 114, 114, 208, 12, 9, 226 }, 229 { 170, 46, 55, 19, 136, 160, 33, 206, 71 }, 230 { 81, 40, 11, 96, 182, 84, 29, 16, 36 }, 231 { 152, 179, 64, 126, 170, 118, 46, 70, 95 }, 232 }, 233 { 234 { 75, 79, 123, 47, 51, 128, 81, 171, 1 }, 235 { 57, 17, 5, 71, 102, 57, 53, 41, 49 }, 236 { 125, 98, 42, 88, 104, 85, 117, 175, 82 }, 237 { 115, 21, 2, 10, 102, 255, 166, 23, 6 }, 238 { 38, 33, 13, 121, 57, 73, 26, 1, 85 }, 239 { 41, 10, 67, 138, 77, 110, 90, 47, 114 }, 240 { 57, 18, 10, 102, 102, 213, 34, 20, 43 }, 241 { 101, 29, 16, 10, 85, 128, 101, 196, 26 }, 242 { 117, 20, 15, 36, 163, 128, 68, 1, 26 }, 243 { 95, 84, 53, 89, 128, 100, 113, 101, 45 }, 244 }, 245 { 246 { 63, 59, 90, 180, 59, 166, 93, 73, 154 }, 247 { 40, 40, 21, 116, 143, 209, 34, 39, 175 }, 248 { 138, 31, 36, 171, 27, 166, 38, 44, 229 }, 249 { 57, 46, 22, 24, 128, 1, 54, 17, 37 }, 250 { 47, 15, 16, 183, 34, 223, 49, 45, 183 }, 251 { 46, 17, 33, 183, 6, 98, 15, 32, 183 }, 252 { 40, 3, 9, 115, 51, 192, 18, 6, 223 }, 253 { 65, 32, 73, 115, 28, 128, 23, 128, 205 }, 254 { 87, 37, 9, 115, 59, 77, 64, 21, 47 }, 255 { 67, 87, 58, 169, 82, 115, 26, 59, 179 }, 256 }, 257 { 258 { 54, 57, 112, 184, 5, 41, 38, 166, 213 }, 259 { 30, 34, 26, 133, 152, 116, 10, 32, 134 }, 260 { 104, 55, 44, 218, 9, 54, 53, 130, 226 }, 261 { 75, 32, 12, 51, 192, 255, 160, 43, 51 }, 262 { 39, 19, 53, 221, 26, 114, 32, 73, 255 }, 263 { 31, 9, 65, 234, 2, 15, 1, 118, 73 }, 264 { 56, 21, 23, 111, 59, 205, 45, 37, 192 }, 265 { 88, 31, 35, 67, 102, 85, 55, 186, 85 }, 266 { 55, 38, 70, 124, 73, 102, 1, 34, 98 }, 267 { 64, 90, 70, 205, 40, 41, 23, 26, 57 }, 268 }, 269 { 270 { 86, 40, 64, 135, 148, 224, 45, 183, 128 }, 271 { 22, 26, 17, 131, 240, 154, 14, 1, 209 }, 272 { 164, 50, 31, 137, 154, 133, 25, 35, 218 }, 273 { 83, 12, 13, 54, 192, 255, 68, 47, 28 }, 274 { 45, 16, 21, 91, 64, 222, 7, 1, 197 }, 275 { 56, 21, 39, 155, 60, 138, 23, 102, 213 }, 276 { 18, 11, 7, 63, 144, 171, 4, 4, 246 }, 277 { 85, 26, 85, 85, 128, 128, 32, 146, 171 }, 278 { 35, 27, 10, 146, 174, 171, 12, 26, 128 }, 279 { 51, 103, 44, 131, 131, 123, 31, 6, 158 }, 280 }, 281 { 282 { 68, 45, 128, 34, 1, 47, 11, 245, 171 }, 283 { 62, 17, 19, 70, 146, 85, 55, 62, 70 }, 284 { 102, 61, 71, 37, 34, 53, 31, 243, 192 }, 285 { 75, 15, 9, 9, 64, 255, 184, 119, 16 }, 286 { 37, 43, 37, 154, 100, 163, 85, 160, 1 }, 287 { 63, 9, 92, 136, 28, 64, 32, 201, 85 }, 288 { 56, 8, 17, 132, 137, 255, 55, 116, 128 }, 289 { 86, 6, 28, 5, 64, 255, 25, 248, 1 }, 290 { 58, 15, 20, 82, 135, 57, 26, 121, 40 }, 291 { 69, 60, 71, 38, 73, 119, 28, 222, 37 }, 292 }, 293 { 294 { 101, 75, 128, 139, 118, 146, 116, 128, 85 }, 295 { 56, 41, 15, 176, 236, 85, 37, 9, 62 }, 296 { 190, 80, 35, 99, 180, 80, 126, 54, 45 }, 297 { 146, 36, 19, 30, 171, 255, 97, 27, 20 }, 298 { 71, 30, 17, 119, 118, 255, 17, 18, 138 }, 299 { 101, 38, 60, 138, 55, 70, 43, 26, 142 }, 300 { 32, 41, 20, 117, 151, 142, 20, 21, 163 }, 301 { 138, 45, 61, 62, 219, 1, 81, 188, 64 }, 302 { 112, 19, 12, 61, 195, 128, 48, 4, 24 }, 303 { 85, 126, 47, 87, 176, 51, 41, 20, 32 }, 304 }, 305 { 306 { 66, 102, 167, 99, 74, 62, 40, 234, 128 }, 307 { 41, 53, 9, 178, 241, 141, 26, 8, 107 }, 308 { 134, 183, 89, 137, 98, 101, 106, 165, 148 }, 309 { 104, 79, 12, 27, 217, 255, 87, 17, 7 }, 310 { 74, 43, 26, 146, 73, 166, 49, 23, 157 }, 311 { 65, 38, 105, 160, 51, 52, 31, 115, 128 }, 312 { 47, 41, 14, 110, 182, 183, 21, 17, 194 }, 313 { 87, 68, 71, 44, 114, 51, 15, 186, 23 }, 314 { 66, 45, 25, 102, 197, 189, 23, 18, 22 }, 315 { 72, 187, 100, 130, 157, 111, 32, 75, 80 }, 316 }, 317 }; 318 319 static const int8_t vp8_segmentid_tree[][2] = { 320 { 1, 2 }, 321 { -0, -1 }, // '00', '01' 322 { -2, -3 }, // '10', '11' 323 }; 324 325 static const uint8_t vp8_coeff_band[16] = { 326 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7 327 }; 328 329 /* Inverse of vp8_coeff_band: mappings of bands to coefficient indexes. 330 * Each list is -1-terminated. */ 331 static const int8_t vp8_coeff_band_indexes[8][10] = { 332 { 0, -1 }, 333 { 1, -1 }, 334 { 2, -1 }, 335 { 3, -1 }, 336 { 5, -1 }, 337 { 6, -1 }, 338 { 4, 7, 8, 9, 10, 11, 12, 13, 14, -1 }, 339 { 15, -1 } 340 }; 341 342 static const uint8_t vp8_dct_cat1_prob[] = { 343 159, 0 344 }; 345 static const uint8_t vp8_dct_cat2_prob[] = { 346 165, 145, 0 347 }; 348 static const uint8_t vp8_dct_cat3_prob[] = { 349 173, 148, 140, 0 350 }; 351 static const uint8_t vp8_dct_cat4_prob[] = { 352 176, 155, 140, 135, 0 353 }; 354 static const uint8_t vp8_dct_cat5_prob[] = { 355 180, 157, 141, 134, 130, 0 356 }; 357 static const uint8_t vp8_dct_cat6_prob[] = { 358 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 359 }; 360 361 // only used for cat3 and above; cat 1 and 2 are referenced directly 362 const uint8_t *const ff_vp8_dct_cat_prob[] = { 363 vp8_dct_cat3_prob, 364 vp8_dct_cat4_prob, 365 vp8_dct_cat5_prob, 366 vp8_dct_cat6_prob, 367 }; 368 369 static const uint8_t vp8_token_default_probs[4][8][3][NUM_DCT_TOKENS - 1] = { 370 { 371 { 372 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, 373 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, 374 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, 375 }, 376 { 377 { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 }, 378 { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 }, 379 { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 }, 380 }, 381 { 382 { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 }, 383 { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 }, 384 { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 }, 385 }, 386 { 387 { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 }, 388 { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 }, 389 { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 }, 390 }, 391 { 392 { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 }, 393 { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 }, 394 { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 }, 395 }, 396 { 397 { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 }, 398 { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 }, 399 { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 }, 400 }, 401 { 402 { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 }, 403 { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 }, 404 { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 }, 405 }, 406 { 407 { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 408 { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 409 { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, 410 }, 411 }, 412 { 413 { 414 { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 }, 415 { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 }, 416 { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 }, 417 }, 418 { 419 { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 }, 420 { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 }, 421 { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 }, 422 }, 423 { 424 { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 }, 425 { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 }, 426 { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 }, 427 }, 428 { 429 { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 }, 430 { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 }, 431 { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 }, 432 }, 433 { 434 { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 }, 435 { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 }, 436 { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 }, 437 }, 438 { 439 { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 }, 440 { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 }, 441 { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 }, 442 }, 443 { 444 { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 }, 445 { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 }, 446 { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 }, 447 }, 448 { 449 { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 }, 450 { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, 451 { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 }, 452 }, 453 }, 454 { 455 { 456 { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 }, 457 { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 }, 458 { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 }, 459 }, 460 { 461 { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 }, 462 { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 }, 463 { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 }, 464 }, 465 { 466 { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 }, 467 { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 }, 468 { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 }, 469 }, 470 { 471 { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 }, 472 { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 }, 473 { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, 474 }, 475 { 476 { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, 477 { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 }, 478 { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 479 }, 480 { 481 { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 482 { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 483 { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 484 }, 485 { 486 { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 }, 487 { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 }, 488 { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 489 }, 490 { 491 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, 492 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, 493 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, 494 }, 495 }, 496 { 497 { 498 { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 }, 499 { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 }, 500 { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 }, 501 }, 502 { 503 { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 }, 504 { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 }, 505 { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 }, 506 }, 507 { 508 { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 }, 509 { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 }, 510 { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 }, 511 }, 512 { 513 { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 }, 514 { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 }, 515 { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 }, 516 }, 517 { 518 { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 }, 519 { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 }, 520 { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 }, 521 }, 522 { 523 { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 }, 524 { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 }, 525 { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 }, 526 }, 527 { 528 { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 }, 529 { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 }, 530 { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 }, 531 }, 532 { 533 { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 534 { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 535 { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, 536 }, 537 }, 538 }; 539 540 static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS - 1] = { 541 { 542 { 543 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 544 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 545 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 546 }, 547 { 548 { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 549 { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, 550 { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, 551 }, 552 { 553 { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, 554 { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 555 { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 556 }, 557 { 558 { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 559 { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 560 { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 561 }, 562 { 563 { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 564 { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 565 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 566 }, 567 { 568 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 569 { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 570 { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 571 }, 572 { 573 { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 }, 574 { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 }, 575 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 576 }, 577 { 578 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 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 }, 582 }, 583 { 584 { 585 { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 586 { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 }, 587 { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 }, 588 }, 589 { 590 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 591 { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 592 { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 }, 593 }, 594 { 595 { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 596 { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 597 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 598 }, 599 { 600 { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 601 { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 602 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 603 }, 604 { 605 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 606 { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 607 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 608 }, 609 { 610 { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 611 { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 612 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 613 }, 614 { 615 { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, 616 { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 617 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 618 }, 619 { 620 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 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 }, 624 }, 625 { 626 { 627 { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 }, 628 { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 }, 629 { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 }, 630 }, 631 { 632 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 633 { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 634 { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 }, 635 }, 636 { 637 { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 638 { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 639 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 640 }, 641 { 642 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 643 { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 644 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 645 }, 646 { 647 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 648 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 649 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 650 }, 651 { 652 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 653 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 654 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 655 }, 656 { 657 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 658 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 659 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 660 }, 661 { 662 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 663 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 664 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 665 }, 666 }, 667 { 668 { 669 { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 670 { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 }, 671 { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 }, 672 }, 673 { 674 { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, 675 { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, 676 { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 }, 677 }, 678 { 679 { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, 680 { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, 681 { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 }, 682 }, 683 { 684 { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 685 { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 686 { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 687 }, 688 { 689 { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, 690 { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 691 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 692 }, 693 { 694 { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 695 { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 696 { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, 697 }, 698 { 699 { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, 700 { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 701 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 702 }, 703 { 704 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 705 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 706 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 707 }, 708 }, 709 }; 710 711 static const uint8_t vp8_dc_qlookup[VP8_MAX_QUANT + 1] = { 712 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 713 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, 714 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 715 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 716 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 717 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 718 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, 719 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157, 720 }; 721 722 static const uint16_t vp8_ac_qlookup[VP8_MAX_QUANT + 1] = { 723 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 724 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 725 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 726 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 727 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 728 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 729 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 730 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284, 731 }; 732 733 static const uint8_t vp8_mv_update_prob[2][19] = { 734 { 237, 735 246, 736 253, 253, 254, 254, 254, 254, 254, 737 254, 254, 254, 254, 254, 250, 250, 252, /* VP8 only: */ 254, 254 }, 738 { 231, 739 243, 740 245, 253, 254, 254, 254, 254, 254, 741 254, 254, 254, 254, 254, 251, 251, 254, /* VP8 only: */ 254, 254 } 742 }; 743 744 static const uint8_t vp7_mv_default_prob[2][17] = { 745 { 162, 746 128, 747 225, 146, 172, 147, 214, 39, 156, 748 247, 210, 135, 68, 138, 220, 239, 246 }, 749 { 164, 750 128, 751 204, 170, 119, 235, 140, 230, 228, 752 244, 184, 201, 44, 173, 221, 239, 253 } 753 }; 754 755 static const uint8_t vp8_mv_default_prob[2][19] = { 756 { 162, 757 128, 758 225, 146, 172, 147, 214, 39, 156, 759 128, 129, 132, 75, 145, 178, 206, 239, 254, 254 }, 760 { 164, 761 128, 762 204, 170, 119, 235, 140, 230, 228, 763 128, 130, 130, 74, 148, 180, 203, 236, 254, 254 } 764 }; 765 766 static const uint8_t vp7_feature_value_size[2][4] = { 767 { 7, 6, 0, 8 }, 768 { 7, 6, 0, 5 }, 769 }; 770 771 static const int8_t vp7_feature_index_tree[4][2] = 772 { 773 { 1, 2 }, 774 { -0, -1 }, // '00', '01' 775 { -2, -3 }, // '10', '11' 776 }; 777 778 static const uint16_t vp7_ydc_qlookup[] = { 779 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15, 780 16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 25, 26, 27, 28, 29, 781 30, 31, 32, 33, 33, 34, 35, 36, 36, 37, 38, 39, 39, 40, 41, 782 41, 42, 43, 43, 44, 45, 45, 46, 47, 48, 48, 49, 50, 51, 52, 783 53, 53, 54, 56, 57, 58, 59, 60, 62, 63, 65, 66, 68, 70, 72, 784 74, 76, 79, 81, 84, 87, 90, 93, 96, 100, 104, 108, 112, 116, 121, 785 126, 131, 136, 142, 148, 154, 160, 167, 174, 182, 189, 198, 206, 215, 224, 786 234, 244, 254, 265, 277, 288, 301, 313, 327, 340, 355, 370, 385, 401, 417, 787 434, 452, 470, 489, 509, 529, 550, 572, 788 }; 789 790 static const uint16_t vp7_yac_qlookup[] = { 791 4, 4, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 15, 792 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 793 37, 38, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 53, 54, 794 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 67, 68, 69, 70, 795 72, 73, 75, 76, 78, 80, 82, 84, 86, 88, 91, 93, 96, 99, 796 102, 105, 109, 112, 116, 121, 125, 130, 135, 140, 146, 152, 158, 165, 797 172, 180, 188, 196, 205, 214, 224, 234, 245, 256, 268, 281, 294, 308, 798 322, 337, 353, 369, 386, 404, 423, 443, 463, 484, 506, 529, 553, 578, 799 604, 631, 659, 688, 718, 749, 781, 814, 849, 885, 922, 960, 1000, 1041, 800 1083, 1127, 801 }; 802 803 static const uint16_t vp7_y2dc_qlookup[] = { 804 7, 9, 11, 13, 15, 17, 19, 21, 23, 26, 28, 30, 33, 35, 805 37, 39, 42, 44, 46, 48, 51, 53, 55, 57, 59, 61, 63, 65, 806 67, 69, 70, 72, 74, 75, 77, 78, 80, 81, 83, 84, 85, 87, 807 88, 89, 90, 92, 93, 94, 95, 96, 97, 99, 100, 101, 102, 104, 808 105, 106, 108, 109, 111, 113, 114, 116, 118, 120, 123, 125, 128, 131, 809 134, 137, 140, 144, 148, 152, 156, 161, 166, 171, 176, 182, 188, 195, 810 202, 209, 217, 225, 234, 243, 253, 263, 274, 285, 297, 309, 322, 336, 811 350, 365, 381, 397, 414, 432, 450, 470, 490, 511, 533, 556, 579, 604, 812 630, 656, 684, 713, 742, 773, 805, 838, 873, 908, 945, 983, 1022, 1063, 813 1105, 1148, 814 }; 815 816 static const uint16_t vp7_y2ac_qlookup[] = { 817 7, 9, 11, 13, 16, 18, 21, 24, 26, 29, 32, 35, 818 38, 41, 43, 46, 49, 52, 55, 58, 61, 64, 66, 69, 819 72, 74, 77, 79, 82, 84, 86, 88, 91, 93, 95, 97, 820 98, 100, 102, 104, 105, 107, 109, 110, 112, 113, 115, 116, 821 117, 119, 120, 122, 123, 125, 127, 128, 130, 132, 134, 136, 822 138, 141, 143, 146, 149, 152, 155, 158, 162, 166, 171, 175, 823 180, 185, 191, 197, 204, 210, 218, 226, 234, 243, 252, 262, 824 273, 284, 295, 308, 321, 335, 350, 365, 381, 398, 416, 435, 825 455, 476, 497, 520, 544, 569, 595, 622, 650, 680, 711, 743, 826 776, 811, 848, 885, 925, 965, 1008, 1052, 1097, 1144, 1193, 1244, 827 1297, 1351, 1407, 1466, 1526, 1588, 1652, 1719, 828 }; 829 830 #endif /* AVCODEC_VP8DATA_H */ 831