Use LZ4 file info

This commit is contained in:
Jaby 2023-04-13 22:10:34 +02:00
parent 1329536586
commit a0aeef9e3e
2 changed files with 32 additions and 28 deletions

View File

@ -7,7 +7,6 @@ namespace JabyEngine {
enum struct CDFileType : uint8_t {
SimpleTIM = 0,
CopyTo,
Overlay,
};
struct __no_align CDFile {
@ -35,7 +34,7 @@ namespace JabyEngine {
}
static constexpr CDFile overlay(uint8_t rel_lba_idx, uint32_t* overlay_dst) {
return CDFile{.rel_lba_idx = rel_lba_idx, .type = CDFileType::Overlay, .payload = {.overlay = Overlay{overlay_dst}}};
return CDFile{.rel_lba_idx = rel_lba_idx, .type = CDFileType::CopyTo, .payload = {.overlay = Overlay{overlay_dst}}};
}
};
}

View File

@ -8,7 +8,8 @@ namespace JabyEngine {
void CDFileProcessor :: start_cur_job() {
using CD::internal::SectorBufferAllocator;
const auto configurate_for = [this](const CDFile& file) {
const auto configurate_for = [this](const CDFile& file, bool is_lz4) -> FileProcessor::State {
const uint32_t* data_adr = [this](const CDFile& file, bool is_lz4) -> const uint32_t* {
const auto disable_lz4 = [this](uint32_t* work_area, size_t size, uint32_t* overwrite_dst = nullptr) -> uint32_t* {
uint8_t*const dst_adr = reinterpret_cast<uint8_t*>(this->circular_buffer.setup(reinterpret_cast<CD_IO::DataSector*>(work_area), size));
@ -27,25 +28,29 @@ namespace JabyEngine {
return reinterpret_cast<uint32_t*>(dst_adr);
};
if(file.type == CDFileType::CopyTo) {
return is_lz4 ? enable_lz4(this->tmp_area, NormalCircularBufferSize, file.payload.overlay.dst) : disable_lz4(file.payload.copy_to.dst, DisabledCircularBufferSize);
}
else {
return is_lz4 ? enable_lz4(this->tmp_area, NormalCircularBufferSize) : disable_lz4(this->tmp_area, DisabledCircularBufferSize);
}
}(file, is_lz4);
switch(file.type) {
case CDFileType::SimpleTIM:
this->file_state = FileProcessor::create(enable_lz4(this->tmp_area, NormalCircularBufferSize), file.payload.simple_tim);
break;
return FileProcessor::create(data_adr, file.payload.simple_tim);
case CDFileType::CopyTo:
this->file_state = FileProcessor::create(disable_lz4(file.payload.copy_to.dst, 512), Nothing());
break;
case CDFileType::Overlay:
this->file_state = FileProcessor::create(enable_lz4(this->tmp_area, NormalCircularBufferSize, file.payload.overlay.dst), Nothing());
break;
default:
return FileProcessor::create(data_adr, Nothing());
}
};
const auto& cur_job = *this->jobs.files;
const auto& cur_lba = this->lba[cur_job.rel_lba_idx];
configurate_for(cur_job);
this->file_state = configurate_for(cur_job, cur_lba.is_lz4());
CD::internal::read_file(cur_lba, SectorBufferAllocator::create(this,
[](void* ctx) -> CD_IO::DataSector* {
CDFileProcessor &self = *reinterpret_cast<CDFileProcessor*>(ctx);