diff options
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | libmpdemux/open.c | 31 |
2 files changed, 29 insertions, 6 deletions
@@ -5342,8 +5342,8 @@ $_def_vcd #elif defined(WIN32) #define DEFAULT_CDROM_DEVICE "D:" #define DEFAULT_DVD_DEVICE "D:" -#elif defined(MACOSX) -#define DEFAULT_CDROM_DEVICE "/dev/rdisk1" +#elif defined(SYS_DARWIN) +#define DEFAULT_CDROM_DEVICE "/dev/rdiskN" #define DEFAULT_DVD_DEVICE DEFAULT_CDROM_DEVICE #else #define DEFAULT_CDROM_DEVICE "/dev/cdrom" diff --git a/libmpdemux/open.c b/libmpdemux/open.c index 6d8b6efa3b..add424d8cf 100644 --- a/libmpdemux/open.c +++ b/libmpdemux/open.c @@ -221,10 +221,33 @@ if(dvd_title){ * Open the disc. */ if(!dvd_device) dvd_device=strdup(DEFAULT_DVD_DEVICE); - dvd = DVDOpen(dvd_device); - if( !dvd ) { - mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,dvd_device); - return NULL; +#ifdef SYS_DARWIN + /* Dynamic DVD drive selection on Darwin */ + if (!strcmp(dvd_device, "/dev/rdiskN")) { + int i; + char *temp_device = malloc((strlen(dvd_device)+1)*sizeof(char)); + + for (i = 1; i < 10; i++) { + sprintf(temp_device, "/dev/rdisk%d", i); + dvd = DVDOpen(temp_device); + if (!dvd) { + mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,temp_device); + } else { + free(temp_device); + break; + } + } + + if (!dvd) + return NULL; + } else +#endif /* SYS_DARWIN */ + { + dvd = DVDOpen(dvd_device); + if( !dvd ) { + mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,dvd_device); + return NULL; + } } mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_DVDwait); |