1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2014 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker *
4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker */
10*fb1b10abSAndroid Build Coastguard Worker
11*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VP9_ENCODER_VP9_COST_H_
12*fb1b10abSAndroid Build Coastguard Worker #define VPX_VP9_ENCODER_VP9_COST_H_
13*fb1b10abSAndroid Build Coastguard Worker
14*fb1b10abSAndroid Build Coastguard Worker #include "vpx_dsp/prob.h"
15*fb1b10abSAndroid Build Coastguard Worker #include "vpx/vpx_integer.h"
16*fb1b10abSAndroid Build Coastguard Worker
17*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus
18*fb1b10abSAndroid Build Coastguard Worker extern "C" {
19*fb1b10abSAndroid Build Coastguard Worker #endif
20*fb1b10abSAndroid Build Coastguard Worker
21*fb1b10abSAndroid Build Coastguard Worker extern const uint16_t vp9_prob_cost[256];
22*fb1b10abSAndroid Build Coastguard Worker
23*fb1b10abSAndroid Build Coastguard Worker // The factor to scale from cost in bits to cost in vp9_prob_cost units.
24*fb1b10abSAndroid Build Coastguard Worker #define VP9_PROB_COST_SHIFT 9
25*fb1b10abSAndroid Build Coastguard Worker
26*fb1b10abSAndroid Build Coastguard Worker #define vp9_cost_zero(prob) (vp9_prob_cost[prob])
27*fb1b10abSAndroid Build Coastguard Worker
28*fb1b10abSAndroid Build Coastguard Worker #define vp9_cost_one(prob) vp9_cost_zero(256 - (prob))
29*fb1b10abSAndroid Build Coastguard Worker
30*fb1b10abSAndroid Build Coastguard Worker #define vp9_cost_bit(prob, bit) vp9_cost_zero((bit) ? 256 - (prob) : (prob))
31*fb1b10abSAndroid Build Coastguard Worker
cost_branch256(const unsigned int ct[2],vpx_prob p)32*fb1b10abSAndroid Build Coastguard Worker static INLINE uint64_t cost_branch256(const unsigned int ct[2], vpx_prob p) {
33*fb1b10abSAndroid Build Coastguard Worker return (uint64_t)ct[0] * vp9_cost_zero(p) + (uint64_t)ct[1] * vp9_cost_one(p);
34*fb1b10abSAndroid Build Coastguard Worker }
35*fb1b10abSAndroid Build Coastguard Worker
treed_cost(vpx_tree tree,const vpx_prob * probs,int bits,int len)36*fb1b10abSAndroid Build Coastguard Worker static INLINE int treed_cost(vpx_tree tree, const vpx_prob *probs, int bits,
37*fb1b10abSAndroid Build Coastguard Worker int len) {
38*fb1b10abSAndroid Build Coastguard Worker int cost = 0;
39*fb1b10abSAndroid Build Coastguard Worker vpx_tree_index i = 0;
40*fb1b10abSAndroid Build Coastguard Worker
41*fb1b10abSAndroid Build Coastguard Worker do {
42*fb1b10abSAndroid Build Coastguard Worker const int bit = (bits >> --len) & 1;
43*fb1b10abSAndroid Build Coastguard Worker cost += vp9_cost_bit(probs[i >> 1], bit);
44*fb1b10abSAndroid Build Coastguard Worker i = tree[i + bit];
45*fb1b10abSAndroid Build Coastguard Worker } while (len);
46*fb1b10abSAndroid Build Coastguard Worker
47*fb1b10abSAndroid Build Coastguard Worker return cost;
48*fb1b10abSAndroid Build Coastguard Worker }
49*fb1b10abSAndroid Build Coastguard Worker
50*fb1b10abSAndroid Build Coastguard Worker void vp9_cost_tokens(int *costs, const vpx_prob *probs, vpx_tree tree);
51*fb1b10abSAndroid Build Coastguard Worker void vp9_cost_tokens_skip(int *costs, const vpx_prob *probs, vpx_tree tree);
52*fb1b10abSAndroid Build Coastguard Worker
53*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus
54*fb1b10abSAndroid Build Coastguard Worker } // extern "C"
55*fb1b10abSAndroid Build Coastguard Worker #endif
56*fb1b10abSAndroid Build Coastguard Worker
57*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VP9_ENCODER_VP9_COST_H_
58