# HG changeset patch # User gpoirier # Date 1230673182 0 # Node ID 781ef511a767965d97a2207ef2dee0b909f55753 # Parent 39fc19c00428632a3e8285811de09ebdb355bcb1 Add an option to vo_macosx to set a custom buffer_name. This allows to have multiple instances of MPlayerOSX running without stepping on each other's toes. Patch by Adrian Stutz % adrian A sttz P ch % Original thread: date: Tue, Dec 9, 2008 at 2:46 PM subject: [MPlayer-dev-eng] [PATCH] vo_macosx: option to set shared buffer name to allow multiple instances diff -r 39fc19c00428 -r 781ef511a767 DOCS/man/en/mplayer.1 --- a/DOCS/man/en/mplayer.1 Tue Dec 30 17:00:11 2008 +0000 +++ b/DOCS/man/en/mplayer.1 Tue Dec 30 21:39:42 2008 +0000 @@ -3550,6 +3550,10 @@ .IPs shared_buffer Write output to a shared memory buffer instead of displaying it and try to open an existing NSConnection for communication with a GUI. +.IPs buffer_name= +Name of the shared buffer created with shm_open as well as the name of +the NSConnection MPlayer will try to open (default: "mplayerosx"). +Setting buffer_name implicitly enables shared_buffer. .RE .PD 1 . diff -r 39fc19c00428 -r 781ef511a767 libvo/vo_macosx.m --- a/libvo/vo_macosx.m Tue Dec 30 17:00:11 2008 +0000 +++ b/libvo/vo_macosx.m Tue Dec 30 21:39:42 2008 +0000 @@ -45,6 +45,8 @@ //shared memory int shm_fd; BOOL shared_buffer = false; +#define DEFAULT_BUFFER_NAME "mplayerosx" +static char *buffer_name; //Screen int screen_id; @@ -164,10 +166,13 @@ } else { + mp_msg(MSGT_VO, MSGL_INFO, "VO: [macosx] writing output to a shared buffer " + "named \"%s\".\n",buffer_name); + movie_aspect = (float)d_width/(float)d_height; // create shared memory - shm_fd = shm_open("mplayerosx", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); + shm_fd = shm_open(buffer_name, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); if (shm_fd == -1) { mp_msg(MSGT_VO, MSGL_FATAL, @@ -180,7 +185,7 @@ { mp_msg(MSGT_VO, MSGL_FATAL, "vo_macosx: failed to size shared memory, possibly already in use. Error: %s\n", strerror(errno)); - shm_unlink("mplayerosx"); + shm_unlink(buffer_name); return 1; } @@ -191,12 +196,12 @@ { mp_msg(MSGT_VO, MSGL_FATAL, "vo_macosx: failed to map shared memory. Error: %s\n", strerror(errno)); - shm_unlink("mplayerosx"); + shm_unlink(buffer_name); return 1; } //connnect to mplayerosx - mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:@"mplayerosx" host:nil]; + mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:[NSString stringWithCString:buffer_name] host:nil]; if ([mplayerosxProxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) { [mplayerosxProxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)]; mplayerosxProto = (id )mplayerosxProxy; @@ -288,7 +293,7 @@ if (munmap(image_data, image_width*image_height*image_bytes) == -1) mp_msg(MSGT_VO, MSGL_FATAL, "uninit: munmap failed. Error: %s\n", strerror(errno)); - if (shm_unlink("mplayerosx") == -1) + if (shm_unlink(buffer_name) == -1) mp_msg(MSGT_VO, MSGL_FATAL, "uninit: shm_unlink failed. Error: %s\n", strerror(errno)); } @@ -314,11 +319,15 @@ image_datas[1] = NULL; image_data = NULL; } + + if (buffer_name) free(buffer_name); + buffer_name = NULL; } static opt_t subopts[] = { {"device_id", OPT_ARG_INT, &screen_id, (opt_test_f)int_non_neg}, {"shared_buffer", OPT_ARG_BOOL, &shared_buffer, NULL}, +{"buffer_name", OPT_ARG_MSTRZ,&buffer_name, NULL}, {NULL} }; @@ -328,16 +337,21 @@ // set defaults screen_id = 0; shared_buffer = false; + buffer_name = DEFAULT_BUFFER_NAME; if (subopt_parse(arg, subopts) != 0) { mp_msg(MSGT_VO, MSGL_FATAL, "\n-vo macosx command line help:\n" - "Example: mplayer -vo macosx:device_id=1:shared_buffer\n" + "Example: mplayer -vo macosx:device_id=1:shared_buffer:buffer_name=mybuff\n" "\nOptions:\n" " device_id=<0-...>\n" " Set screen device id for fullscreen.\n" " shared_buffer\n" " Write output to a shared memory buffer instead of displaying it.\n" + " buffer_name=\n" + " Name of the shared buffer created with shm_open() as well as\n" + " the name of the NSConnection MPlayer will try to open.\n" + " Setting buffer_name implicitly enables shared_buffer.\n" "\n" ); return -1; } @@ -347,6 +361,9 @@ NSApp = [NSApplication sharedApplication]; isLeopardOrLater = floor(NSAppKitVersionNumber) > 824; + if (strcmp(buffer_name, DEFAULT_BUFFER_NAME)) + shared_buffer = true; + if(!shared_buffer) { #if !defined (CONFIG_MACOSX_FINDER) || !defined (CONFIG_SDL)