From: John Koleszar Date: Thu, 13 Jun 2013 23:37:52 +0000 (-0700) Subject: Avoid inverse transform/recon without residual X-Git-Tag: v1.3.0~1095^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a5657f2cd61e48fc3db11b9fe3f175896df3ffd6;p=libvpx Avoid inverse transform/recon without residual Avoid calling decode_block, inverse transform/add in the block is a skip block for SBs smaller than 8x8 and intra-coded SBs. Change-Id: I1684182f4a0050c8d6bb46cba6830d9425e7127d --- diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c index d9fd77c8a..2c7844bea 100644 --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@ -270,6 +270,10 @@ static void decode_block_intra(int plane, int block, BLOCK_SIZE_TYPE bsize, vp9_predict_intra_block(xd, tx_ib, plane_b_size, tx_size, b_mode, dst, xd->plane[plane].dst.stride); + // Early exit if there are no coefficients + if (xd->mode_info_context->mbmi.mb_skip_coeff) + return; + switch (ss_txfrm_size / 2) { case TX_4X4: tx_type = plane == 0 ? get_tx_type_4x4(xd, raster_block) : DCT_DCT; @@ -318,8 +322,9 @@ static void decode_atom(VP9D_COMP *pbi, MACROBLOCKD *xd, if (!vp9_reader_has_error(r)) { vp9_decode_tokens(pbi, xd, r, bsize); } + + foreach_transformed_block(xd, bsize, decode_block, xd); } - foreach_transformed_block(xd, bsize, decode_block, xd); } static void decode_sb_intra(VP9D_COMP *pbi, MACROBLOCKD *xd,