summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Roitzsch <mroi@users.sourceforge.net>2003-08-15 14:38:04 +0000
committerMichael Roitzsch <mroi@users.sourceforge.net>2003-08-15 14:38:04 +0000
commit1835a617e381e7a307945c71be4ee9d4e16520b0 (patch)
treeafa17139ec20a30827d1824119f0cb8465685969 /src
parente648375a3eec5de906fd60206e1d5e23e2e078d0 (diff)
downloadxine-lib-1835a617e381e7a307945c71be4ee9d4e16520b0.tar.gz
xine-lib-1835a617e381e7a307945c71be4ee9d4e16520b0.tar.bz2
- rename to overlay manager
- add helper functions to intercept overlay manager calls within post plugins CVS patchset: 5290 CVS date: 2003/08/15 14:38:04
Diffstat (limited to 'src')
-rw-r--r--src/xine-engine/post.c76
-rw-r--r--src/xine-engine/post.h25
2 files changed, 96 insertions, 5 deletions
diff --git a/src/xine-engine/post.c b/src/xine-engine/post.c
index 07c9c223d..a57f9748f 100644
--- a/src/xine-engine/post.c
+++ b/src/xine-engine/post.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: post.c,v 1.13 2003/08/04 03:47:11 miguelfreitas Exp $
+ * $Id: post.c,v 1.14 2003/08/15 14:38:04 mroi Exp $
*/
/*
@@ -65,9 +65,9 @@ static void post_video_exit(xine_video_port_t *port_gen) {
port->original_port->exit(port->original_port);
}
-static video_overlay_instance_t *post_video_get_overlay_instance(xine_video_port_t *port_gen) {
+static video_overlay_manager_t *post_video_get_overlay_manager(xine_video_port_t *port_gen) {
post_video_port_t *port = (post_video_port_t *)port_gen;
- return port->original_port->get_overlay_instance(port->original_port);
+ return port->original_port->get_overlay_manager(port->original_port);
}
static void post_video_flush(xine_video_port_t *port_gen) {
@@ -105,7 +105,7 @@ post_video_port_t *post_intercept_video_port(post_plugin_t *post, xine_video_por
post_port->port.enable_ovl = post_video_enable_ovl;
post_port->port.close = post_video_close;
post_port->port.exit = post_video_exit;
- post_port->port.get_overlay_instance = post_video_get_overlay_instance;
+ post_port->port.get_overlay_manager = post_video_get_overlay_manager;
post_port->port.flush = post_video_flush;
post_port->port.status = post_video_status;
post_port->port.get_property = post_video_get_property;
@@ -187,6 +187,73 @@ void post_restore_video_frame(vo_frame_t *frame, post_video_port_t *port) {
frame->dispose = port->original_frame.dispose;
}
+
+/* dummy intercept functions that just pass the call on to the original overlay manager */
+static void post_overlay_init(video_overlay_manager_t *ovl_gen) {
+ post_overlay_manager_t *ovl = (post_overlay_manager_t *)ovl_gen;
+ ovl->original_manager->init(ovl->original_manager);
+}
+
+static void post_overlay_dispose(video_overlay_manager_t *ovl_gen) {
+ post_overlay_manager_t *ovl = (post_overlay_manager_t *)ovl_gen;
+ ovl->original_manager->dispose(ovl->original_manager);
+}
+
+static int32_t post_overlay_get_handle(video_overlay_manager_t *ovl_gen, int object_type) {
+ post_overlay_manager_t *ovl = (post_overlay_manager_t *)ovl_gen;
+ return ovl->original_manager->get_handle(ovl->original_manager, object_type);
+}
+
+static void post_overlay_free_handle(video_overlay_manager_t *ovl_gen, int32_t handle) {
+ post_overlay_manager_t *ovl = (post_overlay_manager_t *)ovl_gen;
+ ovl->original_manager->free_handle(ovl->original_manager, handle);
+}
+
+static int32_t post_overlay_add_event(video_overlay_manager_t *ovl_gen, void *event) {
+ post_overlay_manager_t *ovl = (post_overlay_manager_t *)ovl_gen;
+ return ovl->original_manager->add_event(ovl->original_manager, event);
+}
+
+static void post_overlay_flush_events(video_overlay_manager_t *ovl_gen) {
+ post_overlay_manager_t *ovl = (post_overlay_manager_t *)ovl_gen;
+ ovl->original_manager->flush_events(ovl->original_manager);
+}
+
+static int post_overlay_redraw_needed(video_overlay_manager_t *ovl_gen, int64_t vpts) {
+ post_overlay_manager_t *ovl = (post_overlay_manager_t *)ovl_gen;
+ return ovl->original_manager->redraw_needed(ovl->original_manager, vpts);
+}
+
+static void post_overlay_multiple_overlay_blend(video_overlay_manager_t *ovl_gen, int64_t vpts,
+ vo_driver_t *output, vo_frame_t *vo_img, int enabled) {
+ post_overlay_manager_t *ovl = (post_overlay_manager_t *)ovl_gen;
+ ovl->original_manager->multiple_overlay_blend(ovl->original_manager, vpts, output, vo_img, enabled);
+}
+
+
+post_overlay_manager_t *post_intercept_overlay_manager(post_plugin_t *post,
+ video_overlay_manager_t *original) {
+ post_overlay_manager_t *post_ovl = (post_overlay_manager_t *)malloc(sizeof(post_overlay_manager_t));
+
+ if (!post_ovl)
+ return NULL;
+
+ post_ovl->manager.init = post_overlay_init;
+ post_ovl->manager.dispose = post_overlay_dispose;
+ post_ovl->manager.get_handle = post_overlay_get_handle;
+ post_ovl->manager.free_handle = post_overlay_free_handle;
+ post_ovl->manager.add_event = post_overlay_add_event;
+ post_ovl->manager.flush_events = post_overlay_flush_events;
+ post_ovl->manager.redraw_needed = post_overlay_redraw_needed;
+ post_ovl->manager.multiple_overlay_blend = post_overlay_multiple_overlay_blend;
+
+ post_ovl->original_manager = original;
+ post_ovl->post = post;
+
+ return post_ovl;
+}
+
+
/* dummy intercept functions that just pass the call on to the original port */
static uint32_t post_audio_get_capabilities(xine_audio_port_t *port_gen) {
post_audio_port_t *port = (post_audio_port_t *)port_gen;
@@ -255,6 +322,7 @@ static int post_audio_status(xine_audio_port_t *port_gen, xine_stream_t *stream,
return port->original_port->status(port->original_port, stream, bits, rate, mode);
}
+
post_audio_port_t *post_intercept_audio_port(post_plugin_t *post, xine_audio_port_t *original) {
post_audio_port_t *post_port = (post_audio_port_t *)malloc(sizeof(post_audio_port_t));
diff --git a/src/xine-engine/post.h b/src/xine-engine/post.h
index 38dc3a75c..e29f12cdd 100644
--- a/src/xine-engine/post.h
+++ b/src/xine-engine/post.h
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: post.h,v 1.10 2003/08/04 03:47:11 miguelfreitas Exp $
+ * $Id: post.h,v 1.11 2003/08/15 14:38:04 mroi Exp $
*
* post plugin definitions
*
@@ -111,6 +111,7 @@ struct post_plugin_s {
* set of functions attached that you might need to decorate.
*/
+
/* helper structure for intercepting video port calls */
typedef struct post_video_port_s post_video_port_t;
struct post_video_port_s {
@@ -138,6 +139,28 @@ post_video_port_t *post_intercept_video_port(post_plugin_t *post, xine_video_por
void post_intercept_video_frame(vo_frame_t *frame, post_video_port_t *port);
void post_restore_video_frame(vo_frame_t *frame, post_video_port_t *port);
+
+/* helper structure for intercepting overlay manager calls */
+typedef struct post_overlay_manager_s post_overlay_manager_t;
+struct post_overlay_manager_s {
+
+ /* the new public overlay manager with replaced function pointers */
+ video_overlay_manager_t manager;
+
+ /* the original manager to call its functions from inside yours */
+ video_overlay_manager_t *original_manager;
+
+ /* backward reference so that you have access to the post plugin
+ * when the call only gives you the overlay manager */
+ post_plugin_t *post;
+};
+
+/* use this to create a new, trivially decorated overlay manager in which
+ * port functions can be replaced with own implementations */
+post_overlay_manager_t *post_intercept_overlay_manager(post_plugin_t *post,
+ video_overlay_manager_t *original);
+
+
/* helper structure for intercepting audio port calls */
typedef struct post_audio_port_s post_audio_port_t;
struct post_audio_port_s {