try fixing gpgx cd audio
This commit is contained in:
parent
fb3578cfb4
commit
095d160034
Binary file not shown.
|
@ -6,14 +6,14 @@
|
|||
#define SECTOR_DATA_SIZE 2352
|
||||
#define SECTOR_SUBCODE_SIZE 96
|
||||
|
||||
ECL_INVISIBLE toc_t hotswap_toc;
|
||||
ECL_INVISIBLE toc_t pending_toc;
|
||||
int8 cd_index = 0;
|
||||
|
||||
struct cdStream_t
|
||||
{
|
||||
int sector_size;
|
||||
int num_sectors;
|
||||
int64_t current_sector;
|
||||
unsigned sector_size;
|
||||
unsigned num_sectors;
|
||||
unsigned current_sector;
|
||||
int64_t current_offset;
|
||||
int64_t end_offset;
|
||||
};
|
||||
|
@ -31,9 +31,10 @@ static void cdStreamInit(cdStream* stream, toc_t* toc, int is_subcode)
|
|||
|
||||
if (!is_subcode)
|
||||
{
|
||||
for (int i = 0; i < toc->last; i++)
|
||||
for (unsigned i = 0; i < toc->last; i++)
|
||||
{
|
||||
toc->tracks[i].fd = stream;
|
||||
toc->tracks[i].offset = toc->tracks[i].start * SECTOR_DATA_SIZE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -51,30 +52,37 @@ cdStream* cdStreamOpen(const char* fname)
|
|||
{
|
||||
if (!strcmp(fname, "PRIMARY_CD"))
|
||||
{
|
||||
if (load_archive("PRIMARY_CD", (unsigned char*)&cdd.toc, sizeof(toc_t), NULL))
|
||||
if (load_archive("PRIMARY_CD", (unsigned char*)&pending_toc, sizeof(toc_t), NULL))
|
||||
{
|
||||
cd_index = 0;
|
||||
cdStreamInit(&cd_streams[0], &cdd.toc, 0);
|
||||
cdStreamInit(&cd_streams[0], &pending_toc, 0);
|
||||
return &cd_streams[0];
|
||||
}
|
||||
}
|
||||
else if (!strcmp(fname, "HOTSWAP_CD"))
|
||||
{
|
||||
memcpy(&cdd.toc, &hotswap_toc, sizeof(toc_t));
|
||||
cdStreamInit(&cd_streams[cd_index], &cdd.toc, 0);
|
||||
cdStreamInit(&cd_streams[cd_index], &pending_toc, 0);
|
||||
return &cd_streams[cd_index];
|
||||
}
|
||||
}
|
||||
else if (!strcmp(fext, ".iso"))
|
||||
{
|
||||
// an .iso will attempt to be loaded for the "secondary" CD
|
||||
if (load_archive("SECONDARY_CD", (unsigned char*)&cdd.toc, sizeof(toc_t), NULL))
|
||||
if (load_archive("SECONDARY_CD", (unsigned char*)&pending_toc, sizeof(toc_t), NULL))
|
||||
{
|
||||
cd_index = 0;
|
||||
cdStreamInit(&cd_streams[0], &cdd.toc, 0);
|
||||
cdStreamInit(&cd_streams[0], &pending_toc, 0);
|
||||
return &cd_streams[0];
|
||||
}
|
||||
}
|
||||
else if (!strcmp(fext, ".cue"))
|
||||
{
|
||||
// .cue file will attempt to be loaded for parsing
|
||||
// we use this to know when to load in the TOC
|
||||
// (can't do it when PRIMARY_CD/HOTSWAP_CD/SECONDARY_CD is opened, due to GPGX assuming those are a single track)
|
||||
memcpy(&cdd.toc, &pending_toc, sizeof(toc_t));
|
||||
return NULL;
|
||||
}
|
||||
else if (!strcmp(fext, ".sub"))
|
||||
{
|
||||
// separate stream for subcode
|
||||
|
|
|
@ -188,7 +188,7 @@ GPGX_EX void gpgx_advance(void)
|
|||
nsamples = audio_update(soundbuffer);
|
||||
}
|
||||
|
||||
extern toc_t hotswap_toc;
|
||||
extern toc_t pending_toc;
|
||||
extern int8 cd_index;
|
||||
|
||||
GPGX_EX void gpgx_swap_disc(const toc_t* toc, int8 index)
|
||||
|
@ -199,7 +199,7 @@ GPGX_EX void gpgx_swap_disc(const toc_t* toc, int8 index)
|
|||
{
|
||||
char header[0x210];
|
||||
cd_index = index;
|
||||
memcpy(&hotswap_toc, toc, sizeof(toc_t));
|
||||
memcpy(&pending_toc, toc, sizeof(toc_t));
|
||||
cdd_load("HOTSWAP_CD", header);
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue