OSDN Git Service

offset and weights are signed, fixes some non-bitexact issues.
authorDavid Conrad <lessen42@gmail.com>
Tue, 6 Jan 2009 10:35:06 +0000 (10:35 +0000)
committerGuillaume Poirier <gpoirier@mplayerhq.hu>
Tue, 6 Jan 2009 10:35:06 +0000 (10:35 +0000)
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

index 6a5ed44..fb9b9be 100644 (file)
@@ -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);