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