rtc: Disable qp-based gf refresh at speed 5
Added a speed feature for qp-based gf refresh, and turned it off at
speed 5 since it didn't work well while gf_boost > 0. This change
didn't affect performance much, and brought coding gains if using
"--gf-cbr-boost" > 0. Borg test result at rt speed 5:
gf_boost: avg_psnr: ovr_psnr: ssim: encoding_spdup:
rtc_derf:
0 -0.021 -0.012 0.038 -0.474
50 -0.191 -0.19 -0.201 -0.353
100 -0.48 -0.391 -0.594 -0.248
200 -0.807 -0.565 -1.26 -0.021
rtc set:
0 0 -0.04 -0.006 -0.459
50 -0.188 -0.227 -0.21 -0.393
100 -0.279 -0.248 -0.314 -0.385
200 -0.551 -0.398 -0.77 -0.221
STATS_CHANGED for rt speed 5
Change-Id: I97c4085c096490b61189339f00056a691adc558b
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index ae264be..231c684 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -2456,7 +2456,8 @@
// selected for this frame. This is for CBR with 1 layer/non-svc RTC mode.
if (!frame_is_intra_only(cm) && cpi->oxcf.rc_cfg.mode == AOM_CBR &&
cpi->oxcf.mode == REALTIME && svc->number_spatial_layers == 1 &&
- svc->number_temporal_layers == 1 && !cpi->rc.rtc_external_ratectrl)
+ svc->number_temporal_layers == 1 && !cpi->rc.rtc_external_ratectrl &&
+ sf->rt_sf.gf_refresh_based_on_qp)
av1_adjust_gf_refresh_qp_one_pass_rt(cpi);
#if CONFIG_COLLECT_COMPONENT_TIMING
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 49d154e..8c24706 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -1465,6 +1465,8 @@
sf->tx_sf.tx_type_search.fast_inter_tx_type_prob_thresh = 0;
sf->inter_sf.prune_warped_prob_thresh = 8;
sf->inter_sf.extra_prune_warped = 1;
+
+ sf->rt_sf.gf_refresh_based_on_qp = 1;
sf->rt_sf.prune_inter_modes_wrt_gf_arf_based_on_sad = 1;
sf->rt_sf.var_part_split_threshold_shift = 7;
}
@@ -1882,6 +1884,7 @@
rt_sf->force_half_pel_block = 0;
rt_sf->prune_intra_mode_based_on_mv_range = 0;
rt_sf->var_part_split_threshold_shift = 7;
+ rt_sf->gf_refresh_based_on_qp = 0;
}
void av1_set_speed_features_framesize_dependent(AV1_COMP *cpi, int speed) {
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 025ce2d..690c030 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -1384,6 +1384,9 @@
// based partitioning. The minimum values should be 7 to avoid left shifting
// by a negative number.
int var_part_split_threshold_shift;
+
+ // Enable GF refresh based on Q value.
+ int gf_refresh_based_on_qp;
} REAL_TIME_SPEED_FEATURES;
/*!\endcond */