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