rtc: Fix update to actual_num_seg#_blocks
In the cyclic refresh: actual_num_seg#_blocks
from previous frame is used for setting the QP
on current frame. But for temporal layers cyclic
refresh is only used on TL0, so actual_num_seg#_blocks
is getting set to 0 every other frame (TL1),
which affects the rate control for TL0.
Fix is to only set actual_num_seg#_blocks to 0
for reset fraames (key, scene-change), and use
apply_cyclic_refresh to set to 0 before encoding
the frame.
This leads to slightly better rate-targeting.
Neutral stats change.
Change-Id: If7266e9d62fd7a04537758621d1a19473ef4e155
diff --git a/av1/encoder/aq_cyclicrefresh.c b/av1/encoder/aq_cyclicrefresh.c
index fd98fd2..be51ba1 100644
--- a/av1/encoder/aq_cyclicrefresh.c
+++ b/av1/encoder/aq_cyclicrefresh.c
@@ -551,6 +551,8 @@
cr->sb_index = 0;
cr->last_sb_index = 0;
cr->counter_encode_maxq_scene_change = 0;
+ cr->actual_num_seg1_blocks = 0;
+ cr->actual_num_seg2_blocks = 0;
}
return;
} else {
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 40b9fde..28f135b 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -1871,7 +1871,7 @@
// base_qindex
cm->delta_q_info.delta_q_present_flag &= quant_params->base_qindex > 0;
cm->delta_q_info.delta_lf_present_flag &= quant_params->base_qindex > 0;
- } else {
+ } else if (cpi->cyclic_refresh->apply_cyclic_refresh) {
cpi->cyclic_refresh->actual_num_seg1_blocks = 0;
cpi->cyclic_refresh->actual_num_seg2_blocks = 0;
}