rtc: Fix to usable_ref_frame in nonrd pickmode
When frames_since_golden = 0, set
skip_ref_find_pred[GOLDEN] to 1 and set
usable_ref_frame to LAST only if ALT_REF is
not used. This prevents ALT_REF reference
from being skipped when frame_since_golden = 0.
Also usable_ref_frame should be used in update
of rd_thresh after mode selection.
Smalll bdrate gain on low-res speed 7 of ~0.22.
Negligible speed impact observed on QVGA clip.
Change-Id: I497cee3704a2ab034edae55c749eb6b4e75d6265
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 12b1cf2..614ffdb 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -1481,7 +1481,8 @@
cpi->sf.use_nonrd_altref_frame ? ALTREF_FRAME : GOLDEN_FRAME;
if (cpi->rc.frames_since_golden == 0 && gf_temporal_ref) {
- usable_ref_frame = LAST_FRAME;
+ skip_ref_find_pred[GOLDEN_FRAME] = 1;
+ if (!cpi->sf.use_nonrd_altref_frame) usable_ref_frame = LAST_FRAME;
}
const int mi_row = xd->mi_row;
@@ -2016,7 +2017,7 @@
intra_mode_list[i]);
}
} else {
- for (ref_frame = LAST_FRAME; ref_frame <= GOLDEN_FRAME; ++ref_frame) {
+ for (ref_frame = LAST_FRAME; ref_frame <= usable_ref_frame; ++ref_frame) {
PREDICTION_MODE this_mode;
if (best_pickmode.best_ref_frame != ref_frame) continue;
for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) {