From: Dmitry Kovalev Date: Tue, 19 Nov 2013 02:37:53 +0000 (-0800) Subject: Calculating dst pointer only once per transform block. X-Git-Tag: v1.4.0~3002^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b5c45201012b60c8ff83522abf5591509930e6f4;p=libvpx Calculating dst pointer only once per transform block. Change-Id: I23fea0a2e85be8373600e3e2dae98d36acde389c --- diff --git a/vp9/decoder/vp9_decodeframe.c b/vp9/decoder/vp9_decodeframe.c index 1f4fb66b9..dbcae7614 100644 --- a/vp9/decoder/vp9_decodeframe.c +++ b/vp9/decoder/vp9_decodeframe.c @@ -241,16 +241,13 @@ static void alloc_tile_storage(VP9D_COMP *pbi, int tile_rows, int tile_cols) { } static void inverse_transform_block(MACROBLOCKD* xd, int plane, int block, - TX_SIZE tx_size, int x, int y) { + TX_SIZE tx_size, uint8_t *dst, int stride) { struct macroblockd_plane *const pd = &xd->plane[plane]; const int eob = pd->eobs[block]; if (eob > 0) { TX_TYPE tx_type; const int plane_type = pd->plane_type; - const int stride = pd->dst.stride; int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); - uint8_t *const dst = &pd->dst.buf[4 * y * stride + 4 * x]; - switch (tx_size) { case TX_4X4: tx_type = get_tx_type_4x4(plane_type, xd, block); @@ -322,7 +319,7 @@ static void predict_and_reconstruct_intra_block(int plane, int block, if (!mi->mbmi.skip_coeff) { vp9_decode_block_tokens(cm, xd, plane, block, plane_bsize, x, y, tx_size, args->r, args->token_cache); - inverse_transform_block(xd, plane, block, tx_size, x, y); + inverse_transform_block(xd, plane, block, tx_size, dst, pd->dst.stride); } } @@ -340,13 +337,15 @@ static void reconstruct_inter_block(int plane, int block, struct inter_args *args = arg; VP9_COMMON *const cm = args->cm; MACROBLOCKD *const xd = args->xd; + struct macroblockd_plane *const pd = &xd->plane[plane]; int x, y; txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &x, &y); - *args->eobtotal += vp9_decode_block_tokens(cm, xd, plane, block, plane_bsize, x, y, tx_size, args->r, args->token_cache); - inverse_transform_block(xd, plane, block, tx_size, x, y); + inverse_transform_block(xd, plane, block, tx_size, + &pd->dst.buf[4 * y * pd->dst.stride + 4 * x], + pd->dst.stride); } static void set_offsets(VP9_COMMON *const cm, MACROBLOCKD *const xd,