1a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// Copyright 2011 Google Inc. All Rights Reserved. 27c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// 37c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// This code is licensed under the same terms as WebM: 47c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Software License Agreement: http://www.webmproject.org/license/software/ 57c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Additional IP Rights Grant: http://www.webmproject.org/license/additional/ 67c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// ----------------------------------------------------------------------------- 77c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// 87c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Cost tables for level and modes. 97c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// 107c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Author: Skal (pascal.massimino@gmail.com) 117c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 127c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#ifndef WEBP_ENC_COST_H_ 137c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#define WEBP_ENC_COST_H_ 147c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 15a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#include "./vp8enci.h" 167c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 177c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#if defined(__cplusplus) || defined(c_plusplus) 187c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern "C" { 197c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#endif 207c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 217c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8LevelFixedCosts[2048]; // approximate cost per level 227c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8EntropyCost[256]; // 8bit fixed-point log(p) 237c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 247c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Cost of coding one event with probability 'proba'. 25a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arorastatic WEBP_INLINE int VP8BitCost(int bit, uint8_t proba) { 267c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora return !bit ? VP8EntropyCost[proba] : VP8EntropyCost[255 - proba]; 277c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora} 287c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 297c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Level cost calculations 30466727975bcc57c0c5597bcd0747a2fe4777b303Vikas Aroraextern const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2]; 317c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroravoid VP8CalculateLevelCosts(VP8Proba* const proba); 32a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arorastatic WEBP_INLINE int VP8LevelCost(const uint16_t* const table, int level) { 337c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora return VP8LevelFixedCosts[level] 34a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora + table[(level > MAX_VARIABLE_LEVEL) ? MAX_VARIABLE_LEVEL : level]; 357c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora} 367c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 377c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Mode costs 387c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8FixedCostsUV[4]; 397c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8FixedCostsI16[4]; 407c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES]; 417c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 42a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora//------------------------------------------------------------------------------ 437c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 447c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#if defined(__cplusplus) || defined(c_plusplus) 457c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora} // extern "C" 467c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#endif 477c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 48a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#endif /* WEBP_ENC_COST_H_ */ 49