diff options
author | Michael Roitzsch <mroi@users.sourceforge.net> | 2002-12-01 14:52:55 +0000 |
---|---|---|
committer | Michael Roitzsch <mroi@users.sourceforge.net> | 2002-12-01 14:52:55 +0000 |
commit | bf7f88dbb589de79422d59843f4990f2d1f6ffec (patch) | |
tree | 669550a2c2be69b6d9bc2eb467e511d7e076c269 /src/xine-engine/post.h | |
parent | 15db4b0085815fcfd6179a26b894e962c5a65878 (diff) | |
download | xine-lib-bf7f88dbb589de79422d59843f4990f2d1f6ffec.tar.gz xine-lib-bf7f88dbb589de79422d59843f4990f2d1f6ffec.tar.bz2 |
first Advent - time for some presents: xine's first post plugin
CVS patchset: 3398
CVS date: 2002/12/01 14:52:55
Diffstat (limited to 'src/xine-engine/post.h')
-rw-r--r-- | src/xine-engine/post.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/xine-engine/post.h b/src/xine-engine/post.h new file mode 100644 index 000000000..373480c46 --- /dev/null +++ b/src/xine-engine/post.h @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2000-2002 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 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.1 2002/12/01 14:52:56 mroi Exp $ + * + * post plugin definitions + * + */ + +#ifndef XINE_POST_H +#define XINE_POST_H + +#include "xine.h" +#include "video_out.h" +#include "xineutils.h" + +#define POST_PLUGIN_IFACE_VERSION 1 + + +typedef struct post_class_s post_class_t; +typedef struct post_plugin_s post_plugin_t; + + +struct post_class_s { + + /* + * open a new instance of this plugin class + */ + post_plugin_t* (*open_plugin) (post_class_t *this, int inputs, + xine_audio_port_t **audio_target, + xine_video_port_t **video_target); + + /* + * return short, human readable identifier for this plugin class + */ + char* (*get_identifier) (post_class_t *this); + + /* + * return human readable (verbose = 1 line) description for + * this plugin class + */ + char* (*get_description) (post_class_t *this); + + /* + * free all class-related resources + */ + + void (*dispose) (post_class_t *this); +}; + +struct post_plugin_s { + + /* public part of the plugin */ + xine_post_t xine_post; + + /* + * the connections announced by the plugin + * the plugin must fill these with xine_post_{in,out}_t on init + */ + xine_list_t *input; + xine_list_t *output; + + /* + * close down, free all resources + */ + void (*dispose) (post_plugin_t *this); + + /* plugins don't have to care for the stuff below */ + + /* used when the user requests a list of all inputs/outputs */ + const char **input_ids; + const char **output_ids; + + /* used by plugin loader */ + void *node; +}; + + +/* helper structure for intercepting video port calls */ +typedef struct post_video_port_s post_video_port_t; +struct post_video_port_s { + + /* the new public port with replaced function pointers */ + xine_video_port_t port; + + /* the original port to call its functions from inside yours */ + xine_video_port_t *original_port; + + /* here you can keep information about the frames */ + vo_frame_t original_frame; +}; + +/* use this to create a new video port in which port functions can + * be replaced with own implementation */ +post_video_port_t *post_intercept_video_port(xine_video_port_t *port); + +/* use this to modify a frame to so that functions can be replaced + * with own implementations */ +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); + +#endif |