# HG changeset patch # User reimar # Date 1181288999 0 # Node ID 63bc8943a1ad6223080d05d326c0dbd456cc0575 # Parent 559c4f075bf10d01c73e540aa9a49df74b98cea5 Fix yuv2rgb C functions to work for widths divisible by 4 but not by 8 diff -r 559c4f075bf1 -r 63bc8943a1ad libswscale/yuv2rgb.c --- a/libswscale/yuv2rgb.c Fri Jun 08 07:49:03 2007 +0000 +++ b/libswscale/yuv2rgb.c Fri Jun 08 07:49:59 2007 +0000 @@ -276,7 +276,7 @@ int av_unused U, V;\ int Y;\ -#define EPILOG(dst_delta)\ +#define EPILOG1(dst_delta)\ pu += 4;\ pv += 4;\ py_1 += 8;\ @@ -284,10 +284,20 @@ dst_1 += dst_delta;\ dst_2 += dst_delta;\ }\ + if (c->dstW & 4) {\ + int av_unused U, V;\ + int Y;\ + +#define EPILOG2()\ + }\ }\ return srcSliceH;\ } +#define EPILOG(dst_delta)\ + EPILOG1(dst_delta)\ + EPILOG2() + PROLOG(yuv2rgb_c_32, uint32_t) RGB(0); DST1(0); @@ -304,7 +314,15 @@ RGB(3); DST2(3); DST1(3); -EPILOG(8) +EPILOG1(8) + RGB(0); + DST1(0); + DST2(0); + + RGB(1); + DST2(1); + DST1(1); +EPILOG2() PROLOG(yuv2rgb_c_24_rgb, uint8_t) RGB(0); @@ -322,7 +340,15 @@ RGB(3); DST2RGB(3); DST1RGB(3); -EPILOG(24) +EPILOG1(24) + RGB(0); + DST1RGB(0); + DST2RGB(0); + + RGB(1); + DST2RGB(1); + DST1RGB(1); +EPILOG2() // only trivial mods from yuv2rgb_c_24_rgb PROLOG(yuv2rgb_c_24_bgr, uint8_t) @@ -341,7 +367,15 @@ RGB(3); DST2BGR(3); DST1BGR(3); -EPILOG(24) +EPILOG1(24) + RGB(0); + DST1BGR(0); + DST2BGR(0); + + RGB(1); + DST2BGR(1); + DST1BGR(1); +EPILOG2() // This is exactly the same code as yuv2rgb_c_32 except for the types of // r, g, b, dst_1, dst_2