]> granicus.if.org Git - libvpx/commitdiff
Fixing a issue of calculating tx cost for SUPERTX+VAR_TX
authorYue Chen <yuec@google.com>
Wed, 27 Jan 2016 22:37:17 +0000 (14:37 -0800)
committerGeza Lore <gezalore@gmail.com>
Fri, 29 Jan 2016 09:31:04 +0000 (09:31 +0000)
Update blk_skip in update_state_supertx() and rd_supertx_sb().
Performance (SUPERTX+VAR_TX): TBD
(Eventually will merge update_state() and update_state_supertx())

Change-Id: I34ef982b80151ba2dfba745859cb2ca7b90dc888

vp10/encoder/encodeframe.c

index 950c5d366e57d4d3ab0ee8aa2cd6e057898aa7f2..09e502de66dafa24968f2da8d53946bada4a5b55 100644 (file)
@@ -1145,13 +1145,12 @@ static void update_state(VP10_COMP *cpi, ThreadData *td,
   x->skip = ctx->skip;
 
 #if CONFIG_VAR_TX
-  for (i = 0; i < MAX_MB_PLANE; ++i)
+  for (i = 0; i < 1; ++i)
     memcpy(x->blk_skip[i], ctx->blk_skip[i],
            sizeof(uint8_t) * ctx->num_4x4_blk);
-#else
+#endif
   memcpy(x->zcoeff_blk[mbmi->tx_size], ctx->zcoeff_blk,
          sizeof(ctx->zcoeff_blk[0]) * ctx->num_4x4_blk);
-#endif
 
   if (!output_enabled)
     return;
@@ -1273,9 +1272,25 @@ static void update_state_supertx(VP10_COMP *cpi, ThreadData *td,
   }
 
   x->skip = ctx->skip;
+
+#if CONFIG_VAR_TX
+  for (i = 0; i < 1; ++i)
+    memcpy(x->blk_skip[i], ctx->blk_skip[i],
+           sizeof(uint8_t) * ctx->num_4x4_blk);
+#endif  // CONFIG_VAR_TX
   memcpy(x->zcoeff_blk[mbmi->tx_size], ctx->zcoeff_blk,
          sizeof(uint8_t) * ctx->num_4x4_blk);
 
+#if CONFIG_VAR_TX
+  {
+    const TX_SIZE mtx = mbmi->tx_size;
+    int idy, idx;
+    for (idy = 0; idy < (1 << mtx) / 2; ++idy)
+      for (idx = 0; idx < (1 << mtx) / 2; ++idx)
+        mbmi->inter_tx_size[(idy << 3) + idx] = mbmi->tx_size;
+  }
+#endif  // CONFIG_VAR_TX
+
   if (!output_enabled)
     return;
 
@@ -1309,16 +1324,6 @@ static void update_state_supertx(VP10_COMP *cpi, ThreadData *td,
       mv->mv[1].as_int = mi->mbmi.mv[1].as_int;
     }
   }
-
-#if CONFIG_VAR_TX
-  {
-    const TX_SIZE mtx = mbmi->tx_size;
-    int idy, idx;
-    for (idy = 0; idy < (1 << mtx) / 2; ++idy)
-      for (idx = 0; idx < (1 << mtx) / 2; ++idx)
-        mbmi->inter_tx_size[(idy << 3) + idx] = mbmi->tx_size;
-  }
-#endif
 }
 
 static void update_state_sb_supertx(VP10_COMP *cpi, ThreadData *td,
@@ -1414,10 +1419,16 @@ static void update_supertx_param(ThreadData *td,
                                  int best_tx,
                                  TX_SIZE supertx_size) {
   MACROBLOCK *const x = &td->mb;
+#if CONFIG_VAR_TX
+  int i;
 
-  ctx->mic.mbmi.tx_size = supertx_size;
+  for (i = 0; i < 1; ++i)
+    memcpy(ctx->blk_skip[i], x->blk_skip[i],
+           sizeof(uint8_t) * ctx->num_4x4_blk);
+#endif  // CONFIG_VAR_TX
   memcpy(ctx->zcoeff_blk, x->zcoeff_blk[supertx_size],
          sizeof(uint8_t) * ctx->num_4x4_blk);
+  ctx->mic.mbmi.tx_size = supertx_size;
   ctx->skip = x->skip;
   ctx->mic.mbmi.tx_type = best_tx;
 }
@@ -5232,6 +5243,11 @@ static void rd_supertx_sb(VP10_COMP *cpi, ThreadData *td,
   *tmp_rate = tmp_rate_tx;
   *tmp_dist = tmp_dist_tx;
   x->skip = skip_tx;
+#if CONFIG_VAR_TX
+  for (plane = 0; plane < 1; ++plane)
+    memset(x->blk_skip[plane], x->skip,
+           sizeof(uint8_t) * pc_tree->none.num_4x4_blk);
+#endif  // CONFIG_VAR_TX
   xd->mi[0]->mbmi.tx_type = best_tx_nostx;
 }
 #endif  // CONFIG_SUPERTX