Fix integer overflow in get_mean_and_dev()
BUG=aomedia:1889
Change-Id: Ib7c38689c646563129696b30553ee35a2cead3d5
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index a01bd3a..5c6d6c9 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -4044,7 +4044,7 @@
static void get_mean_and_dev(const int16_t *data, int stride, int bw, int bh,
float *mean, float *dev) {
int x_sum = 0;
- int x2_sum = 0;
+ uint64_t x2_sum = 0;
for (int i = 0; i < bh; ++i) {
for (int j = 0; j < bw; ++j) {
const int val = data[j];
@@ -4056,7 +4056,7 @@
const int num = bw * bh;
const float e_x = (float)x_sum / num;
- const float e_x2 = (float)x2_sum / num;
+ const float e_x2 = (float)((double)x2_sum / num);
const float diff = e_x2 - e_x * e_x;
*dev = (diff > 0) ? sqrtf(diff) : 0;
*mean = e_x;