Some AltiVec functions in SwScaler produce different output than their
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 14 Feb 2009 16:37:39 +0000 (16:37 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 14 Feb 2009 16:37:39 +0000 (16:37 +0000)
counterparts in pure C, so don't invoke them in bitexact mode.

Originally committed as revision 28555 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

libswscale/swscale.c
libswscale/swscale_template.c

index 586715e..a38c14d 100644 (file)
@@ -2396,6 +2396,7 @@ SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, int d
 
 #ifdef COMPILE_ALTIVEC
         if ((c->flags & SWS_CPU_CAPS_ALTIVEC) &&
+            !(c->flags & SWS_BITEXACT) &&
             srcFormat == PIX_FMT_YUV420P) {
           // unscaled YV12 -> packed YUV, we want speed
           if (dstFormat == PIX_FMT_YUYV422)
index c0e680c..1f5a10d 100644 (file)
@@ -1136,9 +1136,10 @@ static inline void RENAME(yuv2packedX)(SwsContext *c, int16_t *lumFilter, int16_
 #if HAVE_ALTIVEC
     /* The following list of supported dstFormat values should
        match what's found in the body of altivec_yuv2packedX() */
-    if (c->dstFormat==PIX_FMT_ABGR  || c->dstFormat==PIX_FMT_BGRA  ||
+    if (!(c->flags & SWS_BITEXACT) &&
+       (c->dstFormat==PIX_FMT_ABGR  || c->dstFormat==PIX_FMT_BGRA  ||
         c->dstFormat==PIX_FMT_BGR24 || c->dstFormat==PIX_FMT_RGB24 ||
-        c->dstFormat==PIX_FMT_RGBA  || c->dstFormat==PIX_FMT_ARGB)
+        c->dstFormat==PIX_FMT_RGBA  || c->dstFormat==PIX_FMT_ARGB))
             altivec_yuv2packedX (c, lumFilter, lumSrc, lumFilterSize,
                                  chrFilter, chrSrc, chrFilterSize,
                                  dest, dstW, dstY);