summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Couriersud <couriersud@users.noreply.github.com>2008-08-24 23:41:46 +0000
committer Couriersud <couriersud@users.noreply.github.com>2008-08-24 23:41:46 +0000
commit5e6fdaec167067fe0abed49beff6bd24df46d57a (patch)
treeead8b3db22e6f0087bddfb0b70bd8488a91d34cf
parent4d444b5b4a856e0d4bb470a1cd2e7d087312d0b8 (diff)
Slight optimization of ycc_to_rgb
-rw-r--r--src/emu/rendersw.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/emu/rendersw.c b/src/emu/rendersw.c
index bf98bcaf19e..8ed64b5cbed 100644
--- a/src/emu/rendersw.c
+++ b/src/emu/rendersw.c
@@ -120,6 +120,8 @@ INLINE float round_nearest(float f)
contains Y in the LSB, Cb << 8, and Cr << 16
-------------------------------------------------*/
+#define CLSH(x) (((INT32) x < 0) ? 0 : x >> 8)
+
INLINE UINT32 ycc_to_rgb(UINT32 ycc)
{
/* original equations:
@@ -147,23 +149,18 @@ INLINE UINT32 ycc_to_rgb(UINT32 ycc)
UINT8 y = ycc;
UINT8 cb = ycc >> 8;
UINT8 cr = ycc >> 16;
- int r, g, b, common;
-
- common = 298 * y - 298 * 16;
- r = (common + 409 * cr - 409 * 128 + 128) >> 8;
- g = (common - 100 * cb + 100 * 128 - 208 * cr + 208 * 128 + 128) >> 8;
- b = (common + 516 * cb - 516 * 128 + 128) >> 8;
+ UINT32 r, g, b, common;
- if (r < 0) r = 0;
- else if (r > 255) r = 255;
- if (g < 0) g = 0;
- else if (g > 255) g = 255;
- if (b < 0) b = 0;
- else if (b > 255) b = 255;
+ common = 298 * y - 56992;
+ r = (common + 409 * cr);
+ g = (common - 100 * cb - 208 * cr + 91776);
+ b = (common + 516 * cb - 13696);
- return MAKE_RGB(r, g, b);
+ /* MAKE_RGB does upper clamping */
+ return MAKE_RGB(CLSH(r), CLSH(g), CLSH(b));
}
+#undef CLSH
/*-------------------------------------------------
get_texel_palette16_nearest - return the