diff options
Diffstat (limited to 'xine/vo_hook.c')
-rw-r--r-- | xine/vo_hook.c | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/xine/vo_hook.c b/xine/vo_hook.c deleted file mode 100644 index 89190b9c..00000000 --- a/xine/vo_hook.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * vo_hook.c: Intercept video driver - * - * See the main source file 'xineliboutput.c' for copyright information and - * how to reach the author. - * - * $Id: vo_hook.c,v 1.5 2009-05-09 16:05:06 phintuka Exp $ - * - */ - -#include <stdlib.h> - -#include <xine/video_out.h> - -#define LOG_MODULENAME "[xine-vo ] " -#include "../logdefs.h" - -#include "vo_hook.h" -#include "vo_post.h" - -/* This module supports only video driver interface version 21 */ -#if (VIDEO_OUT_DRIVER_IFACE_VERSION < 21) -# error xine-lib VIDEO_OUT_DRIVER_IFACE_VERSION < 21 -#endif - - -/* - * default handlers - * - * - Forward function call to original driver - */ - -#define DEF_HANDLER3(RET, NAME, ARG1, ARG2, ARG3) \ -RET vo_def_##NAME (vo_driver_t *self, ARG1 a1, ARG2 a2, ARG3 a3) { \ - vo_driver_hook_t *this = (vo_driver_hook_t *) self; \ - return this->orig_driver-> NAME (this->orig_driver, a1, a2, a3); \ -} - -#define DEF_HANDLER2(RET, NAME, ARG1, ARG2) \ -RET vo_def_##NAME (vo_driver_t *self, ARG1 a1, ARG2 a2) { \ - vo_driver_hook_t *this = (vo_driver_hook_t *) self; \ - return this->orig_driver-> NAME (this->orig_driver, a1, a2); \ -} - -#define DEF_HANDLER1(RET, NAME, ARG1) \ -RET vo_def_##NAME (vo_driver_t *self, ARG1 a1) { \ - vo_driver_hook_t *this = (vo_driver_hook_t *) self; \ - return this->orig_driver-> NAME (this->orig_driver, a1); \ -} - -#define DEF_HANDLER0(RET, NAME) \ -RET vo_def_##NAME (vo_driver_t *self) { \ - vo_driver_hook_t *this = (vo_driver_hook_t *) self; \ - return this->orig_driver-> NAME (this->orig_driver); \ -} - -/* - * - */ - -DEF_HANDLER0(uint32_t, get_capabilities); -DEF_HANDLER0(vo_frame_t*, alloc_frame); - -void vo_def_update_frame_format (vo_driver_t *self, vo_frame_t *img, - uint32_t width, uint32_t height, - double ratio, int format, int flags) -{ - vo_driver_hook_t *this = (vo_driver_hook_t *) self; - return this->orig_driver-> update_frame_format (this->orig_driver, img, width, height, ratio, format, flags); -} - -DEF_HANDLER1(void, display_frame, vo_frame_t * ); -DEF_HANDLER2(void, overlay_begin, vo_frame_t *, int ); -DEF_HANDLER2(void, overlay_blend, vo_frame_t *, vo_overlay_t * ); -DEF_HANDLER1(void, overlay_end, vo_frame_t *); -DEF_HANDLER1(int, get_property, int); -DEF_HANDLER2(int, set_property, int, int); -DEF_HANDLER3(void, get_property_min_max, int, int*, int*); -DEF_HANDLER2(int, gui_data_exchange, int, void * ); -DEF_HANDLER0(int, redraw_needed ); - -void vo_def_dispose(vo_driver_t *self) -{ - vo_driver_hook_t *this = (vo_driver_hook_t *) self; - if (this->orig_driver) - this->orig_driver->dispose(this->orig_driver); - free(self); -} - -/* - * vo_def_hooks_init() - * - * initialize driver_hook_t with default handlers - * - */ -static void vo_proxy_hooks_init(vo_driver_t *drv, vo_driver_t *next_driver) -{ - drv->get_capabilities = drv->get_capabilities ?: vo_def_get_capabilities; - drv->alloc_frame = drv->alloc_frame ?: vo_def_alloc_frame; - drv->update_frame_format = drv->update_frame_format ?: vo_def_update_frame_format; - drv->display_frame = drv->display_frame ?: vo_def_display_frame; - - drv->get_property = drv->get_property ?: vo_def_get_property; - drv->set_property = drv->set_property ?: vo_def_set_property; - drv->get_property_min_max = drv->get_property_min_max ?: vo_def_get_property_min_max; - drv->gui_data_exchange = drv->gui_data_exchange ?: vo_def_gui_data_exchange; - drv->redraw_needed = drv->redraw_needed ?: vo_def_redraw_needed; - drv->dispose = drv->dispose ?: vo_def_dispose; - - /* drop old default handlers for OSD (OSD handlers are optional) */ - if (drv->overlay_begin == vo_def_overlay_begin) - drv->overlay_begin = NULL; - if (drv->overlay_blend == vo_def_overlay_blend) - drv->overlay_blend = NULL; - if (drv->overlay_end == vo_def_overlay_end) - drv->overlay_end = NULL; - - /* Set proxy handlers for OSD only if next driver has OSD handlers */ - if (!drv->overlay_begin && next_driver->overlay_begin) - drv->overlay_begin = vo_def_overlay_begin; - if (!drv->overlay_blend && next_driver->overlay_blend) - drv->overlay_blend = vo_def_overlay_blend; - if (!drv->overlay_end && next_driver->overlay_end) - drv->overlay_end = vo_def_overlay_end; - - drv->node = next_driver->node; /* ??? used only by plugin_loader ? */ -} - -/* - * - */ - -/* from xine-lib video_out.c */ -typedef struct { - xine_video_port_t vo; /* public part */ - vo_driver_t *driver; - /* ... */ -} vos_t; - -/* - * wire_video_driver() - * - */ -int wire_video_driver(xine_video_port_t *video_port, vo_driver_t *hook) -{ - vo_driver_t *vos_driver = ((vos_t*)video_port)->driver; - - if (video_port->driver != vos_driver) { - LOGMSG("wire_video_driver() FAILED (vo_driver != vos_driver)"); - return 0; - } - - /*LOGMSG("wire_video_driver: vo_driver == vos_driver");*/ - - /* wire */ - - /* set proxy handlers for undefined methods */ - vo_proxy_hooks_init(hook, video_port->driver); - - /* append original driver chain to new driver */ - ((vo_driver_hook_t *)hook)->orig_driver = video_port->driver; - - /* push new driver to start of driver chain */ - video_port->driver = hook; - ((vos_t*)video_port)->driver = hook; - - return 1; -} - -/* - * unwire_video_driver() - * - */ -int unwire_video_driver(xine_video_port_t *video_port, vo_driver_t *hook_gen, vo_driver_t *video_out) -{ - vo_driver_hook_t *hook = (vo_driver_hook_t*)hook_gen; - vo_driver_hook_t *next = (vo_driver_hook_t*)video_port->driver; - - if (next == hook) { - /* special handling for first entry */ - video_port->driver = next->orig_driver; - /* need to patch video_port private driver pointer too ... */ - ((vos_t*)video_port)->driver = next->orig_driver; - next->orig_driver = NULL; - return 1; - } - - vo_driver_hook_t *prev = next; - while (next && next != hook && (vo_driver_t*)next != video_out) { - prev = next; - next = (vo_driver_hook_t*)next->orig_driver; - } - - if (prev && next == hook) { - prev->orig_driver = next->orig_driver; - next->orig_driver = NULL; - return 1; - } - - return 0; -} |