Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused

pixel swapping during some YUV2RGB conversions.

Originally committed as revision 29483 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
release/0.6
Kostya Shishkov 16 years ago
parent 5a8597a00a
commit df226e6369
  1. 132
      libswscale/yuv2rgb.c

@ -56,10 +56,10 @@ const int32_t ff_yuv2rgb_coeffs[8][4] = {
g = (void *)(c->table_gU[U] + c->table_gV[V]); \
b = (void *)c->table_bU[U];
#define PUTRGB(dst,src,i,o) \
Y = src[2*i+o]; \
#define PUTRGB(dst,src,i) \
Y = src[2*i]; \
dst[2*i ] = r[Y] + g[Y] + b[Y]; \
Y = src[2*i+1-o]; \
Y = src[2*i+1]; \
dst[2*i+1] = r[Y] + g[Y] + b[Y];
#define PUTRGB24(dst,src,i) \
@ -74,10 +74,10 @@ const int32_t ff_yuv2rgb_coeffs[8][4] = {
Y = src[2*i+1]; \
dst[6*i+3] = b[Y]; dst[6*i+4] = g[Y]; dst[6*i+5] = r[Y];
#define PUTRGBA(dst,ysrc,asrc,i,o,s) \
Y = ysrc[2*i+o]; \
#define PUTRGBA(dst,ysrc,asrc,i,s) \
Y = ysrc[2*i]; \
dst[2*i ] = r[Y] + g[Y] + b[Y] + (asrc[2*i ]<<s); \
Y = ysrc[2*i+1-o]; \
Y = ysrc[2*i+1]; \
dst[2*i+1] = r[Y] + g[Y] + b[Y] + (asrc[2*i+1]<<s);
#define PUTRGB48(dst,src,i) \
@ -167,84 +167,84 @@ ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0)
LOADCHROMA(0);
PUTRGB(dst_1,py_1,0,0);
PUTRGB(dst_2,py_2,0,1);
PUTRGB(dst_1,py_1,0);
PUTRGB(dst_2,py_2,0);
LOADCHROMA(1);
PUTRGB(dst_2,py_2,1,1);
PUTRGB(dst_1,py_1,1,0);
PUTRGB(dst_2,py_2,1);
PUTRGB(dst_1,py_1,1);
LOADCHROMA(2);
PUTRGB(dst_1,py_1,2,0);
PUTRGB(dst_2,py_2,2,1);
PUTRGB(dst_1,py_1,2);
PUTRGB(dst_2,py_2,2);
LOADCHROMA(3);
PUTRGB(dst_2,py_2,3,1);
PUTRGB(dst_1,py_1,3,0);
PUTRGB(dst_2,py_2,3);
PUTRGB(dst_1,py_1,3);
ENDYUV2RGBLINE(8)
LOADCHROMA(0);
PUTRGB(dst_1,py_1,0,0);
PUTRGB(dst_2,py_2,0,1);
PUTRGB(dst_1,py_1,0);
PUTRGB(dst_2,py_2,0);
LOADCHROMA(1);
PUTRGB(dst_2,py_2,1,1);
PUTRGB(dst_1,py_1,1,0);
PUTRGB(dst_2,py_2,1);
PUTRGB(dst_1,py_1,1);
ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1)
LOADCHROMA(0);
PUTRGBA(dst_1,py_1,pa_1,0,0,24);
PUTRGBA(dst_2,py_2,pa_2,0,1,24);
PUTRGBA(dst_1,py_1,pa_1,0,24);
PUTRGBA(dst_2,py_2,pa_2,0,24);
LOADCHROMA(1);
PUTRGBA(dst_2,py_2,pa_1,1,1,24);
PUTRGBA(dst_1,py_1,pa_2,1,0,24);
PUTRGBA(dst_2,py_2,pa_1,1,24);
PUTRGBA(dst_1,py_1,pa_2,1,24);
LOADCHROMA(2);
PUTRGBA(dst_1,py_1,pa_1,2,0,24);
PUTRGBA(dst_2,py_2,pa_2,2,1,24);
PUTRGBA(dst_1,py_1,pa_1,2,24);
PUTRGBA(dst_2,py_2,pa_2,2,24);
LOADCHROMA(3);
PUTRGBA(dst_2,py_2,pa_1,3,1,24);
PUTRGBA(dst_1,py_1,pa_2,3,0,24);
PUTRGBA(dst_2,py_2,pa_1,3,24);
PUTRGBA(dst_1,py_1,pa_2,3,24);
pa_1 += 8;\
pa_2 += 8;\
ENDYUV2RGBLINE(8)
LOADCHROMA(0);
PUTRGBA(dst_1,py_1,pa_1,0,0,24);
PUTRGBA(dst_2,py_2,pa_2,0,1,24);
PUTRGBA(dst_1,py_1,pa_1,0,24);
PUTRGBA(dst_2,py_2,pa_2,0,24);
LOADCHROMA(1);
PUTRGBA(dst_2,py_2,pa_1,1,1,24);
PUTRGBA(dst_1,py_1,pa_2,1,0,24);
PUTRGBA(dst_2,py_2,pa_1,1,24);
PUTRGBA(dst_1,py_1,pa_2,1,24);
ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuva2argb_c, uint32_t, 1)
LOADCHROMA(0);
PUTRGBA(dst_1,py_1,pa_1,0,0,0);
PUTRGBA(dst_2,py_2,pa_2,0,1,0);
PUTRGBA(dst_1,py_1,pa_1,0,0);
PUTRGBA(dst_2,py_2,pa_2,0,0);
LOADCHROMA(1);
PUTRGBA(dst_2,py_2,pa_2,1,1,0);
PUTRGBA(dst_1,py_1,pa_1,1,0,0);
PUTRGBA(dst_2,py_2,pa_2,1,0);
PUTRGBA(dst_1,py_1,pa_1,1,0);
LOADCHROMA(2);
PUTRGBA(dst_1,py_1,pa_1,2,0,0);
PUTRGBA(dst_2,py_2,pa_2,2,1,0);
PUTRGBA(dst_1,py_1,pa_1,2,0);
PUTRGBA(dst_2,py_2,pa_2,2,0);
LOADCHROMA(3);
PUTRGBA(dst_2,py_2,pa_2,3,1,0);
PUTRGBA(dst_1,py_1,pa_1,3,0,0);
PUTRGBA(dst_2,py_2,pa_2,3,0);
PUTRGBA(dst_1,py_1,pa_1,3,0);
pa_1 += 8;\
pa_2 += 8;\
ENDYUV2RGBLINE(8)
LOADCHROMA(0);
PUTRGBA(dst_1,py_1,pa_1,0,0,0);
PUTRGBA(dst_2,py_2,pa_2,0,1,0);
PUTRGBA(dst_1,py_1,pa_1,0,0);
PUTRGBA(dst_2,py_2,pa_2,0,0);
LOADCHROMA(1);
PUTRGBA(dst_2,py_2,pa_2,1,1,0);
PUTRGBA(dst_1,py_1,pa_1,1,0,0);
PUTRGBA(dst_2,py_2,pa_2,1,0);
PUTRGBA(dst_1,py_1,pa_1,1,0);
ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0)
@ -304,40 +304,40 @@ ENDYUV2RGBFUNC()
// r, g, b, dst_1, dst_2
YUV2RGBFUNC(yuv2rgb_c_16, uint16_t, 0)
LOADCHROMA(0);
PUTRGB(dst_1,py_1,0,0);
PUTRGB(dst_2,py_2,0,1);
PUTRGB(dst_1,py_1,0);
PUTRGB(dst_2,py_2,0);
LOADCHROMA(1);
PUTRGB(dst_2,py_2,1,1);
PUTRGB(dst_1,py_1,1,0);
PUTRGB(dst_2,py_2,1);
PUTRGB(dst_1,py_1,1);
LOADCHROMA(2);
PUTRGB(dst_1,py_1,2,0);
PUTRGB(dst_2,py_2,2,1);
PUTRGB(dst_1,py_1,2);
PUTRGB(dst_2,py_2,2);
LOADCHROMA(3);
PUTRGB(dst_2,py_2,3,1);
PUTRGB(dst_1,py_1,3,0);
PUTRGB(dst_2,py_2,3);
PUTRGB(dst_1,py_1,3);
CLOSEYUV2RGBFUNC(8)
// This is exactly the same code as yuv2rgb_c_32 except for the types of
// r, g, b, dst_1, dst_2
YUV2RGBFUNC(yuv2rgb_c_8, uint8_t, 0)
LOADCHROMA(0);
PUTRGB(dst_1,py_1,0,0);
PUTRGB(dst_2,py_2,0,1);
PUTRGB(dst_1,py_1,0);
PUTRGB(dst_2,py_2,0);
LOADCHROMA(1);
PUTRGB(dst_2,py_2,1,1);
PUTRGB(dst_1,py_1,1,0);
PUTRGB(dst_2,py_2,1);
PUTRGB(dst_1,py_1,1);
LOADCHROMA(2);
PUTRGB(dst_1,py_1,2,0);
PUTRGB(dst_2,py_2,2,1);
PUTRGB(dst_1,py_1,2);
PUTRGB(dst_2,py_2,2);
LOADCHROMA(3);
PUTRGB(dst_2,py_2,3,1);
PUTRGB(dst_1,py_1,3,0);
PUTRGB(dst_2,py_2,3);
PUTRGB(dst_1,py_1,3);
CLOSEYUV2RGBFUNC(8)
// r, g, b, dst_1, dst_2
@ -429,20 +429,20 @@ CLOSEYUV2RGBFUNC(4)
// r, g, b, dst_1, dst_2
YUV2RGBFUNC(yuv2rgb_c_4b, uint8_t, 0)
LOADCHROMA(0);
PUTRGB(dst_1,py_1,0,0);
PUTRGB(dst_2,py_2,0,1);
PUTRGB(dst_1,py_1,0);
PUTRGB(dst_2,py_2,0);
LOADCHROMA(1);
PUTRGB(dst_2,py_2,1,1);
PUTRGB(dst_1,py_1,1,0);
PUTRGB(dst_2,py_2,1);
PUTRGB(dst_1,py_1,1);
LOADCHROMA(2);
PUTRGB(dst_1,py_1,2,0);
PUTRGB(dst_2,py_2,2,1);
PUTRGB(dst_1,py_1,2);
PUTRGB(dst_2,py_2,2);
LOADCHROMA(3);
PUTRGB(dst_2,py_2,3,1);
PUTRGB(dst_1,py_1,3,0);
PUTRGB(dst_2,py_2,3);
PUTRGB(dst_1,py_1,3);
CLOSEYUV2RGBFUNC(8)
YUV2RGBFUNC(yuv2rgb_c_4b_ordered_dither, uint8_t, 0)

Loading…
Cancel
Save