diff options
author | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2007-06-08 07:49:59 +0000 |
---|---|---|
committer | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2007-06-08 07:49:59 +0000 |
commit | 1a18eaf7606a486346cb1a2a9267a0c1970b8e28 (patch) | |
tree | 112496f19e9e64f0aa1b7c7ea248f3d64544a49c /libswscale | |
parent | 4fbd52f0b8fc8e2f5ae6b6f74e349961fa4761c1 (diff) | |
download | ffmpeg-1a18eaf7606a486346cb1a2a9267a0c1970b8e28.tar.gz |
Fix yuv2rgb C functions to work for widths divisible by 4 but not by 8
Originally committed as revision 23508 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
Diffstat (limited to 'libswscale')
-rw-r--r-- | libswscale/yuv2rgb.c | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c index 009219a83a..6bd88fdf92 100644 --- a/libswscale/yuv2rgb.c +++ b/libswscale/yuv2rgb.c @@ -276,7 +276,7 @@ static int func_name(SwsContext *c, uint8_t* src[], int srcStride[], int srcSlic 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 @@ static int func_name(SwsContext *c, uint8_t* src[], int srcStride[], int srcSlic 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 @@ PROLOG(yuv2rgb_c_32, uint32_t) 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 @@ PROLOG(yuv2rgb_c_24_rgb, uint8_t) 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 @@ PROLOG(yuv2rgb_c_24_bgr, uint8_t) 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 |