Allintra: Set aggressive cost update frequencies for speed 9
The cost update frequencies of coeff and mode symbols are
set as COST_UPD_OFF and COST_UPD_SBROW depending on the
resolution for speed >= 9.
For AVIF still image encode,
Encode time BD-Rate Loss(%)
cpu-used Reduction(%) avg.psnr ovr.psnr ssim
9 3.900 -0.0433 -0.0433 0.1134
STATS_CHANGED
Change-Id: Ia2e5ae6e09ba99d3edfeba89b55fad1af6dd7b34
diff --git a/av1/encoder/encodeframe_utils.c b/av1/encoder/encodeframe_utils.c
index 48d4adc..a86359f 100644
--- a/av1/encoder/encodeframe_utils.c
+++ b/av1/encoder/encodeframe_utils.c
@@ -1335,8 +1335,8 @@
/*! Checks whether to skip updating the entropy cost based on tile info.
*
- * This function contains codes common to both \ref skip_mv_cost_update and
- * \ref skip_dv_cost_update.
+ * This function contains the common code used to skip the cost update of coeff,
+ * mode, mv and dv symbols.
*/
static int skip_cost_update(const SequenceHeader *seq_params,
const TileInfo *const tile_info, const int mi_row,
@@ -1419,8 +1419,8 @@
if (mi_col != tile_info->mi_col_start) break;
AOM_FALLTHROUGH_INTENDED;
case COST_UPD_SB: // SB level
- if (cpi->sf.inter_sf.coeff_cost_upd_level == INTERNAL_COST_UPD_SBROW &&
- mi_col != tile_info->mi_col_start)
+ if (skip_cost_update(cm->seq_params, tile_info, mi_row, mi_col,
+ cpi->sf.inter_sf.coeff_cost_upd_level))
break;
av1_fill_coeff_costs(&x->coeff_costs, xd->tile_ctx, num_planes);
break;
@@ -1435,8 +1435,8 @@
if (mi_col != tile_info->mi_col_start) break;
AOM_FALLTHROUGH_INTENDED;
case COST_UPD_SB: // SB level
- if (cpi->sf.inter_sf.mode_cost_upd_level == INTERNAL_COST_UPD_SBROW &&
- mi_col != tile_info->mi_col_start)
+ if (skip_cost_update(cm->seq_params, tile_info, mi_row, mi_col,
+ cpi->sf.inter_sf.mode_cost_upd_level))
break;
av1_fill_mode_rates(cm, &x->mode_costs, xd->tile_ctx);
break;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 5c601a3..1d469f0 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -291,6 +291,10 @@
if (speed >= 9) {
// TODO(kyslov): add more speed features to control speed/quality
+ if (!is_4k_or_larger) {
+ sf->inter_sf.coeff_cost_upd_level = INTERNAL_COST_UPD_OFF;
+ sf->inter_sf.mode_cost_upd_level = INTERNAL_COST_UPD_OFF;
+ }
}
}
@@ -516,6 +520,9 @@
}
if (speed >= 9) {
+ sf->inter_sf.coeff_cost_upd_level = INTERNAL_COST_UPD_SBROW;
+ sf->inter_sf.mode_cost_upd_level = INTERNAL_COST_UPD_SBROW;
+
sf->rt_sf.nonrd_check_partition_merge_mode = 0;
sf->rt_sf.hybrid_intra_pickmode = 0;
}