]> granicus.if.org Git - libvpx/commitdiff
vp9 1pass vbr: Adjustment to gf interval.
authorMarco <marpan@google.com>
Wed, 3 Aug 2016 18:39:52 +0000 (11:39 -0700)
committerMarco <marpan@google.com>
Wed, 3 Aug 2016 22:36:27 +0000 (15:36 -0700)
Increase the minimum distance.
Reduces the overshoot somewhat on some clips,
small gain in avgPSNR (~0.1%) on ytlive set.

Change-Id: Id5ddde20c2907dbdb536e79542eff775019c142b

vp9/encoder/vp9_ratectrl.c

index 21038984bcb5d9f2f0b083cfb87c318145768058..5b3b244383374af5e49bf0b5ced3dbdc698cdb81 100644 (file)
@@ -1580,7 +1580,7 @@ void vp9_rc_get_one_pass_vbr_params(VP9_COMP *cpi) {
             VPXMIN(15, (3 * rc->baseline_gf_interval) >> 1);
       } else if (rc->avg_frame_low_motion < 20) {
         // Decrease gf interval for high motion case.
-        rc->baseline_gf_interval = VPXMAX(5, rc->baseline_gf_interval >> 1);
+        rc->baseline_gf_interval = VPXMAX(6, rc->baseline_gf_interval >> 1);
       }
       // Adjust boost and af_ratio based on avg_frame_low_motion, which varies
       // between 0 and 100 (stationary, 100% zero/small motion).
@@ -2185,10 +2185,9 @@ void adjust_gf_boost_lag_one_pass_vbr(VP9_COMP *cpi, uint64_t avg_sad_current) {
           VPXMIN(15, (3 * rc->baseline_gf_interval) >> 1);
     } else if (high_content) {
       rc->gfu_boost = DEFAULT_GF_BOOST >> 1;
-      if (rate_err > 3.0)
-        rc->baseline_gf_interval = VPXMAX(10, rc->baseline_gf_interval >> 1);
-      else
-        rc->baseline_gf_interval = VPXMAX(5, rc->baseline_gf_interval >> 1);
+      rc->baseline_gf_interval = (rate_err > 3.0) ?
+          VPXMAX(10, rc->baseline_gf_interval >> 1) :
+          VPXMAX(6, rc->baseline_gf_interval >> 1);
     }
     // Check for constraining gf_interval for up-coming scene/content changes,
     // or for up-coming key frame, whichever is closer.
@@ -2196,8 +2195,7 @@ void adjust_gf_boost_lag_one_pass_vbr(VP9_COMP *cpi, uint64_t avg_sad_current) {
     if (rc->high_source_sad_lagindex > 0 &&
         frame_constraint > rc->high_source_sad_lagindex)
       frame_constraint = rc->high_source_sad_lagindex;
-    if (steady_sad_lagindex > 0 && steady_sad_lagindex > 2 &&
-        frame_constraint > steady_sad_lagindex)
+    if (steady_sad_lagindex > 3 && frame_constraint > steady_sad_lagindex)
       frame_constraint = steady_sad_lagindex;
     adjust_gfint_frame_constraint(cpi, frame_constraint);
     rc->frames_till_gf_update_due = rc->baseline_gf_interval;