shithub: libvpx

Download patch

ref: 808f3814fc1e8c93ba7358f54a02a81c2d440189
parent: c5795b673d5257c5fda6c6cc89373d7d8a5c289f
parent: 160f3c7e9e25089b5e0c9f324415333051510a5e
author: John Koleszar <jkoleszar@google.com>
date: Wed Dec 8 19:05:07 EST 2010

Merge remote branch 'origin/master' into experimental

Change-Id: I2b70793a97f80039ad23feea164744b1c236ac74

--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -2238,10 +2238,10 @@
 
             vp8_set_mbmode_and_mvs(x, this_mode, &mode_mv[this_mode]);
             vp8_build_inter_predictors_mby(&x->e_mbd);
-            VARIANCE_INVOKE(&cpi->rtcd.variance, get16x16var)(x->src.y_buffer, x->src.y_stride, x->e_mbd.predictor, 16, (unsigned int *)(&sse), &sum);
+            if(x->encode_breakout)
+                VARIANCE_INVOKE(&cpi->rtcd.variance, get16x16var)(x->src.y_buffer, x->src.y_stride, x->e_mbd.predictor, 16, (unsigned int *)(&sse), &sum);
 
-            if (cpi->active_map_enabled && x->active_ptr[0] == 0)
-            {
+            if (cpi->active_map_enabled && x->active_ptr[0] == 0) {
                 x->skip = 1;
             }
             else if (sse < x->encode_breakout)
@@ -2249,21 +2249,23 @@
                 // Check u and v to make sure skip is ok
                 int sse2 = 0;
 
-                sse2 = VP8_UVSSE(x, IF_RTCD(&cpi->rtcd.variance));
-
-                if (sse2 * 2 < x->encode_breakout)
+                // add dc check
+                if (abs(sum) < (cpi->common.Y2dequant[0][0] << 2))
                 {
-                    x->skip = 1;
-                    distortion2 = sse;
-                    rate2 = 500;
+                    sse2 = VP8_UVSSE(x, IF_RTCD(&cpi->rtcd.variance));
 
-                    disable_skip = 1;    // We have no real rate data so trying to adjust for rate_y and rate_uv below will cause problems.
-                    this_rd = RDFUNC(x->rdmult, x->rddiv, rate2, distortion2, cpi->target_bits_per_mb);
+                    if (sse2 * 2 < x->encode_breakout)
+                    {
+                        x->skip = 1;
+                        distortion2 = sse;
+                        rate2 = 500;
+                        disable_skip = 1;
+                        this_rd = RDFUNC(x->rdmult, x->rddiv, rate2,
+                          distortion2, cpi->target_bits_per_mb);
 
-                    break;              // (PGW) Move break here from below - for now at least
+                        break;
+                    }
                 }
-                else
-                    x->skip = 0;
             }
 
             //intermodecost[mode_index] = vp8_cost_mv_ref(this_mode, mdcounts);   // Experimental debug code