Consolidate computations needed in the tpl synthesizer
Factor out common computations and remove unneeded ones from the
model synthesizer.
Change-Id: Ic160e70f6f4244066d0ede80f85d4a602be06a5c
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index c7b70ef..3526429 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -164,8 +164,6 @@
typedef struct TplDepStats {
int64_t intra_cost;
int64_t inter_cost;
- int64_t mc_flow;
- int64_t mc_dep_cost;
int64_t srcrf_dist;
int64_t recrf_dist;
int64_t srcrf_rate;
@@ -177,7 +175,6 @@
int64_t rec_rdcost;
int_mv mv;
int ref_frame_index;
- double quant_ratio;
#if !USE_TPL_CLASSIC_MODEL
int64_t mc_count;
int64_t mc_saved;
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 7b7cfba..5ddbb97 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -410,13 +410,6 @@
return width * height;
}
-static double iiratio_nonlinear(double iiratio) {
- double z = 8 * (iiratio - 0.5);
- double sigmoid = 1.0 / (1.0 + exp(-z));
- return sigmoid;
- return iiratio * iiratio;
-}
-
int av1_tpl_ptr_pos(AV1_COMP *cpi, int mi_row, int mi_col, int stride) {
const int right_shift = cpi->tpl_stats_block_mis_log2;
@@ -473,6 +466,16 @@
int grid_pos_col_base = round_floor(ref_pos_col, bw) * bw;
int block;
+ int64_t cur_dep_dist = tpl_stats_ptr->recrf_dist - tpl_stats_ptr->srcrf_dist;
+ int64_t mc_dep_dist = (int64_t)(
+ tpl_stats_ptr->mc_dep_dist *
+ ((double)(tpl_stats_ptr->recrf_dist - tpl_stats_ptr->srcrf_dist) /
+ tpl_stats_ptr->recrf_dist));
+ int64_t delta_rate = tpl_stats_ptr->recrf_rate - tpl_stats_ptr->srcrf_rate;
+ int64_t mc_dep_rate =
+ delta_rate_cost(tpl_stats_ptr->mc_dep_rate, tpl_stats_ptr->recrf_dist,
+ tpl_stats_ptr->srcrf_dist, pix_num);
+
for (block = 0; block < 4; ++block) {
int grid_pos_row = grid_pos_row_base + bh * (block >> 1);
int grid_pos_col = grid_pos_col_base + bw * (block & 0x01);
@@ -483,42 +486,12 @@
grid_pos_row, grid_pos_col, ref_pos_row, ref_pos_col, block, bsize);
int ref_mi_row = round_floor(grid_pos_row, bh) * mi_height;
int ref_mi_col = round_floor(grid_pos_col, bw) * mi_width;
-
- const double iiratio_nl = iiratio_nonlinear(
- (double)tpl_stats_ptr->inter_cost / tpl_stats_ptr->intra_cost);
- tpl_stats_ptr->mc_dep_cost =
- tpl_stats_ptr->intra_cost + tpl_stats_ptr->mc_flow;
- int64_t mc_flow =
- (int64_t)(tpl_stats_ptr->quant_ratio * tpl_stats_ptr->mc_dep_cost *
- (1.0 - iiratio_nl));
-
- int64_t cur_dep_dist =
- tpl_stats_ptr->recrf_dist - tpl_stats_ptr->srcrf_dist;
- int64_t mc_dep_dist = (int64_t)(
- tpl_stats_ptr->mc_dep_dist *
- ((double)(tpl_stats_ptr->recrf_dist - tpl_stats_ptr->srcrf_dist) /
- tpl_stats_ptr->recrf_dist));
-
- int64_t delta_rate =
- tpl_stats_ptr->recrf_rate - tpl_stats_ptr->srcrf_rate;
- int64_t mc_dep_rate =
- delta_rate_cost(tpl_stats_ptr->mc_dep_rate, tpl_stats_ptr->recrf_dist,
- tpl_stats_ptr->srcrf_dist, pix_num);
-
-#if !USE_TPL_CLASSIC_MODEL
- int64_t mc_saved = tpl_stats_ptr->intra_cost - tpl_stats_ptr->inter_cost;
-#endif // #if !USE_TPL_CLASSIC_MODEL
const int step = 1 << cpi->tpl_stats_block_mis_log2;
+
for (int idy = 0; idy < mi_height; idy += step) {
for (int idx = 0; idx < mi_width; idx += step) {
TplDepStats *des_stats = &ref_stats_ptr[av1_tpl_ptr_pos(
cpi, ref_mi_row + idy, ref_mi_col + idx, ref_tpl_frame->stride)];
- des_stats->mc_flow += (mc_flow * overlap_area) / pix_num;
-#if !USE_TPL_CLASSIC_MODEL
- des_stats->mc_count += overlap_area << TPL_DEP_COST_SCALE_LOG2;
- des_stats->mc_saved += (mc_saved * overlap_area) / pix_num;
-#endif // !USE_TPL_CLASSIC_MODEL
-
des_stats->mc_dep_dist +=
((cur_dep_dist + mc_dep_dist) * overlap_area) / pix_num;
des_stats->mc_dep_rate +=
@@ -588,7 +561,6 @@
tpl_ptr->recrf_rate = recrf_rate;
tpl_ptr->src_rdcost = src_rdcost;
tpl_ptr->rec_rdcost = rec_rdcost;
- tpl_ptr->quant_ratio = src_stats->quant_ratio;
tpl_ptr->mv.as_int = src_stats->mv.as_int;
tpl_ptr->ref_frame_index = src_stats->ref_frame_index;
++tpl_ptr;
@@ -739,8 +711,6 @@
&tpl_stats);
// Motion flow dependency dispenser.
- double quant_ratio = (double)recon_error / sse;
- tpl_stats.quant_ratio = quant_ratio;
tpl_model_store(cpi, tpl_frame->tpl_stats_ptr, mi_row, mi_col, bsize,
tpl_frame->stride, &tpl_stats);
}