* stream_output.c : stream output module
*****************************************************************************
* Copyright (C) 2002 VideoLAN
- * $Id: stream_output.c,v 1.27 2003/04/29 21:32:21 fenrir Exp $
+ * $Id: stream_output.c,v 1.28 2003/04/29 22:38:56 fenrir Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Laurent Aimar <fenrir@via.ecp.fr>
#define sout_stream_url_to_chain( p, s ) _sout_stream_url_to_chain( VLC_OBJECT(p), s )
static char *_sout_stream_url_to_chain( vlc_object_t *, char * );
+#define module_NeedStrict(a,b,c) __module_NeedStrict(VLC_OBJECT(a),b,c)
+static module_t *__module_NeedStrict( vlc_object_t *, const char *, const char * );
+
/*
* Generic MRL parser
*
p_access->pf_seek = NULL;
p_access->pf_write = NULL;
- p_access->p_module = module_Need( p_access,
- "sout access",
- p_access->psz_access );;
+ p_access->p_module =
+ module_NeedStrict( p_access, "sout access", p_access->psz_access );
if( !p_access->p_module )
{
p_mux->p_sys = NULL;
- p_mux->p_module = module_Need( p_mux,
- "sout mux",
- p_mux->psz_mux );
+ p_mux->p_module =
+ module_NeedStrict( p_mux, "sout mux", p_mux->psz_mux );
+
if( p_mux->p_module == NULL )
{
FREE( p_mux->psz_mux );
*ppsz_name = _strndup( psz_chain, p - psz_chain );
- //fprintf( stderr, "name=%s - rest=%s\n", *ppsz_name, p );
+ /* fprintf( stderr, "name=%s - rest=%s\n", *ppsz_name, p ); */
SKIPSPACE( p );
p++;
}
- //fprintf( stderr, "name=%s - rest=%s\n", psz_name, p );
+ /* fprintf( stderr, "name=%s - rest=%s\n", psz_name, p ); */
if( p == psz_name )
{
fprintf( stderr, "invalid options (empty)" );
if( end )
{
-// fprintf( stderr, "##%s -- %s\n", p, end );
+/* fprintf( stderr, "##%s -- %s\n", p, end ); */
cfg.psz_value = _strndup( p, end - p );
p = end + 1;
}
{
sout_stream_t *p_stream;
+ if( !psz_chain )
+ {
+ msg_Err( p_sout, "invalid chain" );
+ return NULL;
+ }
+
p_stream = vlc_object_create( p_sout, sizeof( sout_stream_t ) );
if( !p_stream )
msg_Dbg( p_sout, "stream=`%s'", p_stream->psz_name );
p_stream->p_module =
- module_Need( p_stream, "sout stream", p_stream->psz_name );
+ module_NeedStrict( p_stream, "sout stream", p_stream->psz_name );
if( !p_stream->p_module )
{
return( psz_chain );
}
+/*****************************************************************************/
+static module_t *__module_NeedStrict( vlc_object_t *p_obj, const char *psz_capacity, const char *psz_name )
+{
+ module_t *p_module;
+
+ if( !psz_name || !*psz_name )
+ {
+ p_module = module_Need( p_obj, psz_capacity, psz_name );
+ }
+ else
+ {
+ char *psz_name_strict = malloc( strlen( psz_name ) + 6 );
+ strcpy( psz_name_strict, psz_name );
+ strcat( psz_name_strict, ",none" );
+
+ p_module = module_Need( p_obj, psz_capacity, psz_name_strict );
+
+ free( psz_name_strict );
+ }
+
+ return p_module;
+}
+
+