00001
00024
00025
00026 #define VP8_MAX_QUANT 127
00027
00028 enum dct_token {
00029 DCT_0,
00030 DCT_1,
00031 DCT_2,
00032 DCT_3,
00033 DCT_4,
00034 DCT_CAT1,
00035 DCT_CAT2,
00036 DCT_CAT3,
00037 DCT_CAT4,
00038 DCT_CAT5,
00039 DCT_CAT6,
00040 DCT_EOB,
00041
00042 NUM_DCT_TOKENS
00043 };
00044
00045 #include "h264pred.h"
00046
00047
00048 #define MODE_I4x4 4
00049
00050 enum inter_mvmode {
00051 VP8_MVMODE_NEAREST = MODE_I4x4 + 1,
00052 VP8_MVMODE_NEAR,
00053 VP8_MVMODE_ZERO,
00054 VP8_MVMODE_NEW,
00055 VP8_MVMODE_SPLIT
00056 };
00057
00058 enum inter_splitmvmode {
00059 VP8_SPLITMVMODE_16x8 = 0,
00060 VP8_SPLITMVMODE_8x16,
00061 VP8_SPLITMVMODE_8x8,
00062 VP8_SPLITMVMODE_4x4,
00063 VP8_SPLITMVMODE_NONE,
00064 };
00065
00066 static const uint8_t vp8_pred4x4_mode[] =
00067 {
00068 [DC_PRED8x8] = DC_PRED,
00069 [VERT_PRED8x8] = VERT_PRED,
00070 [HOR_PRED8x8] = HOR_PRED,
00071 [PLANE_PRED8x8] = TM_VP8_PRED,
00072 };
00073
00074 static const int8_t vp8_pred16x16_tree_intra[4][2] =
00075 {
00076 { -MODE_I4x4, 1 },
00077 { 2, 3 },
00078 { -DC_PRED8x8, -VERT_PRED8x8 },
00079 { -HOR_PRED8x8, -PLANE_PRED8x8 },
00080 };
00081
00082 static const int8_t vp8_pred16x16_tree_inter[4][2] =
00083 {
00084 { -DC_PRED8x8, 1 },
00085 { 2, 3 },
00086 { -VERT_PRED8x8, -HOR_PRED8x8 },
00087 { -PLANE_PRED8x8, -MODE_I4x4 },
00088 };
00089
00090 static const int vp8_mode_contexts[6][4] = {
00091 { 7, 1, 1, 143 },
00092 { 14, 18, 14, 107 },
00093 { 135, 64, 57, 68 },
00094 { 60, 56, 128, 65 },
00095 { 159, 134, 128, 34 },
00096 { 234, 188, 128, 28 },
00097 };
00098
00099 static const uint8_t vp8_mbsplits[5][16] = {
00100 { 0, 0, 0, 0, 0, 0, 0, 0,
00101 1, 1, 1, 1, 1, 1, 1, 1 },
00102 { 0, 0, 1, 1, 0, 0, 1, 1,
00103 0, 0, 1, 1, 0, 0, 1, 1 },
00104 { 0, 0, 1, 1, 0, 0, 1, 1,
00105 2, 2, 3, 3, 2, 2, 3, 3 },
00106 { 0, 1, 2, 3, 4, 5, 6, 7,
00107 8, 9, 10, 11, 12, 13, 14, 15 },
00108 { 0, 0, 0, 0, 0, 0, 0, 0,
00109 0, 0, 0, 0, 0, 0, 0, 0 }
00110 };
00111
00112 static const uint8_t vp8_mbfirstidx[4][16] = {
00113 { 0, 8 }, { 0, 2 }, { 0, 2, 8, 10 },
00114 { 0, 1, 2, 3, 4, 5, 6, 7,
00115 8, 9, 10, 11, 12, 13, 14, 15 }
00116 };
00117
00118 static const uint8_t vp8_mbsplit_count[4] = { 2, 2, 4, 16 };
00119 static const uint8_t vp8_mbsplit_prob[3] = { 110, 111, 150 };
00120
00121 static const uint8_t vp8_submv_prob[5][3] = {
00122 { 147, 136, 18 },
00123 { 106, 145, 1 },
00124 { 179, 121, 1 },
00125 { 223, 1, 34 },
00126 { 208, 1, 1 }
00127 };
00128
00129 static const uint8_t vp8_pred16x16_prob_intra[4] = { 145, 156, 163, 128 };
00130 static const uint8_t vp8_pred16x16_prob_inter[4] = { 112, 86, 140, 37 };
00131
00132 static const int8_t vp8_pred4x4_tree[9][2] =
00133 {
00134 { -DC_PRED, 1 },
00135 { -TM_VP8_PRED, 2 },
00136 { -VERT_PRED, 3 },
00137 { 4, 6 },
00138 { -HOR_PRED, 5 },
00139 { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED },
00140 { -DIAG_DOWN_LEFT_PRED, 7 },
00141 { -VERT_LEFT_PRED, 8 },
00142 { -HOR_DOWN_PRED, -HOR_UP_PRED },
00143 };
00144
00145 static const int8_t vp8_pred8x8c_tree[3][2] =
00146 {
00147 { -DC_PRED8x8, 1 },
00148 { -VERT_PRED8x8, 2 },
00149 { -HOR_PRED8x8, -PLANE_PRED8x8 },
00150 };
00151
00152 static const uint8_t vp8_pred8x8c_prob_intra[3] = { 142, 114, 183 };
00153 static const uint8_t vp8_pred8x8c_prob_inter[3] = { 162, 101, 204 };
00154
00155 static const uint8_t vp8_pred4x4_prob_inter[9] =
00156 {
00157 120, 90, 79, 133, 87, 85, 80, 111, 151
00158 };
00159
00160 static const uint8_t vp8_pred4x4_prob_intra[10][10][9] =
00161 {
00162 {
00163 { 39, 53, 200, 87, 26, 21, 43, 232, 171 },
00164 { 56, 34, 51, 104, 114, 102, 29, 93, 77 },
00165 { 88, 88, 147, 150, 42, 46, 45, 196, 205 },
00166 { 107, 54, 32, 26, 51, 1, 81, 43, 31 },
00167 { 39, 28, 85, 171, 58, 165, 90, 98, 64 },
00168 { 34, 22, 116, 206, 23, 34, 43, 166, 73 },
00169 { 34, 19, 21, 102, 132, 188, 16, 76, 124 },
00170 { 68, 25, 106, 22, 64, 171, 36, 225, 114 },
00171 { 62, 18, 78, 95, 85, 57, 50, 48, 51 },
00172 { 43, 97, 183, 117, 85, 38, 35, 179, 61 },
00173 },
00174 {
00175 { 112, 113, 77, 85, 179, 255, 38, 120, 114 },
00176 { 40, 42, 1, 196, 245, 209, 10, 25, 109 },
00177 { 193, 101, 35, 159, 215, 111, 89, 46, 111 },
00178 { 100, 80, 8, 43, 154, 1, 51, 26, 71 },
00179 { 88, 43, 29, 140, 166, 213, 37, 43, 154 },
00180 { 61, 63, 30, 155, 67, 45, 68, 1, 209 },
00181 { 41, 40, 5, 102, 211, 183, 4, 1, 221 },
00182 { 142, 78, 78, 16, 255, 128, 34, 197, 171 },
00183 { 51, 50, 17, 168, 209, 192, 23, 25, 82 },
00184 { 60, 148, 31, 172, 219, 228, 21, 18, 111 },
00185 },
00186 {
00187 { 175, 69, 143, 80, 85, 82, 72, 155, 103 },
00188 { 56, 58, 10, 171, 218, 189, 17, 13, 152 },
00189 { 231, 120, 48, 89, 115, 113, 120, 152, 112 },
00190 { 144, 71, 10, 38, 171, 213, 144, 34, 26 },
00191 { 114, 26, 17, 163, 44, 195, 21, 10, 173 },
00192 { 121, 24, 80, 195, 26, 62, 44, 64, 85 },
00193 { 63, 20, 8, 114, 114, 208, 12, 9, 226 },
00194 { 170, 46, 55, 19, 136, 160, 33, 206, 71 },
00195 { 81, 40, 11, 96, 182, 84, 29, 16, 36 },
00196 { 152, 179, 64, 126, 170, 118, 46, 70, 95 },
00197 },
00198 {
00199 { 75, 79, 123, 47, 51, 128, 81, 171, 1 },
00200 { 57, 17, 5, 71, 102, 57, 53, 41, 49 },
00201 { 125, 98, 42, 88, 104, 85, 117, 175, 82 },
00202 { 115, 21, 2, 10, 102, 255, 166, 23, 6 },
00203 { 38, 33, 13, 121, 57, 73, 26, 1, 85 },
00204 { 41, 10, 67, 138, 77, 110, 90, 47, 114 },
00205 { 57, 18, 10, 102, 102, 213, 34, 20, 43 },
00206 { 101, 29, 16, 10, 85, 128, 101, 196, 26 },
00207 { 117, 20, 15, 36, 163, 128, 68, 1, 26 },
00208 { 95, 84, 53, 89, 128, 100, 113, 101, 45 },
00209 },
00210 {
00211 { 63, 59, 90, 180, 59, 166, 93, 73, 154 },
00212 { 40, 40, 21, 116, 143, 209, 34, 39, 175 },
00213 { 138, 31, 36, 171, 27, 166, 38, 44, 229 },
00214 { 57, 46, 22, 24, 128, 1, 54, 17, 37 },
00215 { 47, 15, 16, 183, 34, 223, 49, 45, 183 },
00216 { 46, 17, 33, 183, 6, 98, 15, 32, 183 },
00217 { 40, 3, 9, 115, 51, 192, 18, 6, 223 },
00218 { 65, 32, 73, 115, 28, 128, 23, 128, 205 },
00219 { 87, 37, 9, 115, 59, 77, 64, 21, 47 },
00220 { 67, 87, 58, 169, 82, 115, 26, 59, 179 },
00221 },
00222 {
00223 { 54, 57, 112, 184, 5, 41, 38, 166, 213 },
00224 { 30, 34, 26, 133, 152, 116, 10, 32, 134 },
00225 { 104, 55, 44, 218, 9, 54, 53, 130, 226 },
00226 { 75, 32, 12, 51, 192, 255, 160, 43, 51 },
00227 { 39, 19, 53, 221, 26, 114, 32, 73, 255 },
00228 { 31, 9, 65, 234, 2, 15, 1, 118, 73 },
00229 { 56, 21, 23, 111, 59, 205, 45, 37, 192 },
00230 { 88, 31, 35, 67, 102, 85, 55, 186, 85 },
00231 { 55, 38, 70, 124, 73, 102, 1, 34, 98 },
00232 { 64, 90, 70, 205, 40, 41, 23, 26, 57 },
00233 },
00234 {
00235 { 86, 40, 64, 135, 148, 224, 45, 183, 128 },
00236 { 22, 26, 17, 131, 240, 154, 14, 1, 209 },
00237 { 164, 50, 31, 137, 154, 133, 25, 35, 218 },
00238 { 83, 12, 13, 54, 192, 255, 68, 47, 28 },
00239 { 45, 16, 21, 91, 64, 222, 7, 1, 197 },
00240 { 56, 21, 39, 155, 60, 138, 23, 102, 213 },
00241 { 18, 11, 7, 63, 144, 171, 4, 4, 246 },
00242 { 85, 26, 85, 85, 128, 128, 32, 146, 171 },
00243 { 35, 27, 10, 146, 174, 171, 12, 26, 128 },
00244 { 51, 103, 44, 131, 131, 123, 31, 6, 158 },
00245 },
00246 {
00247 { 68, 45, 128, 34, 1, 47, 11, 245, 171 },
00248 { 62, 17, 19, 70, 146, 85, 55, 62, 70 },
00249 { 102, 61, 71, 37, 34, 53, 31, 243, 192 },
00250 { 75, 15, 9, 9, 64, 255, 184, 119, 16 },
00251 { 37, 43, 37, 154, 100, 163, 85, 160, 1 },
00252 { 63, 9, 92, 136, 28, 64, 32, 201, 85 },
00253 { 56, 8, 17, 132, 137, 255, 55, 116, 128 },
00254 { 86, 6, 28, 5, 64, 255, 25, 248, 1 },
00255 { 58, 15, 20, 82, 135, 57, 26, 121, 40 },
00256 { 69, 60, 71, 38, 73, 119, 28, 222, 37 },
00257 },
00258 {
00259 { 101, 75, 128, 139, 118, 146, 116, 128, 85 },
00260 { 56, 41, 15, 176, 236, 85, 37, 9, 62 },
00261 { 190, 80, 35, 99, 180, 80, 126, 54, 45 },
00262 { 146, 36, 19, 30, 171, 255, 97, 27, 20 },
00263 { 71, 30, 17, 119, 118, 255, 17, 18, 138 },
00264 { 101, 38, 60, 138, 55, 70, 43, 26, 142 },
00265 { 32, 41, 20, 117, 151, 142, 20, 21, 163 },
00266 { 138, 45, 61, 62, 219, 1, 81, 188, 64 },
00267 { 112, 19, 12, 61, 195, 128, 48, 4, 24 },
00268 { 85, 126, 47, 87, 176, 51, 41, 20, 32 },
00269 },
00270 {
00271 { 66, 102, 167, 99, 74, 62, 40, 234, 128 },
00272 { 41, 53, 9, 178, 241, 141, 26, 8, 107 },
00273 { 134, 183, 89, 137, 98, 101, 106, 165, 148 },
00274 { 104, 79, 12, 27, 217, 255, 87, 17, 7 },
00275 { 74, 43, 26, 146, 73, 166, 49, 23, 157 },
00276 { 65, 38, 105, 160, 51, 52, 31, 115, 128 },
00277 { 47, 41, 14, 110, 182, 183, 21, 17, 194 },
00278 { 87, 68, 71, 44, 114, 51, 15, 186, 23 },
00279 { 66, 45, 25, 102, 197, 189, 23, 18, 22 },
00280 { 72, 187, 100, 130, 157, 111, 32, 75, 80 },
00281 },
00282 };
00283
00284 static const int8_t vp8_segmentid_tree[][2] =
00285 {
00286 { 1, 2 },
00287 { -0, -1 },
00288 { -2, -3 },
00289 };
00290
00291 static const uint8_t vp8_coeff_band[16] =
00292 {
00293 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7
00294 };
00295
00296
00297
00298 static const int8_t vp8_coeff_band_indexes[8][10] =
00299 {
00300 {0, -1},
00301 {1, -1},
00302 {2, -1},
00303 {3, -1},
00304 {5, -1},
00305 {6, -1},
00306 {4, 7, 8, 9, 10, 11, 12, 13, 14, -1},
00307 {15, -1}
00308 };
00309
00310 static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 };
00311 static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 };
00312 static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 };
00313 static const uint8_t vp8_dct_cat4_prob[] = { 176, 155, 140, 135, 0 };
00314 static const uint8_t vp8_dct_cat5_prob[] = { 180, 157, 141, 134, 130, 0 };
00315 static const uint8_t vp8_dct_cat6_prob[] = { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 };
00316
00317
00318 static const uint8_t * const vp8_dct_cat_prob[] =
00319 {
00320 vp8_dct_cat3_prob,
00321 vp8_dct_cat4_prob,
00322 vp8_dct_cat5_prob,
00323 vp8_dct_cat6_prob,
00324 };
00325
00326 static const uint8_t vp8_token_default_probs[4][8][3][NUM_DCT_TOKENS-1] =
00327 {
00328 {
00329 {
00330 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
00331 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
00332 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
00333 },
00334 {
00335 { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 },
00336 { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 },
00337 { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 },
00338 },
00339 {
00340 { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 },
00341 { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 },
00342 { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 },
00343 },
00344 {
00345 { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 },
00346 { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 },
00347 { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 },
00348 },
00349 {
00350 { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 },
00351 { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 },
00352 { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 },
00353 },
00354 {
00355 { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 },
00356 { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 },
00357 { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 },
00358 },
00359 {
00360 { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 },
00361 { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 },
00362 { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 },
00363 },
00364 {
00365 { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00366 { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00367 { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
00368 },
00369 },
00370 {
00371 {
00372 { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 },
00373 { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 },
00374 { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 },
00375 },
00376 {
00377 { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 },
00378 { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 },
00379 { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 },
00380 },
00381 {
00382 { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 },
00383 { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 },
00384 { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 },
00385 },
00386 {
00387 { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 },
00388 { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 },
00389 { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 },
00390 },
00391 {
00392 { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 },
00393 { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 },
00394 { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 },
00395 },
00396 {
00397 { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 },
00398 { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 },
00399 { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 },
00400 },
00401 {
00402 { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 },
00403 { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 },
00404 { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 },
00405 },
00406 {
00407 { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 },
00408 { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
00409 { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 },
00410 },
00411 },
00412 {
00413 {
00414 { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 },
00415 { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 },
00416 { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 },
00417 },
00418 {
00419 { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 },
00420 { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 },
00421 { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 },
00422 },
00423 {
00424 { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 },
00425 { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 },
00426 { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 },
00427 },
00428 {
00429 { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 },
00430 { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 },
00431 { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
00432 },
00433 {
00434 { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
00435 { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 },
00436 { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00437 },
00438 {
00439 { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00440 { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00441 { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00442 },
00443 {
00444 { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 },
00445 { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 },
00446 { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00447 },
00448 {
00449 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
00450 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
00451 { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
00452 },
00453 },
00454 {
00455 {
00456 { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 },
00457 { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 },
00458 { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 },
00459 },
00460 {
00461 { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 },
00462 { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 },
00463 { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 },
00464 },
00465 {
00466 { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 },
00467 { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 },
00468 { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 },
00469 },
00470 {
00471 { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 },
00472 { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 },
00473 { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 },
00474 },
00475 {
00476 { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 },
00477 { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 },
00478 { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 },
00479 },
00480 {
00481 { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 },
00482 { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 },
00483 { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 },
00484 },
00485 {
00486 { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 },
00487 { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 },
00488 { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 },
00489 },
00490 {
00491 { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00492 { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00493 { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
00494 },
00495 },
00496 };
00497
00498 static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS-1] =
00499 {
00500 {
00501 {
00502 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00503 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00504 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00505 },
00506 {
00507 { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00508 { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
00509 { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
00510 },
00511 {
00512 { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
00513 { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00514 { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00515 },
00516 {
00517 { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00518 { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00519 { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00520 },
00521 {
00522 { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00523 { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00524 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00525 },
00526 {
00527 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00528 { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00529 { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00530 },
00531 {
00532 { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 },
00533 { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 },
00534 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00535 },
00536 {
00537 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00538 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00539 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00540 },
00541 },
00542 {
00543 {
00544 { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00545 { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 },
00546 { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 },
00547 },
00548 {
00549 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00550 { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00551 { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
00552 },
00553 {
00554 { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00555 { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00556 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00557 },
00558 {
00559 { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00560 { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00561 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00562 },
00563 {
00564 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00565 { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00566 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00567 },
00568 {
00569 { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00570 { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00571 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00572 },
00573 {
00574 { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
00575 { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00576 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00577 },
00578 {
00579 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00580 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00581 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00582 },
00583 },
00584 {
00585 {
00586 { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 },
00587 { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 },
00588 { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 },
00589 },
00590 {
00591 { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00592 { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00593 { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 },
00594 },
00595 {
00596 { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00597 { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00598 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00599 },
00600 {
00601 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00602 { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00603 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00604 },
00605 {
00606 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00607 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00608 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00609 },
00610 {
00611 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00612 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00613 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00614 },
00615 {
00616 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00617 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00618 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00619 },
00620 {
00621 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00622 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00623 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00624 },
00625 },
00626 {
00627 {
00628 { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00629 { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 },
00630 { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 },
00631 },
00632 {
00633 { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
00634 { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
00635 { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 },
00636 },
00637 {
00638 { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
00639 { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
00640 { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
00641 },
00642 {
00643 { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00644 { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00645 { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00646 },
00647 {
00648 { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
00649 { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00650 { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00651 },
00652 {
00653 { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00654 { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00655 { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
00656 },
00657 {
00658 { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
00659 { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00660 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00661 },
00662 {
00663 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00664 { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00665 { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
00666 },
00667 },
00668 };
00669
00670
00671 static const uint8_t zigzag_scan[16]={
00672 0+0*4, 1+0*4, 0+1*4, 0+2*4,
00673 1+1*4, 2+0*4, 3+0*4, 2+1*4,
00674 1+2*4, 0+3*4, 1+3*4, 2+2*4,
00675 3+1*4, 3+2*4, 2+3*4, 3+3*4,
00676 };
00677
00678 static const uint8_t vp8_dc_qlookup[VP8_MAX_QUANT+1] =
00679 {
00680 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17,
00681 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28,
00682 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43,
00683 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
00684 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
00685 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
00686 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118,
00687 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157,
00688 };
00689
00690 static const uint16_t vp8_ac_qlookup[VP8_MAX_QUANT+1] =
00691 {
00692 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
00693 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
00694 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
00695 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
00696 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108,
00697 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152,
00698 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209,
00699 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284,
00700 };
00701
00702 static const uint8_t vp8_mv_update_prob[2][19] = {
00703 { 237,
00704 246,
00705 253, 253, 254, 254, 254, 254, 254,
00706 254, 254, 254, 254, 254, 250, 250, 252, 254, 254 },
00707 { 231,
00708 243,
00709 245, 253, 254, 254, 254, 254, 254,
00710 254, 254, 254, 254, 254, 251, 251, 254, 254, 254 }
00711 };
00712
00713 static const uint8_t vp8_mv_default_prob[2][19] = {
00714 { 162,
00715 128,
00716 225, 146, 172, 147, 214, 39, 156,
00717 128, 129, 132, 75, 145, 178, 206, 239, 254, 254 },
00718 { 164,
00719 128,
00720 204, 170, 119, 235, 140, 230, 228,
00721 128, 130, 130, 74, 148, 180, 203, 236, 254, 254 }
00722 };