From 4f4e546cd42f97af4d27894dceacd85cc16579d0 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Tue, 1 Jun 2021 12:20:08 +0200 Subject: [PATCH] Fixed initial alpha values for codec buffers --- libfreerdp/codec/progressive.c | 2 ++ libfreerdp/codec/rfx.c | 5 +++-- libfreerdp/gdi/gfx.c | 8 +++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/libfreerdp/codec/progressive.c b/libfreerdp/codec/progressive.c index 754979fc3..4d3fbb400 100644 --- a/libfreerdp/codec/progressive.c +++ b/libfreerdp/codec/progressive.c @@ -414,6 +414,8 @@ static INLINE BOOL progressive_tile_allocate(RFX_PROGRESSIVE_TILE* tile) { size_t dataLen = tile->stride * tile->height * 1ULL; tile->data = (BYTE*)_aligned_malloc(dataLen, 16); + if (tile->data) + memset(tile->data, 0xFF, dataLen); } { diff --git a/libfreerdp/codec/rfx.c b/libfreerdp/codec/rfx.c index c13ecd36b..70f908d0e 100644 --- a/libfreerdp/codec/rfx.c +++ b/libfreerdp/codec/rfx.c @@ -155,18 +155,19 @@ static void rfx_tile_init(void* obj) static void* rfx_decoder_tile_new(const void* val) { + const size_t size = 4 * 64 * 64; RFX_TILE* tile = NULL; WINPR_UNUSED(val); if (!(tile = (RFX_TILE*)calloc(1, sizeof(RFX_TILE)))) return NULL; - if (!(tile->data = (BYTE*)_aligned_malloc(4 * 64 * 64, 16))) + if (!(tile->data = (BYTE*)_aligned_malloc(size, 16))) { free(tile); return NULL; } - + memset(tile->data, 0xff, size); tile->allocated = TRUE; return tile; } diff --git a/libfreerdp/gdi/gfx.c b/libfreerdp/gdi/gfx.c index e1f55cb8e..7f8f2a2b8 100644 --- a/libfreerdp/gdi/gfx.c +++ b/libfreerdp/gdi/gfx.c @@ -109,7 +109,11 @@ static UINT gdi_ResetGraphics(RdpgfxClientContext* context, { surface = (gdiGfxSurface*)context->GetSurfaceData(context, pSurfaceIds[index]); - if (!surface || !surface->outputMapped) + if (!surface) + continue; + + memset(surface->data, 0xFF, surface->scanline * surface->height); + if (!surface->outputMapped) continue; region16_clear(&surface->invalidRegion); @@ -858,6 +862,7 @@ static UINT gdi_SurfaceCommand_Progressive(rdpGdi* gdi, RdpgfxClientContext* con } region16_init(&invalidRegion); + rc = progressive_decompress(surface->codecs->progressive, cmd->data, cmd->length, surface->data, surface->format, surface->scanline, cmd->left, cmd->top, &invalidRegion, cmd->surfaceId, gdi->frameId); @@ -1032,6 +1037,7 @@ static UINT gdi_CreateSurface(RdpgfxClientContext* context, goto fail; } + memset(surface->data, 0xFF, surface->scanline * surface->height); surface->outputMapped = FALSE; region16_init(&surface->invalidRegion); rc = context->SetSurfaceData(context, surface->surfaceId, (void*)surface);