Load TIM files (broken currently)
This commit is contained in:
parent
658d092315
commit
8b94760130
|
@ -30,7 +30,7 @@ namespace JabyEngine {
|
|||
LZ4Decompressor lz4_decomp;
|
||||
JobArray jobs;
|
||||
const AutoLBAEntry* lba = nullptr;
|
||||
uint32_t*const tmp_area = nullptr; //< The start of the area to copy data to for the file processor
|
||||
uint32_t* tmp_area = nullptr;
|
||||
|
||||
void start_cur_job();
|
||||
bool process_data();
|
||||
|
@ -38,8 +38,15 @@ namespace JabyEngine {
|
|||
public:
|
||||
CDFileProcessor() = default;
|
||||
|
||||
void setup(const volatile AutoLBAEntry* lba, JobArray jobs, uint32_t* tmp_area = &__heap_base);
|
||||
void setup(const volatile AutoLBAEntry* lba, JobArray jobs, uint32_t* tmp_area = &__heap_base);
|
||||
|
||||
template<size_t N>
|
||||
void setup(const volatile AutoLBAEntry* lba, const CDFile (&file_array)[N], uint32_t* tmp_area = &__heap_base) {
|
||||
CDFileProcessor::setup(lba, JobArray{file_array, N}, tmp_area);
|
||||
}
|
||||
|
||||
Progress process();
|
||||
|
||||
bool next() {
|
||||
if(this->jobs.next()) {
|
||||
CDFileProcessor::start_cur_job();
|
||||
|
|
|
@ -8,34 +8,41 @@ namespace JabyEngine {
|
|||
void CDFileProcessor :: start_cur_job() {
|
||||
using CD::internal::FileInfo;
|
||||
using CD::internal::SectorBufferAllocator;
|
||||
const auto configurate_for = [this](const CDFile& file) -> SectorBufferAllocator {
|
||||
static const auto circular_buffer_callback = [](void* ctx) -> CD_IO::DataSector* {
|
||||
CDFileProcessor &self = *reinterpret_cast<CDFileProcessor*>(ctx);
|
||||
return self.circular_buffer.allocate();
|
||||
const auto configurate_for = [this](const CDFile& file) {
|
||||
const auto disable_lz4 = [this](uint32_t* work_area, size_t size) -> uint32_t* {
|
||||
uint8_t* dst_adr = reinterpret_cast<uint8_t*>(this->circular_buffer.setup(reinterpret_cast<CD_IO::DataSector*>(work_area), size));
|
||||
|
||||
this->lz4_decomp.disable();
|
||||
return reinterpret_cast<uint32_t*>(dst_adr);
|
||||
};
|
||||
|
||||
const auto enable_lz4 = [this](uint32_t* work_area, size_t size) -> uint32_t* {
|
||||
uint8_t* dst_adr = reinterpret_cast<uint8_t*>(this->circular_buffer.setup(reinterpret_cast<CD_IO::DataSector*>(work_area), size));
|
||||
|
||||
this->lz4_decomp.setup(dst_adr);
|
||||
return reinterpret_cast<uint32_t*>(dst_adr);
|
||||
};
|
||||
|
||||
switch(file.type) {
|
||||
case CDFileType::SimpleTIM:
|
||||
printf("CDFileProcessor: SimpleTIM not supported yet\n");
|
||||
return SectorBufferAllocator::invalid();
|
||||
this->file_state = FileProcessor::create(enable_lz4(this->tmp_area, NormalCircularBufferSize), file.payload.simple_tim);
|
||||
break;
|
||||
|
||||
case CDFileType::CopyTo:
|
||||
this->circular_buffer.setup(reinterpret_cast<CD_IO::DataSector*>(file.payload.copy_to.dst), 512);
|
||||
this->lz4_decomp.disable();
|
||||
|
||||
this->file_state = FileProcessor::create(this->tmp_area, Nothing());
|
||||
return SectorBufferAllocator::create(this, circular_buffer_callback);
|
||||
|
||||
default:
|
||||
return SectorBufferAllocator::invalid();
|
||||
this->file_state = FileProcessor::create(disable_lz4(file.payload.copy_to.dst, 512), Nothing());
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
const auto& cur_job = *this->jobs.files;
|
||||
const auto& cur_lba = this->lba[cur_job.rel_lba_idx];
|
||||
const auto cfg = configurate_for(cur_job);
|
||||
|
||||
CD::internal::read_file(FileInfo::from(cur_lba), cfg);
|
||||
|
||||
configurate_for(cur_job);
|
||||
CD::internal::read_file(FileInfo::from(cur_lba), SectorBufferAllocator::create(this,
|
||||
[](void* ctx) -> CD_IO::DataSector* {
|
||||
CDFileProcessor &self = *reinterpret_cast<CDFileProcessor*>(ctx);
|
||||
return self.circular_buffer.allocate();
|
||||
}));
|
||||
|
||||
printf(">>> CD needs to load LBA: %i -> %i\n", cur_lba.lba, cur_lba.size_words);
|
||||
}
|
||||
|
@ -66,8 +73,7 @@ namespace JabyEngine {
|
|||
this->lba = const_cast<const AutoLBAEntry*>(lba);
|
||||
this->jobs = jobs;
|
||||
|
||||
// Setsup the circular buffer and determines where to place the temp area in
|
||||
const_cast<uint32_t*&>(this->tmp_area) = reinterpret_cast<uint32_t*>(this->circular_buffer.setup(reinterpret_cast<CD_IO::DataSector*>(tmp_area), NormalCircularBufferSize));
|
||||
this->tmp_area = tmp_area;
|
||||
CDFileProcessor::start_cur_job();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue