]> granicus.if.org Git - libvpx/commitdiff
Merge "Modify the setting of transform skip flags in non-rd mode"
authorYunqing Wang <yunqingwang@google.com>
Mon, 9 Mar 2015 15:35:57 +0000 (08:35 -0700)
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>
Mon, 9 Mar 2015 15:35:57 +0000 (08:35 -0700)
vp9/encoder/vp9_pickmode.c

index 2f9cccb99c712b0375b91b42eb56025fe771bb6c..4a6074e51275552ef6772d66f9433bd79ed5bc8b 100644 (file)
@@ -224,15 +224,6 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize,
   *var_y = var;
   *sse_y = sse;
 
-  x->skip_txfm[0] = 0;
-  // Check if all ac coefficients can be quantized to zero.
-  if (var < ac_thr || var == 0) {
-    x->skip_txfm[0] = 2;
-    // Check if dc coefficient can be quantized to zero.
-    if (sse - var < dc_thr || sse == var)
-      x->skip_txfm[0] = 1;
-  }
-
   if (cpi->common.tx_mode == TX_MODE_SELECT) {
     if (sse > (var << 2))
       xd->mi[0].src_mi->mbmi.tx_size =
@@ -254,6 +245,32 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize,
             tx_mode_to_biggest_tx_size[cpi->common.tx_mode]);
   }
 
+  // Evaluate if the partition block is a skippable block in Y plane.
+  {
+    const BLOCK_SIZE unit_size =
+        txsize_to_bsize[xd->mi[0].src_mi->mbmi.tx_size];
+    const unsigned int num_blk_log2 =
+        (b_width_log2_lookup[bsize] - b_width_log2_lookup[unit_size]) +
+        (b_height_log2_lookup[bsize] - b_height_log2_lookup[unit_size]);
+    const unsigned int sse_tx = sse >> num_blk_log2;
+    const unsigned int var_tx = var >> num_blk_log2;
+
+    x->skip_txfm[0] = 0;
+    // Check if all ac coefficients can be quantized to zero.
+    if (var_tx < ac_thr || var == 0) {
+      x->skip_txfm[0] = 2;
+      // Check if dc coefficient can be quantized to zero.
+      if (sse_tx - var_tx < dc_thr || sse == var)
+        x->skip_txfm[0] = 1;
+    }
+  }
+
+  if (x->skip_txfm[0] == 1) {
+    *out_rate_sum = 0;
+    *out_dist_sum = sse << 4;
+    return;
+  }
+
 #if CONFIG_VP9_HIGHBITDEPTH
   if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
     vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bsize],
@@ -285,9 +302,6 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize,
 
   *out_rate_sum += rate;
   *out_dist_sum += dist << 4;
-
-  if (*out_rate_sum == 0)
-    x->skip_txfm[0] = 1;
 }
 
 static void model_rd_for_sb_uv(VP9_COMP *cpi, BLOCK_SIZE bsize,