shithub: libvpx

Download patch

ref: 0607abc3dd26e6782ad9577765f9aeef311b0de9
parent: f6bc783d630cd191567259279be1b578a4825244
author: Yunqing Wang <yunqingwang@google.com>
date: Fri Sep 6 12:59:55 EDT 2013

Stop partition checking when distortion is small

If the current obtained distortion is very small, which happens
for static image case, we pick the current partition type without
further split checking.

This won't affect regular videos. For static videos, we got 10%~12%
encoding speed gain. PSNR was better for some clips, and worse for
others. Overall it was even.

Change-Id: If787a57bedf46fc595ca4f5ded2b0c0a69e9fdef

--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -1790,11 +1790,24 @@
       }
       sum_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_dist);
       if (sum_rd < best_rd) {
+        int64_t stop_thresh = 2048;
+
         best_rate = this_rate;
         best_dist = this_dist;
         best_rd = sum_rd;
         if (bsize >= BLOCK_8X8)
           *(get_sb_partitioning(x, bsize)) = bsize;
+
+        // Adjust threshold according to partition size.
+        stop_thresh >>= 8 - (b_width_log2_lookup[bsize] +
+            b_height_log2_lookup[bsize]);
+
+        // If obtained distortion is very small, choose current partition
+        // and stop splitting.
+        if (this_dist < stop_thresh) {
+          do_split = 0;
+          do_rect = 0;
+        }
       }
     }
     restore_context(cpi, mi_row, mi_col, a, l, sa, sl, bsize);