Cache user area tracks.

This commit is contained in:
2019-03-23 23:18:54 +00:00
parent e8fd8f57dc
commit 6ed23b6616
2 changed files with 32 additions and 2 deletions

View File

@@ -68,6 +68,8 @@ typedef struct dicformatContext
struct DumpHardwareEntriesWithData *dumpHardwareEntriesWithData; struct DumpHardwareEntriesWithData *dumpHardwareEntriesWithData;
struct ImageInfo imageInfo; struct ImageInfo imageInfo;
CdEccContext *eccCdContext; CdEccContext *eccCdContext;
uint8_t numberOfDataTracks;
TrackEntry *dataTracks;
} dicformatContext; } dicformatContext;
typedef struct dataLinkedList typedef struct dataLinkedList

View File

@@ -50,6 +50,7 @@ void *open(const char *filepath)
uint8_t *data; uint8_t *data;
uint32_t *cdDdt; uint32_t *cdDdt;
uint64_t crc64; uint64_t crc64;
uint8_t temp8u;
ctx = (dicformatContext *)malloc(sizeof(dicformatContext)); ctx = (dicformatContext *)malloc(sizeof(dicformatContext));
memset(ctx, 0, sizeof(dicformatContext)); memset(ctx, 0, sizeof(dicformatContext));
@@ -784,11 +785,38 @@ void *open(const char *filepath)
ctx->tracksHeader.entries, ctx->tracksHeader.entries,
idxEntries[i].offset); idxEntries[i].offset);
// TODO: Cache flags and ISRCs
ctx->imageInfo.HasPartitions = true; ctx->imageInfo.HasPartitions = true;
ctx->imageInfo.HasSessions = true; ctx->imageInfo.HasSessions = true;
ctx->numberOfDataTracks = 0;
// TODO: Handle track 0
for(i = 0, temp8u = 0; i < ctx->tracksHeader.entries; i++)
{
if(ctx->trackEntries[i].sequence > temp8u && ctx->trackEntries[i].sequence <= 99)
temp8u = ctx->trackEntries[i].sequence;
}
if(temp8u > 0)
{
ctx->dataTracks = (TrackEntry *)malloc(sizeof(TrackEntry) * temp8u);
if(ctx->dataTracks == NULL)
break;
ctx->numberOfDataTracks = temp8u;
for(i = 0, temp8u = 0; i < ctx->tracksHeader.entries; i++)
{
if(ctx->trackEntries[i].sequence > 99)
continue;
memcpy(&ctx->dataTracks[ctx->trackEntries[i].sequence],
&ctx->trackEntries[i],
sizeof(TrackEntry));
}
}
break; break;
// CICM XML metadata block // CICM XML metadata block
case CicmBlock:readBytes = fread(&ctx->cicmBlockHeader, sizeof(CicmMetadataBlock), 1, ctx->imageStream); case CicmBlock:readBytes = fread(&ctx->cicmBlockHeader, sizeof(CicmMetadataBlock), 1, ctx->imageStream);