summaryrefslogtreecommitdiff
path: root/plugins/dfcdrom
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-07-25 02:48:41 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-07-25 02:48:41 +0000
commit8da3cda2b3d231298d3dd602fe879521106e91c2 (patch)
treef81ab640723833868dac053d2d077a1a01406d58 /plugins/dfcdrom
parent363d5e10353d32be5ef56ce988358bcf3811245b (diff)
Ported DFCdrom to osx, removed old CDDeviceInterface plugin
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@55123 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins/dfcdrom')
-rw-r--r--plugins/dfcdrom/cdr.c65
-rw-r--r--plugins/dfcdrom/cdr.h2
2 files changed, 54 insertions, 13 deletions
diff --git a/plugins/dfcdrom/cdr.c b/plugins/dfcdrom/cdr.c
index 742f5630..f011684d 100644
--- a/plugins/dfcdrom/cdr.c
+++ b/plugins/dfcdrom/cdr.c
@@ -59,7 +59,7 @@ unsigned char* (*fGetBuffer)();
void *CdrThread(void *arg);
long CDRinit(void) {
- thread = -1;
+ thread = (pthread_t)-1;
return 0;
}
@@ -70,8 +70,10 @@ long CDRshutdown(void) {
long CDRopen(void) {
LoadConf();
+#ifndef _MACOSX
if (IsCdHandleOpen())
- return 0; /* it's already open */
+ return 0; // it's already open
+#endif
if (OpenCdHandle(CdromDev) == -1) { // if we can't open the cdrom we'll works as a null plugin
fprintf(stderr, "CDR: Could not open %s\n", CdromDev);
@@ -101,7 +103,7 @@ long CDRopen(void) {
pthread_create(&thread, &attr, CdrThread, NULL);
cacheaddr = -1;
- } else thread = -1;
+ } else thread = (pthread_t)-1;
playing = 0;
stopth = 0;
@@ -117,7 +119,7 @@ long CDRclose(void) {
CloseCdHandle();
- if (thread != -1) {
+ if (thread != (pthread_t)-1) {
if (locked == 0) {
stopth = 1;
while (locked == 0) usleep(5000);
@@ -145,13 +147,19 @@ long CDRclose(void) {
// byte 0 - start track
// byte 1 - end track
long CDRgetTN(unsigned char *buffer) {
+ long ret;
+
if (!IsCdHandleOpen()) {
buffer[0] = 1;
buffer[1] = 1;
return 0;
}
- return GetTN(buffer);
+ if (ReadMode == THREADED) pthread_mutex_lock(&mut);
+ ret = GetTN(buffer);
+ if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
+
+ return ret;
}
// return Track Time
@@ -160,12 +168,18 @@ long CDRgetTN(unsigned char *buffer) {
// byte 1 - second
// byte 2 - minute
long CDRgetTD(unsigned char track, unsigned char *buffer) {
+ long ret;
+
if (!IsCdHandleOpen()) {
memset(buffer + 1, 0, 3);
return 0;
}
- return GetTD(track, buffer);
+ if (ReadMode == THREADED) pthread_mutex_lock(&mut);
+ ret = GetTD(track, buffer);
+ if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
+
+ return ret;
}
// normal reading
@@ -315,6 +329,8 @@ unsigned char *CDRgetBuffer(void) {
// byte 2 - frame
// does NOT uses bcd format
long CDRplay(unsigned char *sector) {
+ long ret;
+
if (!IsCdHandleOpen())
return 0;
@@ -330,7 +346,11 @@ long CDRplay(unsigned char *sector) {
initial_time = msf_to_lba(sector[0], sector[1], sector[2]);
- if (PlayCDDA(sector) == 0) {
+ if (ReadMode == THREADED) pthread_mutex_lock(&mut);
+ ret = PlayCDDA(sector);
+ if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
+
+ if (ret == 0) {
playing = 1;
return 0;
}
@@ -340,10 +360,16 @@ long CDRplay(unsigned char *sector) {
// stops cdda audio
long CDRstop(void) {
+ long ret;
+
if (!IsCdHandleOpen())
return 0;
- if (StopCDDA() == 0) {
+ if (ReadMode == THREADED) pthread_mutex_lock(&mut);
+ ret = StopCDDA();
+ if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
+
+ if (ret == 0) {
playing = 0;
initial_time = 0;
@@ -373,10 +399,16 @@ long CDRstop(void) {
// byte 2 - frame
long CDRgetStatus(struct CdrStat *stat) {
+ long ret;
+
if (!IsCdHandleOpen())
return -1;
- return GetStatus(playing, stat);
+ if (ReadMode == THREADED) pthread_mutex_lock(&mut);
+ ret = GetStatus(playing, stat);
+ if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
+
+ return ret;
}
unsigned char *CDRgetBufferSub(void) {
@@ -386,9 +418,7 @@ unsigned char *CDRgetBufferSub(void) {
if (subqread) return p;
if (ReadMode == THREADED) pthread_mutex_lock(&mut);
-
p = ReadSub(lastTime);
-
if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
if (p != NULL) subqread = 1;
@@ -412,10 +442,19 @@ long CDRreadCDDA(unsigned char m, unsigned char s, unsigned char f, unsigned cha
// get Track End Time
long CDRgetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
+ long ret;
+
if (!IsCdHandleOpen()) return -1;
- return GetTE(track, m, s, f);
+
+ if (ReadMode == THREADED) pthread_mutex_lock(&mut);
+ ret = GetTE(track, m, s, f);
+ if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
+
+ return ret;
}
+#ifndef _MACOSX
+
void ExecCfg(char *arg) {
char cfg[256];
struct stat buf;
@@ -452,6 +491,8 @@ void CDRabout() {
ExecCfg("about");
}
+#endif
+
long CDRtest(void) {
#ifndef USE_NULL
if (OpenCdHandle(CdromDev) == -1)
diff --git a/plugins/dfcdrom/cdr.h b/plugins/dfcdrom/cdr.h
index fee46dc5..0ae2c680 100644
--- a/plugins/dfcdrom/cdr.h
+++ b/plugins/dfcdrom/cdr.h
@@ -83,7 +83,7 @@ struct cdrom_msf {
#define DEV_DEF ""
#endif
-#ifndef USE_LIBCDIO
+#if !defined (USE_LIBCDIO) && !defined (_MACOSX)
#define USE_NULL 1
#endif