summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/open.c31
1 files changed, 27 insertions, 4 deletions
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);