summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2015-09-09 00:28:42 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-09-09 00:28:42 +0000
commit0278ae16f62cea3504a9a2ec2793c88bd9252001 (patch)
treec6a650024620f9d2db786c81cba940124e8fa269
parente6ec22cb8c954cb19d353fa50b548fe31fcf39b8 (diff)
parent42b0560319e1a88378678ac0701c53b849546337 (diff)
downloadlibvpx-0278ae16f62cea3504a9a2ec2793c88bd9252001.tar
libvpx-0278ae16f62cea3504a9a2ec2793c88bd9252001.tar.gz
libvpx-0278ae16f62cea3504a9a2ec2793c88bd9252001.tar.bz2
libvpx-0278ae16f62cea3504a9a2ec2793c88bd9252001.zip
Merge "Fix the sub8x8 block inter prediction with scaled reference frame"
-rw-r--r--vp9/common/vp9_reconinter.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/vp9/common/vp9_reconinter.c b/vp9/common/vp9_reconinter.c
index f83f8257a..d8c14ecc8 100644
--- a/vp9/common/vp9_reconinter.c
+++ b/vp9/common/vp9_reconinter.c
@@ -187,7 +187,19 @@ static void build_inter_predictors(MACROBLOCKD *xd, int plane, int block,
const int is_scaled = vp9_is_scaled(sf);
if (is_scaled) {
- pre = pre_buf->buf + scaled_buffer_offset(x, y, pre_buf->stride, sf);
+ // Co-ordinate of containing block to pixel precision.
+ const int x_start = (-xd->mb_to_left_edge >> (3 + pd->subsampling_x));
+ const int y_start = (-xd->mb_to_top_edge >> (3 + pd->subsampling_y));
+ if (plane == 0)
+ pre_buf->buf = xd->block_refs[ref]->buf->y_buffer;
+ else if (plane == 1)
+ pre_buf->buf = xd->block_refs[ref]->buf->u_buffer;
+ else
+ pre_buf->buf = xd->block_refs[ref]->buf->v_buffer;
+
+ pre_buf->buf += scaled_buffer_offset(x_start + x, y_start + y,
+ pre_buf->stride, sf);
+ pre = pre_buf->buf;
scaled_mv = vp9_scale_mv(&mv_q4, mi_x + x, mi_y + y, sf);
xs = sf->x_step_q4;
ys = sf->y_step_q4;