RTC: Remove sad_based_comp_prune speed feature
Change-Id: I35f4a7d0914284bc780a2da85618f643c98eebaa
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index b11b30a..d2c81df 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -2576,66 +2576,6 @@
}
}
-static int skip_comp_based_on_sad(AV1_COMP *cpi, MACROBLOCK *x,
- const int mi_row, const int mi_col,
- BLOCK_SIZE bsize) {
- AV1_COMMON *const cm = &cpi->common;
- assert(!(mi_row % 16) && !(mi_col % 16));
- const int sb_size_by_mb = (cm->seq_params->sb_size == BLOCK_128X128)
- ? (cm->seq_params->mib_size >> 1)
- : cm->seq_params->mib_size;
- const int sb_cols =
- (cm->mi_params.mi_cols + sb_size_by_mb - 1) / sb_size_by_mb;
- const uint64_t sad_skp_comp_th[2][3] = { { 2700, 3100 }, // CPU 9
- { 2700, 3200 } }; // CPU 10
- const uint64_t sad_blkwise_var_th = 5000;
- const float qindex_th_scale[5] = { 0.75f, 0.9f, 1.0f, 1.1f, 1.25f };
- const int qindex_band = (5 * x->qindex) >> QINDEX_BITS;
- assert(qindex_band < 5);
- const int sp_idx = (cpi->sf.rt_sf.sad_based_comp_prune >= 2);
- const int bsize_idx = (bsize == BLOCK_128X128);
- const uint64_t sad_skp_comp_th_val = (uint64_t)(
- sad_skp_comp_th[sp_idx][bsize_idx] * qindex_th_scale[qindex_band]);
- uint64_t blk_sad = 0, sad00, sad01, sad10, sad11, min_sad, max_sad;
- const int sbi_col = mi_col / 16;
- const int sbi_row = mi_row / 16;
- const uint64_t *cur_blk_sad =
- &cpi->src_sad_blk_64x64[sbi_col + sbi_row * sb_cols];
-
- if (bsize == BLOCK_128X128) {
- sad00 = cur_blk_sad[0];
- sad01 = cur_blk_sad[1];
- sad10 = cur_blk_sad[sb_cols];
- sad11 = cur_blk_sad[1 + sb_cols];
- min_sad = AOMMIN(AOMMIN(AOMMIN(sad00, sad01), sad10), sad11);
- max_sad = AOMMAX(AOMMAX(AOMMAX(sad00, sad01), sad10), sad11);
- if (max_sad - min_sad > sad_blkwise_var_th) return 0;
- blk_sad = (sad00 + sad01 + sad10 + sad11 + 2) >> 2;
- } else if (bsize == BLOCK_128X64) {
- sad00 = cur_blk_sad[0];
- sad01 = cur_blk_sad[1];
- min_sad = AOMMIN(sad00, sad01);
- max_sad = AOMMAX(sad00, sad01);
- if (max_sad - min_sad > sad_blkwise_var_th) return 0;
- blk_sad = (sad00 + sad01 + 1) >> 1;
- } else if (bsize == BLOCK_64X128) {
- sad00 = cur_blk_sad[0];
- sad10 = cur_blk_sad[sb_cols];
- min_sad = AOMMIN(sad00, sad10);
- max_sad = AOMMAX(sad00, sad10);
- if (max_sad - min_sad > sad_blkwise_var_th) return 0;
- blk_sad = (sad00 + sad10 + 1) >> 1;
- } else if (bsize <= BLOCK_64X64) {
- blk_sad = cur_blk_sad[0];
- } else {
- assert(0);
- }
-
- if (blk_sad < sad_skp_comp_th_val) return 1;
-
- return 0;
-}
-
// Prune compound mode if the single mode variance is lower than a fixed
// percentage of the median value.
static bool skip_comp_based_on_var(
@@ -2961,16 +2901,6 @@
tot_num_comp_modes = 0;
}
- // Skip compound mode based on sad
- // Temporarily disable this with a 0 flag. Currently we cannot simply turn off
- // cpi->sf.rt_sf.sad_based_comp_prune as it causes unexpected stats changed.
- // TODO(chiyotsai@google.com): Figure remove the 0 from the conditional.
- if (0 && tot_num_comp_modes && cpi->sf.rt_sf.sad_based_comp_prune &&
- bsize >= BLOCK_64X64 && cpi->src_sad_blk_64x64 &&
- skip_comp_based_on_sad(cpi, x, mi_row, mi_col, bsize)) {
- tot_num_comp_modes = 0;
- }
-
for (MV_REFERENCE_FRAME ref_frame_iter = LAST_FRAME;
ref_frame_iter <= ALTREF_FRAME; ++ref_frame_iter) {
if (use_ref_frame_mask[ref_frame_iter]) {
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index b9411ab..5e4b8a1 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -1340,12 +1340,10 @@
if (speed >= 7) sf->rt_sf.reduce_mv_pel_precision = 1;
if (speed >= 9) {
sf->rt_sf.sad_based_adp_altref_lag = 1;
- sf->rt_sf.sad_based_comp_prune = 1;
sf->rt_sf.reduce_mv_pel_precision = 0;
}
if (speed >= 10) {
sf->rt_sf.sad_based_adp_altref_lag = 3;
- sf->rt_sf.sad_based_comp_prune = 2;
sf->rt_sf.reduce_mv_pel_precision = 2;
}
}
@@ -1377,7 +1375,6 @@
cpi->svc.ref_frame_comp[2] && cpi->svc.reference[ALTREF_FRAME - 1];
} else {
sf->rt_sf.use_comp_ref_nonrd = 0;
- sf->rt_sf.sad_based_comp_prune = 0;
}
if (speed <= 9 && cpi->svc.number_temporal_layers > 2 &&
cpi->svc.temporal_layer_id == 0)
@@ -1403,7 +1400,6 @@
sf->rt_sf.skip_cdef_sb = 1;
sf->rt_sf.use_rtc_tf = 0;
sf->rt_sf.use_comp_ref_nonrd = 0;
- sf->rt_sf.sad_based_comp_prune = 0;
sf->rt_sf.source_metrics_sb_nonrd = 1;
if (cpi->rc.high_source_sad == 1) {
sf->rt_sf.prefer_large_partition_blocks = 0;
@@ -2045,7 +2041,6 @@
rt_sf->sad_based_adp_altref_lag = 0;
rt_sf->partition_direct_merging = 0;
rt_sf->var_part_based_on_qidx = 0;
- rt_sf->sad_based_comp_prune = 0;
rt_sf->tx_size_level_based_on_qstep = 0;
rt_sf->reduce_zeromv_mvres = false;
rt_sf->vbp_prune_16x16_split_using_min_max_sub_blk_var = false;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index fad0774..2396ca2 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -1556,9 +1556,6 @@
// Enable/disable partition direct merging.
int partition_direct_merging;
- // SAD based compound mode pruning
- int sad_based_comp_prune;
-
// Level of aggressiveness for obtaining tx size based on qstep
int tx_size_level_based_on_qstep;