diff options
Diffstat (limited to 'src/demuxers/demux_mpeg_block.c')
-rw-r--r-- | src/demuxers/demux_mpeg_block.c | 68 |
1 files changed, 51 insertions, 17 deletions
diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c index cd272d55b..8f4639b59 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.64 2001/11/28 16:13:07 guenter Exp $ + * $Id: demux_mpeg_block.c,v 1.65 2001/11/30 00:53:51 f1rmb Exp $ * * demultiplexer for mpeg 1/2 program streams * @@ -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 @@ static int demux_mpeg_block_open(demux_plugin_t *this_gen, 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 @@ static int demux_mpeg_block_open(demux_plugin_t *this_gen, 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 @@ static int demux_mpeg_block_get_stream_length (demux_plugin_t *this_gen) { 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 @@ demux_plugin_t *init_demuxer_plugin(int iface, xine_t *xine) { 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; |