Fix the sub8x8 block inter prediction with scaled reference frame
Sync the encoder's buffer offset calculation for sub8x8 block motion compensated prediction with scaled reference frame to match the decoder's behavior. This resolves an enc/dec mismatch issue when sub8x8 inter mode with scaled is turned on. Change-Id: I4bab3672b007a5ae0c992f8a701341892d2458b0
This commit is contained in:
Родитель
536a90970b
Коммит
42b0560319
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче