]> granicus.if.org Git - libvpx/commitdiff
vp9 level targeting: more strict constraint on min_gf_interval
authorhui su <huisu@google.com>
Wed, 7 Jun 2017 22:50:36 +0000 (15:50 -0700)
committerhui su <huisu@google.com>
Thu, 8 Jun 2017 00:40:25 +0000 (17:40 -0700)
min_gf_interval should be no less than min_altref_distance + 1,
as the encoder may produce bitstream with alt-ref distance being
min_gf_interval - 1.

BUG=b/38450599

Change-Id: Ifb733daa643ebc668d1b23e1ce92db94b66dabe8

vp9/vp9_cx_iface.c

index 25fc80a9a1eb8f1f4fef3d7038962b32aa3de314..bb6b30bd4678e30bda20f5cf8fc21a71ebd13167 100644 (file)
@@ -425,10 +425,16 @@ static void config_target_level(VP9EncoderConfig *oxcf) {
   oxcf->worst_allowed_q = vp9_quantizer_to_qindex(63);
 
   // Adjust minimum art-ref distance.
-  if (oxcf->min_gf_interval <
-      (int)vp9_level_defs[target_level_index].min_altref_distance)
+  // min_gf_interval should be no less than min_altref_distance + 1,
+  // as the encoder may produce bitstream with alt-ref distance being
+  // min_gf_interval - 1.
+  if (oxcf->min_gf_interval <=
+      (int)vp9_level_defs[target_level_index].min_altref_distance) {
     oxcf->min_gf_interval =
-        (int)vp9_level_defs[target_level_index].min_altref_distance;
+        (int)vp9_level_defs[target_level_index].min_altref_distance + 1;
+    oxcf->max_gf_interval =
+        VPXMAX(oxcf->max_gf_interval, oxcf->min_gf_interval);
+  }
 
   // Adjust maximum column tiles.
   if (vp9_level_defs[target_level_index].max_col_tiles <