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