From 8bd31696085e145c45c84f34ec0e978c3d7c1bc5 Mon Sep 17 00:00:00 2001 From: "SND\\weimingzhi_cp" Date: Sat, 12 Sep 2009 15:54:29 +0000 Subject: git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@29520 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- libpcsxcore/cdriso.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'libpcsxcore') diff --git a/libpcsxcore/cdriso.c b/libpcsxcore/cdriso.c index ab20fce9..486fc2df 100644 --- a/libpcsxcore/cdriso.c +++ b/libpcsxcore/cdriso.c @@ -35,6 +35,7 @@ #define CD_FRAMESIZE_RAW 2352 #define DATA_SIZE (CD_FRAMESIZE_RAW - 12) +#define CDDA_DATA_SIZE (CD_FRAMESIZE_RAW - 12 - 4) #define SUB_FRAMESIZE 96 @@ -45,9 +46,9 @@ FILE *subHandle = NULL; static unsigned char cdbuffer[DATA_SIZE]; static unsigned char subbuffer[SUB_FRAMESIZE]; -static unsigned char sndbuffer[CD_FRAMESIZE_RAW * 10]; +static unsigned char sndbuffer[CDDA_DATA_SIZE * 10]; -#define CDDA_FRAMETIME (1000 * (sizeof(sndbuffer) / CD_FRAMESIZE_RAW) / 75) +#define CDDA_FRAMETIME (1000 * (sizeof(sndbuffer) / CDDA_DATA_SIZE) / 75) #ifdef _WIN32 static HANDLE threadid; @@ -142,7 +143,7 @@ static void playthread(void *param) static void *playthread(void *param) #endif { - long d, t; + long d, t, i, s; t = GetTickCount(); @@ -162,7 +163,22 @@ static void *playthread(void *param) t = GetTickCount() + CDDA_FRAMETIME; - if ((d = fread(sndbuffer, 1, sizeof(sndbuffer), cddaHandle)) == 0) { + s = 0; + + for (i = 0; i < sizeof(sndbuffer) / CDDA_DATA_SIZE; i++) { + // disregard the synchronization information and header data + fseek(cddaHandle, CD_FRAMESIZE_RAW - CDDA_DATA_SIZE, SEEK_CUR); + + // read one sector + d = fread(sndbuffer + CDDA_DATA_SIZE * i, 1, CDDA_DATA_SIZE, cddaHandle); + if (d < CDDA_DATA_SIZE) { + break; + } + + s += d; + } + + if (s == 0) { playing = 0; fclose(cddaHandle); cddaHandle = NULL; @@ -171,7 +187,7 @@ static void *playthread(void *param) } if (!cdr.Muted && playing) { - SPU_playCDDAchannel((short *)sndbuffer, d); + SPU_playCDDAchannel((short *)sndbuffer, s); } } -- cgit v1.2.3