ref: 3861b25be1ac3f7c137e6058f91f8f6c90f4d28e
parent: 5b3d3b190947fa251ef4d2094f548f463c9cf5d9
author: Marco <[email protected]>
date: Thu Apr 7 13:20:16 EDT 2016
vp9: Fix to active_best for GF/ARF in 1 pass vbr. Correct the setting of Q basis of GF/ARF in 1 pass vbr. Existing logic would switch to using avg_QP of key frame if avg_QP of inter is less than active worst (even if key frame is not last frame). Instead fix the logic (as per the comment) to use the lower of active_worst_quality and avg_Q for inter as basis for GF/ARF active_best_quality (unless last frame was key frame). Increase in metrics: AvgPSNR/SSIM up by ~0.7/0.3 on ytlive set. Change-Id: I9a628378ec6684bfda9457ebfc2384ef6d8579f7
--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -882,9 +882,12 @@
// Use the lower of active_worst_quality and recent
// average Q as basis for GF/ARF best Q limit unless last frame was
// a key frame.
- if (rc->frames_since_key > 1 &&
- rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) {
- q = rc->avg_frame_qindex[INTER_FRAME];
+ if (rc->frames_since_key > 1) {
+ if (rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) {
+ q = rc->avg_frame_qindex[INTER_FRAME];
+ } else {
+ q = active_worst_quality;
+ }
} else {
q = rc->avg_frame_qindex[KEY_FRAME];
}