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_DATA_SIZE 2352
|
||||||
#define SECTOR_SUBCODE_SIZE 96
|
#define SECTOR_SUBCODE_SIZE 96
|
||||||
|
|
||||||
ECL_INVISIBLE toc_t hotswap_toc;
|
ECL_INVISIBLE toc_t pending_toc;
|
||||||
int8 cd_index = 0;
|
int8 cd_index = 0;
|
||||||
|
|
||||||
struct cdStream_t
|
struct cdStream_t
|
||||||
{
|
{
|
||||||
int sector_size;
|
unsigned sector_size;
|
||||||
int num_sectors;
|
unsigned num_sectors;
|
||||||
int64_t current_sector;
|
unsigned current_sector;
|
||||||
int64_t current_offset;
|
int64_t current_offset;
|
||||||
int64_t end_offset;
|
int64_t end_offset;
|
||||||
};
|
};
|
||||||
|
@ -31,9 +31,10 @@ static void cdStreamInit(cdStream* stream, toc_t* toc, int is_subcode)
|
||||||
|
|
||||||
if (!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].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 (!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;
|
cd_index = 0;
|
||||||
cdStreamInit(&cd_streams[0], &cdd.toc, 0);
|
cdStreamInit(&cd_streams[0], &pending_toc, 0);
|
||||||
return &cd_streams[0];
|
return &cd_streams[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!strcmp(fname, "HOTSWAP_CD"))
|
else if (!strcmp(fname, "HOTSWAP_CD"))
|
||||||
{
|
{
|
||||||
memcpy(&cdd.toc, &hotswap_toc, sizeof(toc_t));
|
cdStreamInit(&cd_streams[cd_index], &pending_toc, 0);
|
||||||
cdStreamInit(&cd_streams[cd_index], &cdd.toc, 0);
|
|
||||||
return &cd_streams[cd_index];
|
return &cd_streams[cd_index];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!strcmp(fext, ".iso"))
|
else if (!strcmp(fext, ".iso"))
|
||||||
{
|
{
|
||||||
// an .iso will attempt to be loaded for the "secondary" CD
|
// 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;
|
cd_index = 0;
|
||||||
cdStreamInit(&cd_streams[0], &cdd.toc, 0);
|
cdStreamInit(&cd_streams[0], &pending_toc, 0);
|
||||||
return &cd_streams[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"))
|
else if (!strcmp(fext, ".sub"))
|
||||||
{
|
{
|
||||||
// separate stream for subcode
|
// separate stream for subcode
|
||||||
|
|
|
@ -188,7 +188,7 @@ GPGX_EX void gpgx_advance(void)
|
||||||
nsamples = audio_update(soundbuffer);
|
nsamples = audio_update(soundbuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern toc_t hotswap_toc;
|
extern toc_t pending_toc;
|
||||||
extern int8 cd_index;
|
extern int8 cd_index;
|
||||||
|
|
||||||
GPGX_EX void gpgx_swap_disc(const toc_t* toc, int8 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];
|
char header[0x210];
|
||||||
cd_index = index;
|
cd_index = index;
|
||||||
memcpy(&hotswap_toc, toc, sizeof(toc_t));
|
memcpy(&pending_toc, toc, sizeof(toc_t));
|
||||||
cdd_load("HOTSWAP_CD", header);
|
cdd_load("HOTSWAP_CD", header);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue