shithub: libvpx

Download patch

ref: d488236ce3f46c70796df77c4a0f26972e056bbc
parent: 2e0841931c76e3433242fa9ea4c6b1d361b88371
author: Marco <marpan@google.com>
date: Fri Apr 15 06:06:18 EDT 2016

vp9: Adjustment to active_best_quality for inter_frame, 1 pass vbr.

Change only affects 1 pass vbr.

Use a q value somewhat larger (~6%) than avg_frame_qindex[INTER]
as basis for active_best_quality for inter-frames.
And use the minium of this (avg_frame_qindex) and the active_worst_quality.

This reduces some overshoot in ytlive clips.
Overall small but positive average increase in metrics (up on average ~0.2%).

Change-Id: Icdbaae7872d5675fd38a13c0ec6ce0e2e3b919ce

--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -948,11 +948,15 @@
                              FIXED_GF_INTERVAL], cm->bit_depth);
       active_best_quality = VPXMAX(qindex + delta_qindex, rc->best_quality);
     } else {
-      // Use the lower of active_worst_quality and recent/average Q.
-      if (cm->current_video_frame > 1)
-        active_best_quality = inter_minq[rc->avg_frame_qindex[INTER_FRAME]];
-      else
+      // Use the min of the average Q (with some increase) and
+      // active_worst_quality as basis for active_best.
+      if (cm->current_video_frame > 1) {
+        q = VPXMIN(((17 * rc->avg_frame_qindex[INTER_FRAME]) >> 4),
+                    active_worst_quality);
+        active_best_quality = inter_minq[q];
+      } else {
         active_best_quality = inter_minq[rc->avg_frame_qindex[KEY_FRAME]];
+      }
       // For the constrained quality mode we don't want
       // q to fall below the cq level.
       if ((oxcf->rc_mode == VPX_CQ) &&