From 6879d1162c13a39cdfc231e7052711db0926d590 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Wed, 15 Aug 2012 10:13:18 +0200 Subject: vo_sharedbuffer: remove this VO Since slave mode is not planned to be kept, this VO is useless and I'm removing it. This VO was useful for OSX GUIs. Since in cocoa you can't embed views in windows from other processes, this VO was writing to a sharedbuffer with mmap. The OSX GUIs would then read from the buffer and render the image with an external renderer. If in the future we will want to support GUIs we will need to reasearch the IOSurface framework. This allows to share kernel managed image data across processes and integrates well with OpenGL. --- DOCS/man/en/vo.rst | 11 -- Makefile | 1 - configure | 26 ----- libvo/video_out.c | 4 - libvo/vo_sharedbuffer.h | 37 ------- libvo/vo_sharedbuffer.m | 269 ------------------------------------------------ 6 files changed, 348 deletions(-) delete mode 100644 libvo/vo_sharedbuffer.h delete mode 100644 libvo/vo_sharedbuffer.m diff --git a/DOCS/man/en/vo.rst b/DOCS/man/en/vo.rst index 75ef3ae784..5f501f0348 100644 --- a/DOCS/man/en/vo.rst +++ b/DOCS/man/en/vo.rst @@ -712,14 +712,3 @@ image JPEG DPI (default: 72) outdir= Specify the directory to save the image files to (default: ``./``). - -sharedbuffer (Mac OS X 10.6 and later) - Mac OS X headless video output designed to interact with GUIs. It copies - image data to a shared buffer so that the data can be read from a GUI and - rendered. - - It uses the same protocol as MPlayer's ``-vo corevideo:shared_buffer`` - - buffer_name= - Name of the shared buffer created with shm_open() as well as the name - of the NSConnection mplayer2 will try to open (default: mplayerosx). diff --git a/Makefile b/Makefile index db8c61218a..81bf045dc0 100644 --- a/Makefile +++ b/Makefile @@ -381,7 +381,6 @@ SRCS_MPLAYER-$(APPLE_REMOTE) += input/ar.c SRCS_MPLAYER-$(CACA) += libvo/vo_caca.c SRCS_MPLAYER-$(COREAUDIO) += libao2/ao_coreaudio.c SRCS_MPLAYER-$(COREVIDEO) += libvo/vo_corevideo.m -SRCS_MPLAYER-$(SHAREDBUFFER) += libvo/vo_sharedbuffer.m SRCS_MPLAYER-$(DIRECT3D) += libvo/vo_direct3d.c libvo/w32_common.c SRCS_MPLAYER-$(DIRECTFB) += libvo/vo_directfb2.c SRCS_MPLAYER-$(DIRECTX) += libao2/ao_dsound.c libvo/vo_directx.c diff --git a/configure b/configure index 4f8fefd4b9..9f2ed5828c 100755 --- a/configure +++ b/configure @@ -372,7 +372,6 @@ Video output: --enable-directfb enable DirectFB video output [autodetect] --disable-corevideo disable CoreVideo video output [autodetect] --disable-cocoa disable Cocoa OpenGL backend [autodetect] - --disable-sharedbuffer disable OSX shared buffer video output [autodetect] Audio output: --disable-alsa disable ALSA audio output [autodetect] @@ -527,7 +526,6 @@ _qtx=auto _coreaudio=auto _corevideo=auto _cocoa=auto -_sharedbuffer=auto quicktime=auto _macosx_finder=no _macosx_bundle=auto @@ -834,8 +832,6 @@ for ac_option do --disable-corevideo) _corevideo=no ;; --enable-cocoa) _cocoa=yes ;; --disable-cocoa) _cocoa=no ;; - --enable-sharedbuffer) _sharedbuffer=yes ;; - --disable-sharedbuffer) _sharedbuffer=no ;; --enable-macosx-finder) _macosx_finder=yes ;; --disable-macosx-finder) _macosx_finder=no ;; --enable-macosx-bundle) _macosx_bundle=yes ;; @@ -2127,26 +2123,6 @@ else fi echores "$_corevideo" -echocheck "SharedBuffer" -if test "$_sharedbuffer" = auto ; then - cat > $TMPC <. - */ - -#ifndef MPLAYER_VO_OSX_SHAREDBUFFER_H -#define MPLAYER_VO_OSX_SHAREDBUFFER_H - -#import - -// Protocol to communicate with the GUI -@protocol MPlayerOSXVOProto -- (int) startWithWidth: (bycopy int)width - withHeight: (bycopy int)height - withBytes: (bycopy int)bytes - withAspect: (bycopy int)aspect; -- (void) stop; -- (void) render; -- (void) toggleFullscreen; -- (void) ontop; -@end - -#endif /* MPLAYER_VO_OSX_SHAREDBUFFER_H */ diff --git a/libvo/vo_sharedbuffer.m b/libvo/vo_sharedbuffer.m deleted file mode 100644 index 219ad91474..0000000000 --- a/libvo/vo_sharedbuffer.m +++ /dev/null @@ -1,269 +0,0 @@ -/* - * OSX Shared Buffer Video Output (extracted from mplayer's corevideo) - * - * This file is part of mplayer2. - * - * mplayer2 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * mplayer2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with mplayer2. If not, see . - */ - -/* - * This video output was extracted from mplayer's corevideo. Its purpose is - * to copy mp_image data to a shared buffer using mmap and to do simple - * coordination with the GUIs using Distributed Objects. - */ - -#include - -#include "vo_sharedbuffer.h" -#include "video_out.h" -#include "m_option.h" -#include "talloc.h" - -#include "libmpcodecs/vfcap.h" -#include "libmpcodecs/mp_image.h" -#include "fastmemcpy.h" - -#include "sub/sub.h" -#include "osd.h" - -// declarations -struct priv { - char *buffer_name; - unsigned char *image_data; - unsigned int image_bytespp; - unsigned int image_width; - unsigned int image_height; - - void (*vo_draw_alpha_fnc)(int w, int h, unsigned char* src, - unsigned char *srca, int srcstride, unsigned char* dstbase, - int dststride); - - NSDistantObject *mposx_proxy; - id mposx_proto; -}; - -// implementation -static void draw_alpha(void *ctx, int x0, int y0, int w, int h, - unsigned char *src, unsigned char *srca, - int stride) -{ - struct priv *p = ((struct vo *) ctx)->priv; - p->vo_draw_alpha_fnc(w, h, src, srca, stride, - p->image_data + (x0 + y0 * p->image_width) * p->image_bytespp, - p->image_width * p->image_bytespp); -} - -static unsigned int image_bytes(struct priv *p) -{ - return p->image_width * p->image_height * p->image_bytespp; -} - -static int preinit(struct vo *vo, const char *arg) -{ - return 0; -} - -static void flip_page(struct vo *vo) -{ - struct priv *p = vo->priv; - NSAutoreleasePool *pool = [NSAutoreleasePool new]; - [p->mposx_proto render]; - [pool release]; -} - -static void check_events(struct vo *vo) { } - -static uint32_t draw_image(struct vo *vo, mp_image_t *mpi) -{ - struct priv *p = vo->priv; - memcpy_pic(p->image_data, mpi->planes[0], - (p->image_width) * (p->image_bytespp), p->image_height, - (p->image_width) * (p->image_bytespp), mpi->stride[0]); - return 0; -} - -static void draw_osd(struct vo *vo, struct osd_state *osd) { - struct priv *p = vo->priv; - osd_draw_text(osd, p->image_width, p->image_height, draw_alpha, vo); -} - -static void free_buffers(struct priv *p) -{ - [p->mposx_proto stop]; - p->mposx_proto = nil; - [p->mposx_proxy release]; - p->mposx_proxy = nil; - - if (p->image_data) { - if (munmap(p->image_data, image_bytes(p)) == -1) - mp_msg(MSGT_VO, MSGL_FATAL, "[vo_sharedbuffer] uninit: munmap " - "failed. Error: %s\n", strerror(errno)); - - if (shm_unlink(p->buffer_name) == -1) - mp_msg(MSGT_VO, MSGL_FATAL, "[vo_sharedbuffer] uninit: shm_unlink " - "failed. Error: %s\n", strerror(errno)); - } -} - -static int config(struct vo *vo, uint32_t width, uint32_t height, - uint32_t d_width, uint32_t d_height, uint32_t flags, - uint32_t format) -{ - struct priv *p = vo->priv; - NSAutoreleasePool *pool = [NSAutoreleasePool new]; - free_buffers(p); - - p->image_width = width; - p->image_height = height; - - mp_msg(MSGT_VO, MSGL_INFO, "[vo_sharedbuffer] writing output to a shared " - "buffer named \"%s\"\n", p->buffer_name); - - // create shared memory - int shm_fd = shm_open(p->buffer_name, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); - if (shm_fd == -1) { - mp_msg(MSGT_VO, MSGL_FATAL, - "[vo_sharedbuffer] failed to open shared memory. Error: %s\n", - strerror(errno)); - goto err_out; - } - - if (ftruncate(shm_fd, image_bytes(p)) == -1) { - mp_msg(MSGT_VO, MSGL_FATAL, - "[vo_sharedbuffer] failed to size shared memory, possibly " - "already in use. Error: %s\n", strerror(errno)); - close(shm_fd); - shm_unlink(p->buffer_name); - goto err_out; - } - - p->image_data = mmap(NULL, image_bytes(p), - PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); - close(shm_fd); - - if (p->image_data == MAP_FAILED) { - mp_msg(MSGT_VO, MSGL_FATAL, - "[vo_sharedbuffer] failed to map shared memory. " - "Error: %s\n", strerror(errno)); - shm_unlink(p->buffer_name); - goto err_out; - } - - //connect to mplayerosx - p->mposx_proxy = [NSConnection - rootProxyForConnectionWithRegisteredName: - [NSString stringWithUTF8String:p->buffer_name] host:nil]; - - if ([p->mposx_proxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) { - [p->mposx_proxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)]; - p->mposx_proto = (id )p->mposx_proxy; - [p->mposx_proto startWithWidth:p->image_width - withHeight:p->image_height - withBytes:p->image_bytespp - withAspect:d_width*100/d_height]; - } else { - mp_msg(MSGT_VO, MSGL_ERR, - "[vo_sharedbuffer] distributed object doesn't conform " - "to the correct protocol.\n"); - [p->mposx_proxy release]; - p->mposx_proxy = nil; - p->mposx_proto = nil; - } - - [pool release]; - return 0; -err_out: - [pool release]; - return 1; -} - -static int query_format(struct vo *vo, uint32_t format) -{ - struct priv *p = vo->priv; - unsigned int image_depth = 0; - switch (format) { - case IMGFMT_YUY2: - p->vo_draw_alpha_fnc = vo_draw_alpha_yuy2; - image_depth = 16; - goto supported; - case IMGFMT_RGB24: - p->vo_draw_alpha_fnc = vo_draw_alpha_rgb24; - image_depth = 24; - goto supported; - case IMGFMT_ARGB: - p->vo_draw_alpha_fnc = vo_draw_alpha_rgb32; - image_depth = 32; - goto supported; - case IMGFMT_BGRA: - p->vo_draw_alpha_fnc = vo_draw_alpha_rgb32; - image_depth = 32; - goto supported; - } - return 0; - -supported: - p->image_bytespp = (image_depth + 7) / 8; - return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | - VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | - VOCAP_NOSLICES; -} - -static void uninit(struct vo *vo) -{ - struct priv *p = vo->priv; - free_buffers(p); -} - -static int control(struct vo *vo, uint32_t request, void *data) -{ - struct priv *p = vo->priv; - switch (request) { - case VOCTRL_DRAW_IMAGE: - return draw_image(vo, data); - case VOCTRL_FULLSCREEN: - [p->mposx_proto toggleFullscreen]; - return VO_TRUE; - case VOCTRL_QUERY_FORMAT: - return query_format(vo, *(uint32_t*)data); - case VOCTRL_ONTOP: - [p->mposx_proto ontop]; - return VO_TRUE; - } - return VO_NOTIMPL; -} - -#undef OPT_BASE_STRUCT -#define OPT_BASE_STRUCT struct priv - -const struct vo_driver video_out_sharedbuffer = { - .is_new = true, - .info = &(const vo_info_t) { - "Mac OS X Shared Buffer (headless video output for GUIs)", - "sharedbuffer", - "Stefano Pigozzi and others.", - "" - }, - .preinit = preinit, - .config = config, - .control = control, - .flip_page = flip_page, - .check_events = check_events, - .uninit = uninit, - .draw_osd = draw_osd, - .priv_size = sizeof(struct priv), - .options = (const struct m_option[]) { - OPT_STRING("buffer_name", buffer_name, 0, OPTDEF_STR("mplayerosx")), - {NULL}, - }, -}; -- cgit v1.2.3