Offset sub8x8 chroma component buffer pointers Offset the buffer pointers of sub8x8 chroma components to support the coding process at bottom right 8x8 block. Change-Id: Ide17ee31ce064484371194cbbade88603d114a2e
diff --git a/av1/common/av1_loopfilter.c b/av1/common/av1_loopfilter.c index 102a027..3f3b9b0 100644 --- a/av1/common/av1_loopfilter.c +++ b/av1/common/av1_loopfilter.c
@@ -2198,7 +2198,7 @@ for (mi_col = 0; mi_col < cm->mi_cols; mi_col += cm->mib_size) { int plane; - av1_setup_dst_planes(planes, frame_buffer, mi_row, mi_col); + av1_setup_dst_planes(planes, cm->sb_size, frame_buffer, mi_row, mi_col); for (plane = 0; plane < num_planes; ++plane) { av1_filter_block_plane_non420_ver(cm, &planes[plane], mi + mi_col,
diff --git a/av1/common/cdef.c b/av1/common/cdef.c index 70ad766..53dff98 100644 --- a/av1/common/cdef.c +++ b/av1/common/cdef.c
@@ -188,7 +188,7 @@ xd->plane[2].subsampling_x == xd->plane[2].subsampling_y; nvsb = (cm->mi_rows + MAX_MIB_SIZE - 1) / MAX_MIB_SIZE; nhsb = (cm->mi_cols + MAX_MIB_SIZE - 1) / MAX_MIB_SIZE; - av1_setup_dst_planes(xd->plane, frame, 0, 0); + av1_setup_dst_planes(xd->plane, cm->sb_size, frame, 0, 0); row_dering = aom_malloc(sizeof(*row_dering) * (nhsb + 2) * 2); memset(row_dering, 1, sizeof(*row_dering) * (nhsb + 2) * 2); prev_row_dering = row_dering + 1;
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h index 53a3800..69c4879 100644 --- a/av1/common/onyxc_int.h +++ b/av1/common/onyxc_int.h
@@ -574,11 +574,18 @@ } static INLINE void set_skip_context(MACROBLOCKD *xd, int mi_row, int mi_col) { - const int above_idx = mi_col * 2; - const int left_idx = (mi_row * 2) & MAX_MIB_MASK_2; int i; for (i = 0; i < MAX_MB_PLANE; ++i) { struct macroblockd_plane *const pd = &xd->plane[i]; +#if CONFIG_CHROMA_SUB8X8 + if (xd->mi[0]->mbmi.sb_type < BLOCK_8X8) { + // Offset the buffer pointer + if (pd->subsampling_y && (mi_row & 0x01)) mi_row -= 1; + if (pd->subsampling_x && (mi_col & 0x01)) mi_col -= 1; + } +#endif + int above_idx = mi_col * 2; + int left_idx = (mi_row * 2) & MAX_MIB_MASK_2; pd->above_context = &xd->above_context[i][above_idx >> pd->subsampling_x]; pd->left_context = &xd->left_context[i][left_idx >> pd->subsampling_y]; }
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c index 906c9be..82480be 100644 --- a/av1/common/reconinter.c +++ b/av1/common/reconinter.c
@@ -1340,8 +1340,8 @@ } void av1_setup_dst_planes(struct macroblockd_plane planes[MAX_MB_PLANE], - const YV12_BUFFER_CONFIG *src, int mi_row, - int mi_col) { + BLOCK_SIZE bsize, const YV12_BUFFER_CONFIG *src, + int mi_row, int mi_col) { uint8_t *const buffers[MAX_MB_PLANE] = { src->y_buffer, src->u_buffer, src->v_buffer }; const int widths[MAX_MB_PLANE] = { src->y_crop_width, src->uv_crop_width, @@ -1354,8 +1354,8 @@ for (i = 0; i < MAX_MB_PLANE; ++i) { struct macroblockd_plane *const pd = &planes[i]; - setup_pred_plane(&pd->dst, buffers[i], widths[i], heights[i], strides[i], - mi_row, mi_col, NULL, pd->subsampling_x, + setup_pred_plane(&pd->dst, bsize, buffers[i], widths[i], heights[i], + strides[i], mi_row, mi_col, NULL, pd->subsampling_x, pd->subsampling_y); } } @@ -1375,9 +1375,9 @@ src->uv_stride }; for (i = 0; i < MAX_MB_PLANE; ++i) { struct macroblockd_plane *const pd = &xd->plane[i]; - setup_pred_plane(&pd->pre[idx], buffers[i], widths[i], heights[i], - strides[i], mi_row, mi_col, sf, pd->subsampling_x, - pd->subsampling_y); + setup_pred_plane(&pd->pre[idx], xd->mi[0]->mbmi.sb_type, buffers[i], + widths[i], heights[i], strides[i], mi_row, mi_col, sf, + pd->subsampling_x, pd->subsampling_y); } } } @@ -1923,9 +1923,9 @@ for (j = 0; j < MAX_MB_PLANE; ++j) { struct macroblockd_plane *const pd = &xd->plane[j]; - setup_pred_plane(&pd->dst, tmp_buf[j], tmp_width[j], tmp_height[j], - tmp_stride[j], 0, i, NULL, pd->subsampling_x, - pd->subsampling_y); + setup_pred_plane(&pd->dst, AOMMAX(a_bsize, BLOCK_8X8), tmp_buf[j], + tmp_width[j], tmp_height[j], tmp_stride[j], 0, i, NULL, + pd->subsampling_x, pd->subsampling_y); } for (ref = 0; ref < 1 + has_second_ref(above_mbmi); ++ref) { const MV_REFERENCE_FRAME frame = above_mbmi->ref_frame[ref]; @@ -2004,9 +2004,9 @@ for (j = 0; j < MAX_MB_PLANE; ++j) { struct macroblockd_plane *const pd = &xd->plane[j]; - setup_pred_plane(&pd->dst, tmp_buf[j], tmp_width[j], tmp_height[j], - tmp_stride[j], i, 0, NULL, pd->subsampling_x, - pd->subsampling_y); + setup_pred_plane(&pd->dst, AOMMAX(l_bsize, BLOCK_8X8), tmp_buf[j], + tmp_width[j], tmp_height[j], tmp_stride[j], i, 0, NULL, + pd->subsampling_x, pd->subsampling_y); } for (ref = 0; ref < 1 + has_second_ref(left_mbmi); ++ref) { const MV_REFERENCE_FRAME frame = left_mbmi->ref_frame[ref]; @@ -2088,7 +2088,8 @@ dst_width1, dst_height1, dst_stride1); av1_build_prediction_by_left_preds(cm, xd, mi_row, mi_col, dst_buf2, dst_width2, dst_height2, dst_stride2); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, xd->mi[0]->mbmi.sb_type, + get_frame_new_buffer(cm), mi_row, mi_col); av1_build_obmc_inter_prediction(cm, xd, mi_row, mi_col, dst_buf1, dst_stride1, dst_buf2, dst_stride2); } @@ -2133,9 +2134,10 @@ for (j = 0; j < MAX_MB_PLANE; ++j) { struct macroblockd_plane *const pd = &xd->plane[j]; - setup_pred_plane(&pd->dst, tmp_buf[j], tmp_width[j], tmp_height[j], - tmp_stride[j], (xd->n8_h >> 1), i, NULL, - pd->subsampling_x, pd->subsampling_y); + setup_pred_plane(&pd->dst, AOMMAX(mbmi->sb_type, BLOCK_8X8), tmp_buf[j], + tmp_width[j], tmp_height[j], tmp_stride[j], + (xd->n8_h >> 1), i, NULL, pd->subsampling_x, + pd->subsampling_y); } for (ref = 0; ref < 1 + has_second_ref(mbmi); ++ref) { const MV_REFERENCE_FRAME frame = mbmi->ref_frame[ref]; @@ -2240,8 +2242,9 @@ for (j = 0; j < MAX_MB_PLANE; ++j) { struct macroblockd_plane *const pd = &xd->plane[j]; - setup_pred_plane(&pd->dst, tmp_buf[j], tmp_width[j], tmp_height[j], - tmp_stride[j], i, xd->n8_w >> 1, NULL, pd->subsampling_x, + setup_pred_plane(&pd->dst, AOMMAX(mbmi->sb_type, BLOCK_8X8), tmp_buf[j], + tmp_width[j], tmp_height[j], tmp_stride[j], i, + xd->n8_w >> 1, NULL, pd->subsampling_x, pd->subsampling_y); } for (ref = 0; ref < 1 + has_second_ref(mbmi); ++ref) { @@ -2458,16 +2461,20 @@ } #endif // CONFIG_HIGHBITDEPTH + const BLOCK_SIZE bsize = xd->mi[0]->mbmi.sb_type; av1_build_prediction_by_bottom_preds(cm, xd, mi_row, mi_col, dst_buf1, dst_width1, dst_height1, dst_stride1); av1_build_prediction_by_right_preds(cm, xd, mi_row, mi_col, dst_buf2, dst_width2, dst_height2, dst_stride2); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); av1_merge_dst_bottom_right_preds(cm, xd, mi_row, mi_col, dst_buf1, dst_stride1, dst_buf2, dst_stride2); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); av1_build_obmc_inter_predictors_sb(cm, xd, mi_row, mi_col); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); } #endif // CONFIG_NCOBMC #endif // CONFIG_MOTION_VAR
diff --git a/av1/common/reconinter.h b/av1/common/reconinter.h index e4b7c72..d59ad03 100644 --- a/av1/common/reconinter.h +++ b/av1/common/reconinter.h
@@ -599,11 +599,21 @@ return y * stride + x; } -static INLINE void setup_pred_plane(struct buf_2d *dst, uint8_t *src, int width, - int height, int stride, int mi_row, - int mi_col, +static INLINE void setup_pred_plane(struct buf_2d *dst, BLOCK_SIZE bsize, + uint8_t *src, int width, int height, + int stride, int mi_row, int mi_col, const struct scale_factors *scale, int subsampling_x, int subsampling_y) { +#if CONFIG_CHROMA_SUB8X8 + if (bsize < BLOCK_8X8) { + // Offset the buffer pointer + if (subsampling_y && (mi_row & 0x01)) mi_row -= 1; + if (subsampling_x && (mi_col & 0x01)) mi_col -= 1; + } +#else + (void)bsize; +#endif + const int x = (MI_SIZE * mi_col) >> subsampling_x; const int y = (MI_SIZE * mi_row) >> subsampling_y; dst->buf = src + scaled_buffer_offset(x, y, stride, scale); @@ -614,8 +624,8 @@ } void av1_setup_dst_planes(struct macroblockd_plane planes[MAX_MB_PLANE], - const YV12_BUFFER_CONFIG *src, int mi_row, - int mi_col); + BLOCK_SIZE bsize, const YV12_BUFFER_CONFIG *src, + int mi_row, int mi_col); void av1_setup_pre_planes(MACROBLOCKD *xd, int idx, const YV12_BUFFER_CONFIG *src, int mi_row, int mi_col,
diff --git a/av1/common/thread_common.c b/av1/common/thread_common.c index 6090e55..ca8b1b3 100644 --- a/av1/common/thread_common.c +++ b/av1/common/thread_common.c
@@ -160,8 +160,8 @@ LOOP_FILTER_MASK lfm; int plane; - av1_setup_dst_planes(lf_data->planes, lf_data->frame_buffer, mi_row, - mi_col); + av1_setup_dst_planes(lf_data->planes, lf_data->cm->sb_size, + lf_data->frame_buffer, mi_row, mi_col); av1_setup_mask(lf_data->cm, mi_row, mi_col, mi + mi_col, lf_data->cm->mi_stride, &lfm); @@ -206,8 +206,8 @@ // the outer loop to column-based and remove the synchronizations here. sync_read(lf_sync, r, c); - av1_setup_dst_planes(lf_data->planes, lf_data->frame_buffer, mi_row, - mi_col); + av1_setup_dst_planes(lf_data->planes, lf_data->cm->sb_size, + lf_data->frame_buffer, mi_row, mi_col); av1_setup_mask(lf_data->cm, mi_row, mi_col, mi + mi_col, lf_data->cm->mi_stride, &lfm); #if CONFIG_EXT_PARTITION_TYPES @@ -258,8 +258,8 @@ sync_read(lf_sync, r, c); - av1_setup_dst_planes(lf_data->planes, lf_data->frame_buffer, mi_row, - mi_col); + av1_setup_dst_planes(lf_data->planes, lf_data->cm->sb_size, + lf_data->frame_buffer, mi_row, mi_col); #if CONFIG_EXT_PARTITION_TYPES for (plane = 0; plane < num_planes; ++plane) { av1_filter_block_plane_non420_ver(lf_data->cm, &lf_data->planes[plane],
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index 6fdf6ab..6455c5f 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -726,7 +726,8 @@ #endif // CONFIG_DEPENDENT_HORZTILES cm->mi_rows, cm->mi_cols); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); } #if CONFIG_SUPERTX @@ -799,7 +800,8 @@ #endif // CONFIG_DEPENDENT_HORZTILES cm->mi_rows, cm->mi_cols); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); } static void set_param_topblock(AV1_COMMON *const cm, MACROBLOCKD *const xd, @@ -2304,7 +2306,8 @@ #endif // CONFIG_EXT_TX } - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); for (i = 0; i < MAX_MB_PLANE; i++) { dst_buf[i] = xd->plane[i].dst.buf; dst_stride[i] = xd->plane[i].dst.stride;
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c index 2f345d1..cac1aaf 100644 --- a/av1/encoder/encodeframe.c +++ b/av1/encoder/encodeframe.c
@@ -285,7 +285,8 @@ #endif // Set up destination pointers. - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); // Set up limit values for MV components. // Mv beyond the range do not produce new/different prediction block. @@ -1829,8 +1830,8 @@ x->e_mbd.cur_buf = src; for (i = 0; i < MAX_MB_PLANE; i++) - setup_pred_plane(&x->plane[i].src, buffers[i], widths[i], heights[i], - strides[i], mi_row, mi_col, NULL, + setup_pred_plane(&x->plane[i].src, x->e_mbd.mi[0]->mbmi.sb_type, buffers[i], + widths[i], heights[i], strides[i], mi_row, mi_col, NULL, x->e_mbd.plane[i].subsampling_x, x->e_mbd.plane[i].subsampling_y); } @@ -2473,8 +2474,8 @@ check_ncobmc = is_inter_block(mbmi) && motion_allowed >= OBMC_CAUSAL; if (!dry_run && check_ncobmc) { av1_check_ncobmc_rd(cpi, x, mi_row, mi_col); - av1_setup_dst_planes(x->e_mbd.plane, get_frame_new_buffer(&cpi->common), - mi_row, mi_col); + av1_setup_dst_planes(x->e_mbd.plane, bsize, + get_frame_new_buffer(&cpi->common), mi_row, mi_col); } #endif encode_superblock(cpi, td, tp, dry_run, mi_row, mi_col, bsize, ctx, rate); @@ -2539,7 +2540,8 @@ update_state_sb_supertx(cpi, td, tile, mi_row, mi_col, bsize, dry_run, pc_tree); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); for (i = 0; i < MAX_MB_PLANE; i++) { dst_buf[i] = xd->plane[i].dst.buf; dst_stride[i] = xd->plane[i].dst.stride; @@ -7009,7 +7011,8 @@ set_skip_context(xd, mi_row, mi_col); set_mode_info_offsets(cpi, x, xd, mi_row, mi_col); update_state_sb_supertx(cpi, td, tile, mi_row, mi_col, bsize, 1, pc_tree); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); for (plane = 0; plane < MAX_MB_PLANE; plane++) { dst_buf[plane] = xd->plane[plane].dst.buf; dst_stride[plane] = xd->plane[plane].dst.stride;
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c index 4d3425f..e35a54e 100644 --- a/av1/encoder/firstpass.c +++ b/av1/encoder/firstpass.c
@@ -518,6 +518,10 @@ aom_clear_system_state(); + xd->mi = cm->mi_grid_visible; + xd->mi[0] = cm->mi; + x->e_mbd.mi[0]->mbmi.sb_type = BLOCK_16X16; + intra_factor = 0.0; brightness_factor = 0.0; neutral_count = 0.0; @@ -528,7 +532,7 @@ av1_setup_block_planes(&x->e_mbd, cm->subsampling_x, cm->subsampling_y); av1_setup_src_planes(x, cpi->source, 0, 0); - av1_setup_dst_planes(xd->plane, new_yv12, 0, 0); + av1_setup_dst_planes(xd->plane, cm->sb_size, new_yv12, 0, 0); if (!frame_is_intra_only(cm)) { av1_setup_pre_planes(xd, 0, first_ref_buf, 0, 0, NULL);
diff --git a/av1/encoder/mcomp.c b/av1/encoder/mcomp.c index ae8f04e..d069eef 100644 --- a/av1/encoder/mcomp.c +++ b/av1/encoder/mcomp.c
@@ -2573,10 +2573,11 @@ if (use_upsampled_ref) { int ref = xd->mi[0]->mbmi.ref_frame[is_second]; const YV12_BUFFER_CONFIG *upsampled_ref = get_upsampled_ref(cpi, ref); - setup_pred_plane(&pd->pre[is_second], upsampled_ref->y_buffer, - upsampled_ref->y_crop_width, upsampled_ref->y_crop_height, - upsampled_ref->y_stride, (mi_row << 3), (mi_col << 3), - NULL, pd->subsampling_x, pd->subsampling_y); + setup_pred_plane(&pd->pre[is_second], mbmi->sb_type, + upsampled_ref->y_buffer, upsampled_ref->y_crop_width, + upsampled_ref->y_crop_height, upsampled_ref->y_stride, + (mi_row << 3), (mi_col << 3), NULL, pd->subsampling_x, + pd->subsampling_y); } y = pd->pre[is_second].buf; y_stride = pd->pre[is_second].stride; @@ -3073,10 +3074,11 @@ if (use_upsampled_ref) { int ref = xd->mi[0]->mbmi.ref_frame[is_second]; const YV12_BUFFER_CONFIG *upsampled_ref = get_upsampled_ref(cpi, ref); - setup_pred_plane(&pd->pre[is_second], upsampled_ref->y_buffer, - upsampled_ref->y_crop_width, upsampled_ref->y_crop_height, - upsampled_ref->y_stride, (mi_row << 3), (mi_col << 3), - NULL, pd->subsampling_x, pd->subsampling_y); + setup_pred_plane(&pd->pre[is_second], mbmi->sb_type, + upsampled_ref->y_buffer, upsampled_ref->y_crop_width, + upsampled_ref->y_crop_height, upsampled_ref->y_stride, + (mi_row << 3), (mi_col << 3), NULL, pd->subsampling_x, + pd->subsampling_y); } y = pd->pre[is_second].buf; y_stride = pd->pre[is_second].stride;
diff --git a/av1/encoder/pickcdef.c b/av1/encoder/pickcdef.c index bafc554..da64fb4 100644 --- a/av1/encoder/pickcdef.c +++ b/av1/encoder/pickcdef.c
@@ -312,7 +312,7 @@ av1_ac_quant(cm->base_qindex, 0, cm->bit_depth) >> (cm->bit_depth - 8); lambda = .12 * quantizer * quantizer / 256.; - av1_setup_dst_planes(xd->plane, frame, 0, 0); + av1_setup_dst_planes(xd->plane, cm->sb_size, frame, 0, 0); mse[0] = aom_malloc(sizeof(**mse) * nvsb * nhsb); mse[1] = aom_malloc(sizeof(**mse) * nvsb * nhsb); for (pli = 0; pli < nplanes; pli++) {
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c index 0663ed8..f06e569 100644 --- a/av1/encoder/rd.c +++ b/av1/encoder/rd.c
@@ -799,7 +799,7 @@ dst[1].stride = dst[2].stride = src->uv_stride; for (i = 0; i < MAX_MB_PLANE; ++i) { - setup_pred_plane(dst + i, dst[i].buf, + setup_pred_plane(dst + i, xd->mi[0]->mbmi.sb_type, dst[i].buf, i ? src->uv_crop_width : src->y_crop_width, i ? src->uv_crop_height : src->y_crop_height, dst[i].stride, mi_row, mi_col, i ? scale_uv : scale,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index ff05537..5c69d9f 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -5658,7 +5658,7 @@ get_upsampled_ref(cpi, refs[id]); // Set pred for Y plane - setup_pred_plane(&pd->pre[0], upsampled_ref->y_buffer, + setup_pred_plane(&pd->pre[0], bsize, upsampled_ref->y_buffer, upsampled_ref->y_crop_width, upsampled_ref->y_crop_height, upsampled_ref->y_stride, (mi_row << 3), (mi_col << 3), NULL, pd->subsampling_x, @@ -6102,7 +6102,7 @@ // Set pred for Y plane setup_pred_plane( - &pd->pre[0], upsampled_ref->y_buffer, + &pd->pre[0], bsize, upsampled_ref->y_buffer, upsampled_ref->y_crop_width, upsampled_ref->y_crop_height, upsampled_ref->y_stride, (mi_row << 3), (mi_col << 3), NULL, pd->subsampling_x, pd->subsampling_y); @@ -7025,7 +7025,7 @@ // Set pred for Y plane setup_pred_plane( - &pd->pre[ref_idx], upsampled_ref->y_buffer, + &pd->pre[ref_idx], bsize, upsampled_ref->y_buffer, upsampled_ref->y_crop_width, upsampled_ref->y_crop_height, upsampled_ref->y_stride, (mi_row << 3), (mi_col << 3), NULL, pd->subsampling_x, pd->subsampling_y); @@ -9840,7 +9840,8 @@ av1_build_prediction_by_left_preds(cm, xd, mi_row, mi_col, args.left_pred_buf, dst_width2, dst_height2, args.left_pred_stride); - av1_setup_dst_planes(xd->plane, get_frame_new_buffer(cm), mi_row, mi_col); + av1_setup_dst_planes(xd->plane, bsize, get_frame_new_buffer(cm), mi_row, + mi_col); x->mask_buf = mask2d_buf; x->wsrc_buf = weighted_src_buf; calc_target_weighted_pred(cm, x, xd, mi_row, mi_col, args.above_pred_buf[0], @@ -12656,8 +12657,8 @@ av1_setup_pre_planes(xd, ref, cfg, mi_row, mi_col, &xd->block_refs[ref]->sf); } - av1_setup_dst_planes(x->e_mbd.plane, get_frame_new_buffer(&cpi->common), - mi_row, mi_col); + av1_setup_dst_planes(x->e_mbd.plane, bsize, + get_frame_new_buffer(&cpi->common), mi_row, mi_col); av1_build_inter_predictors_sb(xd, mi_row, mi_col, NULL, bsize);