mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
Moved format size calculation out of loop.
This commit is contained in:
@@ -1151,6 +1151,7 @@ BOOL rfx_process_message(RFX_CONTEXT* context, const BYTE* data,
|
||||
UINT32 nbUpdateRects;
|
||||
REGION16 clippingRects;
|
||||
const RECTANGLE_16* updateRects;
|
||||
const DWORD formatSize = GetBytesPerPixel(format);
|
||||
region16_init(&clippingRects);
|
||||
|
||||
for (i = 0; i < message->numRects; i++)
|
||||
@@ -1178,7 +1179,7 @@ BOOL rfx_process_message(RFX_CONTEXT* context, const BYTE* data,
|
||||
|
||||
for (j = 0; j < nbUpdateRects; j++)
|
||||
{
|
||||
UINT32 stride = 64 * GetBytesPerPixel(format);
|
||||
UINT32 stride = 64 * formatSize;
|
||||
UINT32 nXDst = updateRects[j].left;
|
||||
UINT32 nYDst = updateRects[j].top;
|
||||
UINT32 nXSrc = nXDst - updateRect.left;
|
||||
|
||||
@@ -132,6 +132,7 @@ BOOL gdi_FillRect(HGDI_DC hdc, const HGDI_RECT rect, HGDI_BRUSH hbr)
|
||||
UINT32 nXDest, nYDest;
|
||||
UINT32 nWidth, nHeight;
|
||||
const BYTE* srcp;
|
||||
DWORD formatSize;
|
||||
gdi_RectToCRgn(rect, &nXDest, &nYDest, &nWidth, &nHeight);
|
||||
|
||||
if (!hdc || !hbr)
|
||||
@@ -155,11 +156,12 @@ BOOL gdi_FillRect(HGDI_DC hdc, const HGDI_RECT rect, HGDI_BRUSH hbr)
|
||||
}
|
||||
|
||||
srcp = gdi_get_bitmap_pointer(hdc, nXDest, nYDest);
|
||||
formatSize = GetBytesPerPixel(hdc->format);
|
||||
|
||||
for (y = 1; y < nHeight; y++)
|
||||
{
|
||||
BYTE* dstp = gdi_get_bitmap_pointer(hdc, nXDest, nYDest + y);
|
||||
memcpy(dstp, srcp, nWidth * GetBytesPerPixel(hdc->format));
|
||||
memcpy(dstp, srcp, nWidth * formatSize);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -167,15 +169,15 @@ BOOL gdi_FillRect(HGDI_DC hdc, const HGDI_RECT rect, HGDI_BRUSH hbr)
|
||||
case GDI_BS_HATCHED:
|
||||
case GDI_BS_PATTERN:
|
||||
monochrome = (hbr->pattern->format == PIXEL_FORMAT_MONO);
|
||||
formatSize = GetBytesPerPixel(hbr->pattern->format);
|
||||
|
||||
for (y = 0; y < nHeight; y++)
|
||||
{
|
||||
for (x = 0; x < nWidth; x++)
|
||||
{
|
||||
const UINT32 yOffset = ((nYDest + y) * hbr->pattern->width %
|
||||
hbr->pattern->height) * GetBytesPerPixel(hbr->pattern->format);
|
||||
const UINT32 xOffset = ((nXDest + x) % hbr->pattern->width) * GetBytesPerPixel(
|
||||
hbr->pattern->format);
|
||||
hbr->pattern->height) * formatSize;
|
||||
const UINT32 xOffset = ((nXDest + x) % hbr->pattern->width) * formatSize;
|
||||
const BYTE* patp = &hbr->pattern->data[yOffset + xOffset];
|
||||
BYTE* dstp = gdi_get_bitmap_pointer(hdc, nXDest + x,
|
||||
nYDest + y);
|
||||
|
||||
@@ -33,20 +33,21 @@
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
static pstatus_t general_YCoCgToRGB_8u_AC4R(
|
||||
const BYTE* pSrc, INT32 srcStep,
|
||||
BYTE* pDst, UINT32 DstFormat, INT32 dstStep,
|
||||
UINT32 width, UINT32 height,
|
||||
UINT8 shift,
|
||||
BOOL withAlpha)
|
||||
const BYTE* pSrc, INT32 srcStep,
|
||||
BYTE* pDst, UINT32 DstFormat, INT32 dstStep,
|
||||
UINT32 width, UINT32 height,
|
||||
UINT8 shift,
|
||||
BOOL withAlpha)
|
||||
{
|
||||
BYTE A;
|
||||
UINT32 x, y;
|
||||
BYTE* dptr = pDst;
|
||||
const BYTE* sptr = pSrc;
|
||||
INT16 Cg, Co, Y, T, R, G, B;
|
||||
const DWORD formatSize = GetBytesPerPixel(DstFormat);
|
||||
int cll = shift - 1; /* -1 builds in the /2's */
|
||||
UINT32 srcPad = srcStep - (width * 4);
|
||||
UINT32 dstPad = dstStep - (width * GetBytesPerPixel(DstFormat));
|
||||
UINT32 dstPad = dstStep - (width * formatSize);
|
||||
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
@@ -66,12 +67,11 @@ static pstatus_t general_YCoCgToRGB_8u_AC4R(
|
||||
R = T + Co;
|
||||
G = Y + Cg;
|
||||
B = T - Co;
|
||||
|
||||
color = GetColor(DstFormat,
|
||||
MINMAX(R, 0, 255), MINMAX(G, 0, 255),
|
||||
MINMAX(B, 0, 255), A);
|
||||
MINMAX(R, 0, 255), MINMAX(G, 0, 255),
|
||||
MINMAX(B, 0, 255), A);
|
||||
WriteColor(dptr, DstFormat, color);
|
||||
dptr += GetBytesPerPixel(DstFormat);
|
||||
dptr += formatSize;
|
||||
}
|
||||
|
||||
sptr += srcPad;
|
||||
|
||||
@@ -232,9 +232,9 @@ static pstatus_t general_YUV444SplitToYUV420(
|
||||
{
|
||||
/* Filter */
|
||||
const INT32 u = pSrcU[2 * x] + pSrcU[2 * x + 1] + pSrcU1[2 * x]
|
||||
+ pSrcU1[2 * x + 1];
|
||||
+ pSrcU1[2 * x + 1];
|
||||
const INT32 v = pSrcV[2 * x] + pSrcV[2 * x + 1] + pSrcV1[2 * x]
|
||||
+ pSrcV1[2 * x + 1];
|
||||
+ pSrcV1[2 * x + 1];
|
||||
pU[x] = CLIP(u / 4L);
|
||||
pV[x] = CLIP(v / 4L);
|
||||
}
|
||||
@@ -326,14 +326,15 @@ static INLINE BYTE YUV2B(INT32 Y, INT32 U, INT32 V)
|
||||
return CLIP(b8);
|
||||
}
|
||||
|
||||
static INLINE BYTE* writePixel(BYTE* dst, UINT32 format, BYTE Y, BYTE U, BYTE V)
|
||||
static INLINE BYTE* writeYUVPixel(BYTE* dst, DWORD formatSize, UINT32 format, BYTE Y, BYTE U,
|
||||
BYTE V)
|
||||
{
|
||||
const BYTE r = YUV2R(Y, U, V);
|
||||
const BYTE g = YUV2G(Y, U, V);
|
||||
const BYTE b = YUV2B(Y, U, V);
|
||||
UINT32 color = GetColor(format, r, g, b, 0xFF);
|
||||
WriteColor(dst, format, color);
|
||||
return dst + GetBytesPerPixel(format);
|
||||
return dst + formatSize;
|
||||
}
|
||||
|
||||
static pstatus_t general_YUV444ToRGB_8u_P3AC4R(
|
||||
@@ -343,6 +344,7 @@ static pstatus_t general_YUV444ToRGB_8u_P3AC4R(
|
||||
{
|
||||
UINT32 x, y;
|
||||
UINT32 nWidth, nHeight;
|
||||
const DWORD formatSize = GetBytesPerPixel(DstFormat);
|
||||
nWidth = roi->width;
|
||||
nHeight = roi->height;
|
||||
|
||||
@@ -358,7 +360,7 @@ static pstatus_t general_YUV444ToRGB_8u_P3AC4R(
|
||||
const BYTE Y = pY[x];
|
||||
const INT32 U = pU[x];
|
||||
const INT32 V = pV[x];
|
||||
pRGB = writePixel(pRGB, DstFormat, Y, U, V);
|
||||
pRGB = writeYUVPixel(pRGB, formatSize, DstFormat, Y, U, V);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,6 +389,7 @@ static pstatus_t general_YUV420ToRGB_8u_P3AC4R(
|
||||
BYTE* pRGB = pDst;
|
||||
UINT32 nWidth, nHeight;
|
||||
UINT32 lastRow, lastCol;
|
||||
const DWORD formatSize = GetBytesPerPixel(DstFormat);
|
||||
pY = pSrc[0];
|
||||
pU = pSrc[1];
|
||||
pV = pSrc[2];
|
||||
@@ -415,18 +418,18 @@ static pstatus_t general_YUV420ToRGB_8u_P3AC4R(
|
||||
V = *pV++;
|
||||
/* 1st pixel */
|
||||
Y = *pY++;
|
||||
pRGB = writePixel(pRGB, DstFormat, Y, U, V);
|
||||
pRGB = writeYUVPixel(pRGB, formatSize, DstFormat, Y, U, V);
|
||||
|
||||
/* 2nd pixel */
|
||||
if (!(lastCol & 0x02))
|
||||
{
|
||||
Y = *pY++;
|
||||
pRGB = writePixel(pRGB, DstFormat, Y, U, V);
|
||||
pRGB = writeYUVPixel(pRGB, formatSize, DstFormat, Y, U, V);
|
||||
}
|
||||
else
|
||||
{
|
||||
pY++;
|
||||
pRGB += GetBytesPerPixel(DstFormat);
|
||||
pRGB += formatSize;
|
||||
lastCol >>= 1;
|
||||
}
|
||||
}
|
||||
@@ -448,18 +451,18 @@ static pstatus_t general_YUV420ToRGB_8u_P3AC4R(
|
||||
V = *pV++;
|
||||
/* 3rd pixel */
|
||||
Y = *pY++;
|
||||
pRGB = writePixel(pRGB, DstFormat, Y, U, V);
|
||||
pRGB = writeYUVPixel(pRGB, formatSize, DstFormat, Y, U, V);
|
||||
|
||||
/* 4th pixel */
|
||||
if (!(lastCol & 0x02))
|
||||
{
|
||||
Y = *pY++;
|
||||
pRGB = writePixel(pRGB, DstFormat, Y, U, V);
|
||||
pRGB = writeYUVPixel(pRGB, formatSize, DstFormat, Y, U, V);
|
||||
}
|
||||
else
|
||||
{
|
||||
pY++;
|
||||
pRGB += GetBytesPerPixel(DstFormat);
|
||||
pRGB += formatSize;
|
||||
lastCol >>= 1;
|
||||
}
|
||||
}
|
||||
@@ -521,7 +524,6 @@ static pstatus_t general_RGBToYUV444_8u_P3AC4R(
|
||||
BYTE B, G, R;
|
||||
const UINT32 color = ReadColor(&pRGB[x * bpp], SrcFormat);
|
||||
SplitColor(color, SrcFormat, &R, &G, &B, NULL, NULL);
|
||||
|
||||
pY[x] = RGB2Y(R, G, B);
|
||||
pU[x] = RGB2U(R, G, B);
|
||||
pV[x] = RGB2V(R, G, B);
|
||||
@@ -563,11 +565,9 @@ static pstatus_t general_RGBToYUV420_8u_P3AC4R(
|
||||
const UINT32 val2x = (x * 2);
|
||||
const UINT32 val2x1 = val2x + 1;
|
||||
BYTE B, G, R;
|
||||
|
||||
/* 1st pixel */
|
||||
color = ReadColor(&pRGB[val2x * bpp], SrcFormat);
|
||||
SplitColor(color, SrcFormat, &R, &G, &B, NULL, NULL);
|
||||
|
||||
Ba = B;
|
||||
Ga = G;
|
||||
Ra = R;
|
||||
|
||||
Reference in New Issue
Block a user