Commit ed3df445 authored by Alex Converse's avatar Alex Converse

Revert "Merge "Change highbd variance rounding to prevent negative variance.""

This reverts commit ea48370a, reversing
changes made to 15939cb2.

The commit was insufficiently tested and causes failures.

Change-Id: I623d6fc2cd3ae6fd42d0abab1f8eada465ae57a7
parent ea48370a
......@@ -54,11 +54,11 @@ static void RoundHighBitDepth(int bit_depth, int64_t *se, uint64_t *sse) {
switch (bit_depth) {
case VPX_BITS_12:
*sse = (*sse + 128) >> 8;
*se = *se / (1 << 4);
*se = (*se + 8) >> 4;
break;
case VPX_BITS_10:
*sse = (*sse + 8) >> 4;
*se = *se / (1 << 2);
*se = (*se + 2) >> 2;
break;
case VPX_BITS_8:
default:
......
......@@ -275,7 +275,7 @@ void vpx_comp_avg_pred_c(uint8_t *comp_pred, const uint8_t *pred,
#if CONFIG_VP9_HIGHBITDEPTH
static void highbd_variance64(const uint8_t *a8, int a_stride,
const uint8_t *b8, int b_stride,
int w, int h, uint64_t *sse, int *sum) {
int w, int h, uint64_t *sse, uint64_t *sum) {
int i, j;
uint16_t *a = CONVERT_TO_SHORTPTR(a8);
......@@ -298,26 +298,30 @@ static void highbd_8_variance(const uint8_t *a8, int a_stride,
const uint8_t *b8, int b_stride,
int w, int h, uint32_t *sse, int *sum) {
uint64_t sse_long = 0;
highbd_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, sum);
uint64_t sum_long = 0;
highbd_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, &sum_long);
*sse = (uint32_t)sse_long;
*sum = (int)sum_long;
}
static void highbd_10_variance(const uint8_t *a8, int a_stride,
const uint8_t *b8, int b_stride,
int w, int h, uint32_t *sse, int *sum) {
uint64_t sse_long = 0;
highbd_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, sum);
*sse = (uint32_t)ROUND_ZERO_POWER_OF_TWO(sse_long, 4);
*sum = ROUND_ZERO_POWER_OF_TWO(*sum, 2);
uint64_t sum_long = 0;
highbd_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, &sum_long);
*sse = (uint32_t)ROUND_POWER_OF_TWO(sse_long, 4);
*sum = (int)ROUND_POWER_OF_TWO(sum_long, 2);
}
static void highbd_12_variance(const uint8_t *a8, int a_stride,
const uint8_t *b8, int b_stride,
int w, int h, uint32_t *sse, int *sum) {
uint64_t sse_long = 0;
highbd_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, sum);
*sse = (uint32_t)ROUND_ZERO_POWER_OF_TWO(sse_long, 8);
*sum = ROUND_ZERO_POWER_OF_TWO(*sum, 4);
uint64_t sum_long = 0;
highbd_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, &sum_long);
*sse = (uint32_t)ROUND_POWER_OF_TWO(sse_long, 8);
*sum = (int)ROUND_POWER_OF_TWO(sum_long, 4);
}
#define HIGHBD_VAR(W, H) \
......
......@@ -19,8 +19,6 @@
extern "C" {
#endif
#define ROUND_ZERO_POWER_OF_TWO(value, n) ((value) / (1 << (n)))
#define FILTER_BITS 7
#define FILTER_WEIGHT 128
......
......@@ -9,7 +9,6 @@
*/
#include "./vpx_config.h"
#include "vpx_dsp/variance.h"
#include "vpx_ports/mem.h"
typedef uint32_t (*high_variance_fn_t) (const uint16_t *src, int src_stride,
......@@ -63,8 +62,8 @@ static void highbd_10_variance_sse2(const uint16_t *src, int src_stride,
sum_long += sum0;
}
}
*sum = ROUND_ZERO_POWER_OF_TWO(sum_long, 2);
*sse = (uint32_t)ROUND_ZERO_POWER_OF_TWO(sse_long, 4);
*sum = ROUND_POWER_OF_TWO(sum_long, 2);
*sse = (uint32_t)ROUND_POWER_OF_TWO(sse_long, 4);
}
static void highbd_12_variance_sse2(const uint16_t *src, int src_stride,
......@@ -85,8 +84,8 @@ static void highbd_12_variance_sse2(const uint16_t *src, int src_stride,
sum_long += sum0;
}
}
*sum = ROUND_ZERO_POWER_OF_TWO(sum_long, 4);
*sse = (uint32_t)ROUND_ZERO_POWER_OF_TWO(sse_long, 8);
*sum = ROUND_POWER_OF_TWO(sum_long, 4);
*sse = (uint32_t)ROUND_POWER_OF_TWO(sse_long, 8);
}
......@@ -107,7 +106,7 @@ void vpx_highbd_10_get##S##x##S##var_sse2(const uint8_t *src8, int src_stride, \
uint16_t *ref = CONVERT_TO_SHORTPTR(ref8); \
vpx_highbd_calc##S##x##S##var_sse2(src, src_stride, ref, ref_stride, \
sse, sum); \
*sum = ROUND_ZERO_POWER_OF_TWO(*sum, 2); \
*sum = ROUND_POWER_OF_TWO(*sum, 2); \
*sse = ROUND_POWER_OF_TWO(*sse, 4); \
} \
\
......@@ -118,7 +117,7 @@ void vpx_highbd_12_get##S##x##S##var_sse2(const uint8_t *src8, int src_stride, \
uint16_t *ref = CONVERT_TO_SHORTPTR(ref8); \
vpx_highbd_calc##S##x##S##var_sse2(src, src_stride, ref, ref_stride, \
sse, sum); \
*sum = ROUND_ZERO_POWER_OF_TWO(*sum, 4); \
*sum = ROUND_POWER_OF_TWO(*sum, 4); \
*sse = ROUND_POWER_OF_TWO(*sse, 8); \
}
......@@ -346,7 +345,7 @@ uint32_t vpx_highbd_10_sub_pixel_variance##w##x##h##_##opt( \
sse += sse2; \
} \
} \
se = ROUND_ZERO_POWER_OF_TWO(se, 2); \
se = ROUND_POWER_OF_TWO(se, 2); \
sse = ROUND_POWER_OF_TWO(sse, 4); \
*sse_ptr = sse; \
return sse - ((cast se * se) >> (wlog2 + hlog2)); \
......@@ -393,7 +392,7 @@ uint32_t vpx_highbd_12_sub_pixel_variance##w##x##h##_##opt( \
}\
} \
} \
se = ROUND_ZERO_POWER_OF_TWO(se, 4); \
se = ROUND_POWER_OF_TWO(se, 4); \
sse = (uint32_t)ROUND_POWER_OF_TWO(long_sse, 8); \
*sse_ptr = sse; \
return sse - ((cast se * se) >> (wlog2 + hlog2)); \
......@@ -515,7 +514,7 @@ uint32_t vpx_highbd_10_sub_pixel_avg_variance##w##x##h##_##opt( \
sse += sse2; \
} \
} \
se = ROUND_ZERO_POWER_OF_TWO(se, 2); \
se = ROUND_POWER_OF_TWO(se, 2); \
sse = ROUND_POWER_OF_TWO(sse, 4); \
*sse_ptr = sse; \
return sse - ((cast se * se) >> (wlog2 + hlog2)); \
......@@ -567,7 +566,7 @@ uint32_t vpx_highbd_12_sub_pixel_avg_variance##w##x##h##_##opt( \
} \
} \
} \
se = ROUND_ZERO_POWER_OF_TWO(se, 4); \
se = ROUND_POWER_OF_TWO(se, 4); \
sse = (uint32_t)ROUND_POWER_OF_TWO(long_sse, 8); \
*sse_ptr = sse; \
return sse - ((cast se * se) >> (wlog2 + hlog2)); \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment