X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fgpulib%2Fcspace.c;h=f0c491266ffcef63efc9d5a6b878d326b7ae8c9e;hp=8e3bee9e997a5dd30ffa771a8fad5b90a6eb6791;hb=5b9aa74918361ff5d306c39cb695a77d7ea40b8f;hpb=349f7d81b5f776ab69533fcb4e9c4904235b90fd diff --git a/plugins/gpulib/cspace.c b/plugins/gpulib/cspace.c index 8e3bee9e..f0c49126 100644 --- a/plugins/gpulib/cspace.c +++ b/plugins/gpulib/cspace.c @@ -91,6 +91,35 @@ void bgr_to_uyvy_init(void) } } +void rgb565_to_uyvy(void *d, const void *s, int pixels) +{ + unsigned int *dst = d; + const unsigned short *src = s; + const unsigned char *yu = yuv_u + 32; + const unsigned char *yv = yuv_v + 32; + int r0, g0, b0, r1, g1, b1; + int y0, y1, u, v; + + for (; pixels > 0; src += 2, dst++, pixels -= 2) + { + r0 = (src[0] >> 11) & 0x1f; + g0 = (src[0] >> 6) & 0x1f; + b0 = src[0] & 0x1f; + r1 = (src[1] >> 11) & 0x1f; + g1 = (src[1] >> 6) & 0x1f; + b1 = src[1] & 0x1f; + y0 = (yuv_ry[r0] + yuv_gy[g0] + yuv_by[b0]) >> 16; + y1 = (yuv_ry[r1] + yuv_gy[g1] + yuv_by[b1]) >> 16; + u = yu[b0 - y0]; + v = yv[r0 - y0]; + // valid Y range seems to be 16..235 + y0 = 16 + 219 * y0 / 31; + y1 = 16 + 219 * y1 / 31; + + *dst = (y1 << 24) | (v << 16) | (y0 << 8) | u; + } +} + void bgr555_to_uyvy(void *d, const void *s, int pixels) { unsigned int *dst = d; @@ -112,7 +141,6 @@ void bgr555_to_uyvy(void *d, const void *s, int pixels) y1 = (yuv_ry[r1] + yuv_gy[g1] + yuv_by[b1]) >> 16; u = yu[b0 - y0]; v = yv[r0 - y0]; - // valid Y range seems to be 16..235 y0 = 16 + 219 * y0 / 31; y1 = 16 + 219 * y1 / 31;