From 1c5b3de55c72dca9a16c58a0f4dba3eee9b1f8e6 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Thu, 17 Aug 2023 00:40:00 -0600 Subject: Starting CUBE-OS v0.1... --- src/utils/MIODecoder.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/utils/MIODecoder.cpp (limited to 'src/utils/MIODecoder.cpp') diff --git a/src/utils/MIODecoder.cpp b/src/utils/MIODecoder.cpp new file mode 100644 index 0000000..aed5eba --- /dev/null +++ b/src/utils/MIODecoder.cpp @@ -0,0 +1,27 @@ +#include "MIODecoder.h" + +extern "C" { +#include +} + +std::unordered_map> MIO0Decoder::gCachedChunks; + +std::vector& MIO0Decoder::Decode(std::vector& buffer, uint32_t offset) { + const unsigned char* in_buf = buffer.data() + offset; + + mio0_header_t head; + if(!mio0_decode_header(in_buf, &head)){ + throw std::runtime_error("Invalid MIO0 header"); + } + + uint8_t* decompressed = new uint8_t[head.dest_size]; + mio0_decode(in_buf, decompressed, nullptr); + gCachedChunks[offset] = std::vector(decompressed, decompressed + head.dest_size); + + delete[] decompressed; + return gCachedChunks[offset]; +} + +void MIO0Decoder::ClearCache() { + gCachedChunks.clear(); +} \ No newline at end of file -- cgit v1.2.3