Refactor the sub8x8 block motion search control
Change-Id: Ia340e66e0a61403070adf8e4f18f00eab143f8f7
diff --git a/vp10/encoder/rdopt.c b/vp10/encoder/rdopt.c
index f3056e9..871a62e 100644
--- a/vp10/encoder/rdopt.c
+++ b/vp10/encoder/rdopt.c
@@ -4954,44 +4954,54 @@
#if !CONFIG_EXT_INTER
if (filter_idx > 0) {
BEST_SEG_INFO* ref_bsi = bsi_buf;
- if (seg_mvs[i][mbmi->ref_frame[0]].as_int ==
- ref_bsi->rdstat[i][mode_idx].mvs[0].as_int &&
- ref_bsi->rdstat[i][mode_idx].mvs[0].as_int != INVALID_MV)
- if (bsi->ref_mv[0]->as_int ==
- ref_bsi->rdstat[i][mode_idx].pred_mv[0].as_int)
- --run_mv_search;
+ SEG_RDSTAT *ref_rdstat = &ref_bsi->rdstat[i][mode_idx];
- if (!has_second_rf) {
- --run_mv_search;
- } else {
- if (seg_mvs[i][mbmi->ref_frame[1]].as_int ==
- ref_bsi->rdstat[i][mode_idx].mvs[1].as_int &&
- ref_bsi->rdstat[i][mode_idx].mvs[1].as_int != INVALID_MV)
- if (bsi->ref_mv[1]->as_int ==
- ref_bsi->rdstat[i][mode_idx].pred_mv[1].as_int)
+ if (has_second_rf) {
+ if (seg_mvs[i][mbmi->ref_frame[0]].as_int ==
+ ref_rdstat->mvs[0].as_int &&
+ ref_rdstat->mvs[0].as_int != INVALID_MV)
+ if (bsi->ref_mv[0]->as_int == ref_rdstat->pred_mv[0].as_int)
--run_mv_search;
+
+ if (seg_mvs[i][mbmi->ref_frame[1]].as_int ==
+ ref_rdstat->mvs[1].as_int &&
+ ref_rdstat->mvs[1].as_int != INVALID_MV)
+ if (bsi->ref_mv[1]->as_int == ref_rdstat->pred_mv[1].as_int)
+ --run_mv_search;
+ } else {
+ if (bsi->ref_mv[0]->as_int == ref_rdstat->pred_mv[0].as_int &&
+ ref_rdstat->mvs[0].as_int != INVALID_MV) {
+ run_mv_search = 0;
+ seg_mvs[i][mbmi->ref_frame[0]].as_int =
+ ref_rdstat->mvs[0].as_int;
+ }
}
if (run_mv_search != 0 && filter_idx > 1) {
ref_bsi = bsi_buf + 1;
+ ref_rdstat = &ref_bsi->rdstat[i][mode_idx];
run_mv_search = 2;
- if (seg_mvs[i][mbmi->ref_frame[0]].as_int ==
- ref_bsi->rdstat[i][mode_idx].mvs[0].as_int &&
- ref_bsi->rdstat[i][mode_idx].mvs[0].as_int != INVALID_MV)
- if (bsi->ref_mv[0]->as_int ==
- ref_bsi->rdstat[i][mode_idx].pred_mv[0].as_int)
- --run_mv_search;
-
- if (!has_second_rf) {
- --run_mv_search;
- } else {
- if (seg_mvs[i][mbmi->ref_frame[1]].as_int ==
- ref_bsi->rdstat[i][mode_idx].mvs[1].as_int &&
- ref_bsi->rdstat[i][mode_idx].mvs[1].as_int != INVALID_MV)
- if (bsi->ref_mv[1]->as_int ==
- ref_bsi->rdstat[i][mode_idx].pred_mv[1].as_int)
+ if (has_second_rf) {
+ if (seg_mvs[i][mbmi->ref_frame[0]].as_int ==
+ ref_rdstat->mvs[0].as_int &&
+ ref_rdstat->mvs[0].as_int != INVALID_MV)
+ if (bsi->ref_mv[0]->as_int == ref_rdstat->pred_mv[0].as_int)
--run_mv_search;
+
+ if (seg_mvs[i][mbmi->ref_frame[1]].as_int ==
+ ref_rdstat->mvs[1].as_int &&
+ ref_rdstat->mvs[1].as_int != INVALID_MV)
+ if (bsi->ref_mv[1]->as_int == ref_rdstat->pred_mv[1].as_int)
+ --run_mv_search;
+ } else {
+ if (bsi->ref_mv[0]->as_int ==
+ ref_rdstat->pred_mv[0].as_int &&
+ ref_rdstat->mvs[0].as_int != INVALID_MV) {
+ run_mv_search = 0;
+ seg_mvs[i][mbmi->ref_frame[0]].as_int =
+ ref_rdstat->mvs[0].as_int;
+ }
}
}
}
@@ -5071,8 +5081,8 @@
}
#if CONFIG_REF_MV
- mvp_full.row = best_ref_mv->as_mv.row >> 3;
- mvp_full.col = best_ref_mv->as_mv.col >> 3;
+ mvp_full.row = bsi->ref_mv[0]->as_mv.row >> 3;
+ mvp_full.col = bsi->ref_mv[0]->as_mv.col >> 3;
#else
mvp_full.row = bsi->mvp.as_mv.row >> 3;
mvp_full.col = bsi->mvp.as_mv.col >> 3;