From: j-b-m Date: Fri, 19 Jan 2007 08:07:40 +0000 (+0000) Subject: Fix my terribly broken YUV to RGB conversion X-Git-Url: http://research.m1stereo.tv/gitweb?a=commitdiff_plain;h=b028b29890855513754d096eb80bb8f4bde339b2;p=melted Fix my terribly broken YUV to RGB conversion git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@946 d19143bc-622f-0410-bfdd-b5b2a6649095 --- diff --git a/src/framework/mlt_frame.c b/src/framework/mlt_frame.c index 9c6922b..9a2ae5f 100644 --- a/src/framework/mlt_frame.c +++ b/src/framework/mlt_frame.c @@ -532,31 +532,24 @@ void mlt_frame_close( mlt_frame this ) int mlt_convert_yuv422_to_rgb24a( uint8_t *yuv, uint8_t *rgba, unsigned int total ) { int ret = 0; - int yy, uu, vv, ug_plus_vg, ub, vr; + int yy, uu, vv; int r,g,b; total /= 2; while (total--) { - yy = yuv[0] << 8; - uu = yuv[1] - 128; - vv = yuv[3] - 128; - ug_plus_vg = uu * 88 + vv * 183; - ub = uu * 454; - vr = vv * 359; - r = (yy + vr) >> 8; - g = (yy - ug_plus_vg) >> 8; - b = (yy + ub) >> 8; - rgba[0] = r < 0 ? 0 : (r > 255 ? 255 : (unsigned char)r); - rgba[1] = g < 0 ? 0 : (g > 255 ? 255 : (unsigned char)g); - rgba[2] = b < 0 ? 0 : (b > 255 ? 255 : (unsigned char)b); + yy = yuv[0]; + uu = yuv[1]; + vv = yuv[3]; + YUV2RGB(yy, uu, vv, r, g, b); + rgba[0] = r; + rgba[1] = g; + rgba[2] = b; rgba[3] = 255; - yy = yuv[2] << 8; - r = (yy + vr) >> 8; - g = (yy - ug_plus_vg) >> 8; - b = (yy + ub) >> 8; - rgba[4] = r < 0 ? 0 : (r > 255 ? 255 : (unsigned char)r); - rgba[5] = g < 0 ? 0 : (g > 255 ? 255 : (unsigned char)g); - rgba[6] = b < 0 ? 0 : (b > 255 ? 255 : (unsigned char)b); + yy = yuv[2]; + YUV2RGB(yy, uu, vv, r, g, b); + rgba[4] = r; + rgba[5] = g; + rgba[6] = b; rgba[7] = 255; yuv += 4; rgba += 8;