1#ifndef YAZE_APP_GFX_COMPRESSION_H
2#define YAZE_APP_GFX_COMPRESSION_H
9#include "absl/status/status.h"
10#include "absl/status/statusor.h"
13#define BUILD_HEADER(command, length) (command << 5) + (length - 1)
19 int const oldsize,
int*
const size,
23 int const p_big_endian);
84 std::shared_ptr<CompressionPiece>
next =
nullptr;
100 const unsigned int last_pos);
104 const unsigned int last_pos);
108 const unsigned int last_pos);
112 const unsigned int last_pos,
unsigned int start);
122 uint& src_data_pos, uint& comp_accumulator,
123 uint& cmd_with_max, uint& max_win);
127void CheckByteRepeatV2(
const uint8_t* data, uint& src_pos,
const unsigned int last_pos,
130void CheckWordRepeatV2(
const uint8_t* data, uint& src_pos,
const unsigned int last_pos,
133void CheckIncByteV2(
const uint8_t* data, uint& src_pos,
const unsigned int last_pos,
136void CheckIntraCopyV2(
const uint8_t* data, uint& src_pos,
const unsigned int last_pos,
145 uint& src_pos, uint& comp_accumulator,
146 uint& cmd_with_max, uint& max_win);
152absl::StatusOr<std::vector<uint8_t>>
CompressV2(
const uint8_t* data,
154 const int length,
int mode = 1,
164 const std::vector<uint8_t> data,
const int pos,
const int length);
173 int mode,
int start,
int src_data_pos);
198 const int length,
int mode_)
225absl::StatusOr<std::vector<uint8_t>>
CompressV3(
226 const std::vector<uint8_t>& data,
const int start,
const int length,
227 int mode = 1,
bool check =
false);
229std::string
SetBuffer(
const std::vector<uint8_t>& data,
int src_pos,
230 int comp_accumulator);
231std::string
SetBuffer(
const uint8_t* data,
int src_pos,
int comp_accumulator);
232void memfill(
const uint8_t* data, std::vector<uint8_t>& buffer,
int buffer_pos,
233 int offset,
int length);
240absl::StatusOr<std::vector<uint8_t>>
DecompressV2(
const uint8_t* data,
241 int offset,
int size = 0x800,
248 const std::vector<uint8_t> data,
int pos,
int size);
const int D_CMD_COPY_EXISTING
void CheckIntraCopyV3(CompressionContext &context)
absl::StatusOr< std::vector< uint8_t > > CompressGraphics(const uint8_t *data, const int pos, const int length)
absl::StatusOr< std::vector< uint8_t > > CompressV3(const std::vector< uint8_t > &data, const int start, const int length, int mode, bool check)
Compresses a buffer of data using the LC_LZ2 algorithm.
constexpr int kExpandedLengthMod
constexpr int kCommandDirectCopy
void memfill(const uint8_t *data, std::vector< uint8_t > &buffer, int buffer_pos, int offset, int length)
void FinalizeCompression(CompressionContext &context)
void CheckWordRepeatV2(const uint8_t *data, uint &src_pos, const unsigned int last_pos, CompressionCommand &cmd)
void InitializeCompression(CompressionContext &context)
struct CompressionPiece CompressionPiece
absl::StatusOr< std::vector< uint8_t > > CompressOverworld(const uint8_t *data, const int pos, const int length)
constexpr int kSnesByteMax
const int D_NINTENDO_C_MODE2
constexpr int kNintendoMode1
std::shared_ptr< CompressionPiece > CompressionPiecePointer
void CheckIncByteV3(CompressionContext &context)
absl::Status ValidateCompressionResultV3(const CompressionContext &context)
constexpr int kNintendoMode2
std::string SetBuffer(const uint8_t *data, int src_pos, int comp_accumulator)
constexpr int kCommandRepeatingBytes
std::array< std::array< char, 2 >, 5 > CommandArgumentArray
void CheckByteRepeat(const uint8_t *rom_data, DataSizeArray &data_size_taken, CommandArgumentArray &cmd_args, uint &src_data_pos, const unsigned int last_pos)
const int INITIAL_ALLOC_SIZE
void CheckByteRepeatV2(const uint8_t *data, uint &src_pos, const unsigned int last_pos, CompressionCommand &cmd)
void HandleDirectCopy(CompressionContext &context)
void CheckIncByteV2(const uint8_t *rom_data, uint &src_data_pos, const unsigned int last_pos, CompressionCommand &cmd)
absl::StatusOr< std::vector< uint8_t > > DecompressGraphics(const uint8_t *data, int pos, int size)
constexpr int kCommandMod
void PrintCompressionPiece(const CompressionPiecePointer &piece)
constexpr int kCommandWordFill
constexpr int kMaxLengthNormalHeader
void CheckAvailableCompressionCommands(CompressionContext &context)
constexpr int kMaxLengthCompression
const int D_MAX_NORMAL_LENGTH
void CompressionCommandAlternativeV2(const uint8_t *rom_data, const CompressionCommand &cmd, CompressionPiecePointer &compressed_chain, uint &src_data_pos, uint &comp_accumulator, uint &cmd_with_max, uint &max_win)
void CheckIntraCopyV2(const uint8_t *rom_data, uint &src_data_pos, const unsigned int last_pos, unsigned int start, CompressionCommand &cmd)
std::vector< uint8_t > CreateCompressionString(CompressionPiecePointer &start, int mode)
absl::StatusOr< std::vector< uint8_t > > DecompressOverworld(const uint8_t *data, int pos, int size)
std::array< uint, 5 > DataSizeArray
constexpr int kCommandIncreasingFill
void ValidateForByteGainV2(const CompressionCommand &cmd, uint &max_win, uint &cmd_with_max)
void ValidateForByteGain(const DataSizeArray &data_size_taken, const CommandSizeArray &cmd_size, uint &max_win, uint &cmd_with_max)
constexpr int kCommandByteFill
void PrintCompressionChain(const CompressionPiecePointer &chain_head)
void CheckIncByte(const uint8_t *rom_data, DataSizeArray &data_size_taken, CommandArgumentArray &cmd_args, uint &src_data_pos, const unsigned int last_pos)
constexpr int kExpandedMod
absl::StatusOr< std::vector< uint8_t > > DecompressV2(const uint8_t *data, int offset, int size, int mode)
Decompresses a buffer of data using the LC_LZ2 algorithm.
void AddCompressionToChain(CompressionContext &context)
absl::StatusOr< CompressionPiecePointer > SplitCompressionPiece(CompressionPiecePointer &piece, int mode)
void CompressionCommandAlternative(const uint8_t *rom_data, CompressionPiecePointer &compressed_chain, const CommandSizeArray &cmd_size, const CommandArgumentArray &cmd_args, uint &src_data_pos, uint &comp_accumulator, uint &cmd_with_max, uint &max_win)
constexpr int kNormalLengthMod
constexpr int kCompressionStringMod
void CheckWordRepeat(const uint8_t *rom_data, DataSizeArray &data_size_taken, CommandArgumentArray &cmd_args, uint &src_data_pos, const unsigned int last_pos)
constexpr int kCommandLongLength
void CheckByteRepeatV3(CompressionContext &context)
const int D_CMD_WORD_REPEAT
CompressionPiecePointer MergeCopy(CompressionPiecePointer &start)
std::array< uint, 5 > CommandSizeArray
void DetermineBestCompression(CompressionContext &context)
absl::StatusOr< CompressionPiece > SplitCompressionPieceV3(CompressionPiece &piece, int mode)
absl::StatusOr< std::vector< uint8_t > > CompressV2(const uint8_t *data, const int start, const int length, int mode, bool check)
Compresses a buffer of data using the LC_LZ2 algorithm.
void CheckWordRepeatV3(CompressionContext &context)
const int D_CMD_BYTE_REPEAT
const int D_NINTENDO_C_MODE1
void CheckIntraCopy(const uint8_t *rom_data, DataSizeArray &data_size_taken, CommandArgumentArray &cmd_args, uint &src_data_pos, const unsigned int last_pos, unsigned int start)
absl::Status ValidateCompressionResult(CompressionPiecePointer &chain_head, int mode, int start, int src_data_pos)
std::vector< uint8_t > HyruleMagicDecompress(uint8_t const *src, int *const size, int const p_big_endian)
std::vector< uint8_t > HyruleMagicCompress(uint8_t const *const src, int const oldsize, int *const size, int const flag)
Main namespace for the application.
std::array< uint, 5 > data_size
std::array< uint, 5 > cmd_size
std::array< std::array< char, 2 >, 5 > arguments
std::vector< uint8_t > data
CompressionCommand current_cmd
std::vector< CompressionPiece > compression_pieces
std::vector< uint8_t > compression_string
unsigned int cmd_with_max
std::vector< uint8_t > compressed_data
CompressionContext(const std::vector< uint8_t > &data_, const int start, const int length, int mode_)
CompressionContext(const std::vector< uint8_t > &data_, const int start, const int length)
unsigned int comp_accumulator
std::shared_ptr< CompressionPiece > next
CompressionPiece(int cmd, int len, std::string &args, int arg_len)
CompressionPiece()=default