diff options
author | Daniel Caujolle-Bert <f1rmb@users.sourceforge.net> | 2001-04-21 00:14:39 +0000 |
---|---|---|
committer | Daniel Caujolle-Bert <f1rmb@users.sourceforge.net> | 2001-04-21 00:14:39 +0000 |
commit | 8e7dc911d41be3013198436848492efbce679c9a (patch) | |
tree | e26bc7209baa161d7a790c4f3f2917db201fa7a1 /src/xine-engine/load_plugins.c | |
parent | 9906645c4669be8476c683b7dfcf321b99ac15a1 (diff) | |
download | xine-lib-8e7dc911d41be3013198436848492efbce679c9a.tar.gz xine-lib-8e7dc911d41be3013198436848492efbce679c9a.tar.bz2 |
Turned demuxers into plugins. Change plugins naming scheme (see
xine_internal.h). Fixed load_plugins* to new API. Add iface version
into demux_plugin_t, add version checking into init_demux_plugin.
Fixed get_identifier from demuxers (void param). Turned libw32dll
into codec plugin (only compiling side yet).
CVS patchset: 11
CVS date: 2001/04/21 00:14:39
Diffstat (limited to 'src/xine-engine/load_plugins.c')
-rw-r--r-- | src/xine-engine/load_plugins.c | 100 |
1 files changed, 54 insertions, 46 deletions
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. +} |