shithub: libvpx

Download patch

ref: a5657f2cd61e48fc3db11b9fe3f175896df3ffd6
parent: a81bd12a2e3df637fb240e4d478d74e34d121043
author: John Koleszar <[email protected]>
date: Thu Jun 13 12:37:52 EDT 2013

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

--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -270,6 +270,10 @@
   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 @@
     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,