Merge "change the threshold of DC check for encode breakout"
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
index 50780a3..7e2be77 100644
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -2229,22 +2229,28 @@
else if (x->encode_breakout)
{
int sum, sse;
+ int threshold = (xd->block[0].dequant[1]
+ * xd->block[0].dequant[1] >>4);
+
+ if(threshold < x->encode_breakout)
+ threshold = 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 (sse < x->encode_breakout)
+ if (sse < threshold)
{
// Check u and v to make sure skip is ok
int sse2 = 0;
-
- // add dc check
- if (abs(sum) < (cpi->common.Y2dequant[0][0] << 2))
+ /* If theres is no codeable 2nd order dc
+ or a very small uniform pixel change change */
+ if (abs(sum) < (xd->block[24].dequant[0]<<2)||
+ ((sum * sum>>8) > sse && abs(sum) <128))
{
sse2 = VP8_UVSSE(x, IF_RTCD(&cpi->rtcd.variance));
- if (sse2 * 2 < x->encode_breakout)
+ if (sse2 * 2 < threshold)
{
x->skip = 1;
distortion2 = sse + sse2;
@@ -2390,6 +2396,7 @@
if (x->skip)
break;
+
}
// Reduce the activation RD thresholds for the best choice mode