Merge pull request #5724 from akallabeth/opaque

Opaqueified structs
This commit is contained in:
Martin Fleisz 2019-11-19 09:32:24 +01:00 committed by GitHub
commit f72c12872b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 174 additions and 173 deletions

View File

@ -27,36 +27,10 @@
#include <winpr/stream.h>
typedef struct _BRUSH_ENTRY BRUSH_ENTRY;
typedef struct rdp_brush_cache rdpBrushCache;
#include <freerdp/cache/cache.h>
struct _BRUSH_ENTRY
{
UINT32 bpp;
void* entry;
};
struct rdp_brush_cache
{
pPatBlt PatBlt; /* 0 */
pCacheBrush CacheBrush; /* 1 */
pPolygonSC PolygonSC; /* 2 */
pPolygonCB PolygonCB; /* 3 */
UINT32 paddingA[16 - 4]; /* 4 */
UINT32 maxEntries; /* 16 */
UINT32 maxMonoEntries; /* 17 */
BRUSH_ENTRY* entries; /* 18 */
BRUSH_ENTRY* monoEntries; /* 19 */
UINT32 paddingB[32 - 20]; /* 20 */
/* internal */
rdpSettings* settings;
};
#ifdef __cplusplus
extern "C"
{

View File

@ -27,32 +27,10 @@
#include <winpr/stream.h>
typedef struct _NINE_GRID_ENTRY NINE_GRID_ENTRY;
typedef struct rdp_nine_grid_cache rdpNineGridCache;
#include <freerdp/cache/cache.h>
struct _NINE_GRID_ENTRY
{
void* entry;
};
struct rdp_nine_grid_cache
{
pDrawNineGrid DrawNineGrid; /* 0 */
pMultiDrawNineGrid MultiDrawNineGrid; /* 1 */
UINT32 paddingA[16 - 2]; /* 2 */
UINT32 maxEntries; /* 16 */
UINT32 maxSize; /* 17 */
NINE_GRID_ENTRY* entries; /* 18 */
UINT32 paddingB[32 - 19]; /* 19 */
/* internal */
rdpSettings* settings;
};
#ifdef __cplusplus
extern "C"
{

View File

@ -29,21 +29,6 @@
typedef struct rdp_offscreen_cache rdpOffscreenCache;
#include <freerdp/cache/cache.h>
struct rdp_offscreen_cache
{
UINT32 maxSize; /* 0 */
UINT32 maxEntries; /* 1 */
rdpBitmap** entries; /* 2 */
UINT32 currentSurface; /* 3 */
/* internal */
rdpUpdate* update;
rdpSettings* settings;
};
#ifdef __cplusplus
extern "C"
{

View File

@ -27,17 +27,6 @@
#include <freerdp/codec/bulk.h>
struct _MPPC_CONTEXT
{
wBitStream* bs;
BOOL Compressor;
BYTE* HistoryPtr;
UINT32 HistoryOffset;
UINT32 HistoryBufferSize;
BYTE HistoryBuffer[65536];
UINT16 MatchBuffer[32768];
UINT32 CompressionLevel;
};
typedef struct _MPPC_CONTEXT MPPC_CONTEXT;
#ifdef __cplusplus

View File

@ -27,21 +27,6 @@
#include <winpr/bitstream.h>
struct _NCRUSH_CONTEXT
{
BOOL Compressor;
BYTE* HistoryPtr;
UINT32 HistoryOffset;
UINT32 HistoryEndOffset;
UINT32 HistoryBufferSize;
BYTE HistoryBuffer[65536];
UINT32 HistoryBufferFence;
UINT32 OffsetCache[4];
UINT16 HashTable[65536];
UINT16 MatchTable[65536];
BYTE HuffTableCopyOffset[1024];
BYTE HuffTableLOM[4096];
};
typedef struct _NCRUSH_CONTEXT NCRUSH_CONTEXT;
#ifdef __cplusplus

View File

@ -25,75 +25,6 @@
#include <freerdp/codec/mppc.h>
#pragma pack(push, 1)
struct _XCRUSH_MATCH_INFO
{
UINT32 MatchOffset;
UINT32 ChunkOffset;
UINT32 MatchLength;
};
typedef struct _XCRUSH_MATCH_INFO XCRUSH_MATCH_INFO;
struct _XCRUSH_CHUNK
{
UINT32 offset;
UINT32 next;
};
typedef struct _XCRUSH_CHUNK XCRUSH_CHUNK;
struct _XCRUSH_SIGNATURE
{
UINT16 seed;
UINT16 size;
};
typedef struct _XCRUSH_SIGNATURE XCRUSH_SIGNATURE;
struct _RDP61_MATCH_DETAILS
{
UINT16 MatchLength;
UINT16 MatchOutputOffset;
UINT32 MatchHistoryOffset;
};
typedef struct _RDP61_MATCH_DETAILS RDP61_MATCH_DETAILS;
struct _RDP61_COMPRESSED_DATA
{
BYTE Level1ComprFlags;
BYTE Level2ComprFlags;
UINT16 MatchCount;
RDP61_MATCH_DETAILS* MatchDetails;
BYTE* Literals;
};
typedef struct _RDP61_COMPRESSED_DATA RDP61_COMPRESSED_DATA;
#pragma pack(pop)
struct _XCRUSH_CONTEXT
{
BOOL Compressor;
MPPC_CONTEXT* mppc;
BYTE* HistoryPtr;
UINT32 HistoryOffset;
UINT32 HistoryBufferSize;
BYTE HistoryBuffer[2000000];
BYTE BlockBuffer[16384];
UINT32 CompressionFlags;
UINT32 SignatureIndex;
UINT32 SignatureCount;
XCRUSH_SIGNATURE Signatures[1000];
UINT32 ChunkHead;
UINT32 ChunkTail;
XCRUSH_CHUNK Chunks[65534];
UINT16 NextChunks[65536];
UINT32 OriginalMatchCount;
UINT32 OptimizedMatchCount;
XCRUSH_MATCH_INFO OriginalMatches[1000];
XCRUSH_MATCH_INFO OptimizedMatches[1000];
};
typedef struct _XCRUSH_CONTEXT XCRUSH_CONTEXT;
#ifdef __cplusplus

View File

@ -35,6 +35,32 @@
#define TAG FREERDP_TAG("cache.brush")
struct _BRUSH_ENTRY
{
UINT32 bpp;
void* entry;
};
typedef struct _BRUSH_ENTRY BRUSH_ENTRY;
struct rdp_brush_cache
{
pPatBlt PatBlt; /* 0 */
pCacheBrush CacheBrush; /* 1 */
pPolygonSC PolygonSC; /* 2 */
pPolygonCB PolygonCB; /* 3 */
UINT32 paddingA[16 - 4]; /* 4 */
UINT32 maxEntries; /* 16 */
UINT32 maxMonoEntries; /* 17 */
BRUSH_ENTRY* entries; /* 18 */
BRUSH_ENTRY* monoEntries; /* 19 */
UINT32 paddingB[32 - 20]; /* 20 */
/* internal */
rdpSettings* settings;
};
static BOOL update_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt)
{
BYTE style;

View File

@ -34,6 +34,28 @@
#define TAG FREERDP_TAG("cache.nine_grid")
struct _NINE_GRID_ENTRY
{
void* entry;
};
typedef struct _NINE_GRID_ENTRY NINE_GRID_ENTRY;
struct rdp_nine_grid_cache
{
pDrawNineGrid DrawNineGrid; /* 0 */
pMultiDrawNineGrid MultiDrawNineGrid; /* 1 */
UINT32 paddingA[16 - 2]; /* 2 */
UINT32 maxEntries; /* 16 */
UINT32 maxSize; /* 17 */
NINE_GRID_ENTRY* entries; /* 18 */
UINT32 paddingB[32 - 19]; /* 19 */
/* internal */
rdpSettings* settings;
};
static void* nine_grid_cache_get(rdpNineGridCache* nine_grid, UINT32 index);
static void nine_grid_cache_put(rdpNineGridCache* nine_grid, UINT32 index, void* entry);

View File

@ -29,11 +29,25 @@
#include <freerdp/log.h>
#include <freerdp/cache/offscreen.h>
#include <freerdp/cache/cache.h>
#include "../core/graphics.h"
#define TAG FREERDP_TAG("cache.offscreen")
struct rdp_offscreen_cache
{
UINT32 maxSize; /* 0 */
UINT32 maxEntries; /* 1 */
rdpBitmap** entries; /* 2 */
UINT32 currentSurface; /* 3 */
/* internal */
rdpUpdate* update;
rdpSettings* settings;
};
static void offscreen_cache_put(rdpOffscreenCache* offscreen_cache, UINT32 index,
rdpBitmap* bitmap);
static void offscreen_cache_delete(rdpOffscreenCache* offscreen, UINT32 index);

View File

@ -37,6 +37,18 @@
0x07FFF000) >> \
12)
struct _MPPC_CONTEXT
{
wBitStream* bs;
BOOL Compressor;
BYTE* HistoryPtr;
UINT32 HistoryOffset;
UINT32 HistoryBufferSize;
BYTE HistoryBuffer[65536];
UINT16 MatchBuffer[32768];
UINT32 CompressionLevel;
};
static const UINT32 MPPC_MATCH_TABLE[256] = {
0x00000000, 0x009CCF93, 0x01399F26, 0x01D66EB9, 0x02733E4C, 0x03100DDF, 0x03ACDD72, 0x0449AD05,
0x04E67C98, 0x05834C2B, 0x06201BBE, 0x06BCEB51, 0x0759BAE4, 0x07F68A77, 0x08935A0A, 0x0930299D,

View File

@ -32,6 +32,22 @@
#define TAG FREERDP_TAG("codec")
struct _NCRUSH_CONTEXT
{
BOOL Compressor;
BYTE* HistoryPtr;
UINT32 HistoryOffset;
UINT32 HistoryEndOffset;
UINT32 HistoryBufferSize;
BYTE HistoryBuffer[65536];
UINT32 HistoryBufferFence;
UINT32 OffsetCache[4];
UINT16 HashTable[65536];
UINT16 MatchTable[65536];
BYTE HuffTableCopyOffset[1024];
BYTE HuffTableLOM[4096];
};
static const UINT16 HuffTableLEC[8192] = {
0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,

View File

@ -32,6 +32,76 @@
#define TAG FREERDP_TAG("codec")
#pragma pack(push, 1)
struct _XCRUSH_MATCH_INFO
{
UINT32 MatchOffset;
UINT32 ChunkOffset;
UINT32 MatchLength;
};
typedef struct _XCRUSH_MATCH_INFO XCRUSH_MATCH_INFO;
struct _XCRUSH_CHUNK
{
UINT32 offset;
UINT32 next;
};
typedef struct _XCRUSH_CHUNK XCRUSH_CHUNK;
struct _XCRUSH_SIGNATURE
{
UINT16 seed;
UINT16 size;
};
typedef struct _XCRUSH_SIGNATURE XCRUSH_SIGNATURE;
struct _RDP61_MATCH_DETAILS
{
UINT16 MatchLength;
UINT16 MatchOutputOffset;
UINT32 MatchHistoryOffset;
};
typedef struct _RDP61_MATCH_DETAILS RDP61_MATCH_DETAILS;
struct _RDP61_COMPRESSED_DATA
{
BYTE Level1ComprFlags;
BYTE Level2ComprFlags;
UINT16 MatchCount;
RDP61_MATCH_DETAILS* MatchDetails;
BYTE* Literals;
};
typedef struct _RDP61_COMPRESSED_DATA RDP61_COMPRESSED_DATA;
#pragma pack(pop)
struct _XCRUSH_CONTEXT
{
BOOL Compressor;
MPPC_CONTEXT* mppc;
BYTE* HistoryPtr;
UINT32 HistoryOffset;
UINT32 HistoryBufferSize;
BYTE HistoryBuffer[2000000];
BYTE BlockBuffer[16384];
UINT32 CompressionFlags;
UINT32 SignatureIndex;
UINT32 SignatureCount;
XCRUSH_SIGNATURE Signatures[1000];
UINT32 ChunkHead;
UINT32 ChunkTail;
XCRUSH_CHUNK Chunks[65534];
UINT16 NextChunks[65536];
UINT32 OriginalMatchCount;
UINT32 OptimizedMatchCount;
XCRUSH_MATCH_INFO OriginalMatches[1000];
XCRUSH_MATCH_INFO OptimizedMatches[1000];
};
#ifdef DEBUG_XCRUSH
static const char* xcrush_get_level_2_compression_flags_string(UINT32 flags)
{
@ -99,9 +169,9 @@ static const char* xcrush_get_level_1_compression_flags_string(UINT32 flags)
}
#endif
static UINT32 xcrush_update_hash(BYTE* data, UINT32 size)
static UINT32 xcrush_update_hash(const BYTE* data, UINT32 size)
{
BYTE* end;
const BYTE* end;
UINT32 seed = 5381; /* same value as in djb2 */
if (size > 32)
@ -121,7 +191,7 @@ static UINT32 xcrush_update_hash(BYTE* data, UINT32 size)
return (UINT16)seed;
}
static int xcrush_append_chunk(XCRUSH_CONTEXT* xcrush, BYTE* data, UINT32* beg, UINT32 end)
static int xcrush_append_chunk(XCRUSH_CONTEXT* xcrush, const BYTE* data, UINT32* beg, UINT32 end)
{
UINT16 seed;
UINT32 size;
@ -146,7 +216,8 @@ static int xcrush_append_chunk(XCRUSH_CONTEXT* xcrush, BYTE* data, UINT32* beg,
return 1;
}
static int xcrush_compute_chunks(XCRUSH_CONTEXT* xcrush, BYTE* data, UINT32 size, UINT32* pIndex)
static int xcrush_compute_chunks(XCRUSH_CONTEXT* xcrush, const BYTE* data, UINT32 size,
UINT32* pIndex)
{
UINT32 i = 0;
UINT32 offset = 0;
@ -215,7 +286,7 @@ static int xcrush_compute_chunks(XCRUSH_CONTEXT* xcrush, BYTE* data, UINT32 size
return 0;
}
static UINT32 xcrush_compute_signatures(XCRUSH_CONTEXT* xcrush, BYTE* data, UINT32 size)
static UINT32 xcrush_compute_signatures(XCRUSH_CONTEXT* xcrush, const BYTE* data, UINT32 size)
{
UINT32 index = 0;
@ -661,9 +732,9 @@ static int xcrush_generate_output(XCRUSH_CONTEXT* xcrush, BYTE* OutputBuffer, UI
return 1;
}
static int xcrush_copy_bytes(BYTE* dst, BYTE* src, int num)
static size_t xcrush_copy_bytes(BYTE* dst, const BYTE* src, size_t num)
{
int index;
size_t index;
for (index = 0; index < num; index++)
{
@ -673,15 +744,15 @@ static int xcrush_copy_bytes(BYTE* dst, BYTE* src, int num)
return num;
}
static int xcrush_decompress_l1(XCRUSH_CONTEXT* xcrush, BYTE* pSrcData, UINT32 SrcSize,
static int xcrush_decompress_l1(XCRUSH_CONTEXT* xcrush, const BYTE* pSrcData, UINT32 SrcSize,
BYTE** ppDstData, UINT32* pDstSize, UINT32 flags)
{
BYTE* pSrcEnd = NULL;
BYTE* Literals = NULL;
const BYTE* pSrcEnd = NULL;
const BYTE* Literals = NULL;
UINT16 MatchCount = 0;
UINT16 MatchIndex = 0;
BYTE* OutputPtr = NULL;
int OutputLength = 0;
size_t OutputLength = 0;
UINT32 OutputOffset = 0;
BYTE* HistoryPtr = NULL;
BYTE* HistoryBuffer = NULL;
@ -813,10 +884,8 @@ int xcrush_decompress(XCRUSH_CONTEXT* xcrush, BYTE* pSrcData, UINT32 SrcSize, BY
if (!(Level2ComprFlags & PACKET_COMPRESSED))
{
pDstData = pSrcData;
DstSize = SrcSize;
status =
xcrush_decompress_l1(xcrush, pDstData, DstSize, ppDstData, pDstSize, Level1ComprFlags);
xcrush_decompress_l1(xcrush, pSrcData, SrcSize, ppDstData, pDstSize, Level1ComprFlags);
return status;
}
@ -830,7 +899,7 @@ int xcrush_decompress(XCRUSH_CONTEXT* xcrush, BYTE* pSrcData, UINT32 SrcSize, BY
return status;
}
static int xcrush_compress_l1(XCRUSH_CONTEXT* xcrush, BYTE* pSrcData, UINT32 SrcSize,
static int xcrush_compress_l1(XCRUSH_CONTEXT* xcrush, const BYTE* pSrcData, UINT32 SrcSize,
BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags)
{
int status = 0;