Refactor to avoid changing pd addr in inter pred unit Treat the address in macroblockd_plane as constant in the inter prediction unit. Change-Id: Ic342bde8652fec389b4963712f6176ef4f2e7b84
diff --git a/av1/encoder/reconinter_enc.c b/av1/encoder/reconinter_enc.c index c981135..e51b9d8 100644 --- a/av1/encoder/reconinter_enc.c +++ b/av1/encoder/reconinter_enc.c
@@ -78,8 +78,6 @@ const int b8_h = block_size_high[plane_bsize] >> ss_y; assert(!is_compound); - const struct buf_2d orig_pred_buf[2] = { pd->pre[0], pd->pre[1] }; - int row = row_start; for (int y = 0; y < b8_h; y += b4_h) { int col = col_start; @@ -95,22 +93,24 @@ const struct scale_factors *ref_scale_factors = get_ref_scale_factors_const(cm, this_mbmi->ref_frame[ref]); - pd->pre[ref].buf0 = - (plane == 1) ? ref_buf->buf.u_buffer : ref_buf->buf.v_buffer; - pd->pre[ref].width = ref_buf->buf.uv_crop_width; - pd->pre[ref].height = ref_buf->buf.uv_crop_height; - pd->pre[ref].stride = ref_buf->buf.uv_stride; - const struct scale_factors *const sf = is_intrabc ? &cm->sf_identity : ref_scale_factors; - struct buf_2d *const pre_buf = is_intrabc ? dst_buf : &pd->pre[ref]; + struct buf_2d pre_buf = { + NULL, + (plane == 1) ? ref_buf->buf.u_buffer : ref_buf->buf.v_buffer, + ref_buf->buf.uv_crop_width, + ref_buf->buf.uv_crop_height, + ref_buf->buf.uv_stride, + }; + + if (is_intrabc) pre_buf = *dst_buf; const MV mv = this_mbmi->mv[ref].as_mv; InterPredParams inter_pred_params; av1_init_inter_params(&inter_pred_params, b4_w, b4_h, pre_y + y, pre_x + x, pd->subsampling_x, pd->subsampling_y, xd->bd, is_cur_buf_hbd(xd), mi->use_intrabc, sf, - pre_buf, this_mbmi->interp_filters); + &pre_buf, this_mbmi->interp_filters); inter_pred_params.conv_params = get_conv_params_no_round( ref, plane, xd->tmp_conv_dst, tmp_dst_stride, 0, xd->bd); @@ -123,7 +123,6 @@ ++row; } - for (ref = 0; ref < 2; ++ref) pd->pre[ref] = orig_pred_buf[ref]; return; }