[FFmpeg-devel] [PATCH] ppc: fix vc1 inverse transform, unbreak build

Mans Rullgard mans
Mon Feb 21 20:19:23 CET 2011


GCC 4.3 and later are more particular about signedness matching
in vector operations.  The operations under if(rangered) were
missing assingments and thus had no effect.

Signed-off-by: Mans Rullgard <mans at mansr.com>
---
This is only compile-tested as I don't have a sample using range
reduction.
---
 libavcodec/ppc/vc1dsp_altivec.c |   34 +++++++++++++++++-----------------
 1 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/libavcodec/ppc/vc1dsp_altivec.c b/libavcodec/ppc/vc1dsp_altivec.c
index b5cc71c..05edb53 100644
--- a/libavcodec/ppc/vc1dsp_altivec.c
+++ b/libavcodec/ppc/vc1dsp_altivec.c
@@ -146,7 +146,7 @@ static void vc1_inv_trans_8x8_altivec(DCTELEM block[64],
     const vector  signed int vec_1s = vec_splat_s32(1);
     const vector unsigned int vec_1 = vec_splat_u32(1);
     const vector unsigned short rangered_shift = vec_splat_u16(1);
-    const vector   signed short signed_bias = vec_sl(vec_splat_u16(4),
+    const vector   signed short signed_bias = vec_sl(vec_splat_s16(4),
                                                      vec_splat_u16(4));
 
     src0 = vec_ld(  0, block);
@@ -219,23 +219,23 @@ static void vc1_inv_trans_8x8_altivec(DCTELEM block[64],
 
     if (rangered) {
         if (!sign) {
-            vec_sub(src0, signed_bias);
-            vec_sub(src1, signed_bias);
-            vec_sub(src2, signed_bias);
-            vec_sub(src3, signed_bias);
-            vec_sub(src4, signed_bias);
-            vec_sub(src5, signed_bias);
-            vec_sub(src6, signed_bias);
-            vec_sub(src7, signed_bias);
+            src0 = vec_sub(src0, signed_bias);
+            src1 = vec_sub(src1, signed_bias);
+            src2 = vec_sub(src2, signed_bias);
+            src3 = vec_sub(src3, signed_bias);
+            src4 = vec_sub(src4, signed_bias);
+            src5 = vec_sub(src5, signed_bias);
+            src6 = vec_sub(src6, signed_bias);
+            src7 = vec_sub(src7, signed_bias);
         }
-        vec_sl(src0, rangered_shift);
-        vec_sl(src1, rangered_shift);
-        vec_sl(src2, rangered_shift);
-        vec_sl(src3, rangered_shift);
-        vec_sl(src4, rangered_shift);
-        vec_sl(src5, rangered_shift);
-        vec_sl(src6, rangered_shift);
-        vec_sl(src7, rangered_shift);
+        src0 = vec_sl(src0, rangered_shift);
+        src1 = vec_sl(src1, rangered_shift);
+        src2 = vec_sl(src2, rangered_shift);
+        src3 = vec_sl(src3, rangered_shift);
+        src4 = vec_sl(src4, rangered_shift);
+        src5 = vec_sl(src5, rangered_shift);
+        src6 = vec_sl(src6, rangered_shift);
+        src7 = vec_sl(src7, rangered_shift);
     }
 
     vec_st(src0,  0, block);
-- 
1.7.4




More information about the ffmpeg-devel mailing list