mirror of
https://github.com/mpv-player/mpv
synced 2024-09-05 02:48:21 +02:00
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 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28215 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
c51ba3aed9
commit
80cf435529
@ -3550,6 +3550,10 @@ Choose the display device to use in fullscreen.
|
|||||||
.IPs shared_buffer
|
.IPs shared_buffer
|
||||||
Write output to a shared memory buffer instead of displaying it and
|
Write output to a shared memory buffer instead of displaying it and
|
||||||
try to open an existing NSConnection for communication with a GUI.
|
try to open an existing NSConnection for communication with a GUI.
|
||||||
|
.IPs buffer_name=<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
|
.RE
|
||||||
.PD 1
|
.PD 1
|
||||||
.
|
.
|
||||||
|
@ -45,6 +45,8 @@ OSType pixelFormat;
|
|||||||
//shared memory
|
//shared memory
|
||||||
int shm_fd;
|
int shm_fd;
|
||||||
BOOL shared_buffer = false;
|
BOOL shared_buffer = false;
|
||||||
|
#define DEFAULT_BUFFER_NAME "mplayerosx"
|
||||||
|
static char *buffer_name;
|
||||||
|
|
||||||
//Screen
|
//Screen
|
||||||
int screen_id;
|
int screen_id;
|
||||||
@ -164,10 +166,13 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_
|
|||||||
}
|
}
|
||||||
else
|
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;
|
movie_aspect = (float)d_width/(float)d_height;
|
||||||
|
|
||||||
// create shared memory
|
// 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)
|
if (shm_fd == -1)
|
||||||
{
|
{
|
||||||
mp_msg(MSGT_VO, MSGL_FATAL,
|
mp_msg(MSGT_VO, MSGL_FATAL,
|
||||||
@ -180,7 +185,7 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_
|
|||||||
{
|
{
|
||||||
mp_msg(MSGT_VO, MSGL_FATAL,
|
mp_msg(MSGT_VO, MSGL_FATAL,
|
||||||
"vo_macosx: failed to size shared memory, possibly already in use. Error: %s\n", strerror(errno));
|
"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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,12 +196,12 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_
|
|||||||
{
|
{
|
||||||
mp_msg(MSGT_VO, MSGL_FATAL,
|
mp_msg(MSGT_VO, MSGL_FATAL,
|
||||||
"vo_macosx: failed to map shared memory. Error: %s\n", strerror(errno));
|
"vo_macosx: failed to map shared memory. Error: %s\n", strerror(errno));
|
||||||
shm_unlink("mplayerosx");
|
shm_unlink(buffer_name);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//connnect to mplayerosx
|
//connnect to mplayerosx
|
||||||
mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:@"mplayerosx" host:nil];
|
mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:[NSString stringWithCString:buffer_name] host:nil];
|
||||||
if ([mplayerosxProxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) {
|
if ([mplayerosxProxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) {
|
||||||
[mplayerosxProxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)];
|
[mplayerosxProxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)];
|
||||||
mplayerosxProto = (id <MPlayerOSXVOProto>)mplayerosxProxy;
|
mplayerosxProto = (id <MPlayerOSXVOProto>)mplayerosxProxy;
|
||||||
@ -288,7 +293,7 @@ static void uninit(void)
|
|||||||
if (munmap(image_data, image_width*image_height*image_bytes) == -1)
|
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));
|
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));
|
mp_msg(MSGT_VO, MSGL_FATAL, "uninit: shm_unlink failed. Error: %s\n", strerror(errno));
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -314,11 +319,15 @@ static void uninit(void)
|
|||||||
image_datas[1] = NULL;
|
image_datas[1] = NULL;
|
||||||
image_data = NULL;
|
image_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (buffer_name) free(buffer_name);
|
||||||
|
buffer_name = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static opt_t subopts[] = {
|
static opt_t subopts[] = {
|
||||||
{"device_id", OPT_ARG_INT, &screen_id, (opt_test_f)int_non_neg},
|
{"device_id", OPT_ARG_INT, &screen_id, (opt_test_f)int_non_neg},
|
||||||
{"shared_buffer", OPT_ARG_BOOL, &shared_buffer, NULL},
|
{"shared_buffer", OPT_ARG_BOOL, &shared_buffer, NULL},
|
||||||
|
{"buffer_name", OPT_ARG_MSTRZ,&buffer_name, NULL},
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -328,16 +337,21 @@ static int preinit(const char *arg)
|
|||||||
// set defaults
|
// set defaults
|
||||||
screen_id = 0;
|
screen_id = 0;
|
||||||
shared_buffer = false;
|
shared_buffer = false;
|
||||||
|
buffer_name = DEFAULT_BUFFER_NAME;
|
||||||
|
|
||||||
if (subopt_parse(arg, subopts) != 0) {
|
if (subopt_parse(arg, subopts) != 0) {
|
||||||
mp_msg(MSGT_VO, MSGL_FATAL,
|
mp_msg(MSGT_VO, MSGL_FATAL,
|
||||||
"\n-vo macosx command line help:\n"
|
"\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"
|
"\nOptions:\n"
|
||||||
" device_id=<0-...>\n"
|
" device_id=<0-...>\n"
|
||||||
" Set screen device id for fullscreen.\n"
|
" Set screen device id for fullscreen.\n"
|
||||||
" shared_buffer\n"
|
" shared_buffer\n"
|
||||||
" Write output to a shared memory buffer instead of displaying it.\n"
|
" Write output to a shared memory buffer instead of displaying it.\n"
|
||||||
|
" buffer_name=<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" );
|
"\n" );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -347,6 +361,9 @@ static int preinit(const char *arg)
|
|||||||
NSApp = [NSApplication sharedApplication];
|
NSApp = [NSApplication sharedApplication];
|
||||||
isLeopardOrLater = floor(NSAppKitVersionNumber) > 824;
|
isLeopardOrLater = floor(NSAppKitVersionNumber) > 824;
|
||||||
|
|
||||||
|
if (strcmp(buffer_name, DEFAULT_BUFFER_NAME))
|
||||||
|
shared_buffer = true;
|
||||||
|
|
||||||
if(!shared_buffer)
|
if(!shared_buffer)
|
||||||
{
|
{
|
||||||
#if !defined (CONFIG_MACOSX_FINDER) || !defined (CONFIG_SDL)
|
#if !defined (CONFIG_MACOSX_FINDER) || !defined (CONFIG_SDL)
|
||||||
|
Loading…
Reference in New Issue
Block a user