]> granicus.if.org Git - libvpx/commitdiff
Set spatial neighbor search resolution 16x16 for block size 64x64
authorJingning Han <jingning@google.com>
Fri, 30 Sep 2016 16:10:26 +0000 (09:10 -0700)
committerJingning Han <jingning@google.com>
Fri, 30 Sep 2016 17:00:10 +0000 (10:00 -0700)
When the block has width/height above or equal to 64, use 16x16
block search step for reference motion vector search in the non-
immediate rows and columns.

Change-Id: If11ce97a9328b879f30ef87115086aa0cd985a2f

av1/common/mvref_common.c

index 2b63fd5ca8ed35e5e2ccf44f1c536993f41edef4..4fdeefe96b4e59e5cc0b6cde44408e8db5efd1b8 100644 (file)
@@ -161,22 +161,26 @@ static uint8_t scan_row_mbmi(const AV1_COMMON *cm, const MACROBLOCKD *xd,
 
   for (i = 0; i < xd->n8_w && *refmv_count < MAX_REF_MV_STACK_SIZE;) {
     POSITION mi_pos;
+    const int use_step_16 = (xd->n8_w >= 8);
+
     mi_pos.row = row_offset;
     mi_pos.col = i;
-
     if (is_inside(tile, mi_col, mi_row, &mi_pos)) {
       const MODE_INFO *const candidate_mi =
           xd->mi[mi_pos.row * xd->mi_stride + mi_pos.col];
       const MB_MODE_INFO *const candidate = &candidate_mi->mbmi;
-      const int len =
+      int len =
           AOMMIN(xd->n8_w, num_8x8_blocks_wide_lookup[candidate->sb_type]);
-
+      if (use_step_16) len = AOMMAX(2, len);
       newmv_count += add_ref_mv_candidate(
           candidate_mi, candidate, rf, refmv_count, ref_mv_stack,
           cm->allow_high_precision_mv, len, block, mi_pos.col);
       i += len;
     } else {
-      ++i;
+      if (use_step_16)
+        i += 2;
+      else
+        ++i;
     }
   }
 
@@ -193,22 +197,26 @@ static uint8_t scan_col_mbmi(const AV1_COMMON *cm, const MACROBLOCKD *xd,
 
   for (i = 0; i < xd->n8_h && *refmv_count < MAX_REF_MV_STACK_SIZE;) {
     POSITION mi_pos;
+    const int use_step_16 = (xd->n8_h >= 8);
+
     mi_pos.row = i;
     mi_pos.col = col_offset;
-
     if (is_inside(tile, mi_col, mi_row, &mi_pos)) {
       const MODE_INFO *const candidate_mi =
           xd->mi[mi_pos.row * xd->mi_stride + mi_pos.col];
       const MB_MODE_INFO *const candidate = &candidate_mi->mbmi;
-      const int len =
+      int len =
           AOMMIN(xd->n8_h, num_8x8_blocks_high_lookup[candidate->sb_type]);
-
+      if (use_step_16) len = AOMMAX(2, len);
       newmv_count += add_ref_mv_candidate(
           candidate_mi, candidate, rf, refmv_count, ref_mv_stack,
           cm->allow_high_precision_mv, len, block, mi_pos.col);
       i += len;
     } else {
-      ++i;
+      if (use_step_16)
+        i += 2;
+      else
+        ++i;
     }
   }