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/demuxers | |
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/demuxers')
-rw-r--r-- | src/demuxers/Makefile.am | 39 | ||||
-rw-r--r-- | src/demuxers/demux.h | 23 | ||||
-rw-r--r-- | src/demuxers/demux_avi.c | 35 | ||||
-rw-r--r-- | src/demuxers/demux_mpeg.c | 36 | ||||
-rw-r--r-- | src/demuxers/demux_mpeg_block.c | 40 |
5 files changed, 115 insertions, 58 deletions
diff --git a/src/demuxers/Makefile.am b/src/demuxers/Makefile.am index 46e5bc8b6..e7a64cd6d 100644 --- a/src/demuxers/Makefile.am +++ b/src/demuxers/Makefile.am @@ -1,17 +1,36 @@ -CFLAGS = @BUILD_LIB_STATIC@ @GLOBAL_CFLAGS@ +CFLAGS = @GLOBAL_CFLAGS@ -noinst_LTLIBRARIES = libdemux.la +LIBTOOL = $(SHELL) $(top_builddir)/libtool-nofpic -#libdemux_la_SOURCES = demux_avi.c demux_mpeg_block.c demux_mpeg.c \ -# demux_mpgaudio.c demux_elem.c -libdemux_la_SOURCES = demux_avi.c demux_mpeg_block.c demux_mpeg.c -#libdemux_la_DEPENDENCIES = libsdeps -#libdemux_la_LIBADD = $(top_builddir)/libmpg123/libmpg123.la +libdir = $(XINE_PLUGINDIR) -include_HEADERS = demux.h +## +# IMPORTANT: +# --------- +# All of xine demuxer plugins should be named like the scheme "xineplug_dmx_" +# +#lib_LTLIBRARIES = xineplug_dmx_avi.la xineplug_dmx_mpeg_block.la \ +# xineplug_dmx_mpeg.la xineplug_dmx_mpeg_audio.la \ +# xineplug_dmx_mpeg_elem.la +lib_LTLIBRARIES = xineplug_dmx_avi.la xineplug_dmx_mpeg_block.la \ + xineplug_dmx_mpeg.la + +xineplug_dmx_avi_la_SOURCES = demux_avi.c +xineplug_dmx_avi_la_LDFLAGS = -avoid-version -module + +xineplug_dmx_mpeg_block_la_SOURCES = demux_mpeg_block.c +xineplug_dmx_mpeg_block_la_LDFLAGS = -avoid-version -module -#libsdeps: -# @cd $(top_builddir)/libmpg123 && $(MAKE) libmpg123.la +xineplug_dmx_mpeg_la_SOURCES = demux_mpeg.c +xineplug_dmx_mpeg_la_LDFLAGS = -avoid-version -module + +#xineplug_dmx_mpeg_audio_la_SOURCES = demux_mpgaudio.c +#xineplug_dmx_mpeg_audio_la_LDFLAGS = -avoid-version -module + +#xineplug_dmx_mpeg_elem_la_SOURCES = demux_elem.c +#xineplug_dmx_mpeg_elem_la_LDFLAGS = -avoid-version -module + +include_HEADERS = demux.h ## ## Install header files (default=$includedir/xine) diff --git a/src/demuxers/demux.h b/src/demuxers/demux.h index a7e6f8292..59a132917 100644 --- a/src/demuxers/demux.h +++ b/src/demuxers/demux.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: demux.h,v 1.2 2001/04/19 09:46:57 f1rmb Exp $ + * $Id: demux.h,v 1.3 2001/04/21 00:14:40 f1rmb Exp $ */ #ifndef HAVE_DEMUX_H @@ -31,6 +31,8 @@ #include "input_plugin.h" #endif +#define DEMUXER_PLUGIN_IFACE_VERSION 1 + #define DEMUX_OK 0 #define DEMUX_FINISHED 1 @@ -55,6 +57,11 @@ typedef struct demux_plugin_s demux_plugin_t; struct demux_plugin_s { /* + * plugin interface version, lower versions _may_ be supported + */ + int interface_version; + + /* * ask demuxer to open the given stream (input-plugin) * using the content-detection method specified in <stage> * @@ -98,7 +105,7 @@ struct demux_plugin_s * return human readable identifier for this plugin */ - char* (*get_identifier) (demux_plugin_t *this); + char* (*get_identifier) (void); } ; @@ -107,19 +114,9 @@ struct demux_plugin_s * * make sure you provide this (and only this!) function call: * - * demux_plugin_t *init_demux_plugin (config_values_t *cfg, uint32_t xd); + * demux_plugin_t *init_demux_plugin (int iface_version, config_values_t *cfg); * */ -demux_plugin_t *init_demux_mpeg (config_values_t *cfg, uint32_t xd); - -demux_plugin_t *init_demux_mpeg_block (config_values_t *cfg, uint32_t xd); - -demux_plugin_t *init_demux_avi (config_values_t *cfg, uint32_t xd); - -demux_plugin_t *init_demux_mpeg_audio (config_values_t *cfg, uint32_t xd); - -demux_plugin_t *init_demux_mpeg_elem(config_values_t *cfg, uint32_t xd); - #endif diff --git a/src/demuxers/demux_avi.c b/src/demuxers/demux_avi.c index cfa4307e0..3469467ad 100644 --- a/src/demuxers/demux_avi.c +++ b/src/demuxers/demux_avi.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: demux_avi.c,v 1.2 2001/04/19 09:46:57 f1rmb Exp $ + * $Id: demux_avi.c,v 1.3 2001/04/21 00:14:40 f1rmb Exp $ * * demultiplexer for avi streams * @@ -960,23 +960,36 @@ static int demux_avi_open(demux_plugin_t *this_gen, input_plugin_t *input, int s return DEMUX_CANNOT_HANDLE; } -static char *demux_avi_get_id(demux_plugin_t *this) { +static char *demux_avi_get_id(void) { return "AVI"; } -demux_plugin_t *init_demux_avi(config_values_t *cfg, uint32_t xd) { +demux_plugin_t *init_demux_plugin(int iface, config_values_t *config) { demux_avi_t *this = xmalloc (sizeof (demux_avi_t)); - xine_debug = xd; + switch (iface) { - this->demux_plugin.open = demux_avi_open; - this->demux_plugin.start = demux_avi_start; - this->demux_plugin.stop = demux_avi_stop; - this->demux_plugin.close = demux_avi_close; - this->demux_plugin.get_status = demux_avi_get_status; - this->demux_plugin.get_identifier = demux_avi_get_id; + case 1: + //FIXME xine_debug = xd; + this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; + this->demux_plugin.open = demux_avi_open; + this->demux_plugin.start = demux_avi_start; + this->demux_plugin.stop = demux_avi_stop; + this->demux_plugin.close = demux_avi_close; + this->demux_plugin.get_status = demux_avi_get_status; + this->demux_plugin.get_identifier = demux_avi_get_id; + return (demux_plugin_t *) this; + break; - return (demux_plugin_t *) this; + default: + fprintf(stderr, + "Demuxer plugin doesn't support plugin API version %d.\n" + "PLUGIN DISABLED.\n" + "This means there's a version mismatch between xine and this " + "demuxer plugin.\nInstalling current input plugins should help.\n", + iface); + return NULL; + } } diff --git a/src/demuxers/demux_mpeg.c b/src/demuxers/demux_mpeg.c index b373b4f93..5cc08817c 100644 --- a/src/demuxers/demux_mpeg.c +++ b/src/demuxers/demux_mpeg.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: demux_mpeg.c,v 1.2 2001/04/19 09:46:57 f1rmb Exp $ + * $Id: demux_mpeg.c,v 1.3 2001/04/21 00:14:40 f1rmb Exp $ * * demultiplexer for mpeg 1/2 program streams * reads streams of variable blocksizes @@ -600,7 +600,7 @@ static int demux_mpeg_open(demux_plugin_t *this_gen, input_plugin_t *ip, int sta static void demux_mpeg_select_spu_channel (int nChannel) { } -static char *demux_mpeg_get_id(demux_plugin_t *this) { +static char *demux_mpeg_get_id(void) { return "MPEG"; } @@ -608,19 +608,33 @@ static void demux_mpeg_close (demux_plugin_t *this) { /* nothing */ } -demux_plugin_t *init_demux_mpeg(config_values_t *cfg, uint32_t xd) { +demux_plugin_t *init_demux_plugin(int iface, config_values_t *config) { demux_mpeg_t *this = xmalloc (sizeof (demux_mpeg_t)); - xine_debug = xd; + switch (iface) { - this->demux_plugin.open = demux_mpeg_open; - this->demux_plugin.start = demux_mpeg_start; - this->demux_plugin.stop = demux_mpeg_stop; - this->demux_plugin.close = demux_mpeg_close; - this->demux_plugin.get_status = demux_mpeg_get_status; - this->demux_plugin.get_identifier = demux_mpeg_get_id; + case 1: + // FIXME xine_debug = xd; + this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; + this->demux_plugin.open = demux_mpeg_open; + this->demux_plugin.start = demux_mpeg_start; + this->demux_plugin.stop = demux_mpeg_stop; + this->demux_plugin.close = demux_mpeg_close; + this->demux_plugin.get_status = demux_mpeg_get_status; + this->demux_plugin.get_identifier = demux_mpeg_get_id; + + return (demux_plugin_t *) this; + break; - return (demux_plugin_t *) this; + default: + fprintf(stderr, + "Demuxer plugin doesn't support plugin API version %d.\n" + "PLUGIN DISABLED.\n" + "This means there's a version mismatch between xine and this " + "demuxer plugin.\nInstalling current input plugins should help.\n", + iface); + return NULL; + } } diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c index d3bf96519..bcdd003f6 100644 --- a/src/demuxers/demux_mpeg_block.c +++ b/src/demuxers/demux_mpeg_block.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: demux_mpeg_block.c,v 1.2 2001/04/19 09:46:57 f1rmb Exp $ + * $Id: demux_mpeg_block.c,v 1.3 2001/04/21 00:14:40 f1rmb Exp $ * * demultiplexer for mpeg 1/2 program streams * @@ -494,7 +494,7 @@ static int demux_mpeg_block_open(demux_plugin_t *this_gen, return DEMUX_CANNOT_HANDLE; } -static char *demux_mpeg_block_get_id(demux_plugin_t *this) { +static char *demux_mpeg_block_get_id(void) { return "MPEG_BLOCK"; } @@ -502,18 +502,32 @@ static void demux_mpeg_block_close (demux_plugin_t *this) { /* nothing */ } -demux_plugin_t *init_demux_mpeg_block(config_values_t *cfg, uint32_t xd) { +demux_plugin_t *init_demux_mpeg_block(int iface, config_values_t *config) { demux_mpeg_block_t *this = xmalloc (sizeof (demux_mpeg_block_t)); - xine_debug = xd; - - this->demux_plugin.open = demux_mpeg_block_open; - this->demux_plugin.start = demux_mpeg_block_start; - this->demux_plugin.stop = demux_mpeg_block_stop; - this->demux_plugin.close = demux_mpeg_block_close; - this->demux_plugin.get_status = demux_mpeg_block_get_status; - this->demux_plugin.get_identifier = demux_mpeg_block_get_id; - - return (demux_plugin_t *) this; + switch (iface) { + + case 1: + // FIXME xine_debug = xd; + this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; + this->demux_plugin.open = demux_mpeg_block_open; + this->demux_plugin.start = demux_mpeg_block_start; + this->demux_plugin.stop = demux_mpeg_block_stop; + this->demux_plugin.close = demux_mpeg_block_close; + this->demux_plugin.get_status = demux_mpeg_block_get_status; + this->demux_plugin.get_identifier = demux_mpeg_block_get_id; + + return (demux_plugin_t *) this; + break; + + default: + fprintf(stderr, + "Demuxer plugin doesn't support plugin API version %d.\n" + "PLUGIN DISABLED.\n" + "This means there's a version mismatch between xine and this " + "demuxer plugin.\nInstalling current input plugins should help.\n", + iface); + return NULL; + } } |