summaryrefslogtreecommitdiff
path: root/src/xine-engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/xine-engine')
-rw-r--r--src/xine-engine/Makefile.am17
-rw-r--r--src/xine-engine/load_plugins.c100
-rw-r--r--src/xine-engine/xine.c11
-rw-r--r--src/xine-engine/xine_internal.h43
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