diff ppc/h264_altivec.c @ 8535:8f3e20061aff libavcodec

offset and weights are signed, fixes some non-bitexact issues. Patch by David Conrad %lessen42 A gmail P com%
author gpoirier
date Tue, 06 Jan 2009 10:35:06 +0000
parents 961e40a13102
children 87450160a913
line wrap: on
line diff
--- a/ppc/h264_altivec.c	Tue Jan 06 10:13:25 2009 +0000
+++ b/ppc/h264_altivec.c	Tue Jan 06 10:35:06 2009 +0000
@@ -942,7 +942,8 @@
 {
     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 @@
         }
 
         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);