X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fstream_out%2Fstandard.c;h=f052ccba2127910e9175d366ad240d73529af307;hb=9aa7bcf1457555711311d43e8752eeebf761946f;hp=34e86bd0a10d6929522950a075b35ad616f4e1ad;hpb=74bd916a43f61a413acc24f94230f12dbf0c190b;p=vlc diff --git a/modules/stream_out/standard.c b/modules/stream_out/standard.c index 34e86bd0a1..f052ccba21 100644 --- a/modules/stream_out/standard.c +++ b/modules/stream_out/standard.c @@ -100,11 +100,7 @@ vlc_module_begin () set_shortname( N_("Standard")) set_description( N_("Standard stream output") ) set_capability( "sout stream", 50 ) - add_shortcut( "standard" ) - add_shortcut( "std" ) - add_shortcut( "file" ) - add_shortcut( "http" ) - add_shortcut( "udp" ) + add_shortcut( "standard", "std", "file", "http", "udp" ) set_category( CAT_SOUT ) set_subcategory( SUBCAT_SOUT_STREAM ) @@ -170,7 +166,7 @@ static int Open( vlc_object_t *p_this ) sout_stream_sys_t *p_sys; char *psz_mux; - char *psz_access=NULL; + char *psz_access; char *psz_url=NULL; char *psz_bind; char *psz_path; @@ -185,52 +181,41 @@ static int Open( vlc_object_t *p_this ) config_ChainParse( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options, p_stream->p_cfg ); - if( !strcmp( p_stream->psz_name, "http" ) ) + psz_access = var_GetString( p_stream, SOUT_CFG_PREFIX "access" ); + if( EMPTY_STR(psz_access) ) { - psz_access = strdup("http"); - } - else if (!strcmp (p_stream->psz_name, "udp")) - { - psz_access = strdup("udp"); - } - else if (!strcmp (p_stream->psz_name, "file")) - { - psz_access = strdup("file"); - } - - var_Get( p_stream, SOUT_CFG_PREFIX "access", &val ); - if( *val.psz_string ) - { - free( psz_access ); - psz_access = val.psz_string; - } - else - { - free( val.psz_string ); + if( !strcmp( p_stream->psz_name, "http" ) ) + { + psz_access = strdup("http"); + } + else if (!strcmp (p_stream->psz_name, "udp")) + { + psz_access = strdup("udp"); + } + else if (!strcmp (p_stream->psz_name, "file")) + { + psz_access = strdup("file"); + } } - var_Get( p_stream, SOUT_CFG_PREFIX "mux", &val ); - psz_mux = *val.psz_string ? val.psz_string : NULL; - if( !*val.psz_string ) free( val.psz_string ); - - var_Get( p_stream, SOUT_CFG_PREFIX "bind", &val ); - psz_bind = *val.psz_string ? val.psz_string : NULL; - if( !*val.psz_string ) free( val.psz_string); + psz_mux = var_GetNonEmptyString( p_stream, SOUT_CFG_PREFIX "mux" ); + psz_bind = var_GetNonEmptyString( p_stream, SOUT_CFG_PREFIX "bind" ); + psz_path = var_GetNonEmptyString( p_stream, SOUT_CFG_PREFIX "path" ); - var_Get( p_stream, SOUT_CFG_PREFIX "path", &val ); - psz_path = *val.psz_string ? val.psz_string : NULL; - if( !*val.psz_string ) free( val.psz_string); - - if( psz_bind ) psz_url = psz_bind; - if( psz_url && psz_path ) + if( psz_bind && psz_path ) { - if( asprintf( &psz_url,"%s/%s",psz_url,psz_path ) == -1 ) + if( asprintf( &psz_url, "%s/%s", psz_bind, psz_path ) == -1 ) psz_url = NULL; - free( psz_path ); } + else if( psz_bind ) + { + psz_url = psz_bind; + psz_bind = NULL; + } + free( psz_path ); var_Get( p_stream, SOUT_CFG_PREFIX "dst", &val ); - if( *val.psz_string ) + if( *val.psz_string ) { free( psz_url); psz_url = val.psz_string; @@ -241,6 +226,9 @@ static int Open( vlc_object_t *p_this ) p_sys = p_stream->p_sys = malloc( sizeof( sout_stream_sys_t) ); if( !p_sys ) { + free( psz_access ); + free( psz_mux ); + free( psz_bind ); free( psz_url ); return VLC_ENOMEM; } @@ -257,6 +245,9 @@ static int Open( vlc_object_t *p_this ) { "avi", "avi" }, { "ogg", "ogg" }, { "ogm", "ogg" }, + { "ogv", "ogg" }, + { "flac","raw" }, + { "mp3", "raw" }, { "mp4", "mp4" }, { "mov", "mov" }, { "moov","mov" }, @@ -272,13 +263,13 @@ static int Open( vlc_object_t *p_this ) { "wav", "wav" }, { "flv", "ffmpeg{mux=flv}" }, { "mkv", "ffmpeg{mux=matroska}"}, + { "webm", "ffmpeg{mux=webm}"}, { "", "" } }; const char *psz_ext = strrchr( psz_url, '.' ) + 1; - int i; msg_Dbg( p_this, "extension is %s", psz_ext ); - for( i = 0; exttomux[i].ext[0]; i++ ) + for( int i = 0; exttomux[i].ext[0]; i++ ) { if( !strcasecmp( psz_ext, exttomux[i].ext ) ) { @@ -304,6 +295,7 @@ static int Open( vlc_object_t *p_this ) else { msg_Err( p_stream, "no access _and_ no muxer (fatal error)" ); + free( psz_bind ); free( psz_url ); free( p_sys ); return VLC_EGENERIC; @@ -328,6 +320,9 @@ static int Open( vlc_object_t *p_this ) else { msg_Err( p_stream, "no mux specified or found by extension" ); + free( psz_access ); + free( psz_bind ); + free( psz_url ); free( p_sys ); return VLC_EGENERIC; } @@ -397,6 +392,7 @@ static int Open( vlc_object_t *p_this ) psz_access, psz_mux, psz_url ); free( psz_access ); free( psz_mux ); + free( psz_bind ); free( psz_url ); free( p_sys ); return VLC_EGENERIC; @@ -413,6 +409,7 @@ static int Open( vlc_object_t *p_this ) sout_AccessOutDelete( p_access ); free( psz_access ); free( psz_mux ); + free( psz_bind ); free( psz_url ); free( p_sys ); return VLC_EGENERIC; @@ -440,13 +437,13 @@ static int Open( vlc_object_t *p_this ) if ( vlc_getaddrinfo ( VLC_OBJECT(p_stream), dhost, dport, &hints, &res) == 0) { memcpy (&dst, res->ai_addr, dstlen = res->ai_addrlen); - vlc_freeaddrinfo (res); + freeaddrinfo (res); } if (vlc_getaddrinfo ( VLC_OBJECT(p_stream), shost, sport, &hints, &res) == 0) { memcpy (&src, res->ai_addr, srclen = res->ai_addrlen); - vlc_freeaddrinfo (res); + freeaddrinfo (res); } char *head = vlc_sdp_Start (VLC_OBJECT (p_stream), SOUT_CFG_PREFIX, @@ -485,6 +482,7 @@ static int Open( vlc_object_t *p_this ) free( psz_access ); free( psz_mux ); + free( psz_bind ); free( psz_url ); if( !sout_AccessOutCanControlPace( p_access ) )