From 54b9095833fea1897a00fa08e8b46fd9d4c7b826 Mon Sep 17 00:00:00 2001 From: David Conrad Date: Tue, 6 Jan 2009 10:35:06 +0000 Subject: [PATCH] offset and weights are signed, fixes some non-bitexact issues. Patch by David Conrad %lessen42 A gmail P com% Originally committed as revision 16449 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/ppc/h264_altivec.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libavcodec/ppc/h264_altivec.c b/libavcodec/ppc/h264_altivec.c index 6a5ed44..fb9b9be 100644 --- a/libavcodec/ppc/h264_altivec.c +++ b/libavcodec/ppc/h264_altivec.c @@ -942,7 +942,8 @@ void biweight_h264_WxH_altivec(uint8_t *dst, uint8_t *src, int stride, int log2_ { int y, dst_aligned, src_aligned; vec_u8 vsrc, vdst; - vec_u16 vtemp, vlog2_denom, vweights, vweightd, voffset, v0, v1, v2, v3; + vec_s16 vtemp, vweights, vweightd, voffset, v0, v1, v2, v3; + vec_u16 vlog2_denom; DECLARE_ALIGNED_16(int32_t, temp[4]); LOAD_ZERO; @@ -977,16 +978,16 @@ void biweight_h264_WxH_altivec(uint8_t *dst, uint8_t *src, int stride, int log2_ } if (w == 16 || dst_aligned) { - v0 = vec_mladd(v0, vweightd, zero_u16v); - v2 = vec_mladd(v2, vweights, zero_u16v); + v0 = vec_mladd(v0, vweightd, zero_s16v); + v2 = vec_mladd(v2, vweights, zero_s16v); v0 = vec_adds(v0, voffset); v0 = vec_adds(v0, v2); v0 = vec_sra(v0, vlog2_denom); } if (w == 16 || !dst_aligned) { - v1 = vec_mladd(v1, vweightd, zero_u16v); - v3 = vec_mladd(v3, vweights, zero_u16v); + v1 = vec_mladd(v1, vweightd, zero_s16v); + v3 = vec_mladd(v3, vweights, zero_s16v); v1 = vec_adds(v1, voffset); v1 = vec_adds(v1, v3); -- 2.7.4