Fix yuv2rgb C functions to work for widths divisible by 4 but not by 8

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23508 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2007-06-08 07:49:59 +00:00
parent 0ff97c28e3
commit 50e63ed5bd
1 changed files with 38 additions and 4 deletions

View File

@ -276,7 +276,7 @@ static int func_name(SwsContext *c, uint8_t* src[], int srcStride[], int srcSlic
int av_unused U, V;\ int av_unused U, V;\
int Y;\ int Y;\
#define EPILOG(dst_delta)\ #define EPILOG1(dst_delta)\
pu += 4;\ pu += 4;\
pv += 4;\ pv += 4;\
py_1 += 8;\ 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_1 += dst_delta;\
dst_2 += dst_delta;\ dst_2 += dst_delta;\
}\ }\
if (c->dstW & 4) {\
int av_unused U, V;\
int Y;\
#define EPILOG2()\
}\
}\ }\
return srcSliceH;\ return srcSliceH;\
} }
#define EPILOG(dst_delta)\
EPILOG1(dst_delta)\
EPILOG2()
PROLOG(yuv2rgb_c_32, uint32_t) PROLOG(yuv2rgb_c_32, uint32_t)
RGB(0); RGB(0);
DST1(0); DST1(0);
@ -304,7 +314,15 @@ PROLOG(yuv2rgb_c_32, uint32_t)
RGB(3); RGB(3);
DST2(3); DST2(3);
DST1(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) PROLOG(yuv2rgb_c_24_rgb, uint8_t)
RGB(0); RGB(0);
@ -322,7 +340,15 @@ PROLOG(yuv2rgb_c_24_rgb, uint8_t)
RGB(3); RGB(3);
DST2RGB(3); DST2RGB(3);
DST1RGB(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 // only trivial mods from yuv2rgb_c_24_rgb
PROLOG(yuv2rgb_c_24_bgr, uint8_t) PROLOG(yuv2rgb_c_24_bgr, uint8_t)
@ -341,7 +367,15 @@ PROLOG(yuv2rgb_c_24_bgr, uint8_t)
RGB(3); RGB(3);
DST2BGR(3); DST2BGR(3);
DST1BGR(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 // This is exactly the same code as yuv2rgb_c_32 except for the types of
// r, g, b, dst_1, dst_2 // r, g, b, dst_1, dst_2