Speed up inter frame rate-distortion optimization
The frame marker system supports one to map the reference frame
index into the natural order. It allows direct checking on the
efficacy of the reference frames given their relative locations
with respect to the current coding frame.
This commit uses such property to filter out reference frames
less likely to contribute coding gains from the rate-distortion
optimization process. For example, it takes out the check on
last2 / 3 frames, when their actual location is further away
from the golden frame.
The AWCY results show 0.6% performance regression. The encoding
speed gets doubled.
To use the speed up, one needs to turn on frame-marker experiment
before we turn it on by default, and enable selective_ref_frame
entry in the speed feature.
Change-Id: Ifb03ed90acd980bbc7ff1c2e17982e21e68d2588
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 76fc5fa..174d7cf 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -9947,6 +9947,25 @@
mbmi->interintra_mode = (INTERINTRA_MODE)(II_DC_PRED - 1);
#endif // CONFIG_INTERINTRA
+#if CONFIG_FRAME_MARKER
+ if (sf->selective_ref_frame) {
+ if (mbmi->ref_frame[0] == ALTREF2_FRAME ||
+ mbmi->ref_frame[1] == ALTREF2_FRAME)
+ if (cm->cur_frame->alt2_frame_offset < cm->frame_offset) continue;
+ if (mbmi->ref_frame[0] == BWDREF_FRAME ||
+ mbmi->ref_frame[1] == BWDREF_FRAME)
+ if (cm->cur_frame->bwd_frame_offset < cm->frame_offset) continue;
+ if (mbmi->ref_frame[0] == LAST3_FRAME ||
+ mbmi->ref_frame[1] == LAST3_FRAME)
+ if (cm->cur_frame->lst3_frame_offset <= cm->cur_frame->gld_frame_offset)
+ continue;
+ if (mbmi->ref_frame[0] == LAST2_FRAME ||
+ mbmi->ref_frame[1] == LAST2_FRAME)
+ if (cm->cur_frame->lst2_frame_offset <= cm->cur_frame->gld_frame_offset)
+ continue;
+ }
+#endif
+
if (ref_frame == INTRA_FRAME) {
RD_STATS rd_stats_y;
TX_SIZE uv_tx;