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 { enum struct CDFileType : uint8_t {
SimpleTIM = 0, SimpleTIM = 0,
CopyTo, CopyTo,
Overlay,
}; };
struct __no_align CDFile { struct __no_align CDFile {
@ -35,7 +34,7 @@ namespace JabyEngine {
} }
static constexpr CDFile overlay(uint8_t rel_lba_idx, uint32_t* overlay_dst) { 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() { void CDFileProcessor :: start_cur_job() {
using CD::internal::SectorBufferAllocator; 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* { 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)); 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); 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) { switch(file.type) {
case CDFileType::SimpleTIM: case CDFileType::SimpleTIM:
this->file_state = FileProcessor::create(enable_lz4(this->tmp_area, NormalCircularBufferSize), file.payload.simple_tim); return FileProcessor::create(data_adr, file.payload.simple_tim);
break;
case CDFileType::CopyTo: case CDFileType::CopyTo:
this->file_state = FileProcessor::create(disable_lz4(file.payload.copy_to.dst, 512), Nothing()); default:
break; return FileProcessor::create(data_adr, Nothing());
case CDFileType::Overlay:
this->file_state = FileProcessor::create(enable_lz4(this->tmp_area, NormalCircularBufferSize, file.payload.overlay.dst), Nothing());
break;
} }
}; };
const auto& cur_job = *this->jobs.files; const auto& cur_job = *this->jobs.files;
const auto& cur_lba = this->lba[cur_job.rel_lba_idx]; 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, CD::internal::read_file(cur_lba, SectorBufferAllocator::create(this,
[](void* ctx) -> CD_IO::DataSector* { [](void* ctx) -> CD_IO::DataSector* {
CDFileProcessor &self = *reinterpret_cast<CDFileProcessor*>(ctx); CDFileProcessor &self = *reinterpret_cast<CDFileProcessor*>(ctx);