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); }