Use LZ4 file info
This commit is contained in:
parent
1329536586
commit
a0aeef9e3e
|
@ -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}}};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -8,44 +8,49 @@ namespace JabyEngine {
|
|||
|
||||
void CDFileProcessor :: start_cur_job() {
|
||||
using CD::internal::SectorBufferAllocator;
|
||||
const auto configurate_for = [this](const CDFile& file) {
|
||||
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));
|
||||
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));
|
||||
|
||||
this->lz4_decomp.disable();
|
||||
return overwrite_dst ? overwrite_dst : reinterpret_cast<uint32_t*>(dst_adr);
|
||||
};
|
||||
this->lz4_decomp.disable();
|
||||
return overwrite_dst ? overwrite_dst : reinterpret_cast<uint32_t*>(dst_adr);
|
||||
};
|
||||
|
||||
const auto enable_lz4 = [this](uint32_t* work_area, size_t size, uint32_t* override_dst = nullptr) -> uint32_t* {
|
||||
uint8_t* dst_adr = reinterpret_cast<uint8_t*>(this->circular_buffer.setup(reinterpret_cast<CD_IO::DataSector*>(work_area), size));
|
||||
|
||||
if(override_dst) {
|
||||
dst_adr = reinterpret_cast<uint8_t*>(override_dst);
|
||||
const auto enable_lz4 = [this](uint32_t* work_area, size_t size, uint32_t* override_dst = nullptr) -> uint32_t* {
|
||||
uint8_t* dst_adr = reinterpret_cast<uint8_t*>(this->circular_buffer.setup(reinterpret_cast<CD_IO::DataSector*>(work_area), size));
|
||||
|
||||
if(override_dst) {
|
||||
dst_adr = reinterpret_cast<uint8_t*>(override_dst);
|
||||
}
|
||||
|
||||
this->lz4_decomp.setup(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);
|
||||
}
|
||||
|
||||
this->lz4_decomp.setup(dst_adr);
|
||||
return reinterpret_cast<uint32_t*>(dst_adr);
|
||||
};
|
||||
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue