From: Jingning Han Date: Fri, 30 Sep 2016 16:10:26 +0000 (-0700) Subject: Set spatial neighbor search resolution 16x16 for block size 64x64 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=75e513f126adb60061e02856bef8ae3078769d26;p=libvpx Set spatial neighbor search resolution 16x16 for block size 64x64 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 --- diff --git a/av1/common/mvref_common.c b/av1/common/mvref_common.c index 2b63fd5ca..4fdeefe96 100644 --- a/av1/common/mvref_common.c +++ b/av1/common/mvref_common.c @@ -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; } }