]> granicus.if.org Git - libvpx/commitdiff
Tuning SATD rate calculation for speed
authorJingning Han <jingning@google.com>
Tue, 31 Mar 2015 17:57:41 +0000 (10:57 -0700)
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>
Tue, 31 Mar 2015 18:02:20 +0000 (11:02 -0700)
This commit allows the encoder to check the eob per transform
block to decide how to compute the SATD rate cost. If the entire
block is quantized to zero, there is no need to add anything; if
only the DC coefficient is non-zero, add its absolute value;
otherwise, sum over the block. This reduces the CPU cycles spent
on vp9_satd_sse2 to one third.

Change-Id: I0d56044b793b286efc0875fafc0b8bf2d2047e32

vp9/encoder/vp9_pickmode.c

index c3629ddd95456fe2f10ff85d8e0c6349c8bce727..f8a5e6ae7ba9618dda8ad6234cb70e85e2f13fd2 100644 (file)
@@ -401,7 +401,11 @@ static void block_yrd(VP9_COMP *cpi, MACROBLOCK *x, int *rate, int64_t *dist,
         }
 
         *dist += vp9_block_error(coeff, dqcoeff, step << 4, &this_sse) >> shift;
-        *rate += (int)vp9_satd((const int16_t *)qcoeff, step << 4);
+
+        if (*eob == 1)
+          *rate += (int)abs(qcoeff[0]);
+        else if (*eob > 1)
+          *rate += (int)vp9_satd((const int16_t *)qcoeff, step << 4);
 
         *sse += (this_sse >> shift);
         *skippable &= (*eob == 0);