shithub: libvpx

Download patch

ref: 5d8877a9445c8517ffef5d5773d4e7fe850ad875
parent: 1c9af9833d5b1d61abe76343129c61ac33dc9fb3
parent: effd974b16d4ac8bdb2415b25ba39b09a0e280bf
author: paulwilkins <paulwilkins@google.com>
date: Tue Apr 21 22:25:38 EDT 2015

Merge "Limit arf interval for low fpf clips."

--- a/vp9/encoder/vp9_firstpass.c
+++ b/vp9/encoder/vp9_firstpass.c
@@ -1852,6 +1852,8 @@
       active_max_gf_interval = 12 + MIN(4, (int_lbq / 6));
       if (active_max_gf_interval > rc->max_gf_interval)
         active_max_gf_interval = rc->max_gf_interval;
+      if (active_max_gf_interval < active_min_gf_interval)
+        active_max_gf_interval = active_min_gf_interval;
     }
   }
 
--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -1612,8 +1612,11 @@
 void vp9_rc_set_gf_max_interval(const VP9_COMP *const cpi,
                                 RATE_CONTROL *const rc) {
   const VP9EncoderConfig *const oxcf = &cpi->oxcf;
-  // Set Maximum gf/arf interval
-  rc->max_gf_interval = 16;
+  // Set Maximum gf/arf interval.
+  rc->max_gf_interval =
+    MIN(16, (int)(cpi->framerate / 2.0));
+  // Round up to next even number if odd.
+  rc->max_gf_interval += (rc->max_gf_interval & 0x01);
 
   // Extended interval for genuinely static scenes
   rc->static_scene_max_gf_interval = MAX_LAG_BUFFERS * 2;