From: <he...@us...> - 2004-08-10 20:12:11
|
Update of /cvsroot/gc-linux/linux/drivers/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22063/drivers/video Modified Files: gamecubefb.c Log Message: - Fixed 5/6 to 8 bits scaling for RGB components Used a fast (approximated) algorithm pointed by Masken. Thanks! Index: gamecubefb.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/gamecubefb.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- gamecubefb.c 8 Aug 2004 23:19:57 -0000 1.9 +++ gamecubefb.c 10 Aug 2004 20:12:02 -0000 1.10 @@ -111,15 +111,15 @@ return 0x00800080; /* black, black */ } - /* - * FIXME: - * The current scaling from 5 or 6 bits to 8 bits is not correct. - */ - /* RGB565 */ - r1 = ((rgb1 >> 11) & 0x1f) << 3; - g1 = ((rgb1 >> 5) & 0x3f) << 2; - b1 = ((rgb1 >> 0) & 0x1f) << 3; + r1 = ((rgb1 >> 11) & 0x1f); + g1 = ((rgb1 >> 5) & 0x3f); + b1 = ((rgb1 >> 0) & 0x1f); + + /* fast (approximated) scaling to 8 bits, thanks to Masken */ + r1 = (r1 << 3) | (r1 >> 2); + g1 = (g1 << 2) | (g1 >> 4); + b1 = (b1 << 3) | (b1 >> 2); Y1 = clamp(16, 235, ((Yr * r1 + Yg * g1 + Yb * b1) >> RGB2YUV_SHIFT) + RGB2YUV_LUMA); @@ -130,10 +130,13 @@ g = g1; b = b1; } else { - /* RGB565 */ - r2 = ((rgb2 >> 11) & 0x1f) << 3; - g2 = ((rgb2 >> 5) & 0x3f) << 2; - b2 = ((rgb2 >> 0) & 0x1f) << 3; + /* same as we did for r1 before */ + r2 = ((rgb2 >> 11) & 0x1f); + g2 = ((rgb2 >> 5) & 0x3f); + b2 = ((rgb2 >> 0) & 0x1f); + r2 = (r2 << 3) | (r2 >> 2); + g2 = (g2 << 2) | (g2 >> 4); + b2 = (b2 << 3) | (b2 >> 2); Y2 = clamp(16, 235, ((Yr * r2 + Yg * g2 + Yb * b2) >> RGB2YUV_SHIFT) |