summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2012-08-15 10:13:18 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2012-08-15 22:01:39 +0200
commit6879d1162c13a39cdfc231e7052711db0926d590 (patch)
treeeaa27790f0183dfd0ab49d0b0c09ddae2ebe7941 /libvo
parent4e2fe3724b3bcd61794cf4fca88adf383f5547d4 (diff)
downloadmpv-6879d1162c13a39cdfc231e7052711db0926d590.tar.bz2
mpv-6879d1162c13a39cdfc231e7052711db0926d590.tar.xz
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.
Diffstat (limited to 'libvo')
-rw-r--r--libvo/video_out.c4
-rw-r--r--libvo/vo_sharedbuffer.h37
-rw-r--r--libvo/vo_sharedbuffer.m269
3 files changed, 0 insertions, 310 deletions
diff --git a/libvo/video_out.c b/libvo/video_out.c
index 218dd36d1b..4066146152 100644
--- a/libvo/video_out.c
+++ b/libvo/video_out.c
@@ -87,7 +87,6 @@ extern struct vo_driver video_out_direct3d_shaders;
extern struct vo_driver video_out_directx;
extern struct vo_driver video_out_directfb;
extern struct vo_driver video_out_corevideo;
-extern struct vo_driver video_out_sharedbuffer;
const struct vo_driver *video_out_drivers[] =
{
@@ -124,9 +123,6 @@ const struct vo_driver *video_out_drivers[] =
#endif
&video_out_null,
// should not be auto-selected
-#ifdef CONFIG_SHAREDBUFFER
- &video_out_sharedbuffer,
-#endif
#ifdef CONFIG_DIRECTFB
// vo directfb can call exit() if initialization fails
&video_out_directfb,
diff --git a/libvo/vo_sharedbuffer.h b/libvo/vo_sharedbuffer.h
deleted file mode 100644
index c25463aa0a..0000000000
--- a/libvo/vo_sharedbuffer.h
+++ /dev/null
@@ -1,37 +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 <http://www.gnu.org/licenses/>.
- */
-
-#ifndef MPLAYER_VO_OSX_SHAREDBUFFER_H
-#define MPLAYER_VO_OSX_SHAREDBUFFER_H
-
-#import <Cocoa/Cocoa.h>
-
-// 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 <http://www.gnu.org/licenses/>.
- */
-
-/*
- * 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 <sys/mman.h>
-
-#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 <MPlayerOSXVOProto> 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 <MPlayerOSXVOProto>)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 <stefano.pigozzi@gmail.com> 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},
- },
-};