summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorJerome Jiang <jianj@google.com>2019-10-04 11:46:24 -0700
committerJerome Jiang <jianj@google.com>2019-10-04 15:17:36 -0700
commit65c43952379a2c2d395dbdf0ccedd3777c00c31a (patch)
tree3970589e2b68a030d416f4ba21afe05c85e9818b /vp9
parent08da66d5df27c5eabcc84f420ae6fb3969bf1f73 (diff)
downloadlibvpx-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.c14
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);
}
}