1a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// Copyright 2011 Google Inc. All Rights Reserved. 27c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// 30406ce1417f76f2034833414dcecc9f56253640cVikas Arora// Use of this source code is governed by a BSD-style license 40406ce1417f76f2034833414dcecc9f56253640cVikas Arora// that can be found in the COPYING file in the root of the source 50406ce1417f76f2034833414dcecc9f56253640cVikas Arora// tree. An additional intellectual property rights grant can be found 60406ce1417f76f2034833414dcecc9f56253640cVikas Arora// in the file PATENTS. All contributing project authors may 70406ce1417f76f2034833414dcecc9f56253640cVikas Arora// be found in the AUTHORS file in the root of the source tree. 87c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// ----------------------------------------------------------------------------- 97c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// 107c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Cost tables for level and modes. 117c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// 127c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Author: Skal (pascal.massimino@gmail.com) 137c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 147c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#ifndef WEBP_ENC_COST_H_ 157c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#define WEBP_ENC_COST_H_ 167c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 17a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#include "./vp8enci.h" 187c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 197c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#if defined(__cplusplus) || defined(c_plusplus) 207c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern "C" { 217c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#endif 227c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 230406ce1417f76f2034833414dcecc9f56253640cVikas Arora// approximate cost per level: 240406ce1417f76f2034833414dcecc9f56253640cVikas Aroraextern const uint16_t VP8LevelFixedCosts[MAX_LEVEL + 1]; 257c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8EntropyCost[256]; // 8bit fixed-point log(p) 267c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 277c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Cost of coding one event with probability 'proba'. 28a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arorastatic WEBP_INLINE int VP8BitCost(int bit, uint8_t proba) { 297c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora return !bit ? VP8EntropyCost[proba] : VP8EntropyCost[255 - proba]; 307c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora} 317c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 327c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Level cost calculations 33466727975bcc57c0c5597bcd0747a2fe4777b303Vikas Aroraextern const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2]; 347c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroravoid VP8CalculateLevelCosts(VP8Proba* const proba); 35a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arorastatic WEBP_INLINE int VP8LevelCost(const uint16_t* const table, int level) { 367c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora return VP8LevelFixedCosts[level] 37a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora + table[(level > MAX_VARIABLE_LEVEL) ? MAX_VARIABLE_LEVEL : level]; 387c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora} 397c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 407c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora// Mode costs 417c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8FixedCostsUV[4]; 427c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8FixedCostsI16[4]; 437c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Aroraextern const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES]; 447c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 45a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora//------------------------------------------------------------------------------ 467c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 477c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#if defined(__cplusplus) || defined(c_plusplus) 487c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora} // extern "C" 497c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora#endif 507c970a0a679089e416c5887cf7fcece15a70bfa4Vikas Arora 51a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#endif /* WEBP_ENC_COST_H_ */ 52