From: Daniel Caujolle-B. <f1...@us...> - 2001-11-30 00:53:54
|
Update of /cvsroot/xine/xine-lib/src/demuxers In directory usw-pr-cvs1:/tmp/cvs-serv27936/src/demuxers Modified Files: demux_asf.c demux_avi.c demux_elem.c demux_mpeg.c demux_mpeg_block.c demux_mpgaudio.c demux_ogg.c demux_pes.c demux_qt.c demux_ts.c Log Message: Valid mrls are no more static (except few ones), like file suffix too. First draft of compat.h (almost empty for now). Index: demux_asf.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_asf.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- demux_asf.c 2001/11/26 13:29:54 1.15 +++ demux_asf.c 2001/11/30 00:53:51 1.16 @@ -56,6 +56,8 @@ #define DEFRAG_BUFSIZE 65536 +#define VALID_ENDS "asf,wmv" + typedef struct { int num; int seq; @@ -75,6 +77,8 @@ typedef struct demux_asf_s { demux_plugin_t demux_plugin; + config_values_t *config; + fifo_buffer_t *audio_fifo; fifo_buffer_t *video_fifo; @@ -1160,6 +1164,7 @@ case STAGE_BY_EXTENSION: { char *ending; char *MRL; + char *m, *valid_ends; MRL = input->get_mrl (input); @@ -1172,12 +1177,18 @@ if(!ending) return DEMUX_CANNOT_HANDLE; - if(!strcasecmp(ending, ".asf")) { - this->input = input; - return DEMUX_CAN_HANDLE; - } else if(!strcasecmp(ending, ".wmv")) { - this->input = input; - return DEMUX_CAN_HANDLE; + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_asf", VALID_ENDS, + "valid mrls ending for asf demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((ending + 1), m)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } } } break; @@ -1205,7 +1216,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_asf_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_asf: plugin doesn't support plugin API version %d.\n" @@ -1214,10 +1224,15 @@ iface); return NULL; } - - this = xine_xmalloc (sizeof (demux_asf_t)); - config = xine->config; + + this = xine_xmalloc (sizeof (demux_asf_t)); + this->config = xine->config; + (void*) this->config->register_string(this->config, + "mrl.ends_asf", VALID_ENDS, + "valid mrls ending for asf demuxer", + NULL, NULL, NULL); + this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; this->demux_plugin.open = demux_asf_open; this->demux_plugin.start = demux_asf_start; Index: demux_avi.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_avi.c,v retrieving revision 1.53 retrieving revision 1.54 diff -u -r1.53 -r1.54 --- demux_avi.c 2001/11/18 03:53:23 1.53 +++ demux_avi.c 2001/11/30 00:53:51 1.54 @@ -46,6 +46,8 @@ #include "libw32dll/wine/windef.h" #include "libw32dll/wine/vfw.h" +#define VALID_ENDS "avi" + /* The following variable indicates the kind of error */ typedef struct @@ -107,6 +109,8 @@ typedef struct demux_avi_s { demux_plugin_t demux_plugin; + config_values_t *config; + fifo_buffer_t *audio_fifo; fifo_buffer_t *video_fifo; @@ -1036,31 +1040,41 @@ case STAGE_BY_EXTENSION: { char *ending, *mrl; + char *m, *valid_ends; mrl = input->get_mrl (input); ending = strrchr(mrl, '.'); if(ending) { - if(!strcasecmp(ending, ".avi")) { - this->input = input; - - if (strncmp(this->last_mrl, input->get_mrl (input), 1024)) { - if (this->avi) - AVI_close (this->avi); - this->avi = AVI_init (this); - } + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_avi", VALID_ENDS, + "valid mrls ending for avi demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((ending + 1), m)) { - if (this->avi) { - strncpy(this->last_mrl, input->get_mrl (input), 1024); - return DEMUX_CAN_HANDLE; - } else { - printf ("demux_avi: AVI_init failed (AVI_errno: %d)\n",this->AVI_errno); - return DEMUX_CANNOT_HANDLE; + this->input = input; + + if (strncmp(this->last_mrl, input->get_mrl (input), 1024)) { + if (this->avi) + AVI_close (this->avi); + this->avi = AVI_init (this); + } + + if (this->avi) { + strncpy(this->last_mrl, input->get_mrl (input), 1024); + return DEMUX_CAN_HANDLE; + } else { + printf ("demux_avi: AVI_init failed (AVI_errno: %d)\n",this->AVI_errno); + return DEMUX_CANNOT_HANDLE; + } } } } - return DEMUX_CANNOT_HANDLE; } break; @@ -1096,7 +1110,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_avi_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_avi: this plugin doesn't support plugin API version %d.\n" @@ -1105,9 +1118,14 @@ iface); return NULL; } + + this = xine_xmalloc (sizeof (demux_avi_t)); + this->config = xine->config; - this = xine_xmalloc (sizeof (demux_avi_t)); - config = xine->config; + (void*) this->config->register_string(this->config, + "mrl.ends_avi", VALID_ENDS, + "valid mrls ending for avi demuxer", + NULL, NULL, NULL); this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; this->demux_plugin.open = demux_avi_open; Index: demux_elem.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_elem.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- demux_elem.c 2001/11/18 03:53:23 1.29 +++ demux_elem.c 2001/11/30 00:53:51 1.30 @@ -36,20 +36,21 @@ #include "xine_internal.h" #include "xineutils.h" +#include "compat.h" #include "demux.h" -#ifndef __GNUC__ -#define __FUNCTION__ __func__ -#endif - #define NUM_PREVIEW_BUFFERS 50 #define DEMUX_MPEG_ELEM_IFACE_VERSION 1 +#define VALID_ENDS ".mpv" + typedef struct { demux_plugin_t demux_plugin; + config_values_t *config; + fifo_buffer_t *video_fifo; fifo_buffer_t *audio_fifo; @@ -276,18 +277,28 @@ case STAGE_BY_EXTENSION: { char *suffix; char *MRL; + char *m, *valid_ends; MRL = input->get_mrl (input); suffix = strrchr(MRL, '.'); if(suffix) { - if(!strcasecmp(suffix, ".mpv")) { - this->input = input; - return DEMUX_CAN_HANDLE; + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_elem", VALID_ENDS, + "valid mrls ending for elementary demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((suffix + 1), m)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } } } - + return DEMUX_CANNOT_HANDLE; } break; @@ -324,7 +335,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_mpeg_elem_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_elem: plugin doesn't support plugin API version %d.\n" @@ -334,9 +344,14 @@ return NULL; } - this = malloc (sizeof (demux_mpeg_elem_t)); - config = xine->config; + this = malloc (sizeof (demux_mpeg_elem_t)); + this->config = xine->config; + (void*) this->config->register_string(this->config, + "mrl.ends_elem", VALID_ENDS, + "valid mrls ending for elementary demuxer", + NULL, NULL, NULL); + this->demux_plugin.interface_version = DEMUX_MPEG_ELEM_IFACE_VERSION; this->demux_plugin.open = demux_mpeg_elem_open; this->demux_plugin.start = demux_mpeg_elem_start; @@ -349,4 +364,3 @@ return &this->demux_plugin; } - Index: demux_mpeg.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_mpeg.c,v retrieving revision 1.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- demux_mpeg.c 2001/11/18 03:53:23 1.45 +++ demux_mpeg.c 2001/11/30 00:53:51 1.46 @@ -42,12 +42,17 @@ #include "demux.h" #include "xineutils.h" +#define VALID_MRLS "stdin,fifo" +#define VALID_ENDS "mpg,mpeg,mpe" + #define NUM_PREVIEW_BUFFERS 150 typedef struct demux_mpeg_s { demux_plugin_t demux_plugin; + config_values_t *config; + fifo_buffer_t *audio_fifo; fifo_buffer_t *video_fifo; @@ -821,21 +826,32 @@ char *media; char *ending; char *MRL = input->get_mrl(input); + char *m, *valid_mrls, *valid_ends; + + xine_strdupa(valid_mrls, (this->config->register_string(this->config, + "mrl.mrls_mpeg", VALID_MRLS, + "valid mrls for mpeg demuxer", + NULL, NULL, NULL))); media = strstr(MRL, "://"); if (media) { - if ((!(strncasecmp(MRL, "stdin", 5))) - || (!(strncasecmp(MRL, "fifo", 4)))) { - - if(!(strncasecmp(media+3, "mpeg1", 5))) { - this->input = input; - return DEMUX_CAN_HANDLE; - } - else if(!(strncasecmp((media+3), "mpeg2", 5))) { + while((m = xine_strsep(&valid_mrls, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strncmp(MRL, m, strlen(m))) { + + if(!strncmp((media + 3), "mpeg1", 5)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } + else if(!strncasecmp((media + 3), "mpeg2", 5)) { + return DEMUX_CANNOT_HANDLE; + } + + fprintf(stderr, "You should specify mpeg(mpeg1/mpeg2) stream type.\n"); return DEMUX_CANNOT_HANDLE; } - fprintf(stderr, "You should specify mpeg(mpeg1/mpeg2) stream type.\n"); - return DEMUX_CANNOT_HANDLE; } } @@ -844,15 +860,22 @@ if(!ending) return DEMUX_CANNOT_HANDLE; - if(!strcasecmp(ending, ".mpg") - || (!strcasecmp(ending, ".mpeg")) - || (!strcasecmp(ending, ".mpe"))) { - this->input = input; - return DEMUX_CAN_HANDLE; + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_mpeg", VALID_ENDS, + "valid mrls ending for mpeg demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((ending + 1), m)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } } } break; - + default: return DEMUX_CANNOT_HANDLE; break; @@ -888,7 +911,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_mpeg_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_mpeg: plugin doesn't support plugin API version %d.\n" @@ -898,9 +920,18 @@ return NULL; } - this = xine_xmalloc (sizeof (demux_mpeg_t)); - config = xine->config; + this = xine_xmalloc (sizeof (demux_mpeg_t)); + this->config = xine->config; + /* Calling register_string() configure valid mrls in configfile */ + (void*) this->config->register_string(this->config, "mrl.mrls_mpeg", VALID_MRLS, + "valid mrls for mpeg demuxer", + NULL, NULL, NULL); + (void*) this->config->register_string(this->config, + "mrl.ends_mpeg", VALID_ENDS, + "valid mrls ending for mpeg demuxer", + NULL, NULL, NULL); + this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; this->demux_plugin.open = demux_mpeg_open; this->demux_plugin.start = demux_mpeg_start; @@ -913,3 +944,4 @@ return (demux_plugin_t *) this; } + Index: demux_mpeg_block.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_mpeg_block.c,v retrieving revision 1.64 retrieving revision 1.65 diff -u -r1.64 -r1.65 --- demux_mpeg_block.c 2001/11/28 16:13:07 1.64 +++ demux_mpeg_block.c 2001/11/30 00:53:51 1.65 @@ -38,13 +38,17 @@ #include "xineutils.h" #include "demux.h" +#define VALID_MRLS "dvd,stdin,fifo,d4d,dmd" +#define VALID_ENDS "vob" + #define NUM_PREVIEW_BUFFERS 250 typedef struct demux_mpeg_block_s { demux_plugin_t demux_plugin; xine_t *xine; - + config_values_t *config; + fifo_buffer_t *audio_fifo; fifo_buffer_t *video_fifo; @@ -905,19 +909,32 @@ char *media; char *ending; char *MRL; + char *m, *valid_mrls, *valid_ends; + + xine_strdupa(valid_mrls, (this->config->register_string(this->config, + "mrl.mrls_mpeg_block", VALID_MRLS, + "valid mrls for mpeg block demuxer", + NULL, NULL, NULL))); MRL = input->get_mrl (input); media = strstr(MRL, "://"); if(media) { - if(!strncmp(MRL, "dvd", 3) || !strncmp(MRL, "d4d", 3) || !strncmp(MRL, "dmd", 3) - || (((!strncmp(MRL, "stdin", 5) || !strncmp(MRL, "fifo", 4)) - && (!strncmp((media+3), "mpeg2", 5) ))) - ) { - this->blocksize = 2048; - demux_mpeg_block_accept_input (this, input); - return DEMUX_CAN_HANDLE; + + while((m = xine_strsep(&valid_mrls, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if((!strncmp(MRL, m, strlen(m))) + || ((!strncmp(MRL, m, strlen(m))) && (!strncmp((media + 3), "mpeg2", 5)))) { + + this->blocksize = 2048; + demux_mpeg_block_accept_input(this, input); + return DEMUX_CAN_HANDLE; + } + } + if(!strncmp(MRL, "vcd", 3)) { this->blocksize = 2324; demux_mpeg_block_accept_input (this, input); @@ -934,10 +951,19 @@ if(!ending) return DEMUX_CANNOT_HANDLE; - if(!strcasecmp(ending, ".vob")) { - this->blocksize = 2048; - demux_mpeg_block_accept_input (this, input); - return DEMUX_CAN_HANDLE; + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_mpeg_block", VALID_ENDS, + "valid mrls ending for mpeg block demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((ending + 1), m)) { + this->blocksize = 2048; + demux_mpeg_block_accept_input (this, input); + return DEMUX_CAN_HANDLE; + } } } break; @@ -972,7 +998,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_mpeg_block_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_mpeg_block: plugin doesn't support plugin API version %d.\n" @@ -982,9 +1007,18 @@ return NULL; } - this = xine_xmalloc (sizeof (demux_mpeg_block_t)); - this->xine = xine; - config = xine->config; + this = xine_xmalloc (sizeof (demux_mpeg_block_t)); + this->xine = xine; + this->config = xine->config; + + /* Calling register_string() configure valid mrls in configfile */ + (void*) this->config->register_string(this->config, "mrl.mrls_mpeg_block", VALID_MRLS, + "valid mrls for mpeg block demuxer", + NULL, NULL, NULL); + (void*) this->config->register_string(this->config, + "mrl.ends_mpeg_block", VALID_ENDS, + "valid mrls ending for mpeg block demuxer", + NULL, NULL, NULL); this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; this->demux_plugin.open = demux_mpeg_block_open; Index: demux_mpgaudio.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_mpgaudio.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- demux_mpgaudio.c 2001/11/18 03:53:23 1.29 +++ demux_mpgaudio.c 2001/11/30 00:53:51 1.30 @@ -36,18 +36,19 @@ #include "xine_internal.h" #include "xineutils.h" +#include "compat.h" #include "demux.h" -#ifndef __GNUC__ -#define __FUNCTION__ __func__ -#endif - #define DEMUX_MPGAUDIO_IFACE_VERSION 3 +#define VALID_ENDS "mp3,mp2,mpa,mpega" + typedef struct { demux_plugin_t demux_plugin; + config_values_t *config; + fifo_buffer_t *audio_fifo; fifo_buffer_t *video_fifo; @@ -372,7 +373,8 @@ case STAGE_BY_EXTENSION: { char *suffix; char *MRL; - + char *m, *valid_ends; + MRL = input->get_mrl (input); suffix = strrchr(MRL, '.'); @@ -380,12 +382,18 @@ if(!suffix) return DEMUX_CANNOT_HANDLE; - if(!strcasecmp(suffix, ".mp3") - || (!strcasecmp(suffix, ".mp2")) - || (!strcasecmp(suffix, ".mpa")) - || (!strcasecmp(suffix, ".mpega"))) { - this->input = input; - return DEMUX_CAN_HANDLE; + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_mgaudio", VALID_ENDS, + "valid mrls ending for mpeg audio demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((suffix + 1), m)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } } } break; @@ -430,7 +438,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_mpgaudio_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_mpeg: plugin doesn't support plugin API version %d.\n" @@ -439,9 +446,14 @@ iface); return NULL; } + + this = malloc (sizeof (demux_mpgaudio_t)); + this->config = xine->config; - this = malloc (sizeof (demux_mpgaudio_t)); - config = xine->config; + (void*) this->config->register_string(this->config, + "mrl.ends_mgaudio", VALID_ENDS, + "valid mrls ending for mpeg audio demuxer", + NULL, NULL, NULL); this->demux_plugin.interface_version = DEMUX_MPGAUDIO_IFACE_VERSION; this->demux_plugin.open = demux_mpgaudio_open; Index: demux_ogg.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_ogg.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- demux_ogg.c 2001/11/18 03:53:23 1.10 +++ demux_ogg.c 2001/11/30 00:53:51 1.11 @@ -44,9 +44,13 @@ #define MAX_STREAMS 16 +#define VALID_ENDS "ogg" + typedef struct demux_ogg_s { demux_plugin_t demux_plugin; + config_values_t *config; + fifo_buffer_t *audio_fifo; fifo_buffer_t *video_fifo; @@ -352,6 +356,7 @@ case STAGE_BY_EXTENSION: { char *ending; char *MRL; + char *m, *valid_ends; MRL = input->get_mrl (input); @@ -364,9 +369,18 @@ if(!ending) return DEMUX_CANNOT_HANDLE; - if(!strcasecmp(ending, ".ogg")) { - this->input = input; - return DEMUX_CAN_HANDLE; + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_ogg", VALID_ENDS, + "valid mrls ending for ogg demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((ending + 1), m)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } } } break; @@ -393,7 +407,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_ogg_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_ogg: plugin doesn't support plugin API version %d.\n" @@ -402,9 +415,14 @@ iface); return NULL; } + + this = xine_xmalloc (sizeof (demux_ogg_t)); + this->config = xine->config; - this = xine_xmalloc (sizeof (demux_ogg_t)); - config = xine->config; + (void*) this->config->register_string(this->config, + "mrl.ends_ogg", VALID_ENDS, + "valid mrls ending for ogg demuxer", + NULL, NULL, NULL); this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; this->demux_plugin.open = demux_ogg_open; Index: demux_pes.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_pes.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- demux_pes.c 2001/11/18 03:53:23 1.14 +++ demux_pes.c 2001/11/30 00:53:51 1.15 @@ -43,10 +43,15 @@ #define NUM_PREVIEW_BUFFERS 400 +#define VALID_MRLS "fifo,stdin" +#define VALID_ENDS "vdr" + typedef struct demux_pes_s { demux_plugin_t demux_plugin; + config_values_t *config; + fifo_buffer_t *audio_fifo; fifo_buffer_t *video_fifo; @@ -479,20 +484,31 @@ case STAGE_BY_EXTENSION: { char *media; char *ending; + char *m, *valid_mrls, *valid_ends; char *MRL = input->get_mrl(input); + xine_strdupa(valid_mrls, (this->config->register_string(this->config, + "mrl.mrls_pes", VALID_MRLS, + "valid mrls for pes demuxer", + NULL, NULL, NULL))); + media = strstr(MRL, "://"); if(media) { - if((!(strncasecmp(MRL, "stdin", 5))) - || (!(strncasecmp(MRL, "fifo", 4)))) { - if(!(strncasecmp(media+3, "pes", 3))) { - this->input = input; - return DEMUX_CAN_HANDLE; + while((m = xine_strsep(&valid_mrls, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strncmp(MRL, m, strlen(m))) { + + if(!strncmp((media + 3), "pes", 3)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } + return DEMUX_CANNOT_HANDLE; } - return DEMUX_CANNOT_HANDLE; - } - else if(strncasecmp(MRL, "file", 4)) { - return DEMUX_CANNOT_HANDLE; + else if(strncasecmp(MRL, "file", 4)) { + return DEMUX_CANNOT_HANDLE; + } } } @@ -501,9 +517,18 @@ if(!ending) return DEMUX_CANNOT_HANDLE; - if(!strcasecmp(ending, ".vdr")) { - this->input = input; - return DEMUX_CAN_HANDLE; + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_pes", VALID_ENDS, + "valid mrls ending for pes demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((ending + 1), m)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } } } break; @@ -538,7 +563,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_pes_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_pes: plugin doesn't support plugin API version %d.\n" @@ -548,9 +572,17 @@ return NULL; } - this = xine_xmalloc (sizeof (demux_pes_t)); - config = xine->config; + this = xine_xmalloc (sizeof (demux_pes_t)); + this->config = xine->config; + (void*) this->config->register_string(this->config, "mrl.mrls_pes", VALID_MRLS, + "valid mrls for pes demuxer", + NULL, NULL, NULL); + (void*) this->config->register_string(this->config, + "mrl.ends_pes", VALID_ENDS, + "valid mrls ending for pes demuxer", + NULL, NULL, NULL); + this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; this->demux_plugin.open = demux_pes_open; this->demux_plugin.start = demux_pes_start; Index: demux_qt.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_qt.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- demux_qt.c 2001/11/24 16:30:31 1.15 +++ demux_qt.c 2001/11/30 00:53:51 1.16 @@ -54,6 +54,8 @@ #include "libw32dll/wine/vfw.h" #include "libw32dll/wine/mmreg.h" +#define VALID_ENDS "mov" + /* OpenQuicktime Codec Parameter Types */ #define QUICKTIME_UNKNOWN_PARAMETER -1 #define QUICKTIME_STRING_PARAMETER 0 @@ -514,6 +516,8 @@ typedef struct demux_qt_s { demux_plugin_t demux_plugin; + config_values_t *config; + fifo_buffer_t *audio_fifo; fifo_buffer_t *video_fifo; @@ -4334,6 +4338,7 @@ case STAGE_BY_EXTENSION: { char *suffix; char *MRL; + char *m, *valid_ends; MRL = input->get_mrl (input); @@ -4342,9 +4347,18 @@ if(!suffix) return DEMUX_CANNOT_HANDLE; - if (!strcasecmp(suffix, ".mov")) { - this->input = input; - return DEMUX_CAN_HANDLE; + xine_strdupa(valid_ends, (this->config->register_string(this->config, + "mrl.ends_qt", VALID_ENDS, + "valid mrls ending for qt demuxer", + NULL, NULL, NULL))); + while((m = xine_strsep(&valid_ends, ",")) != NULL) { + + while(*m == ' ' || *m == '\t') m++; + + if(!strcasecmp((suffix + 1), m)) { + this->input = input; + return DEMUX_CAN_HANDLE; + } } return DEMUX_CANNOT_HANDLE; @@ -4378,7 +4392,6 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { demux_qt_t *this; - config_values_t *config; if (iface != 6) { printf( "demux_qt: plugin doesn't support plugin API version %d.\n" @@ -4387,9 +4400,14 @@ iface); return NULL; } + + this = xine_xmalloc (sizeof (demux_qt_t)); + this->config = xine->config; - this = xine_xmalloc (sizeof (demux_qt_t)); - config = xine->config; + (void*) this->config->register_string(this->config, + "mrl.ends_qt", VALID_ENDS, + "valid mrls ending for qt demuxer", + NULL, NULL, NULL); this->demux_plugin.interface_version = DEMUXER_PLUGIN_IFACE_VERSION; this->demux_plugin.open = demux_qt_open; Index: demux_ts.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_ts.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- demux_ts.c 2001/11/18 03:53:23 1.29 +++ demux_ts.c 2001/11/30 00:53:51 1.30 @@ -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 @@ */ demux_plugin_t plugin; + config_values_t *config; + fifo_buffer_t *fifoAudio; fifo_buffer_t *fifoVideo; @@ -1075,35 +1080,61 @@ 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; + } - return DEMUX_CANNOT_HANDLE; - } - else if (strncasecmp(mrl, "file", 4)) { - 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 @@ 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 @@ /* * 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; |