From 2fb826c4d551c0c320ab7b0a5ee9d3bde21d87a3 Mon Sep 17 00:00:00 2001 From: Yunqing Wang Date: Fri, 5 Aug 2016 15:09:13 -0700 Subject: [PATCH] Fix a motion vector out of range bug This patch fixed a motion vector(MV) out of range bug, which was caused by not restoring the original values of the MV min/max thresholds after the sub8x8 full pixel motion search. It occurred rarely and only was seen while encoding a 4k clip for 200 frames. BUG=webm:1271 Change-Id: Ibc4e0de80846f297431923cef8a0c80fe8dcc6a5 --- vp9/encoder/vp9_rdopt.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index a3ef5e5db..707dd5bfb 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -1958,6 +1958,10 @@ static int64_t rd_pick_best_sub8x8_mode( MV mvp_full; int max_mv; int cost_list[5]; + int tmp_col_min = x->mv_col_min; + int tmp_col_max = x->mv_col_max; + int tmp_row_min = x->mv_row_min; + int tmp_row_max = x->mv_row_max; /* Is the best so far sufficiently good that we cant justify doing * and new motion search. */ @@ -2005,6 +2009,11 @@ static int64_t rd_pick_best_sub8x8_mode( sf->mv.subpel_search_method != SUBPEL_TREE ? cost_list : NULL, &bsi->ref_mv[0]->as_mv, new_mv, INT_MAX, 1); + x->mv_col_min = tmp_col_min; + x->mv_col_max = tmp_col_max; + x->mv_row_min = tmp_row_min; + x->mv_row_max = tmp_row_max; + if (bestsme < UINT_MAX) { uint32_t distortion; cpi->find_fractional_mv_step( -- 2.40.0