lz4_compression.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <span>
  5. #include <vector>
  6. #include "common/common_types.h"
  7. namespace Common::Compression {
  8. /**
  9. * Compresses a source memory region with LZ4 and returns the compressed data in a vector.
  10. *
  11. * @param source The uncompressed source memory region.
  12. * @param source_size The size of the uncompressed source memory region.
  13. *
  14. * @return the compressed data.
  15. */
  16. [[nodiscard]] std::vector<u8> CompressDataLZ4(const u8* source, std::size_t source_size);
  17. /**
  18. * Utilizes the LZ4 subalgorithm LZ4HC with the specified compression level. Higher compression
  19. * levels result in a smaller compressed size, but require more CPU time for compression. The
  20. * compression level has almost no impact on decompression speed. Data compressed with LZ4HC can
  21. * also be decompressed with the default LZ4 decompression.
  22. *
  23. * @param source The uncompressed source memory region.
  24. * @param source_size The size of the uncompressed source memory region.
  25. * @param compression_level The used compression level. Should be between 3 and 12.
  26. *
  27. * @return the compressed data.
  28. */
  29. [[nodiscard]] std::vector<u8> CompressDataLZ4HC(const u8* source, std::size_t source_size,
  30. s32 compression_level);
  31. /**
  32. * Utilizes the LZ4 subalgorithm LZ4HC with the highest possible compression level.
  33. *
  34. * @param source The uncompressed source memory region.
  35. * @param source_size The size of the uncompressed source memory region
  36. *
  37. * @return the compressed data.
  38. */
  39. [[nodiscard]] std::vector<u8> CompressDataLZ4HCMax(const u8* source, std::size_t source_size);
  40. /**
  41. * Decompresses a source memory region with LZ4 and returns the uncompressed data in a vector.
  42. *
  43. * @param compressed the compressed source memory region.
  44. * @param uncompressed_size the size in bytes of the uncompressed data.
  45. *
  46. * @return the decompressed data.
  47. */
  48. [[nodiscard]] std::vector<u8> DecompressDataLZ4(std::span<const u8> compressed,
  49. std::size_t uncompressed_size);
  50. } // namespace Common::Compression