OLD | NEW |
1 // Copyright 2011 Google Inc. All Rights Reserved. | 1 // Copyright 2011 Google Inc. All Rights Reserved. |
2 // | 2 // |
3 // This code is licensed under the same terms as WebM: | 3 // This code is licensed under the same terms as WebM: |
4 // Software License Agreement: http://www.webmproject.org/license/software/ | 4 // Software License Agreement: http://www.webmproject.org/license/software/ |
5 // Additional IP Rights Grant: http://www.webmproject.org/license/additional/ | 5 // Additional IP Rights Grant: http://www.webmproject.org/license/additional/ |
6 // ----------------------------------------------------------------------------- | 6 // ----------------------------------------------------------------------------- |
7 // | 7 // |
8 // Cost tables for level and modes | 8 // Cost tables for level and modes |
9 // | 9 // |
10 // Author: Skal (pascal.massimino@gmail.com) | 10 // Author: Skal (pascal.massimino@gmail.com) |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 pattern >>= 1; | 347 pattern >>= 1; |
348 } | 348 } |
349 return cost; | 349 return cost; |
350 } | 350 } |
351 | 351 |
352 //------------------------------------------------------------------------------ | 352 //------------------------------------------------------------------------------ |
353 // Pre-calc level costs once for all | 353 // Pre-calc level costs once for all |
354 | 354 |
355 void VP8CalculateLevelCosts(VP8Proba* const proba) { | 355 void VP8CalculateLevelCosts(VP8Proba* const proba) { |
356 int ctype, band, ctx; | 356 int ctype, band, ctx; |
| 357 |
| 358 if (!proba->dirty_) return; // nothing to do. |
| 359 |
357 for (ctype = 0; ctype < NUM_TYPES; ++ctype) { | 360 for (ctype = 0; ctype < NUM_TYPES; ++ctype) { |
358 for (band = 0; band < NUM_BANDS; ++band) { | 361 for (band = 0; band < NUM_BANDS; ++band) { |
359 for(ctx = 0; ctx < NUM_CTX; ++ctx) { | 362 for(ctx = 0; ctx < NUM_CTX; ++ctx) { |
360 const uint8_t* const p = proba->coeffs_[ctype][band][ctx]; | 363 const uint8_t* const p = proba->coeffs_[ctype][band][ctx]; |
361 uint16_t* const table = proba->level_cost_[ctype][band][ctx]; | 364 uint16_t* const table = proba->level_cost_[ctype][band][ctx]; |
362 const int cost_base = VP8BitCost(1, p[1]); | 365 const int cost_base = VP8BitCost(1, p[1]); |
363 int v; | 366 int v; |
364 table[0] = VP8BitCost(0, p[1]); | 367 table[0] = VP8BitCost(0, p[1]); |
365 for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) { | 368 for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) { |
366 table[v] = cost_base + VariableLevelCost(v, p); | 369 table[v] = cost_base + VariableLevelCost(v, p); |
367 } | 370 } |
368 // Starting at level 67 and up, the variable part of the cost is | 371 // Starting at level 67 and up, the variable part of the cost is |
369 // actually constant. | 372 // actually constant. |
370 } | 373 } |
371 } | 374 } |
372 } | 375 } |
| 376 proba->dirty_ = 0; |
373 } | 377 } |
374 | 378 |
375 //------------------------------------------------------------------------------ | 379 //------------------------------------------------------------------------------ |
376 // Mode cost tables. | 380 // Mode cost tables. |
377 | 381 |
378 // These are the fixed probabilities (in the coding trees) turned into bit-cost | 382 // These are the fixed probabilities (in the coding trees) turned into bit-cost |
379 // by calling VP8BitCost(). | 383 // by calling VP8BitCost(). |
380 const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 }; | 384 const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 }; |
381 // note: these values include the fixed VP8BitCost(1, 145) mode selection cost. | 385 // note: these values include the fixed VP8BitCost(1, 145) mode selection cost. |
382 const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 }; | 386 const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 }; |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 { 439, 1139, 1101, 1257, 3710, 1922, 1205, 1040, 1931, 1529 }, | 485 { 439, 1139, 1101, 1257, 3710, 1922, 1205, 1040, 1931, 1529 }, |
482 { 979, 935, 1269, 847, 1202, 1286, 1530, 1535, 827, 1036 }, | 486 { 979, 935, 1269, 847, 1202, 1286, 1530, 1535, 827, 1036 }, |
483 { 516, 1378, 1569, 1110, 1798, 1798, 1198, 2199, 1543, 712 } }, | 487 { 516, 1378, 1569, 1110, 1798, 1798, 1198, 2199, 1543, 712 } }, |
484 }; | 488 }; |
485 | 489 |
486 //------------------------------------------------------------------------------ | 490 //------------------------------------------------------------------------------ |
487 | 491 |
488 #if defined(__cplusplus) || defined(c_plusplus) | 492 #if defined(__cplusplus) || defined(c_plusplus) |
489 } // extern "C" | 493 } // extern "C" |
490 #endif | 494 #endif |
OLD | NEW |