Update cdf and mode rate per superblock in RDO
Update cdf after each superblock being finalized, and re-compute
symbol costs. Affected symbols include prediction parameters and
tx type.
BDRate: -0.119% lowres, -0.092% midres
Change-Id: I724900ac04f725910ed7055a18c2f6a139469b52
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index b2c2a55..88e2b7f 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -9149,7 +9149,6 @@
int best_tmp_rate_mv = rate_mv;
int tmp_skip_txfm_sb;
int64_t tmp_skip_sse_sb;
- int compound_type_cost[COMPOUND_TYPES];
DECLARE_ALIGNED(16, uint8_t, pred0[2 * MAX_SB_SQUARE]);
DECLARE_ALIGNED(16, uint8_t, pred1[2 * MAX_SB_SQUARE]);
uint8_t *preds0[1] = { pred0 };
@@ -9161,6 +9160,7 @@
masked_compound_used = masked_compound_used && cm->allow_masked_compound;
#endif // CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
COMPOUND_TYPE cur_type;
+ int best_compmode_interinter_cost = 0;
best_mv[0].as_int = cur_mv[0].as_int;
best_mv[1].as_int = cur_mv[1].as_int;
@@ -9182,8 +9182,6 @@
#endif // CONFIG_EXT_INTER && CONFIG_COMPOUND_SINGLEREF
if (masked_compound_used) {
- av1_cost_tokens(compound_type_cost, cm->fc->compound_type_prob[bsize],
- av1_compound_type_tree);
// get inter predictors to use for masked compound modes
av1_build_inter_predictors_for_planes_single_buf(
xd, bsize, 0, 0, mi_row, mi_col, 0, preds0, strides);
@@ -9205,7 +9203,7 @@
else
#endif // CONFIG_WEDGE && CONFIG_COMPOUND_SEGMENT
masked_type_cost +=
- compound_type_cost[mbmi->interinter_compound_type];
+ x->compound_type_cost[bsize][mbmi->interinter_compound_type];
}
rs2 = av1_cost_literal(get_interinter_compound_type_bits(
bsize, mbmi->interinter_compound_type)) +
@@ -9259,6 +9257,7 @@
#endif // CONFIG_COMPOUND_SEGMENT
best_compound_data.interinter_compound_type =
mbmi->interinter_compound_type;
+ best_compmode_interinter_cost = rs2;
if (have_newmv_in_inter_mode(this_mode)) {
if (use_masked_motion_search(cur_type)) {
best_tmp_rate_mv = tmp_rate_mv;
@@ -9303,12 +9302,7 @@
pred_exists = 0;
- compmode_interinter_cost =
- av1_cost_literal(get_interinter_compound_type_bits(
- bsize, mbmi->interinter_compound_type)) +
- (masked_compound_used
- ? compound_type_cost[mbmi->interinter_compound_type]
- : 0);
+ compmode_interinter_cost = best_compmode_interinter_cost;
}
#endif // CONFIG_WEDGE || CONFIG_COMPOUND_SEGMENT