changeset 27565:5ff11e5336e1

Disable mmx routines that are not bitexact when the user wants bitexact ones.
author michael
date Sat, 13 Sep 2008 03:12:15 +0000
parents f8ee6c6221b4
children 9766be900f30
files libswscale/swscale_template.c
diffstat 1 files changed, 15 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libswscale/swscale_template.c	Sat Sep 13 02:18:12 2008 +0000
+++ b/libswscale/swscale_template.c	Sat Sep 13 03:12:15 2008 +0000
@@ -950,6 +950,7 @@
                                     uint8_t *dest, uint8_t *uDest, uint8_t *vDest, long dstW, long chrDstW)
 {
 #ifdef HAVE_MMX
+    if(!(c->flags & SWS_BITEXACT)){
     if (c->flags & SWS_ACCURATE_RND){
         if (uDest){
             YSCALEYUV2YV12X_ACCURATE(   "0", CHR_MMX_FILTER_OFFSET, uDest, chrDstW)
@@ -965,7 +966,9 @@
 
         YSCALEYUV2YV12X("0", LUM_MMX_FILTER_OFFSET, dest, dstW)
     }
-#else
+        return;
+    }
+#endif
 #ifdef HAVE_ALTIVEC
 yuv2yuvX_altivec_real(lumFilter, lumSrc, lumFilterSize,
                       chrFilter, chrSrc, chrFilterSize,
@@ -975,7 +978,6 @@
             chrFilter, chrSrc, chrFilterSize,
             dest, uDest, vDest, dstW, chrDstW);
 #endif //!HAVE_ALTIVEC
-#endif /* HAVE_MMX */
 }
 
 static inline void RENAME(yuv2nv12X)(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
@@ -990,7 +992,9 @@
 static inline void RENAME(yuv2yuv1)(SwsContext *c, int16_t *lumSrc, int16_t *chrSrc,
                                     uint8_t *dest, uint8_t *uDest, uint8_t *vDest, long dstW, long chrDstW)
 {
+    int i;
 #ifdef HAVE_MMX
+    if(!(c->flags & SWS_BITEXACT)){
     long p= uDest ? 3 : 1;
     uint8_t *src[3]= {lumSrc + dstW, chrSrc + chrDstW, chrSrc + VOFW + chrDstW};
     uint8_t *dst[3]= {dest, uDest, vDest};
@@ -1015,9 +1019,9 @@
             );
         }
     }
-
-#else
-    int i;
+        return;
+    }
+#endif
     for (i=0; i<dstW; i++)
     {
         int val= (lumSrc[i]+64)>>7;
@@ -1046,7 +1050,6 @@
             uDest[i]= u;
             vDest[i]= v;
         }
-#endif
 }
 
 
@@ -1059,6 +1062,7 @@
 {
 #ifdef HAVE_MMX
     long dummy=0;
+    if(!(c->flags & SWS_BITEXACT)){
     if (c->flags & SWS_ACCURATE_RND){
         switch(c->dstFormat){
         case PIX_FMT_RGB32:
@@ -1181,6 +1185,7 @@
             return;
         }
     }
+    }
 #endif /* HAVE_MMX */
 #ifdef HAVE_ALTIVEC
     /* The following list of supported dstFormat values should
@@ -1424,6 +1429,7 @@
     {
 #endif // if 0
 #ifdef HAVE_MMX
+    if(!(c->flags & SWS_BITEXACT)){
         switch(c->dstFormat)
         {
             //Note 8280 == DSTW_OFFSET but the preprocessor can't handle that there :(
@@ -1510,6 +1516,7 @@
                 return;
             default: break;
         }
+    }
 #endif //HAVE_MMX
 YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGB2_C, YSCALE_YUV_2_PACKED2_C, YSCALE_YUV_2_GRAY16_2_C, YSCALE_YUV_2_MONO2_C)
 }
@@ -1533,6 +1540,7 @@
     }
 
 #ifdef HAVE_MMX
+    if(!(flags & SWS_BITEXACT)){
     if (uvalpha < 2048) // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
     {
         switch(dstFormat)
@@ -1711,6 +1719,7 @@
             return;
         }
     }
+    }
 #endif /* HAVE_MMX */
     if (uvalpha < 2048)
     {