]> granicus.if.org Git - libvpx/commitdiff
Unify set_arf_sign_bias function
authorJingning Han <jingning@google.com>
Tue, 21 Aug 2018 00:03:07 +0000 (17:03 -0700)
committerJingning Han <jingning@google.com>
Tue, 21 Aug 2018 00:07:59 +0000 (17:07 -0700)
Determine if an ARF is on the future side by checking if its
offset meets the gop frame length. This unifies the support to
single- and multiple-layer ARF cases.

Change-Id: I5ab26f54311c345a9b574ffca5ff0a8dbcf4c031

vp9/encoder/vp9_encoder.c

index ff147a8e694f16a350f0a10759ff0331b8e7ce62..98da319562fe37099dd20b865b4d9a99fd33d353 100644 (file)
@@ -4517,18 +4517,14 @@ YV12_BUFFER_CONFIG *vp9_scale_if_required(
 
 static void set_arf_sign_bias(VP9_COMP *cpi) {
   VP9_COMMON *const cm = &cpi->common;
-  int arf_sign_bias;
-
-  if ((cpi->oxcf.pass == 2) && cpi->multi_arf_allowed) {
-    const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
-    arf_sign_bias = cpi->rc.source_alt_ref_active &&
-                    (!cpi->refresh_alt_ref_frame ||
-                     (gf_group->rf_level[gf_group->index] == GF_ARF_LOW));
-  } else {
-    arf_sign_bias =
-        (cpi->rc.source_alt_ref_active && !cpi->refresh_alt_ref_frame);
-  }
-  cm->ref_frame_sign_bias[ALTREF_FRAME] = arf_sign_bias;
+  const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
+  const int gfg_index = gf_group->index;
+
+  // If arf_src_offset is less than the GOP length, its arf is on the direction
+  // 1 side.
+  cm->ref_frame_sign_bias[ALTREF_FRAME] =
+      cpi->rc.source_alt_ref_active &&
+      gf_group->arf_src_offset[gfg_index] < cpi->rc.baseline_gf_interval - 1;
 }
 
 static int setup_interp_filter_search_mask(VP9_COMP *cpi) {