X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fstream_out%2Fstandard.c;h=7262eab383a7b93a6ffaa42db4f57028cc8cfb3f;hb=4f66b0775778c153c2a5445b5e603e2857d7a38f;hp=6b97d20af2ce44b739b38b2c01d5965075cc599b;hpb=3ead0c71de880ae8e114d678d5ea9f892feda29c;p=vlc diff --git a/modules/stream_out/standard.c b/modules/stream_out/standard.c index 6b97d20af2..7262eab383 100644 --- a/modules/stream_out/standard.c +++ b/modules/stream_out/standard.c @@ -28,11 +28,11 @@ # include "config.h" #endif -#ifdef WIN32 -# define _WIN32_WINNT 0x0501 +#ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0500 #endif -#include +#include #include #include @@ -217,7 +217,11 @@ static int Open( vlc_object_t *p_this ) free( val.psz_string ); p_sys = p_stream->p_sys = malloc( sizeof( sout_stream_sys_t) ); - if( !p_sys ) return VLC_ENOMEM; + if( !p_sys ) + { + free( psz_url ); + return VLC_ENOMEM; + } p_stream->p_sys->p_session = NULL; msg_Dbg( p_this, "creating `%s/%s://%s'", psz_access, psz_mux, psz_url ); @@ -278,6 +282,8 @@ static int Open( vlc_object_t *p_this ) else { msg_Err( p_stream, "no access _and_ no muxer (fatal error)" ); + free( psz_url ); + free( p_sys ); return VLC_EGENERIC; } } @@ -300,6 +306,7 @@ static int Open( vlc_object_t *p_this ) else { msg_Err( p_stream, "no mux specified or found by extension" ); + free( p_sys ); return VLC_EGENERIC; } } @@ -368,6 +375,8 @@ static int Open( vlc_object_t *p_this ) psz_access, psz_mux, psz_url ); free( psz_access ); free( psz_mux ); + free( psz_url ); + free( p_sys ); return VLC_EGENERIC; } msg_Dbg( p_stream, "access opened" ); @@ -382,6 +391,8 @@ static int Open( vlc_object_t *p_this ) sout_AccessOutDelete( p_access ); free( psz_access ); free( psz_mux ); + free( psz_url ); + free( p_sys ); return VLC_EGENERIC; } msg_Dbg( p_stream, "mux opened" ); @@ -400,23 +411,20 @@ static int Open( vlc_object_t *p_this ) char *dhost = var_GetNonEmptyString (p_access, "dst-addr"); int sport = var_GetInteger (p_access, "src-port"); int dport = var_GetInteger (p_access, "dst-port"); - char port[6]; struct sockaddr_storage src, dst; socklen_t srclen = 0, dstlen = 0; struct addrinfo *res; - snprintf (port, sizeof (port), "%d", dport); - if (getaddrinfo (dhost, port, &hints, &res) == 0) + if ( vlc_getaddrinfo ( VLC_OBJECT(p_stream), dhost, dport, &hints, &res) == 0) { memcpy (&dst, res->ai_addr, dstlen = res->ai_addrlen); - freeaddrinfo (res); + vlc_freeaddrinfo (res); } - snprintf (port, sizeof (port), "%d", sport); - if (getaddrinfo (shost, port, &hints, &res) == 0) + if (vlc_getaddrinfo ( VLC_OBJECT(p_stream), shost, sport, &hints, &res) == 0) { memcpy (&src, res->ai_addr, srclen = res->ai_addrlen); - freeaddrinfo (res); + vlc_freeaddrinfo (res); } char *head = vlc_sdp_Start (VLC_OBJECT (p_stream), SOUT_CFG_PREFIX, @@ -457,6 +465,9 @@ static int Open( vlc_object_t *p_this ) free( psz_mux ); free( psz_url ); + if( !sout_AccessOutCanControlPace( p_access ) ) + p_sout->i_out_pace_nocontrol++; + return VLC_SUCCESS; } @@ -473,6 +484,8 @@ static void Close( vlc_object_t * p_this ) sout_AnnounceUnRegister( p_stream->p_sout, p_sys->p_session ); sout_MuxDelete( p_sys->p_mux ); + if( !sout_AccessOutCanControlPace( p_access ) ) + p_stream->p_sout->i_out_pace_nocontrol--; sout_AccessOutDelete( p_access ); free( p_sys ); @@ -490,10 +503,12 @@ static sout_stream_id_t * Add( sout_stream_t *p_stream, es_format_t *p_fmt ) sout_stream_id_t *id; id = malloc( sizeof( sout_stream_id_t ) ); + if( !id ) + return NULL; + if( ( id->p_input = sout_MuxAddStream( p_sys->p_mux, p_fmt ) ) == NULL ) { free( id ); - return NULL; }