| OLD | NEW |
| 1 // Copyright 2011 Google Inc. All Rights Reserved. | 1 // Copyright 2011 Google Inc. All Rights Reserved. |
| 2 // | 2 // |
| 3 // Use of this source code is governed by a BSD-style license | 3 // Use of this source code is governed by a BSD-style license |
| 4 // that can be found in the COPYING file in the root of the source | 4 // that can be found in the COPYING file in the root of the source |
| 5 // tree. An additional intellectual property rights grant can be found | 5 // tree. An additional intellectual property rights grant can be found |
| 6 // in the file PATENTS. All contributing project authors may | 6 // in the file PATENTS. All contributing project authors may |
| 7 // be found in the AUTHORS file in the root of the source tree. | 7 // be found in the AUTHORS file in the root of the source tree. |
| 8 // ----------------------------------------------------------------------------- | 8 // ----------------------------------------------------------------------------- |
| 9 // | 9 // |
| 10 // Cost tables for level and modes. | 10 // Cost tables for level and modes. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 ProbaArray* prob; | 34 ProbaArray* prob; |
| 35 StatsArray* stats; | 35 StatsArray* stats; |
| 36 CostArrayPtr costs; | 36 CostArrayPtr costs; |
| 37 }; | 37 }; |
| 38 | 38 |
| 39 void VP8InitResidual(int first, int coeff_type, | 39 void VP8InitResidual(int first, int coeff_type, |
| 40 VP8Encoder* const enc, VP8Residual* const res); | 40 VP8Encoder* const enc, VP8Residual* const res); |
| 41 | 41 |
| 42 int VP8RecordCoeffs(int ctx, const VP8Residual* const res); | 42 int VP8RecordCoeffs(int ctx, const VP8Residual* const res); |
| 43 | 43 |
| 44 // Record proba context used. |
| 45 static WEBP_INLINE int VP8RecordStats(int bit, proba_t* const stats) { |
| 46 proba_t p = *stats; |
| 47 // An overflow is inbound. Note we handle this at 0xfffe0000u instead of |
| 48 // 0xffff0000u to make sure p + 1u does not overflow. |
| 49 if (p >= 0xfffe0000u) { |
| 50 p = ((p + 1u) >> 1) & 0x7fff7fffu; // -> divide the stats by 2. |
| 51 } |
| 52 // record bit count (lower 16 bits) and increment total count (upper 16 bits). |
| 53 p += 0x00010000u + bit; |
| 54 *stats = p; |
| 55 return bit; |
| 56 } |
| 57 |
| 44 // Cost of coding one event with probability 'proba'. | 58 // Cost of coding one event with probability 'proba'. |
| 45 static WEBP_INLINE int VP8BitCost(int bit, uint8_t proba) { | 59 static WEBP_INLINE int VP8BitCost(int bit, uint8_t proba) { |
| 46 return !bit ? VP8EntropyCost[proba] : VP8EntropyCost[255 - proba]; | 60 return !bit ? VP8EntropyCost[proba] : VP8EntropyCost[255 - proba]; |
| 47 } | 61 } |
| 48 | 62 |
| 49 // Level cost calculations | 63 // Level cost calculations |
| 50 extern const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2]; | 64 extern const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2]; |
| 51 void VP8CalculateLevelCosts(VP8EncProba* const proba); | 65 void VP8CalculateLevelCosts(VP8EncProba* const proba); |
| 52 static WEBP_INLINE int VP8LevelCost(const uint16_t* const table, int level) { | 66 static WEBP_INLINE int VP8LevelCost(const uint16_t* const table, int level) { |
| 53 return VP8LevelFixedCosts[level] | 67 return VP8LevelFixedCosts[level] |
| 54 + table[(level > MAX_VARIABLE_LEVEL) ? MAX_VARIABLE_LEVEL : level]; | 68 + table[(level > MAX_VARIABLE_LEVEL) ? MAX_VARIABLE_LEVEL : level]; |
| 55 } | 69 } |
| 56 | 70 |
| 57 // Mode costs | 71 // Mode costs |
| 58 extern const uint16_t VP8FixedCostsUV[4]; | 72 extern const uint16_t VP8FixedCostsUV[4]; |
| 59 extern const uint16_t VP8FixedCostsI16[4]; | 73 extern const uint16_t VP8FixedCostsI16[4]; |
| 60 extern const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES]; | 74 extern const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES]; |
| 61 | 75 |
| 62 //------------------------------------------------------------------------------ | 76 //------------------------------------------------------------------------------ |
| 63 | 77 |
| 64 #ifdef __cplusplus | 78 #ifdef __cplusplus |
| 65 } // extern "C" | 79 } // extern "C" |
| 66 #endif | 80 #endif |
| 67 | 81 |
| 68 #endif /* WEBP_ENC_COST_H_ */ | 82 #endif /* WEBP_ENC_COST_H_ */ |
| OLD | NEW |