# HG changeset patch # User michael # Date 1221275535 0 # Node ID 5ff11e5336e115a9ccc39be5ef9217230d738888 # Parent f8ee6c6221b45d9ce694923b9ff9013c0788c4f8 Disable mmx routines that are not bitexact when the user wants bitexact ones. diff -r f8ee6c6221b4 -r 5ff11e5336e1 libswscale/swscale_template.c --- 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>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) {