This commit is contained in:
Wolfvak 2019-12-14 12:14:35 -03:00 committed by d0k3
parent 622d0b053c
commit 6fb60e007a

View File

@ -109,8 +109,9 @@ bool checksumChunk(BeatFile *bf, u32 chunkNum) {
u32 patchEnd = bf->size - 4;
if (chunkEnd > patchEnd) trimLen = chunkEnd - patchEnd;
} else if (bf->id == BEAT_TARGET) {
UINT bw; // necessary for FVX API
fvx_lseek(&bf->file, chunkNum * chunkSize);
if (fvx_write(&bf->file, bf->dataChunks[chunkNum].data, bf->dataChunks[chunkNum].size, NULL) != FR_OK) return false;
if (fvx_write(&bf->file, bf->dataChunks[chunkNum].data, bf->dataChunks[chunkNum].size, &bw) != FR_OK) return false;
}
bf->checksum = crc32_calculate(bf->checksum, bf->dataChunks[chunkNum].data, bf->dataChunks[chunkNum].size - trimLen);
bf->checksumNeeded++;
@ -141,6 +142,8 @@ bool freeOldestChunk() {
}
bool readChunk(BeatFile *bf, u32 chunkNum) {
UINT br; // necessary for FVX API
if (bf->id == BEAT_PATCH) { // the patch is read linearly, so previous chunks can be freed immediately
for (UINT n = 0; n < chunkNum; n++) {
if (bf->dataChunks[n].data) freeChunk(bf, n);
@ -153,7 +156,7 @@ bool readChunk(BeatFile *bf, u32 chunkNum) {
bf->dataChunks[chunkNum].data = malloc(bf->dataChunks[chunkNum].size);
}
fvx_lseek(&bf->file, chunkNum * chunkSize);
if (fvx_read(&bf->file, bf->dataChunks[chunkNum].data, bf->dataChunks[chunkNum].size, NULL) != FR_OK) return false;
if (fvx_read(&bf->file, bf->dataChunks[chunkNum].data, bf->dataChunks[chunkNum].size, &br) != FR_OK) return false;
if (bf->id == BEAT_SOURCE && chunkNum == bf->checksumNeeded && !checksumChunk(bf, chunkNum)) return false; // checksum source as soon as possible
if (bf->id == BEAT_TARGET && chunkNum == bf->checksumNeeded + 1 && !checksumChunk(bf, chunkNum - 1)) return false; // write and checksum target as soon as possible
bf->dataChunks[chunkNum].time = timer_ticks(timer);