diff --git a/libs/compression/compression.cpp b/libs/compression/compression.cpp index 0570cb1..0d8116b 100644 --- a/libs/compression/compression.cpp +++ b/libs/compression/compression.cpp @@ -1,73 +1,68 @@ #include "compression.h" -//#include "minilzo.h" - -//#define XBOXAPI __declspec(dllimport) -//#include "xcompress.h" +#include "minilzo.h" +#include "xcompress.h" #include #include #include -#include QByteArray Compression::CompressXMem(const QByteArray &data) { - // XMEMCODEC_PARAMETERS_LZX lzxParams = {}; - // lzxParams.Flags = 0; - // lzxParams.WindowSize = 0x20000; - // lzxParams.CompressionPartitionSize = 0x80000; + XMEMCODEC_PARAMETERS_LZX lzxParams = {}; + lzxParams.Flags = 0; + lzxParams.WindowSize = 0x20000; + lzxParams.CompressionPartitionSize = 0x80000; - // XMEMCOMPRESSION_CONTEXT ctx = nullptr; - // if (FAILED(XMemCreateCompressionContext(XMEMCODEC_LZX, &lzxParams, 0, &ctx)) || !ctx) - // return QByteArray(); + XMEMCOMPRESSION_CONTEXT ctx = nullptr; + if (FAILED(XMemCreateCompressionContext(XMEMCODEC_LZX, &lzxParams, 0, &ctx)) || !ctx) + return QByteArray(); - // SIZE_T estimatedSize = data.size() + XCOMPRESS_LZX_BLOCK_GROWTH_SIZE_MAX; - // QByteArray output(static_cast(estimatedSize), 0); - // SIZE_T actualSize = estimatedSize; + SIZE_T estimatedSize = data.size() + XCOMPRESS_LZX_BLOCK_GROWTH_SIZE_MAX; + QByteArray output(static_cast(estimatedSize), 0); + SIZE_T actualSize = estimatedSize; - // HRESULT hr = XMemCompress(ctx, output.data(), &actualSize, data.constData(), data.size()); - // XMemDestroyCompressionContext(ctx); + HRESULT hr = XMemCompress(ctx, output.data(), &actualSize, data.constData(), data.size()); + XMemDestroyCompressionContext(ctx); - // if (FAILED(hr)) - // return QByteArray(); + if (FAILED(hr)) + return QByteArray(); - // output.resize(static_cast(actualSize)); - // return output; - return QByteArray(); + output.resize(static_cast(actualSize)); + return output; } QByteArray Compression::DecompressXMem(const QByteArray &data, int flags, int windowSize, int partSize) { - // if (data.isEmpty()) - // return {}; + if (data.isEmpty()) + return {}; - // XMEMCODEC_PARAMETERS_LZX lzxParams = {}; - // lzxParams.Flags = flags; - // lzxParams.WindowSize = windowSize; - // lzxParams.CompressionPartitionSize = partSize; + XMEMCODEC_PARAMETERS_LZX lzxParams = {}; + lzxParams.Flags = flags; + lzxParams.WindowSize = windowSize; + lzxParams.CompressionPartitionSize = partSize; - // XMEMDECOMPRESSION_CONTEXT ctx = nullptr; - // if (FAILED(XMemCreateDecompressionContext(XMEMCODEC_LZX, &lzxParams, 0, &ctx)) || !ctx) - // return {}; + XMEMDECOMPRESSION_CONTEXT ctx = nullptr; + if (FAILED(XMemCreateDecompressionContext(XMEMCODEC_LZX, &lzxParams, 0, &ctx)) || !ctx) + return {}; - // // Allocate large enough buffer for decompression (16 MB is a safe upper bound) - // const SIZE_T kMaxOutSize = 16 * 1024 * 1024; - // QByteArray output(static_cast(kMaxOutSize), Qt::Uninitialized); - // SIZE_T actualSize = kMaxOutSize; + // Allocate large enough buffer for decompression (16 MB is a safe upper bound) + const SIZE_T kMaxOutSize = 16 * 1024 * 1024; + QByteArray output(static_cast(kMaxOutSize), Qt::Uninitialized); + SIZE_T actualSize = kMaxOutSize; - // HRESULT hr = XMemDecompress(ctx, - // output.data(), &actualSize, - // data.constData(), data.size() + 16); + HRESULT hr = XMemDecompress(ctx, + output.data(), &actualSize, + data.constData(), data.size() + 16); - // XMemDestroyDecompressionContext(ctx); + XMemDestroyDecompressionContext(ctx); - // if (FAILED(hr)) { - // qWarning() << "XMemDecompress failed with HRESULT:" << hr; - // return {}; - // } + if (FAILED(hr)) { + qWarning() << "XMemDecompress failed with HRESULT:" << hr; + return {}; + } - // output.resize(static_cast(actualSize)); - // return output; - return QByteArray(); + output.resize(static_cast(actualSize)); + return output; } quint32 Compression::CalculateAdler32Checksum(const QByteArray &data) { @@ -298,22 +293,22 @@ QByteArray Compression::CompressDeflateWithSettings(const QByteArray &aData, int QByteArray Compression::DecompressLZO(const QByteArray &aCompressedData, quint32 aDestSize) { QByteArray dst; - // static bool ok = (lzo_init() == LZO_E_OK); - // if (!ok) - // throw std::runtime_error("lzo_init failed"); + static bool ok = (lzo_init() == LZO_E_OK); + if (!ok) + throw std::runtime_error("lzo_init failed"); - // dst = QByteArray(aDestSize, Qt::Uninitialized); - // lzo_uint out = aDestSize; + dst = QByteArray(aDestSize, Qt::Uninitialized); + lzo_uint out = aDestSize; - // int rc = lzo1x_decompress_safe( - // reinterpret_cast(aCompressedData.constData()), - // static_cast(aCompressedData.size()), - // reinterpret_cast(dst.data()), - // &out, - // nullptr); + int rc = lzo1x_decompress_safe( + reinterpret_cast(aCompressedData.constData()), + static_cast(aCompressedData.size()), + reinterpret_cast(dst.data()), + &out, + nullptr); - // if (rc != LZO_E_OK || out != aDestSize) - // throw std::runtime_error("LZO decompression error"); + if (rc != LZO_E_OK || out != aDestSize) + throw std::runtime_error("LZO decompression error"); return dst; }