Add subtract_block() This function help us merge subtract block code in av1_subtract_plane and av1_encode_block_intra. Change-Id: Ie793d88a218f1082c6fe28900a521f461e34d564
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c index 1c5289f..b378674 100644 --- a/av1/encoder/encodemb.c +++ b/av1/encoder/encodemb.c
@@ -41,38 +41,49 @@ // Check if one needs to use c version subtraction. static int check_subtract_block_size(int w, int h) { return w < 4 || h < 4; } +static void subtract_block(const MACROBLOCKD *xd, int rows, int cols, + int16_t *diff, ptrdiff_t diff_stride, + const uint8_t *src8, ptrdiff_t src_stride, + const uint8_t *pred8, ptrdiff_t pred_stride) { +#if !CONFIG_AOM_HIGHBITDEPTH + (void)xd; +#endif + + if (check_subtract_block_size(rows, cols)) { +#if CONFIG_AOM_HIGHBITDEPTH + if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { + aom_highbd_subtract_block_c(rows, cols, diff, diff_stride, src8, + src_stride, pred8, pred_stride, xd->bd); + return; + } +#endif // CONFIG_AOM_HIGHBITDEPTH + aom_subtract_block_c(rows, cols, diff, diff_stride, src8, src_stride, pred8, + pred_stride); + + return; + } + +#if CONFIG_AOM_HIGHBITDEPTH + if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { + aom_highbd_subtract_block(rows, cols, diff, diff_stride, src8, src_stride, + pred8, pred_stride, xd->bd); + return; + } +#endif // CONFIG_AOM_HIGHBITDEPTH + aom_subtract_block(rows, cols, diff, diff_stride, src8, src_stride, pred8, + pred_stride); +} + void av1_subtract_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane) { struct macroblock_plane *const p = &x->plane[plane]; const struct macroblockd_plane *const pd = &x->e_mbd.plane[plane]; const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd); const int bw = block_size_wide[plane_bsize]; const int bh = block_size_high[plane_bsize]; + const MACROBLOCKD *xd = &x->e_mbd; - if (check_subtract_block_size(bw, bh)) { -#if CONFIG_AOM_HIGHBITDEPTH - if (x->e_mbd.cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { - aom_highbd_subtract_block_c(bh, bw, p->src_diff, bw, p->src.buf, - p->src.stride, pd->dst.buf, pd->dst.stride, - x->e_mbd.bd); - return; - } -#endif // CONFIG_AOM_HIGHBITDEPTH - aom_subtract_block_c(bh, bw, p->src_diff, bw, p->src.buf, p->src.stride, - pd->dst.buf, pd->dst.stride); - - return; - } - -#if CONFIG_AOM_HIGHBITDEPTH - if (x->e_mbd.cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { - aom_highbd_subtract_block(bh, bw, p->src_diff, bw, p->src.buf, - p->src.stride, pd->dst.buf, pd->dst.stride, - x->e_mbd.bd); - return; - } -#endif // CONFIG_AOM_HIGHBITDEPTH - aom_subtract_block(bh, bw, p->src_diff, bw, p->src.buf, p->src.stride, - pd->dst.buf, pd->dst.stride); + subtract_block(xd, bh, bw, p->src_diff, bw, p->src.buf, p->src.stride, + pd->dst.buf, pd->dst.stride); } typedef struct av1_token_state { @@ -1096,34 +1107,8 @@ mode, dst, dst_stride, dst, dst_stride, blk_col, blk_row, plane); - if (check_subtract_block_size(tx1d_width, tx1d_height)) { -#if CONFIG_AOM_HIGHBITDEPTH - if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { - aom_highbd_subtract_block_c(tx1d_height, tx1d_width, src_diff, - diff_stride, src, src_stride, dst, dst_stride, - xd->bd); - } else { - aom_subtract_block_c(tx1d_height, tx1d_width, src_diff, diff_stride, src, - src_stride, dst, dst_stride); - } -#else - aom_subtract_block_c(tx1d_height, tx1d_width, src_diff, diff_stride, src, - src_stride, dst, dst_stride); -#endif // CONFIG_AOM_HIGHBITDEPTH - } else { -#if CONFIG_AOM_HIGHBITDEPTH - if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { - aom_highbd_subtract_block(tx1d_height, tx1d_width, src_diff, diff_stride, - src, src_stride, dst, dst_stride, xd->bd); - } else { - aom_subtract_block(tx1d_height, tx1d_width, src_diff, diff_stride, src, - src_stride, dst, dst_stride); - } -#else - aom_subtract_block(tx1d_height, tx1d_width, src_diff, diff_stride, src, - src_stride, dst, dst_stride); -#endif // CONFIG_AOM_HIGHBITDEPTH - } + subtract_block(xd, tx1d_height, tx1d_width, src_diff, diff_stride, src, + src_stride, dst, dst_stride); #if !CONFIG_PVQ const ENTROPY_CONTEXT *a = &args->ta[blk_col];