From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/Durango/DurangoExtras/xcompress.h | 253 +++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 Minecraft.Client/Durango/DurangoExtras/xcompress.h (limited to 'Minecraft.Client/Durango/DurangoExtras/xcompress.h') diff --git a/Minecraft.Client/Durango/DurangoExtras/xcompress.h b/Minecraft.Client/Durango/DurangoExtras/xcompress.h new file mode 100644 index 00000000..c577ad02 --- /dev/null +++ b/Minecraft.Client/Durango/DurangoExtras/xcompress.h @@ -0,0 +1,253 @@ +/************************************************************************ +* * +* xcompress.h -- This module defines the Xbox Compression APIs * +* * +* Copyright (c) Microsoft Corp. All rights reserved. * +* * +************************************************************************/ +#pragma once + +#ifndef _XCOMPRESS_H_ +#define _XCOMPRESS_H_ + +#include + +#ifndef XBOXAPI +#define XBOXAPI +#endif + +#ifdef __cplusplus +#define XCTDEXTERN extern "C" +#else +#define XCTDEXTERN extern +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +#pragma warning(push) +#pragma warning(disable: 4200) // zero-sized array + +typedef enum _XMEMCODEC_TYPE +{ + XMEMCODEC_DEFAULT = 0, + XMEMCODEC_LZX = 1 +} XMEMCODEC_TYPE; + +/* + * Data compression flags + */ + +#define XMEMCOMPRESS_STREAM 0x00000001 + +/* + * Data compression functions + */ + +typedef VOID* XMEMCOMPRESSION_CONTEXT; + +XBOXAPI +HRESULT +WINAPI +XMemCreateCompressionContext( + __in XMEMCODEC_TYPE CodecType, + __in_opt CONST VOID* pCodecParams, + __in DWORD Flags, + __deref_out XMEMCOMPRESSION_CONTEXT* pContext + ); + +XBOXAPI +XMEMCOMPRESSION_CONTEXT +WINAPI +XMemInitializeCompressionContext( + __in XMEMCODEC_TYPE CodecType, + __in_opt CONST VOID* pCodecParams, + __in DWORD Flags, + __out_bcount(ContextSize) VOID* pContextData, + __in SIZE_T ContextSize + ); + +XBOXAPI +VOID +WINAPI +XMemDestroyCompressionContext( + __in XMEMCOMPRESSION_CONTEXT Context + ); + +XBOXAPI +SIZE_T +WINAPI +XMemGetCompressionContextSize( + __in XMEMCODEC_TYPE CodecType, + __in_opt CONST VOID* pCodecParams, + __in DWORD Flags + ); + +XBOXAPI +HRESULT +WINAPI +XMemResetCompressionContext( + __in XMEMCOMPRESSION_CONTEXT Context); + +XBOXAPI +HRESULT +WINAPI +XMemCompress( + __in XMEMCOMPRESSION_CONTEXT Context, + __out_bcount_opt( *pDestSize ) VOID* pDestination, + __inout SIZE_T* pDestSize, + __in_bcount( SrcSize ) CONST VOID* pSource, + __in SIZE_T SrcSize + ); + +XBOXAPI +HRESULT +WINAPI +XMemCompressStream( + __in XMEMCOMPRESSION_CONTEXT Context, + __out_bcount_opt( *pDestSize ) VOID* pDestination, + __inout SIZE_T* pDestSize, + __in_bcount( *pSrcSize ) CONST VOID* pSource, + __inout SIZE_T* pSrcSize + ); + +/* + * Data decompression functions + */ + +typedef VOID* XMEMDECOMPRESSION_CONTEXT; + +XBOXAPI +HRESULT +WINAPI +XMemCreateDecompressionContext( + __in XMEMCODEC_TYPE CodecType, + __in_opt CONST VOID* pCodecParams, + __in DWORD Flags, + __deref_out XMEMDECOMPRESSION_CONTEXT* pContext + ); + +XBOXAPI +XMEMDECOMPRESSION_CONTEXT +WINAPI +XMemInitializeDecompressionContext( + __in XMEMCODEC_TYPE CodecType, + __in_opt CONST VOID* pCodecParams, + __in DWORD Flags, + __out_bcount( ContextSize ) VOID* pContextData, + __in SIZE_T ContextSize + ); + +XBOXAPI +VOID +WINAPI +XMemDestroyDecompressionContext( + __in XMEMDECOMPRESSION_CONTEXT Context + ); + +XBOXAPI +SIZE_T +WINAPI +XMemGetDecompressionContextSize( + __in XMEMCODEC_TYPE CodecType, + __in_opt CONST VOID* pCodecParams, + __in DWORD Flags + ); + +XBOXAPI +HRESULT +WINAPI +XMemResetDecompressionContext( + __in XMEMDECOMPRESSION_CONTEXT Context); + +XBOXAPI +HRESULT +WINAPI +XMemDecompress( + __in XMEMDECOMPRESSION_CONTEXT Context, + __out_bcount( *pDestSize ) VOID* pDestination, + __inout SIZE_T* pDestSize, + __in_bcount( SrcSize) CONST VOID* pSource, + __in SIZE_T SrcSize + ); + +XBOXAPI +HRESULT +WINAPI +XMemDecompressStream( + __in XMEMDECOMPRESSION_CONTEXT Context, + __out_bcount( *pDestSize ) VOID* pDestination, + __inout SIZE_T* pDestSize, + __in_bcount( *pSrcSize ) CONST VOID* pSource, + __inout SIZE_T* pSrcSize + ); + +/* + * LZX codec for lossless compression + */ + +typedef struct _XMEMCODEC_PARAMETERS_LZX +{ + DWORD Flags; + DWORD WindowSize; + DWORD CompressionPartitionSize; +} XMEMCODEC_PARAMETERS_LZX; + +#define XCOMPRESS_LZX_BLOCK_SIZE (32 * 1024) +#define XCOMPRESS_LZX_BLOCK_GROWTH_SIZE_MAX 6155 + +/* + * Error codes + */ + +#define XMCDERR_MOREDATA _HRESULT_TYPEDEF_(0x81DE2001) + +/* + * Compression file headers + */ + +#define XCOMPRESS_FILE_IDENTIFIER_LZXTDECODE 0x0FF512ED +#define XCOMPRESS_FILE_IDENTIFIER_LZXNATIVE 0x0FF512EE + +#define XCOMPRESS_SET_FILE_VERSION(Major, Minor) ((((Major) & 0xFF) << 8) | ((Minor) & 0xFF)) +#define XCOMPRESS_GET_FILE_VERSION_MAJOR(Version) (((Version) >> 8) & 0xFF) +#define XCOMPRESS_GET_FILE_VERSION_MINOR(Version) ((Version) & 0xFF) + +#define XCOMPRESS_LZXNATIVE_VERSION_MAJOR 1 +#define XCOMPRESS_LZXNATIVE_VERSION_MINOR 3 + +typedef struct _XCOMPRESS_FILE_HEADER +{ + DWORD Identifier; + WORD Version; + WORD Reserved; +} XCOMPRESS_FILE_HEADER; + +typedef struct _XCOMPRESS_FILE_HEADER_LZXNATIVE +{ + XCOMPRESS_FILE_HEADER Common; + DWORD ContextFlags; + XMEMCODEC_PARAMETERS_LZX CodecParams; + DWORD UncompressedSizeHigh; + DWORD UncompressedSizeLow; + DWORD CompressedSizeHigh; + DWORD CompressedSizeLow; + DWORD UncompressedBlockSize; + DWORD CompressedBlockSizeMax; +} XCOMPRESS_FILE_HEADER_LZXNATIVE; + +typedef struct _XCOMPRESS_BLOCK_HEADER_LZXNATIVE +{ + DWORD CompressedBlockSize; + BYTE pCompressedData[0]; +} XCOMPRESS_BLOCK_HEADER_LZXNATIVE; + +#pragma warning(pop) + +#ifdef __cplusplus +} +#endif + +#endif /* _XCOMPRESS_H_ */ -- cgit v1.2.3