From 948e633ed36d1c6e1bf23d2817134c32649fdba4 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Mon, 16 Jan 2017 10:13:35 +0100 Subject: [PATCH] Optimized general_RGBToRGB_16s8u_P3AC4R for BGRX --- libfreerdp/primitives/prim_colors.c | 47 ++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/libfreerdp/primitives/prim_colors.c b/libfreerdp/primitives/prim_colors.c index 35f726f..2336a6f 100644 --- a/libfreerdp/primitives/prim_colors.c +++ b/libfreerdp/primitives/prim_colors.c @@ -470,7 +470,7 @@ static INLINE fkt_writeScanline getScanlineWriteFunction(DWORD format) } /* ------------------------------------------------------------------------- */ -static pstatus_t general_RGBToRGB_16s8u_P3AC4R( +static pstatus_t general_RGBToRGB_16s8u_P3AC4R_general( const INT16* const pSrc[3], /* 16-bit R,G, and B arrays */ UINT32 srcStep, /* bytes between rows in source data */ BYTE* pDst, /* 32-bit interleaved ARGB (ABGR?) data */ @@ -498,6 +498,51 @@ static pstatus_t general_RGBToRGB_16s8u_P3AC4R( return PRIMITIVES_SUCCESS; } +static pstatus_t general_RGBToRGB_16s8u_P3AC4R_BGRX( + const INT16* const pSrc[3], /* 16-bit R,G, and B arrays */ + UINT32 srcStep, /* bytes between rows in source data */ + BYTE* pDst, /* 32-bit interleaved ARGB (ABGR?) data */ + UINT32 dstStep, /* bytes between rows in dest data */ + UINT32 DstFormat, + const prim_size_t* roi) /* region of interest */ +{ + const INT16* r = pSrc[0]; + const INT16* g = pSrc[1]; + const INT16* b = pSrc[2]; + UINT32 y; + const DWORD srcAdd = srcStep / sizeof(INT16); + const DWORD formatSize = GetBytesPerPixel(DstFormat); + + for (y = 0; y < roi->height; ++y) + { + writeScanlineBGRX(pDst, formatSize, DstFormat, r, g, b, roi->width); + pDst += dstStep; + r += srcAdd; + g += srcAdd; + b += srcAdd; + } + + return PRIMITIVES_SUCCESS; +} + +static pstatus_t general_RGBToRGB_16s8u_P3AC4R( + const INT16* const pSrc[3], /* 16-bit R,G, and B arrays */ + UINT32 srcStep, /* bytes between rows in source data */ + BYTE* pDst, /* 32-bit interleaved ARGB (ABGR?) data */ + UINT32 dstStep, /* bytes between rows in dest data */ + UINT32 DstFormat, + const prim_size_t* roi) /* region of interest */ +{ + switch (DstFormat) + { + case PIXEL_FORMAT_BGRA32: + case PIXEL_FORMAT_BGRX32: + return general_RGBToRGB_16s8u_P3AC4R_BGRX(pSrc, srcStep, pDst, dstStep, DstFormat, roi); + + default: + return general_RGBToRGB_16s8u_P3AC4R_general(pSrc, srcStep, pDst, dstStep, DstFormat, roi); + } +} /* ------------------------------------------------------------------------- */ void primitives_init_colors(primitives_t* prims) { -- 2.7.4