]> granicus.if.org Git - libvpx/commitdiff
Optimize the decode_partition. About 0.7% gain on N10.
authorhkuang <hkuang@google.com>
Wed, 6 May 2015 23:31:13 +0000 (16:31 -0700)
committerhkuang <hkuang@google.com>
Fri, 5 Jun 2015 22:47:09 +0000 (15:47 -0700)
Change-Id: Ia689c254bd2d4f274abcc451a9b758f62e3a2b1f

vp9/decoder/vp9_decodeframe.c

index ebd4fe8fbfc8b343b667fba3fc40ee40996c0f73..30ca2d08a7ee4286332527c8d9b75d7e02f66b43 100644 (file)
@@ -381,6 +381,15 @@ static void decode_block(VP9Decoder *const pbi, MACROBLOCKD *const xd,
   VP9_COMMON *const cm = &pbi->common;
   const int less8x8 = bsize < BLOCK_8X8;
   MB_MODE_INFO *mbmi = set_offsets(cm, xd, tile, bsize, mi_row, mi_col);
+
+  if (bsize >= BLOCK_8X8 && (cm->subsampling_x || cm->subsampling_y)) {
+    const BLOCK_SIZE uv_subsize =
+        ss_size_lookup[bsize][cm->subsampling_x][cm->subsampling_y];
+    if (uv_subsize == BLOCK_INVALID)
+      vpx_internal_error(xd->error_info,
+                         VPX_CODEC_CORRUPT_FRAME, "Invalid block size.");
+  }
+
   vp9_read_mode_info(pbi, xd, tile, mi_row, mi_col, r);
 
   if (less8x8)
@@ -444,18 +453,14 @@ static void decode_partition(VP9Decoder *const pbi, MACROBLOCKD *const xd,
   VP9_COMMON *const cm = &pbi->common;
   const int hbs = num_8x8_blocks_wide_lookup[bsize] / 2;
   PARTITION_TYPE partition;
-  BLOCK_SIZE subsize, uv_subsize;
+  BLOCK_SIZE subsize;
 
   if (mi_row >= cm->mi_rows || mi_col >= cm->mi_cols)
     return;
 
   partition = read_partition(cm, xd, hbs, mi_row, mi_col, bsize, r);
   subsize = get_subsize(bsize, partition);
-  uv_subsize = ss_size_lookup[subsize][cm->subsampling_x][cm->subsampling_y];
-  if (subsize >= BLOCK_8X8 && uv_subsize == BLOCK_INVALID)
-    vpx_internal_error(xd->error_info,
-                       VPX_CODEC_CORRUPT_FRAME, "Invalid block size.");
-  if (subsize < BLOCK_8X8) {
+  if (bsize == BLOCK_8X8) {
     decode_block(pbi, xd, tile, mi_row, mi_col, r, subsize);
   } else {
     switch (partition) {