Optimized freerdp_image_fill
authorArmin Novak <armin.novak@thincast.com>
Mon, 16 Jan 2017 10:36:35 +0000 (11:36 +0100)
committerArmin Novak <armin.novak@thincast.com>
Wed, 18 Jan 2017 14:28:53 +0000 (15:28 +0100)
libfreerdp/codec/color.c

index f88282f..c7515fd 100644 (file)
@@ -556,16 +556,20 @@ BOOL freerdp_image_fill(BYTE* pDstData, DWORD DstFormat,
                         UINT32 nWidth, UINT32 nHeight, UINT32 color)
 {
        UINT32 x, y;
+       const UINT32 bpp = GetBytesPerPixel(DstFormat);
+       BYTE* pFirstDstLine = &pDstData[nYDst * nDstStep];
+       BYTE* pFirstDstLineXOffset = &pFirstDstLine[nXDst * bpp];
 
-       for (y = 0; y < nHeight; y++)
+       for (x = 0; x < nWidth; x++)
        {
-               BYTE* pDstLine = &pDstData[(y + nYDst) * nDstStep];
+               BYTE* pDst = &pFirstDstLine[(x + nXDst) * bpp];
+               WriteColor(pDst, DstFormat, color);
+       }
 
-               for (x = 0; x < nWidth; x++)
-               {
-                       BYTE* pDst = &pDstLine[(x + nXDst) * GetBytesPerPixel(DstFormat)];
-                       WriteColor(pDst, DstFormat, color);
-               }
+       for (y = 1; y < nHeight; y++)
+       {
+               BYTE* pDstLine = &pDstData[(y + nYDst) * nDstStep + nXDst * bpp];
+               memcpy(pDstLine, pFirstDstLineXOffset, nWidth * bpp);
        }
 
        return TRUE;