From a0993703702ba1c1af9d4c04debe3f040f18a98d Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Wed, 14 Nov 2012 15:02:43 -0800 Subject: [PATCH] Prevent overflow in variance32x32. Change-Id: I478878c78ef8a770186622d987d318176827ef5f --- vp9/encoder/variance_c.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/vp9/encoder/variance_c.c b/vp9/encoder/variance_c.c index 8ac956e95..7703ef0c2 100644 --- a/vp9/encoder/variance_c.c +++ b/vp9/encoder/variance_c.c @@ -12,7 +12,7 @@ #include "variance.h" #include "vp9/common/filter.h" #include "vp9/common/subpelvar.h" - +#include "vpx/vpx_integer.h" unsigned int vp9_get_mb_ss_c(const short *src_ptr) { unsigned int i, sum = 0; @@ -37,8 +37,7 @@ unsigned int vp9_variance32x32_c(const unsigned char *src_ptr, variance(src_ptr, source_stride, ref_ptr, recon_stride, 32, 32, &var, &avg); *sse = var; - // TODO(rbultje): in extreme cases these products will rollover. - return (var - (((unsigned int)avg * avg) >> 10)); + return (var - (((int64_t)avg * avg) >> 10)); } #endif