diff options
author | Jerome Jiang <jianj@google.com> | 2019-10-04 11:46:24 -0700 |
---|---|---|
committer | Jerome Jiang <jianj@google.com> | 2019-10-04 15:17:36 -0700 |
commit | 65c43952379a2c2d395dbdf0ccedd3777c00c31a (patch) | |
tree | 3970589e2b68a030d416f4ba21afe05c85e9818b /vp9 | |
parent | 08da66d5df27c5eabcc84f420ae6fb3969bf1f73 (diff) | |
download | libvpx-65c43952379a2c2d395dbdf0ccedd3777c00c31a.tar libvpx-65c43952379a2c2d395dbdf0ccedd3777c00c31a.tar.gz libvpx-65c43952379a2c2d395dbdf0ccedd3777c00c31a.tar.bz2 libvpx-65c43952379a2c2d395dbdf0ccedd3777c00c31a.zip |
vp9: fix non bitexact when reuse_inter_pred is 0.
when the best filter selected is not EIGHTTAP_SMOOTH, and
reuse_inter_pred is 0, pred buffer was not pointing to the right place.
Change-Id: I5b519fedd2d892bf140879faa74b463a161e253b
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/encoder/vp9_pickmode.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index cfcf4f7af..7f96ea204 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -1501,7 +1501,8 @@ static void search_filter_ref(VP9_COMP *cpi, MACROBLOCK *x, RD_COST *this_rdc, int best_early_term = 0; int best_flag_preduv_computed[2] = { 0 }; INTERP_FILTER filter_start = force_smooth_filter ? EIGHTTAP_SMOOTH : EIGHTTAP; - for (filter = filter_start; filter <= EIGHTTAP_SMOOTH; ++filter) { + INTERP_FILTER filter_end = EIGHTTAP_SMOOTH; + for (filter = filter_start; filter <= filter_end; ++filter) { int64_t cost; mi->interp_filter = filter; vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); @@ -1531,9 +1532,11 @@ static void search_filter_ref(VP9_COMP *cpi, MACROBLOCK *x, RD_COST *this_rdc, free_pred_buffer(*this_mode_pred); *this_mode_pred = current_pred; } - current_pred = &tmp[get_pred_buffer(tmp, 3)]; - pd->dst.buf = current_pred->data; - pd->dst.stride = bw; + if (filter != filter_end) { + current_pred = &tmp[get_pred_buffer(tmp, 3)]; + pd->dst.buf = current_pred->data; + pd->dst.stride = bw; + } } } } @@ -1554,6 +1557,9 @@ static void search_filter_ref(VP9_COMP *cpi, MACROBLOCK *x, RD_COST *this_rdc, if (reuse_inter_pred) { pd->dst.buf = (*this_mode_pred)->data; pd->dst.stride = (*this_mode_pred)->stride; + } else if (best_filter < filter_end) { + mi->interp_filter = best_filter; + vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); } } |