Remove av1_cost_bit()
It's more efficient to use av1_cost_literal() instead.
Change-Id: I50727d4a4ee06492b373c2e7831c224c5eae8735
diff --git a/aom_dsp/bitwriter.h b/aom_dsp/bitwriter.h
index 6a71c2b..d6972a1 100644
--- a/aom_dsp/bitwriter.h
+++ b/aom_dsp/bitwriter.h
@@ -60,30 +60,10 @@
aom_daala_write(br, bit, probability);
}
-static INLINE void aom_write_record(aom_writer *br, int bit, int probability,
- TOKEN_STATS *token_stats) {
- aom_write(br, bit, probability);
-#if CONFIG_RD_DEBUG
- token_stats->cost += av1_cost_bit(probability, bit);
-#else
- (void)token_stats;
-#endif
-}
-
static INLINE void aom_write_bit(aom_writer *w, int bit) {
aom_write(w, bit, 128); // aom_prob_half
}
-static INLINE void aom_write_bit_record(aom_writer *w, int bit,
- TOKEN_STATS *token_stats) {
- aom_write_bit(w, bit);
-#if CONFIG_RD_DEBUG
- token_stats->cost += av1_cost_bit(128, bit); // aom_prob_half
-#else
- (void)token_stats;
-#endif
-}
-
static INLINE void aom_write_literal(aom_writer *w, int data, int bits) {
int bit;
diff --git a/av1/encoder/cost.h b/av1/encoder/cost.h
index 55a4af2..669f842 100644
--- a/av1/encoder/cost.h
+++ b/av1/encoder/cost.h
@@ -24,12 +24,6 @@
// The factor to scale from cost in bits to cost in av1_prob_cost units.
#define AV1_PROB_COST_SHIFT 9
-#define av1_cost_zero(prob) (av1_prob_cost[prob])
-
-#define av1_cost_one(prob) av1_cost_zero(256 - (prob))
-
-#define av1_cost_bit(prob, bit) av1_cost_zero((bit) ? 256 - (prob) : (prob))
-
// Cost of coding an n bit literal, using 128 (i.e. 50%) probability
// for each bit.
#define av1_cost_literal(n) ((n) * (1 << AV1_PROB_COST_SHIFT))
@@ -38,7 +32,7 @@
static INLINE int av1_cost_symbol(aom_cdf_prob p15) {
assert(0 < p15 && p15 < CDF_PROB_TOP);
const int shift = CDF_PROB_BITS - 1 - get_msb(p15);
- return av1_cost_zero(get_prob(p15 << shift, CDF_PROB_TOP)) +
+ return av1_prob_cost[get_prob(p15 << shift, CDF_PROB_TOP)] +
av1_cost_literal(shift);
}
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 614d180..946275b 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -253,14 +253,11 @@
eob_cost = txb_eob_costs->eob_cost[eob_multi_ctx][eob_pt - 1];
if (k_eob_offset_bits[eob_pt] > 0) {
- int eob_shift = k_eob_offset_bits[eob_pt] - 1;
- int bit = (eob_extra & (1 << eob_shift)) ? 1 : 0;
+ const int eob_shift = k_eob_offset_bits[eob_pt] - 1;
+ const int bit = (eob_extra & (1 << eob_shift)) ? 1 : 0;
eob_cost += txb_costs->eob_extra_cost[eob_pt][bit];
- for (int i = 1; i < k_eob_offset_bits[eob_pt]; i++) {
- eob_shift = k_eob_offset_bits[eob_pt] - 1 - i;
- bit = (eob_extra & (1 << eob_shift)) ? 1 : 0;
- eob_cost += av1_cost_bit(128, bit);
- }
+ const int offset_bits = k_eob_offset_bits[eob_pt];
+ if (offset_bits > 1) eob_cost += av1_cost_literal(offset_bits - 1);
}
return eob_cost;
}
@@ -747,14 +744,14 @@
}
if (is_nz) {
- int sign = (v < 0) ? 1 : 0;
+ const int sign = (v < 0) ? 1 : 0;
// sign bit cost
if (c == 0) {
int dc_sign_ctx = txb_ctx->dc_sign_ctx;
cost += coeff_costs->dc_sign_cost[dc_sign_ctx][sign];
} else {
- cost += av1_cost_bit(128, sign);
+ cost += av1_cost_literal(1);
}
if (level > NUM_BASE_LEVELS) {
int ctx;
@@ -772,19 +769,9 @@
if (level >= 1 + NUM_BASE_LEVELS + COEFF_BASE_RANGE) {
// residual cost
- int r = level - COEFF_BASE_RANGE - NUM_BASE_LEVELS;
- int ri = r;
- int length = 0;
-
- while (ri) {
- ri >>= 1;
- ++length;
- }
-
- for (ri = 0; ri < length - 1; ++ri) cost += av1_cost_bit(128, 0);
-
- for (ri = length - 1; ri >= 0; --ri)
- cost += av1_cost_bit(128, (r >> ri) & 0x01);
+ const int ri = level - COEFF_BASE_RANGE - NUM_BASE_LEVELS;
+ const int length = get_msb(ri) + 1;
+ cost += av1_cost_literal(2 * length);
}
}
}
@@ -809,7 +796,7 @@
if (coeff_idx == 0) {
return dc_sign_cost[dc_sign_ctx][sign];
} else {
- return av1_cost_bit(128, sign);
+ return av1_cost_literal(1);
}
}
static INLINE int get_golomb_cost(int abs_qc) {
diff --git a/av1/encoder/palette.c b/av1/encoder/palette.c
index 5fcbf9a..e61cd02c 100644
--- a/av1/encoder/palette.c
+++ b/av1/encoder/palette.c
@@ -125,7 +125,7 @@
cache_color_found, out_cache_colors);
const int total_bits =
n_cache + delta_encode_cost(out_cache_colors, n_out_cache, bit_depth, 1);
- return total_bits * av1_cost_bit(128, 0);
+ return av1_cost_literal(total_bits);
}
int av1_palette_color_cost_uv(const PALETTE_MODE_INFO *const pmi,
@@ -150,5 +150,5 @@
2 + bit_depth + (bits_v + 1) * (n - 1) - zero_count;
const int bits_using_raw = bit_depth * n;
total_bits += 1 + AOMMIN(bits_using_delta, bits_using_raw);
- return total_bits * av1_cost_bit(128, 0);
+ return av1_cost_literal(total_bits);
}
diff --git a/av1/encoder/rd.h b/av1/encoder/rd.h
index 31057cd..44f2f1b 100644
--- a/av1/encoder/rd.h
+++ b/av1/encoder/rd.h
@@ -382,7 +382,7 @@
int is_first,
const int *head_cost_table,
const int *tail_cost_table) {
- if (eob_val == LAST_EOB) return av1_cost_zero(128);
+ if (eob_val == LAST_EOB) return av1_cost_literal(1);
const int comb_symb = 2 * AOMMIN(token, TWO_TOKEN) - eob_val + is_first;
int cost = head_cost_table[comb_symb];
if (token > ONE_TOKEN) cost += tail_cost_table[token - TWO_TOKEN];
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 62911d0..d6edcf5 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -363,9 +363,9 @@
const int m = (1 << l) - n;
if (l == 0) return 0;
if (v < m)
- return (l - 1) * av1_cost_bit(128, 0);
+ return av1_cost_literal(l - 1);
else
- return l * av1_cost_bit(128, 0);
+ return av1_cost_literal(l);
}
// constants for prune 1 and prune 2 decision boundaries