From e55d3e6d1bc346200bb9694de31518b3770a4c0d Mon Sep 17 00:00:00 2001 From: Dmitry Kovalev Date: Tue, 19 Nov 2013 14:59:12 -0800 Subject: [PATCH] Cleaning up probability/cost functions. Change-Id: Ifad4b0e6355ce49fcc6f470becc080e8069452ee --- vp9/encoder/vp9_encodemv.c | 21 ++++++++------------- vp9/encoder/vp9_subexp.c | 1 - vp9/encoder/vp9_treewriter.h | 19 ++++--------------- 3 files changed, 12 insertions(+), 29 deletions(-) diff --git a/vp9/encoder/vp9_encodemv.c b/vp9/encoder/vp9_encodemv.c index 030ca6413..7e838c901 100644 --- a/vp9/encoder/vp9_encodemv.c +++ b/vp9/encoder/vp9_encodemv.c @@ -126,20 +126,15 @@ static void build_nmv_component_cost_table(int *mvcost, static int update_mv(vp9_writer *w, const unsigned int ct[2], vp9_prob *cur_p, vp9_prob upd_p) { - const vp9_prob new_p = get_binary_prob(ct[0], ct[1]); - vp9_prob mod_p = new_p | 1; - const int cur_b = cost_branch256(ct, *cur_p); - const int mod_b = cost_branch256(ct, mod_p); - const int cost = 7 * 256 + (vp9_cost_one(upd_p) - vp9_cost_zero(upd_p)); - if (cur_b - mod_b > cost) { - *cur_p = mod_p; - vp9_write(w, 1, upd_p); - vp9_write_literal(w, mod_p >> 1, 7); - return 1; - } else { - vp9_write(w, 0, upd_p); - return 0; + const vp9_prob new_p = get_binary_prob(ct[0], ct[1]) | 1; + const int update = cost_branch256(ct, *cur_p) + vp9_cost_zero(upd_p) > + cost_branch256(ct, new_p) + vp9_cost_one(upd_p) + 7 * 256; + vp9_write(w, update, upd_p); + if (update) { + *cur_p = new_p; + vp9_write_literal(w, new_p >> 1, 7); } + return update; } static void counts_to_nmv_context( diff --git a/vp9/encoder/vp9_subexp.c b/vp9/encoder/vp9_subexp.c index 387fc9056..f31e568b7 100644 --- a/vp9/encoder/vp9_subexp.c +++ b/vp9/encoder/vp9_subexp.c @@ -14,7 +14,6 @@ #include "vp9/encoder/vp9_boolhuff.h" #include "vp9/encoder/vp9_treewriter.h" -#define vp9_cost_upd ((int)(vp9_cost_one(upd) - vp9_cost_zero(upd)) >> 8) #define vp9_cost_upd256 ((int)(vp9_cost_one(upd) - vp9_cost_zero(upd))) static int update_bits[255]; diff --git a/vp9/encoder/vp9_treewriter.h b/vp9/encoder/vp9_treewriter.h index eeda5cda7..41d1bfb83 100644 --- a/vp9/encoder/vp9_treewriter.h +++ b/vp9/encoder/vp9_treewriter.h @@ -19,31 +19,20 @@ #include "vp9/encoder/vp9_boolhuff.h" /* for now */ - #define vp9_write_prob(w, v) vp9_write_literal((w), (v), 8) -/* Approximate length of an encoded bool in 256ths of a bit at given prob */ +#define vp9_cost_zero(prob) (vp9_prob_cost[prob]) -#define vp9_cost_zero(x) (vp9_prob_cost[x]) -#define vp9_cost_one(x) vp9_cost_zero(vp9_complement(x)) +#define vp9_cost_one(prob) vp9_cost_zero(vp9_complement(prob)) -#define vp9_cost_bit(x, b) vp9_cost_zero((b) ? vp9_complement(x) : (x)) +#define vp9_cost_bit(prob, bit) vp9_cost_zero((bit) ? vp9_complement(prob) \ + : (prob)) -/* VP8BC version is scaled by 2^20 rather than 2^8; see bool_coder.h */ - - -/* Both of these return bits, not scaled bits. */ static INLINE unsigned int cost_branch256(const unsigned int ct[2], vp9_prob p) { return ct[0] * vp9_cost_zero(p) + ct[1] * vp9_cost_one(p); } -static INLINE unsigned int cost_branch(const unsigned int ct[2], - vp9_prob p) { - return cost_branch256(ct, p) >> 8; -} - - static INLINE void treed_write(vp9_writer *w, vp9_tree tree, const vp9_prob *probs, int bits, int len) {