From 8947b18fa35d45ab29c97a86da5149baecb62fde Mon Sep 17 00:00:00 2001 From: Hui Su Date: Tue, 21 Oct 2014 11:04:52 -0700 Subject: [PATCH] Move the definition of switchable filter numbers into enum INTERP_FILTER; Modify the macro ADD_MV_REF_LIST and IF_DIFF_REF_FRAME_ADD_MV. Change-Id: Ic36c9eb6ccb8ec324d991f7241e42b40b60b1dcb --- vp9/common/vp9_filter.h | 11 ++++------- vp9/common/vp9_mvref_common.c | 20 ++++++++++++-------- vp9/common/vp9_mvref_common.h | 17 ++++++++++------- vp9/encoder/vp9_pickmode.c | 8 +++++--- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/vp9/common/vp9_filter.h b/vp9/common/vp9_filter.h index 3377d45..d963ee2 100644 --- a/vp9/common/vp9_filter.h +++ b/vp9/common/vp9_filter.h @@ -31,17 +31,14 @@ typedef enum { EIGHTTAP = 0, EIGHTTAP_SMOOTH = 1, EIGHTTAP_SHARP = 2, + SWITCHABLE_FILTERS = 3, /* Number of switchable filters */ BILINEAR = 3, + // The codec can operate in four possible inter prediction filter mode: + // 8-tap, 8-tap-smooth, 8-tap-sharp, and switching between the three. + SWITCHABLE_FILTER_CONTEXTS = SWITCHABLE_FILTERS + 1, SWITCHABLE = 4 /* should be the last one */ } INTERP_FILTER; -// Number of switchable filters -#define SWITCHABLE_FILTERS 3 - -// The codec can operate in four possible inter prediction filter mode: -// 8-tap, 8-tap-smooth, 8-tap-sharp, and switching between the three. -#define SWITCHABLE_FILTER_CONTEXTS (SWITCHABLE_FILTERS + 1) - typedef int16_t InterpKernel[SUBPEL_TAPS]; const InterpKernel *vp9_get_interp_kernel(INTERP_FILTER filter); diff --git a/vp9/common/vp9_mvref_common.c b/vp9/common/vp9_mvref_common.c index 3b34050..b310eb4 100644 --- a/vp9/common/vp9_mvref_common.c +++ b/vp9/common/vp9_mvref_common.c @@ -45,9 +45,11 @@ static void find_mv_refs_idx(const VP9_COMMON *cm, const MACROBLOCKD *xd, different_ref_found = 1; if (candidate->ref_frame[0] == ref_frame) - ADD_MV_REF_LIST(get_sub_block_mv(candidate_mi, 0, mv_ref->col, block)); + ADD_MV_REF_LIST(get_sub_block_mv(candidate_mi, 0, mv_ref->col, block), + refmv_count, mv_ref_list, Done); else if (candidate->ref_frame[1] == ref_frame) - ADD_MV_REF_LIST(get_sub_block_mv(candidate_mi, 1, mv_ref->col, block)); + ADD_MV_REF_LIST(get_sub_block_mv(candidate_mi, 1, mv_ref->col, block), + refmv_count, mv_ref_list, Done); } } @@ -62,18 +64,18 @@ static void find_mv_refs_idx(const VP9_COMMON *cm, const MACROBLOCKD *xd, different_ref_found = 1; if (candidate->ref_frame[0] == ref_frame) - ADD_MV_REF_LIST(candidate->mv[0]); + ADD_MV_REF_LIST(candidate->mv[0], refmv_count, mv_ref_list, Done); else if (candidate->ref_frame[1] == ref_frame) - ADD_MV_REF_LIST(candidate->mv[1]); + ADD_MV_REF_LIST(candidate->mv[1], refmv_count, mv_ref_list, Done); } } // Check the last frame's mode and mv info. if (prev_mbmi) { if (prev_mbmi->ref_frame[0] == ref_frame) - ADD_MV_REF_LIST(prev_mbmi->mv[0]); + ADD_MV_REF_LIST(prev_mbmi->mv[0], refmv_count, mv_ref_list, Done); else if (prev_mbmi->ref_frame[1] == ref_frame) - ADD_MV_REF_LIST(prev_mbmi->mv[1]); + ADD_MV_REF_LIST(prev_mbmi->mv[1], refmv_count, mv_ref_list, Done); } // Since we couldn't find 2 mvs from the same reference frame @@ -87,14 +89,16 @@ static void find_mv_refs_idx(const VP9_COMMON *cm, const MACROBLOCKD *xd, * xd->mi_stride].src_mi->mbmi; // If the candidate is INTRA we don't want to consider its mv. - IF_DIFF_REF_FRAME_ADD_MV(candidate); + IF_DIFF_REF_FRAME_ADD_MV(candidate, ref_frame, ref_sign_bias, + refmv_count, mv_ref_list, Done); } } } // Since we still don't have a candidate we'll try the last frame. if (prev_mbmi) - IF_DIFF_REF_FRAME_ADD_MV(prev_mbmi); + IF_DIFF_REF_FRAME_ADD_MV(prev_mbmi, ref_frame, ref_sign_bias, refmv_count, + mv_ref_list, Done); Done: diff --git a/vp9/common/vp9_mvref_common.h b/vp9/common/vp9_mvref_common.h index a937b78..0e27e9d 100644 --- a/vp9/common/vp9_mvref_common.h +++ b/vp9/common/vp9_mvref_common.h @@ -158,29 +158,32 @@ static INLINE int_mv scale_mv(const MB_MODE_INFO *mbmi, int ref, // This macro is used to add a motion vector mv_ref list if it isn't // already in the list. If it's the second motion vector it will also // skip all additional processing and jump to done! -#define ADD_MV_REF_LIST(mv) \ +#define ADD_MV_REF_LIST(mv, refmv_count, mv_ref_list, Done) \ do { \ if (refmv_count) { \ - if ((mv).as_int != mv_ref_list[0].as_int) { \ - mv_ref_list[refmv_count] = (mv); \ + if ((mv).as_int != (mv_ref_list)[0].as_int) { \ + (mv_ref_list)[(refmv_count)] = (mv); \ goto Done; \ } \ } else { \ - mv_ref_list[refmv_count++] = (mv); \ + (mv_ref_list)[(refmv_count)++] = (mv); \ } \ } while (0) // If either reference frame is different, not INTRA, and they // are different from each other scale and add the mv to our list. -#define IF_DIFF_REF_FRAME_ADD_MV(mbmi) \ +#define IF_DIFF_REF_FRAME_ADD_MV(mbmi, ref_frame, ref_sign_bias, refmv_count, \ + mv_ref_list, Done) \ do { \ if (is_inter_block(mbmi)) { \ if ((mbmi)->ref_frame[0] != ref_frame) \ - ADD_MV_REF_LIST(scale_mv((mbmi), 0, ref_frame, ref_sign_bias)); \ + ADD_MV_REF_LIST(scale_mv((mbmi), 0, ref_frame, ref_sign_bias), \ + refmv_count, mv_ref_list, Done); \ if (has_second_ref(mbmi) && \ (mbmi)->ref_frame[1] != ref_frame && \ (mbmi)->mv[1].as_int != (mbmi)->mv[0].as_int) \ - ADD_MV_REF_LIST(scale_mv((mbmi), 1, ref_frame, ref_sign_bias)); \ + ADD_MV_REF_LIST(scale_mv((mbmi), 1, ref_frame, ref_sign_bias), \ + refmv_count, mv_ref_list, Done); \ } \ } while (0) diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index b74b2dd..ae9ed66 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -65,7 +65,8 @@ static int mv_refs_rt(const VP9_COMMON *cm, const MACROBLOCKD *xd, different_ref_found = 1; if (candidate->ref_frame[0] == ref_frame) - ADD_MV_REF_LIST(get_sub_block_mv(candidate_mi, 0, mv_ref->col, -1)); + ADD_MV_REF_LIST(get_sub_block_mv(candidate_mi, 0, mv_ref->col, -1), + refmv_count, mv_ref_list, Done); } } @@ -82,7 +83,7 @@ static int mv_refs_rt(const VP9_COMMON *cm, const MACROBLOCKD *xd, different_ref_found = 1; if (candidate->ref_frame[0] == ref_frame) - ADD_MV_REF_LIST(candidate->mv[0]); + ADD_MV_REF_LIST(candidate->mv[0], refmv_count, mv_ref_list, Done); } } @@ -97,7 +98,8 @@ static int mv_refs_rt(const VP9_COMMON *cm, const MACROBLOCKD *xd, * xd->mi_stride].src_mi->mbmi; // If the candidate is INTRA we don't want to consider its mv. - IF_DIFF_REF_FRAME_ADD_MV(candidate); + IF_DIFF_REF_FRAME_ADD_MV(candidate, ref_frame, ref_sign_bias, + refmv_count, mv_ref_list, Done); } } } -- 2.7.4