//====================================================================================================== // Copyright 2025, Rokoko Glove OptiTrack Integration //====================================================================================================== /** * LZ4Wrapper class provides LZ4 decompression functionality for Rokoko glove data. * This wrapper handles safe decompression and validation of compressed data. */ #pragma once #include #include // Unity LZ4 함수들 선언 extern "C" { int Unity_LZ4_uncompressSize(const char* srcBuffer, int srcSize); int Unity_LZ4_decompress(const char* src, int srcSize, char* dst, int dstCapacity); } namespace RokokoIntegration { class LZ4Wrapper { public: /** * Decompresses LZ4 compressed data * @param compressedData Pointer to compressed data * @param compressedSize Size of compressed data * @return Decompressed data as vector, empty if decompression fails */ static std::vector Decompress(const uint8_t* compressedData, int compressedSize); /** * Validates if the data appears to be valid LZ4 compressed data * @param data Pointer to data to validate * @param size Size of data * @return true if data appears to be valid LZ4 data */ static bool IsValidLZ4Data(const uint8_t* data, int size); /** * Gets the decompressed size from LZ4 header * @param compressedData Pointer to compressed data * @param compressedSize Size of compressed data * @return Decompressed size, -1 if invalid */ static int GetDecompressedSize(const uint8_t* compressedData, int compressedSize); private: /** * Validates decompressed size is reasonable * @param compressedSize Size of compressed data * @param decompressedSize Size of decompressed data * @return true if sizes are reasonable */ static bool ValidateDecompressedSize(int compressedSize, int decompressedSize); /** * Maximum reasonable decompressed size (10MB) */ static const int MAX_DECOMPRESSED_SIZE = 10 * 1024 * 1024; }; }