Fixes a win build issue related to denoising.

Change-Id: I912384f526865089aa03ca8875591324e5c1c449
This commit is contained in:
Stefan Holmer 2012-05-31 15:27:05 +02:00 committed by John Koleszar
parent b073e3cdd4
commit cab6ac16e0

View File

@ -22,13 +22,6 @@ union sum_union {
short e[8];
};
static inline int sum_vec_128i(__m128i vec)
{
union sum_union s = { .v = vec };
return s.e[0] + s.e[1] + s.e[2] + s.e[3] +
s.e[4] + s.e[5] + s.e[6] + s.e[7];
}
int vp8_denoiser_filter_sse2(YV12_BUFFER_CONFIG *mc_running_avg,
YV12_BUFFER_CONFIG *running_avg,
MACROBLOCK *signal, unsigned int motion_magnitude,
@ -44,7 +37,7 @@ int vp8_denoiser_filter_sse2(YV12_BUFFER_CONFIG *mc_running_avg,
int avg_y_stride = running_avg->y_stride;
const union coeff_pair *LUT = vp8_get_filter_coeff_LUT(motion_magnitude);
int r, c;
__m128i sum_diff = { 0 };
__m128i acc_diff = { 0 };
for (r = 0; r < 16; ++r)
{
@ -125,7 +118,7 @@ int vp8_denoiser_filter_sse2(YV12_BUFFER_CONFIG *mc_running_avg,
// isn't classified as noise.
diff0 = _mm_sub_epi16(v_sig0, res0);
diff1 = _mm_sub_epi16(v_sig1, res2);
sum_diff = _mm_add_epi16(sum_diff, _mm_add_epi16(diff0, diff1));
acc_diff = _mm_add_epi16(acc_diff, _mm_add_epi16(diff0, diff1));
diff0sq = _mm_mullo_epi16(diff0, diff0);
diff1sq = _mm_mullo_epi16(diff1, diff1);
@ -143,9 +136,17 @@ int vp8_denoiser_filter_sse2(YV12_BUFFER_CONFIG *mc_running_avg,
mc_running_avg_y += mc_avg_y_stride;
running_avg_y += avg_y_stride;
}
if (abs(sum_vec_128i(sum_diff)) > SUM_DIFF_THRESHOLD)
{
return COPY_BLOCK;
// Compute the sum of all pixel differences of this MB.
union sum_union s;
int sum_diff;
s.v = acc_diff;
sum_diff = s.e[0] + s.e[1] + s.e[2] + s.e[3] +
s.e[4] + s.e[5] + s.e[6] + s.e[7];
if (abs(sum_diff) > SUM_DIFF_THRESHOLD)
{
return COPY_BLOCK;
}
}
vp8_copy_mem16x16(filtered_buf, 16, signal->thismb, sig_stride);
return FILTER_BLOCK;