rtc: golden update under cyclic refresh
For 1 pass rtc mode: when golden is used as
periodic updated reference (i.e., gld_fixed_slot),
disable the cyclic refresh on this golden update frame.
By turning off the lower segment delta-qp, the frame level
qp will generally be lower, making the gld update frame
overall slightly better reference.
On rtc_derf for speed 7: all clips show bdrate gain,
range from 0.1 to 1.2%, with average of 0.43%.
Negligible speed/fps change.
Change-Id: Ic2fab6d19e2b0563f1375bee439054d67be06636
diff --git a/av1/encoder/aq_cyclicrefresh.c b/av1/encoder/aq_cyclicrefresh.c
index 49221a6..738a02a 100644
--- a/av1/encoder/aq_cyclicrefresh.c
+++ b/av1/encoder/aq_cyclicrefresh.c
@@ -38,6 +38,7 @@
assert(MAXQ <= 255);
memset(cr->last_coded_q_map, MAXQ, last_coded_q_map_size);
cr->avg_frame_low_motion = 0.0;
+ cr->gld_fixed_slot = 0;
return cr;
}
@@ -343,6 +344,7 @@
cr->apply_cyclic_refresh = 1;
if (frame_is_intra_only(cm) || is_lossless_requested(&cpi->oxcf) ||
cpi->svc.temporal_layer_id > 0 ||
+ (cr->gld_fixed_slot && cpi->refresh_golden_frame) ||
rc->avg_frame_qindex[INTER_FRAME] < qp_thresh ||
(rc->frames_since_key > 20 &&
rc->avg_frame_qindex[INTER_FRAME] > qp_max_thresh) ||
diff --git a/av1/encoder/aq_cyclicrefresh.h b/av1/encoder/aq_cyclicrefresh.h
index ee62f6a..304c598 100644
--- a/av1/encoder/aq_cyclicrefresh.h
+++ b/av1/encoder/aq_cyclicrefresh.h
@@ -67,6 +67,7 @@
int apply_cyclic_refresh;
int cnt_zeromv;
double avg_frame_low_motion;
+ int gld_fixed_slot;
};
struct AV1_COMP;
diff --git a/av1/encoder/ratectrl.c b/av1/encoder/ratectrl.c
index 01b6956..0573f18 100644
--- a/av1/encoder/ratectrl.c
+++ b/av1/encoder/ratectrl.c
@@ -1919,6 +1919,7 @@
cpi->ext_refresh_golden_frame = 1;
cpi->svc.refresh[gld_idx] = 1;
}
+ cpi->cyclic_refresh->gld_fixed_slot = gld_fixed_slot;
}
#define DEFAULT_KF_BOOST_RT 2300