mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
Clear codec internal format: keep API compatible
This commit is contained in:
@@ -39,7 +39,7 @@ struct _CLEAR_GLYPH_ENTRY
|
||||
{
|
||||
UINT32 size;
|
||||
UINT32 count;
|
||||
BYTE* pixels;
|
||||
UINT32* pixels;
|
||||
};
|
||||
typedef struct _CLEAR_GLYPH_ENTRY CLEAR_GLYPH_ENTRY;
|
||||
|
||||
@@ -83,7 +83,7 @@ FREERDP_API INT32 clear_decompress(CLEAR_CONTEXT* clear, const BYTE* pSrcData,
|
||||
|
||||
FREERDP_API BOOL clear_context_reset(CLEAR_CONTEXT* clear);
|
||||
|
||||
FREERDP_API CLEAR_CONTEXT* clear_context_new(BOOL Compressor, UINT32 format);
|
||||
FREERDP_API CLEAR_CONTEXT* clear_context_new(BOOL Compressor);
|
||||
FREERDP_API void clear_context_free(CLEAR_CONTEXT* clear);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -974,7 +974,7 @@ static BOOL clear_decompress_glyph_data(CLEAR_CONTEXT* clear,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
glyphEntry->pixels = tmp;
|
||||
glyphEntry->pixels = (UINT32*)tmp;
|
||||
}
|
||||
|
||||
if (!glyphEntry->pixels)
|
||||
@@ -984,7 +984,7 @@ static BOOL clear_decompress_glyph_data(CLEAR_CONTEXT* clear,
|
||||
}
|
||||
|
||||
if (ppGlyphData)
|
||||
*ppGlyphData = glyphEntry->pixels;
|
||||
*ppGlyphData = (BYTE*)glyphEntry->pixels;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -992,6 +992,15 @@ static BOOL clear_decompress_glyph_data(CLEAR_CONTEXT* clear,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static INLINE BOOL updateContextFormat(CLEAR_CONTEXT* clear, UINT32 DstFormat)
|
||||
{
|
||||
if (!clear || !clear->nsc)
|
||||
return FALSE;
|
||||
|
||||
clear->format = DstFormat;
|
||||
return nsc_context_set_pixel_format(clear->nsc, DstFormat);
|
||||
}
|
||||
|
||||
INT32 clear_decompress(CLEAR_CONTEXT* clear, const BYTE* pSrcData,
|
||||
UINT32 SrcSize, UINT32 nWidth, UINT32 nHeight,
|
||||
BYTE* pDstData, UINT32 DstFormat, UINT32 nDstStep,
|
||||
@@ -1029,6 +1038,9 @@ INT32 clear_decompress(CLEAR_CONTEXT* clear, const BYTE* pSrcData,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!updateContextFormat(clear, DstFormat))
|
||||
goto fail;
|
||||
|
||||
Stream_Read_UINT8(s, glyphFlags);
|
||||
Stream_Read_UINT8(s, seqNumber);
|
||||
|
||||
@@ -1140,7 +1152,7 @@ BOOL clear_context_reset(CLEAR_CONTEXT* clear)
|
||||
clear->ShortVBarStorageCursor = 0;
|
||||
return TRUE;
|
||||
}
|
||||
CLEAR_CONTEXT* clear_context_new(BOOL Compressor, UINT32 format)
|
||||
CLEAR_CONTEXT* clear_context_new(BOOL Compressor)
|
||||
{
|
||||
CLEAR_CONTEXT* clear;
|
||||
clear = (CLEAR_CONTEXT*) calloc(1, sizeof(CLEAR_CONTEXT));
|
||||
@@ -1150,12 +1162,13 @@ CLEAR_CONTEXT* clear_context_new(BOOL Compressor, UINT32 format)
|
||||
|
||||
clear->Compressor = Compressor;
|
||||
clear->nsc = nsc_context_new();
|
||||
clear->format = format;
|
||||
|
||||
if (!clear->nsc)
|
||||
goto error_nsc;
|
||||
|
||||
nsc_context_set_pixel_format(clear->nsc, format);
|
||||
if (!updateContextFormat(clear, PIXEL_FORMAT_BGRX32))
|
||||
goto error_nsc;
|
||||
|
||||
clear->TempSize = 512 * 512 * 4;
|
||||
clear->TempBuffer = (BYTE*) malloc(clear->TempSize);
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ static BOOL test_ClearDecompressExample(UINT32 nr, const BYTE* pSrcData,
|
||||
{
|
||||
int status;
|
||||
BYTE pDstData[16384];
|
||||
CLEAR_CONTEXT* clear = clear_context_new(FALSE, PIXEL_FORMAT_BGRA32);
|
||||
CLEAR_CONTEXT* clear = clear_context_new(FALSE);
|
||||
|
||||
if (!clear)
|
||||
return FALSE;
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
#include "rdp.h"
|
||||
|
||||
#include <freerdp/codecs.h>
|
||||
#include <freerdp/gdi/gdi.h>
|
||||
|
||||
#define TAG FREERDP_TAG("core.codecs")
|
||||
|
||||
@@ -69,9 +68,7 @@ BOOL freerdp_client_codecs_prepare(rdpCodecs* codecs, UINT32 flags,
|
||||
|
||||
if ((flags & FREERDP_CODEC_CLEARCODEC) && !codecs->clear)
|
||||
{
|
||||
const UINT32 format = codecs->context->gdi->dstFormat;
|
||||
|
||||
if (!(codecs->clear = clear_context_new(FALSE, format)))
|
||||
if (!(codecs->clear = clear_context_new(FALSE)))
|
||||
{
|
||||
WLog_ERR(TAG, "Failed to create clear codec context");
|
||||
return FALSE;
|
||||
|
||||
Reference in New Issue
Block a user