if (!rle) /* RAW */
{
+ UINT32 base = planeSize * 3;
+ if (cs)
+ base = planeSize + planeSize / 2;
+
if (alpha)
{
- if ((SrcSize - (srcp - pSrcData)) < (planeSize * 4))
+ if ((SrcSize - (srcp - pSrcData)) < (planeSize + base))
return FALSE;
planes[3] = srcp; /* AlphaPlane */
}
else
{
- if ((SrcSize - (srcp - pSrcData)) < (planeSize * 3))
+ if ((SrcSize - (srcp - pSrcData)) < base)
return FALSE;
planes[0] = srcp; /* LumaOrRedPlane */
rleBuffer[2] = rleBuffer[1] + planeSize; /* GreenChromaOrBluePlane */
if (useAlpha)
{
- status = planar_decompress_plane_rle_only(planes[3], rleSizes[3], rleBuffer[3],
- nSrcWidth, nSrcHeight); /* AlphaPlane */
+ status =
+ planar_decompress_plane_rle_only(planes[3], rleSizes[3], rleBuffer[3],
+ rawWidths[3], rawHeights[3]); /* AlphaPlane */
if (status < 0)
return FALSE;
srcp += rleSizes[3];
status = planar_decompress_plane_rle_only(planes[0], rleSizes[0], rleBuffer[0],
- nSrcWidth, nSrcHeight); /* LumaPlane */
+ rawWidths[0], rawHeights[0]); /* LumaPlane */
if (status < 0)
return FALSE;
status =
- planar_decompress_plane_rle_only(planes[1], rleSizes[1], rleBuffer[1], nSrcWidth,
- nSrcHeight); /* OrangeChromaPlane */
+ planar_decompress_plane_rle_only(planes[1], rleSizes[1], rleBuffer[1], rawWidths[1],
+ rawHeights[1]); /* OrangeChromaPlane */
if (status < 0)
return FALSE;
- status = planar_decompress_plane_rle_only(planes[2], rleSizes[2], rleBuffer[2],
- nSrcWidth, nSrcHeight); /* GreenChromaPlane */
+ status =
+ planar_decompress_plane_rle_only(planes[2], rleSizes[2], rleBuffer[2], rawWidths[2],
+ rawHeights[2]); /* GreenChromaPlane */
if (status < 0)
return FALSE;
*planes = *rleBuffer;
}
- if (!rle) /* RAW */
+ /* RAW */
{
if (cs)
{ /* Chroma subsampling for Co and Cg:
return FALSE;
}
- return (SrcSize == (srcp - pSrcData)) ? TRUE : FALSE;
+ return TRUE;
}
static INLINE BOOL freerdp_split_color_planes(const BYTE* data, UINT32 format, UINT32 width,