lc-dec: Tune dual_sgr_penalty_level for improved decoder speed
This patch adjusts the level of dual_sgr_penalty_level speed
feature for non-boosted frames to:
• level 3 for vertical shorts resolution
• level 2 for HD resolution
The change increases the bias against dual-sgr filter selection
during encoding, which reduces computational complexity of the
decoder.
Performance results of encoder and decoder for the streams
generated with low complexity decode enabled.
Decode Time BD-Rate Loss(%)
cpu Resolution Reduction(%) avg.psnr ssim vmaf vmaf_neg
1 608p 2.377 0.2648 0.3932 0.0231 0.0329
2 608p 1.678 0.2192 0.2333 -0.0402 -0.0384
3 608p 1.241 0.1515 0.1984 -0.1550 -0.0645
1 HDRES2 1.224 0.1123 0.1019 0.0973 0.0763
2 HDRES2 1.029 0.0905 0.0646 -0.0154 -0.0087
3 HDRES2 1.653 0.0721 0.0279 -0.2055 -0.1124
STATS_CHANGED for low complexity decode, 608p and hd-res.
Change-Id: I912902c2d9ad8374b6fddadabe2d1716d404cf33
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 7b58a73..358ee54 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -603,6 +603,7 @@
const FRAME_UPDATE_TYPE update_type =
get_frame_update_type(&cpi->ppi->gf_group, cpi->gf_frame_index);
const bool is_vertical_video = cm->width < cm->height;
+ const int boosted = frame_is_boosted(cpi);
if (is_608p_or_larger) {
sf->lpf_sf.skip_loop_filter_using_filt_error =
@@ -619,9 +620,11 @@
if (leaf_and_overlay_frames) sf->gm_sf.gm_search_type = GM_DISABLE_SEARCH;
sf->hl_sf.ref_frame_mvs_lvl = 2;
+ sf->lpf_sf.dual_sgr_penalty_level = boosted ? 1 : 3;
} else if (!is_vertical_video && is_720p_or_larger) {
sf->gm_sf.gm_erroradv_tr_level = 1;
sf->hl_sf.ref_frame_mvs_lvl = 1;
+ sf->lpf_sf.dual_sgr_penalty_level = boosted ? 1 : 2;
}
}