diff options
Diffstat (limited to 'src/xine-engine')
-rw-r--r-- | src/xine-engine/Makefile.am | 17 | ||||
-rw-r--r-- | src/xine-engine/load_plugins.c | 100 | ||||
-rw-r--r-- | src/xine-engine/xine.c | 11 | ||||
-rw-r--r-- | src/xine-engine/xine_internal.h | 43 |
4 files changed, 102 insertions, 69 deletions
diff --git a/src/xine-engine/Makefile.am b/src/xine-engine/Makefile.am index 993659dc1..8608b16b5 100644 --- a/src/xine-engine/Makefile.am +++ b/src/xine-engine/Makefile.am @@ -6,20 +6,15 @@ CFLAGS = @GLOBAL_CFLAGS@ lib_LTLIBRARIES = libxine.la -if HAVE_W32DLL -W32_LIBS = $(top_srcdir)/src/libw32dll/libw32dll.la -endif - ##libxine_la_SOURCES = xine.c buffer.c metronom.c configfile.c \ ## monitor.c utils.c audio_decoder.c video_decoder.c load_plugins.c -libxine_la_SOURCES = metronom.c configfile.c monitor.c utils.c cpu_accel.c +libxine_la_SOURCES = metronom.c configfile.c monitor.c utils.c cpu_accel.c \ + load_plugins.c libxine_la_DEPENDENCIES = libsdeps libxine_la_LIBADD = \ - $(top_srcdir)/src/demuxers/libdemux.la \ $(top_srcdir)/src/libmpeg2/libmpeg2.la \ $(top_srcdir)/src/libac3/libac3.la \ $(top_srcdir)/src/libmpg123/libmpg123.la \ - $(W32_LIBS) \ ## $(top_srcdir)/src/libspudec/libspudec.la \ $(THREAD_LIBS) \ $(DYNAMIC_LD_LIBS) @@ -41,11 +36,9 @@ debug: libsdeps: -## @cd $(top_builddir)/src/demuxers && $(MAKE) libdemux.la -## @cd $(top_builddir)/src/libmpeg2 && $(MAKE) libmpeg2.la -## @cd $(top_builddir)/src/libac3 && $(MAKE) libac3.la -## @cd $(top_builddir)/src/libmpg123 && $(MAKE) libmpg123.la -##@W32DLL_DEP@ @cd $(top_builddir)/src/libw32dll && $(MAKE) libw32dll.la + @cd $(top_builddir)/src/libmpeg2 && $(MAKE) libmpeg2.la + @cd $(top_builddir)/src/libac3 && $(MAKE) libac3.la + @cd $(top_builddir)/src/libmpg123 && $(MAKE) libmpg123.la ## @cd $(top_builddir)/src/libspudec && $(MAKE) libspudec.la diff --git a/src/xine-engine/load_plugins.c b/src/xine-engine/load_plugins.c index ebd94bec2..29d18bf44 100644 --- a/src/xine-engine/load_plugins.c +++ b/src/xine-engine/load_plugins.c @@ -17,10 +17,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: load_plugins.c,v 1.2 2001/04/19 09:46:57 f1rmb Exp $ + * $Id: load_plugins.c,v 1.3 2001/04/21 00:14:41 f1rmb Exp $ * * - * Load input/demux/audio_out/video_out plugins + * Load input/demux/audio_out/video_out/codec plugins * */ @@ -33,6 +33,7 @@ #include <sys/stat.h> #include <dirent.h> #include <dlfcn.h> +#include <string.h> #include "xine_internal.h" #include "demuxers/demux.h" @@ -41,23 +42,16 @@ #include "configfile.h" #include "monitor.h" -/* debugging purposes only */ -extern uint32_t xine_debug; - /* * */ -void xine_load_demux_plugins (xine_t *this) { +void load_demux_plugins (xine_t *this, + config_values_t *config, int iface_version) { DIR *dir; - this->demuxer_plugins[0] = *(init_demux_mpeg (xine_debug)); - this->demuxer_plugins[1] = *(init_demux_mpeg_block (xine_debug)); - this->demuxer_plugins[2] = *(init_demux_avi (xine_debug)); - this->demuxer_plugins[3] = *(init_demux_mpeg_audio (xine_debug)); - this->demuxer_plugins[4] = *(init_demux_mpeg_elem (xine_debug)); - this->num_demuxer_plugins = 5; + this->num_demuxer_plugins = 0; - dir = opendir (XINE_DEMUXDIR) ; + dir = opendir (XINE_PLUGINDIR) ; if (dir) { struct dirent *pEntry; @@ -68,7 +62,9 @@ void xine_load_demux_plugins (xine_t *this) { int nLen = strlen (pEntry->d_name); - if ((strncasecmp(pEntry->d_name, "demux_", 6) == 0) && + if ((strncasecmp(pEntry->d_name, + XINE_DEMUXER_PLUGIN_PREFIXNAME, + XINE_DEMUXER_PLUGIN_PREFIXNAME_LENGTH) == 0) && ((pEntry->d_name[nLen-3]=='.') && (pEntry->d_name[nLen-2]=='s') && (pEntry->d_name[nLen-1]=='o'))) { @@ -77,7 +73,7 @@ void xine_load_demux_plugins (xine_t *this) { * demux plugin found => load it */ - sprintf (str, "%s/%s", XINE_DEMUXDIR, pEntry->d_name); + sprintf (str, "%s/%s", XINE_PLUGINDIR, pEntry->d_name); if(!(plugin = dlopen (str, RTLD_LAZY))) { fprintf(stderr, "%s(%d): %s doesn't seem to be installed (%s)\n", @@ -85,21 +81,19 @@ void xine_load_demux_plugins (xine_t *this) { exit(1); } else { - void *(*getinfo) (fifobuf_functions_t *, uint32_t); + void *(*initplug) (int, config_values_t *); - if((getinfo = dlsym(plugin, "demux_plugin_getinfo")) != NULL) { - demux_functions_t *dxp; + if((initplug = dlsym(plugin, "init_demuxer_plugin")) != NULL) { + demux_plugin_t *dxp; - dxp = (demux_functions_t *) getinfo(this->fifo_funcs, xine_debug); - dxp->handle = plugin; - dxp->filename = str; + dxp = (demux_plugin_t *) initplug(iface_version, config); this->demuxer_plugins[this->num_demuxer_plugins] = *dxp; - - printf("demux plugin found : %s(%s)\n", - this->demuxer_plugins[this->num_demuxer_plugins].filename, - pEntry->d_name); - + printf("demux plugin found : %s(ID: %s, iface: %d)\n", + str, + this->demuxer_plugins[this->num_demuxer_plugins].get_identifier(), + this->demuxer_plugins[this->num_demuxer_plugins].interface_version); + this->num_demuxer_plugins++; } @@ -113,9 +107,6 @@ void xine_load_demux_plugins (xine_t *this) { } } - if (this->num_demuxer_plugins == 5) - printf ("No extra demux plugins found in %s\n", XINE_DEMUXDIR); - /* * init demuxer */ @@ -126,7 +117,8 @@ void xine_load_demux_plugins (xine_t *this) { /* * */ -void xine_load_input_plugins (xine_t *this) { +void load_input_plugins (xine_t *this, + config_values_t *config, int iface_version) { DIR *dir; this->num_input_plugins = 0; @@ -143,7 +135,9 @@ void xine_load_input_plugins (xine_t *this) { int nLen = strlen (pEntry->d_name); - if ((strncasecmp(pEntry->d_name, "input_", 6) == 0) && + if ((strncasecmp(pEntry->d_name, + XINE_INPUT_PLUGIN_PREFIXNAME, + XINE_INPUT_PLUGIN_PREFIXNAME_LENGTH) == 0) && ((pEntry->d_name[nLen-3]=='.') && (pEntry->d_name[nLen-2]=='s') && (pEntry->d_name[nLen-1]=='o'))) { @@ -160,24 +154,20 @@ void xine_load_input_plugins (xine_t *this) { exit(1); } else { - void *(*getinfo) (uint32_t); + void *(*initplug) (int, config_values_t *); - if((getinfo = dlsym(plugin, "input_plugin_getinfo")) != NULL) { - input_plugin_t *ipp; - - ipp = (input_plugin_t *) getinfo(xine_debug); - ipp->handle = plugin; - ipp->filename = str; - this->input_plugins[this->num_input_plugins] = *ipp; - - this->input_plugins[this->num_input_plugins].init(); - - printf("input plugin found : %s(%s)\n", - this->input_plugins[this->num_input_plugins].filename, - pEntry->d_name); + if((initplug = dlsym(plugin, "init_demuxer_plugin")) != NULL) { + input_plugin_t *ip; + + ip = (input_plugin_t *) initplug(iface_version, config); + this->input_plugins[this->num_input_plugins] = *ip; + printf("input plugin found : %s(ID: %s, iface: %d)\n", + str, + this->input_plugins[this->num_input_plugins].get_identifier(), + this->input_plugins[this->num_input_plugins].interface_version); + this->num_input_plugins++; - } if(this->num_input_plugins > INPUT_PLUGIN_MAX) { @@ -197,3 +187,21 @@ void xine_load_input_plugins (xine_t *this) { } } + +void load_video_out_plugins (xine_t *this, + config_values_t *config, int iface_version) { + + // Not implemented yet. +} + +void load_audio_out_plugins (xine_t *this, + config_values_t *config, int iface_version) { + + // Not implemented yet. +} + +void load_codec_plugins (xine_t *this, + config_values_t *config, int iface_version) { + + // Not implemented yet. +} diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c index daad7cbf4..17cec6014 100644 --- a/src/xine-engine/xine.c +++ b/src/xine-engine/xine.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: xine.c,v 1.2 2001/04/19 09:46:57 f1rmb Exp $ + * $Id: xine.c,v 1.3 2001/04/21 00:14:41 f1rmb Exp $ * * top-level xine functions * @@ -442,9 +442,10 @@ static void xine_pause (xine_t *this) { /* * */ -xine_t *xine_init (vo_instance_t *vo, ao_instance_t *ao, +xine_t *xine_init (vo_instance_t *vo, + ao_functions_t *ao, gui_status_callback_func_t gui_status_callback, - int demux_strategy, uint32_t debug_lvl) { + config_values_t *config, int demux_strategy, uint32_t debug_lvl) { xine_t *this = xmalloc (sizeof (xine_t)); int err; @@ -474,7 +475,7 @@ xine_t *xine_init (vo_instance_t *vo, ao_instance_t *ao, * init demuxer */ - xine_load_demux_plugins(); + load_demux_plugins(this, config, DEMUXER_PLUGIN_IFACE_VERSION); this->audio_channel = 0; this->spu_channel = -1; @@ -508,7 +509,7 @@ xine_t *xine_init (vo_instance_t *vo, ao_instance_t *ao, * load input plugins */ - xine_load_input_plugins (); + load_input_plugins (this, config, INPUT_PLUGIN_IFACE_VERSION); printf ("xine_init: plugins loaded\n"); diff --git a/src/xine-engine/xine_internal.h b/src/xine-engine/xine_internal.h index 6ed35a91b..6df6a99e8 100644 --- a/src/xine-engine/xine_internal.h +++ b/src/xine-engine/xine_internal.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: xine_internal.h,v 1.3 2001/04/20 18:01:55 guenter Exp $ + * $Id: xine_internal.h,v 1.4 2001/04/21 00:14:41 f1rmb Exp $ * */ @@ -31,8 +31,14 @@ #include "audio_out.h" #include "metronom.h" -#define INPUT_PLUGIN_MAX 50 -#define DEMUXER_PLUGIN_MAX 50 +#define INPUT_PLUGIN_MAX 50 +#define DEMUXER_PLUGIN_MAX 50 +#define CODEC_PLUGIN_IFACE_VERSION 1 +#define CODEC_PLUGIN_MAX 50 +#define AUDIO_OUT_PLUGIN_IFACE_VERSION 1 +#define AUDIO_OUT_PLUGIN_MAX 50 +#define VIDEO_OUT_PLUGIN_IFACE_VERSIO 1 +#define VIDEO_OUT_PLUGIN_MAX 50 /* nStatus : current xine status */ typedef void (*gui_status_callback_func_t)(int nStatus); @@ -202,11 +208,36 @@ char **xine_get_autoplay_input_plugin_ids (xine_t *this) ; */ char **xine_get_autoplay_mrls (xine_t *this, char *plugin_id); + /* * Load input/demux/audio_out/video_out plugins - * prototypes of load_plugins.c functions. */ -void xine_load_demux_plugins (xine_t *this); -void xine_load_input_plugins (xine_t *this); +/* plugin names scheme */ +#define XINE_INPUT_PLUGIN_PREFIXNAME "xineplug_inp_" +#define XINE_INPUT_PLUGIN_PREFIXNAME_LENGTH 13 + +#define XINE_DEMUXER_PLUGIN_PREFIXNAME "xineplug_dmx_" +#define XINE_DEMUXER_PLUGIN_PREFIXNAME_LENGTH 13 + +#define XINE_VIDEO_OUT_PLUGIN_PREFIXNAME "xineplug_vo_out_" +#define XINE_VIDEO_OUT_PLUGIN_PREFIXNAME_LENGTH 16 + +#define XINE_AUDIO_OUT_PLUGIN_PREFIXNAME "xineplug_ao_out_" +#define XINE_AUDIO_OUT_PLUGIN_PREFIXNAME_LENGTH 16 + +#define XINE_CODEC_PLUGIN_PREFIXNAME "xineplug_codec_" +#define XINE_CODEC_PLUGIN_PREFIXNAME_LENGTH 15 + +/* prototypes of load_plugins.c functions. */ +void load_demux_plugins (xine_t *this, + config_values_t *config, int iface_version); +void load_input_plugins (xine_t *this, + config_values_t *config, int iface_version); +void load_video_out_plugins (xine_t *this, + config_values_t *config, int iface_version); +void load_audio_out_plugins (xine_t *this, + config_values_t *config, int iface_version); +void load_codec_plugins (xine_t *this, + config_values_t *config, int iface_version); #endif |