From 92ce43309072e09bf558d91b1291067de67ced40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Thu, 16 May 2013 19:56:39 -0400 Subject: [PATCH] libfreerdp-codec: optimize color conversion a bit --- libfreerdp/codec/color.c | 57 +++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/libfreerdp/codec/color.c b/libfreerdp/codec/color.c index e7b9790b1..69a237511 100644 --- a/libfreerdp/codec/color.c +++ b/libfreerdp/codec/color.c @@ -614,22 +614,61 @@ BYTE* freerdp_image_convert_16bpp(BYTE* srcData, BYTE* dstData, int width, int h src16 = (UINT16*) srcData; dst32 = (UINT32*) dstData; - for (i = width * height; i > 0; i--) + if (clrconv->alpha) { - pixel = *src16; - src16++; - GetBGR16(red, green, blue, pixel); - if (clrconv->alpha) + if (clrconv->invert) { - pixel = (clrconv->invert) ? ARGB32(0xFF, red, green, blue) : ABGR32(0xFF, red, green, blue); + for (i = width * height; i > 0; i--) + { + pixel = *src16; + src16++; + GetBGR16(red, green, blue, pixel); + pixel = ARGB32(0xFF, red, green, blue); + *dst32 = pixel; + dst32++; + } } else { - pixel = (clrconv->invert) ? RGB32(red, green, blue) : BGR32(red, green, blue); + for (i = width * height; i > 0; i--) + { + pixel = *src16; + src16++; + GetBGR16(red, green, blue, pixel); + pixel = ABGR32(0xFF, red, green, blue); + *dst32 = pixel; + dst32++; + } } - *dst32 = pixel; - dst32++; } + else + { + if (clrconv->invert) + { + for (i = width * height; i > 0; i--) + { + pixel = *src16; + src16++; + GetBGR16(red, green, blue, pixel); + pixel = RGB32(red, green, blue); + *dst32 = pixel; + dst32++; + } + } + else + { + for (i = width * height; i > 0; i--) + { + pixel = *src16; + src16++; + GetBGR16(red, green, blue, pixel); + pixel = BGR32(red, green, blue); + *dst32 = pixel; + dst32++; + } + } + } + return dstData; }