summaryrefslogtreecommitdiff
path: root/src/demuxers
diff options
context:
space:
mode:
authorDaniel Caujolle-Bert <f1rmb@users.sourceforge.net>2001-04-21 00:14:39 +0000
committerDaniel Caujolle-Bert <f1rmb@users.sourceforge.net>2001-04-21 00:14:39 +0000
commit8e7dc911d41be3013198436848492efbce679c9a (patch)
treee26bc7209baa161d7a790c4f3f2917db201fa7a1 /src/demuxers
parent9906645c4669be8476c683b7dfcf321b99ac15a1 (diff)
downloadxine-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.am39
-rw-r--r--src/demuxers/demux.h23
-rw-r--r--src/demuxers/demux_avi.c35
-rw-r--r--src/demuxers/demux_mpeg.c36
-rw-r--r--src/demuxers/demux_mpeg_block.c40
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;
+ }
}