summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2009-08-29 10:57:49 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2009-08-29 10:57:49 +0000
commitba48ba37037f0fde667c3f92f863b09c3446acce (patch)
treedac91b2424d83f89c33091dc730bfa2b3c955fc5
parentc069f20b54965ea0ad89c1010e549480bd018b76 (diff)
downloadpcsxr-ba48ba37037f0fde667c3f92f863b09c3446acce.tar.gz
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@28100 e17a0e51-4ae3-4d35-97c3-1a29b211df97
-rw-r--r--ChangeLog7
-rw-r--r--libpcsxcore/cdriso.c19
-rw-r--r--plugins/dfcdrom/cdr.c16
3 files changed, 40 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 795641fc..cfc1acad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+August 29, 2009 Wei Mingzhi <weimingzhi@gmail.com>
+
+ * plugins/dfcdrom/cdr.c: Don't restart the track if play was called with
+ the same time as the previous call.
+ * libpcsxcore/cdriso.c: Added playCDDA() and stopCDDA() functions. (still
+ not implemented)
+
August 27, 2009 Wei Mingzhi <weimingzhi@gmail.com>
* libpcsxcore/plugins.h: Added prototype and interface for
diff --git a/libpcsxcore/cdriso.c b/libpcsxcore/cdriso.c
index dbcf5147..94977022 100644
--- a/libpcsxcore/cdriso.c
+++ b/libpcsxcore/cdriso.c
@@ -111,6 +111,14 @@ static void tok2msf(char *time, char *msf) {
}
}
+// start the CDDA playback
+static void startCDDA(unsigned int offset) {
+}
+
+// stop the CDDA playback
+static void stopCDDA() {
+}
+
// this function tries to get the .toc file of the given .bin
// the necessary data is put into the ti (trackinformation)-array
static int parsetoc(const char *isofile) {
@@ -381,6 +389,7 @@ static long CALLBACK ISOshutdown(void) {
fclose(subHandle);
subHandle = NULL;
}
+ stopCDDA();
return 0;
}
@@ -426,6 +435,7 @@ static long CALLBACK ISOclose(void) {
fclose(subHandle);
subHandle = NULL;
}
+ stopCDDA();
return 0;
}
@@ -494,12 +504,17 @@ static unsigned char * CALLBACK ISOgetBuffer(void) {
// sector: byte 0 - minute; byte 1 - second; byte 2 - frame
// does NOT uses bcd format
static long CALLBACK ISOplay(unsigned char *time) {
- return 0; // TODO
+ if (SPU_playCDDAchannel != NULL) {
+ SysPrintf("Starting cdda-audio (%i:%i:%i)...\n", time[0], time[1], time[2]);
+ startCDDA(MSF2SECT(time[0], time[1], time[2]) * CD_FRAMESIZE_RAW);
+ }
+ return 0;
}
// stops cdda audio
static long CALLBACK ISOstop(void) {
- return 0; // TODO
+ stopCDDA();
+ return 0;
}
// gets subchannel data
diff --git a/plugins/dfcdrom/cdr.c b/plugins/dfcdrom/cdr.c
index 2b2316fc..58e56275 100644
--- a/plugins/dfcdrom/cdr.c
+++ b/plugins/dfcdrom/cdr.c
@@ -35,6 +35,8 @@ static inline int msf_to_lba(char m, char s, char f) {
return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
}
+int initial_time = 0;
+
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
@@ -127,6 +129,7 @@ long CDRopen(void) {
playing = 0;
stopth = 0;
+ initial_time = 0;
return 0;
}
@@ -365,6 +368,18 @@ long CDRplay(unsigned char *sector) {
if (cdHandle < 1)
return 0;
+ // If play was called with the same time as the previous call,
+ // don't restart it. of course, if play is called with a different
+ // track, stop playing the current stream.
+ if (playing)
+ {
+ if (msf_to_lba(sector[0], sector[1], sector[2]) == initial_time)
+ return 0;
+ else
+ CDRstop();
+ }
+ initial_time = msf_to_lba(sector[0], sector[1], sector[2]);
+
// 0 is the last track of every cdrom, so play up to there
if (CDRgetTD(0, ptmp) == -1)
return -1;
@@ -402,6 +417,7 @@ long CDRstop(void) {
}
playing = 0;
+ initial_time = 0;
return 0;
}