summaryrefslogtreecommitdiff
path: root/src/demuxers/demux_ts.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/demuxers/demux_ts.c')
-rw-r--r--src/demuxers/demux_ts.c72
1 files changed, 55 insertions, 17 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index add6bafd6..744f85a8a 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.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_ts.c,v 1.29 2001/11/18 03:53:23 guenter Exp $
+ * $Id: demux_ts.c,v 1.30 2001/11/30 00:53:51 f1rmb Exp $
*
* Demultiplexer for MPEG2 Transport Streams.
*
@@ -68,6 +68,9 @@
#include "xineutils.h"
#include "demux.h"
+#define VALID_MRLS "fifo,stdin"
+#define VALID_ENDS "m2t,ts,trp"
+
/*
#define TS_LOG
*/
@@ -120,6 +123,8 @@ typedef struct {
*/
demux_plugin_t plugin;
+ config_values_t *config;
+
fifo_buffer_t *fifoAudio;
fifo_buffer_t *fifoVideo;
@@ -1075,35 +1080,61 @@ static int demux_ts_open(demux_plugin_t *this_gen, input_plugin_t *input,
char *mrl;
char *media;
char *ending;
-
+ char *m, *valid_mrls, *valid_ends;
+
switch (stage) {
case STAGE_BY_EXTENSION:
+
+ xine_strdupa(valid_mrls, (this->config->register_string(this->config,
+ "mrl.mrls_ts", VALID_MRLS,
+ "valid mrls for ts demuxer",
+ NULL, NULL, NULL)));
+
mrl = input->get_mrl(input);
media = strstr(mrl, "://");
+
if (media) {
fprintf (stderr, "demux %u ts_open! \n", __LINE__);
- if ((!(strncasecmp(mrl, "stdin", 5))) || (!(strncasecmp(mrl, "fifo", 4)))) {
- if(!(strncasecmp(media+3, "ts", 3))) {
- break;
+ while((m = xine_strsep(&valid_mrls, ",")) != NULL) {
+
+ while(*m == ' ' || *m == '\t') m++;
+
+ if(!strncmp(mrl, m, strlen(m))) {
+
+ if(!strncmp((media + 3), "ts", 2)) {
+ break;
+ }
+ return DEMUX_CANNOT_HANDLE;
+
+ }
+ else if(strncasecmp(mrl, "file", 4)) {
+ return DEMUX_CANNOT_HANDLE;
}
- return DEMUX_CANNOT_HANDLE;
- }
- else if (strncasecmp(mrl, "file", 4)) {
- return DEMUX_CANNOT_HANDLE;
}
}
+
ending = strrchr(mrl, '.');
if (ending) {
#ifdef TS_LOG
- xprintf(VERBOSE|DEMUX, "demux_ts_open: ending %s of %s\n", ending, mrl);
+ printf("demux_ts_open: ending %s of %s\n", ending, mrl);
#endif
- if ((!strcasecmp(ending, ".m2t")) ||
- (!strcasecmp(ending, ".ts")) ||
- (!strcasecmp(ending, ".trp")) ) {
- break;
+
+ xine_strdupa(valid_ends, (this->config->register_string(this->config,
+ "mrl.ends_ts", VALID_ENDS,
+ "valid mrls ending for ts demuxer",
+ NULL, NULL, NULL)));
+ while((m = xine_strsep(&valid_ends, ",")) != NULL) {
+
+ while(*m == ' ' || *m == '\t') m++;
+
+ if(!strcasecmp((ending + 1), m)) {
+ break;
+ }
}
}
return DEMUX_CANNOT_HANDLE;
+ break;
+
default:
return DEMUX_CANNOT_HANDLE;
}
@@ -1208,7 +1239,6 @@ static int demux_ts_get_stream_length (demux_plugin_t *this_gen) {
demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) {
demux_ts *this;
- config_values_t *config;
int i;
if (iface != 6) {
@@ -1222,8 +1252,16 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) {
/*
* Initialise the generic plugin.
*/
- this = xine_xmalloc(sizeof(*this));
- config = xine->config;
+ this = xine_xmalloc(sizeof(*this));
+ this->config = xine->config;
+
+ (void*) this->config->register_string(this->config, "mrl.mrls_ts", VALID_MRLS,
+ "valid mrls for ts demuxer",
+ NULL, NULL, NULL);
+ (void*) this->config->register_string(this->config,
+ "mrl.ends_ts", VALID_ENDS,
+ "valid mrls ending for ts demuxer",
+ NULL, NULL, NULL);
this->plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION;
this->plugin.open = demux_ts_open;