Added overlapped copy support.
This commit is contained in:
parent
716c5c53e9
commit
c12c5dd2f5
@ -472,14 +472,94 @@ BOOL freerdp_image_copy(BYTE* pDstData, DWORD DstFormat,
|
|||||||
if (FREERDP_PIXEL_FORMAT_FLIP_MASKED(SrcFormat) ==
|
if (FREERDP_PIXEL_FORMAT_FLIP_MASKED(SrcFormat) ==
|
||||||
FREERDP_PIXEL_FORMAT_FLIP_MASKED(DstFormat))
|
FREERDP_PIXEL_FORMAT_FLIP_MASKED(DstFormat))
|
||||||
{
|
{
|
||||||
UINT32 y;
|
INT32 y;
|
||||||
|
|
||||||
for (y = 0; y < nHeight; y++)
|
if (pDstData == pSrcData)
|
||||||
{
|
{
|
||||||
const BYTE* srcLine = &pSrcData[(y + nYSrc) * nSrcStep * srcVMultiplier +
|
/* Copy down */
|
||||||
srcVOffset];
|
if (nYDst > nYSrc)
|
||||||
BYTE* dstLine = &pDstData[(y + nYDst) * nDstStep * dstVMultiplier + dstVOffset];
|
{
|
||||||
memcpy(&dstLine[xDstOffset], &srcLine[xSrcOffset], copyDstWidth);
|
for (y = 0; y < nHeight; y++)
|
||||||
|
{
|
||||||
|
const BYTE* srcLine = &pSrcData[(y + nYSrc) *
|
||||||
|
nSrcStep * srcVMultiplier +
|
||||||
|
srcVOffset];
|
||||||
|
BYTE* dstLine = &pDstData[(y + nYDst) *
|
||||||
|
nDstStep * dstVMultiplier +
|
||||||
|
dstVOffset];
|
||||||
|
|
||||||
|
memcpy(&dstLine[xDstOffset],
|
||||||
|
&srcLine[xSrcOffset], copyDstWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Copy up */
|
||||||
|
else if (nYDst < nYSrc)
|
||||||
|
{
|
||||||
|
for (y = nHeight - 1; y >= 0; y--)
|
||||||
|
{
|
||||||
|
const BYTE* srcLine = &pSrcData[(y + nYSrc) *
|
||||||
|
nSrcStep * srcVMultiplier +
|
||||||
|
srcVOffset];
|
||||||
|
BYTE* dstLine = &pDstData[(y + nYDst) *
|
||||||
|
nDstStep * dstVMultiplier +
|
||||||
|
dstVOffset];
|
||||||
|
|
||||||
|
memcpy(&dstLine[xDstOffset],
|
||||||
|
&srcLine[xSrcOffset], copyDstWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Copy left */
|
||||||
|
else if (nXSrc > nXDst)
|
||||||
|
{
|
||||||
|
for (y = 0; y < nHeight; y++)
|
||||||
|
{
|
||||||
|
const BYTE* srcLine = &pSrcData[(y + nYSrc) *
|
||||||
|
nSrcStep * srcVMultiplier +
|
||||||
|
srcVOffset];
|
||||||
|
BYTE* dstLine = &pDstData[(y + nYDst) *
|
||||||
|
nDstStep * dstVMultiplier +
|
||||||
|
dstVOffset];
|
||||||
|
|
||||||
|
memmove(&dstLine[xDstOffset],
|
||||||
|
&srcLine[xSrcOffset], copyDstWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Copy right */
|
||||||
|
else if (nXSrc < nXDst)
|
||||||
|
{
|
||||||
|
for (y = nHeight - 1; y >= 0; y--)
|
||||||
|
{
|
||||||
|
const BYTE* srcLine = &pSrcData[(y + nYSrc) *
|
||||||
|
nSrcStep * srcVMultiplier +
|
||||||
|
srcVOffset];
|
||||||
|
BYTE* dstLine = &pDstData[(y + nYDst) *
|
||||||
|
nDstStep * dstVMultiplier +
|
||||||
|
dstVOffset];
|
||||||
|
|
||||||
|
memove(&dstLine[xDstOffset],
|
||||||
|
&srcLine[xSrcOffset], copyDstWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Source and destination are equal... */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (nYDst < nYSrc)
|
||||||
|
{
|
||||||
|
for (y = 0; y < nHeight; y++)
|
||||||
|
{
|
||||||
|
const BYTE* srcLine = &pSrcData[(y + nYSrc) *
|
||||||
|
nSrcStep * srcVMultiplier +
|
||||||
|
srcVOffset];
|
||||||
|
BYTE* dstLine = &pDstData[(y + nYDst) *
|
||||||
|
nDstStep * dstVMultiplier +
|
||||||
|
dstVOffset];
|
||||||
|
|
||||||
|
memcpy(&dstLine[xDstOffset],
|
||||||
|
&srcLine[xSrcOffset], copyDstWidth);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -488,9 +568,11 @@ BOOL freerdp_image_copy(BYTE* pDstData, DWORD DstFormat,
|
|||||||
|
|
||||||
for (y = 0; y < nHeight; y++)
|
for (y = 0; y < nHeight; y++)
|
||||||
{
|
{
|
||||||
const BYTE* srcLine = &pSrcData[(y + nYSrc) * nSrcStep * srcVMultiplier +
|
const BYTE* srcLine = &pSrcData[(y + nYSrc) *
|
||||||
srcVOffset];
|
nSrcStep * srcVMultiplier +
|
||||||
BYTE* dstLine = &pDstData[(y + nYDst) * nDstStep * dstVMultiplier + dstVOffset];
|
srcVOffset];
|
||||||
|
BYTE* dstLine = &pDstData[(y + nYDst) *
|
||||||
|
nDstStep * dstVMultiplier + dstVOffset];
|
||||||
|
|
||||||
for (x = 0; x < nWidth; x++)
|
for (x = 0; x < nWidth; x++)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user