static int Open ( vlc_object_t * );
static void Close( vlc_object_t * );
+#define SOUT_CFG_PREFIX "sout-display-"
+
vlc_module_begin();
set_description( _("Display stream output") );
set_capability( "sout stream", 50 );
add_shortcut( "display" );
+ add_bool( SOUT_CFG_PREFIX "audio", 1, NULL, "audio", "", VLC_TRUE );
+ add_bool( SOUT_CFG_PREFIX "video", 1, NULL, "video", "", VLC_TRUE );
+ add_integer( SOUT_CFG_PREFIX "delay", 100, NULL, "delay", "", VLC_TRUE );
set_callbacks( Open, Close );
vlc_module_end();
/*****************************************************************************
* Exported prototypes
*****************************************************************************/
+static const char *ppsz_sout_options[] = {
+ "audio", "video", "delay", NULL
+};
+
static sout_stream_id_t *Add ( sout_stream_t *, es_format_t * );
static int Del ( sout_stream_t *, sout_stream_id_t * );
static int Send( sout_stream_t *, sout_stream_id_t *, block_t* );
{
sout_stream_t *p_stream = (sout_stream_t*)p_this;
sout_stream_sys_t *p_sys;
- char *val;
+ vlc_value_t val;
+
+ sout_ParseCfg( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options, p_stream->p_cfg );
+
p_sys = malloc( sizeof( sout_stream_sys_t ) );
p_sys->p_input = vlc_object_find( p_stream, VLC_OBJECT_INPUT, FIND_ANYWHERE );
if( !p_sys->p_input )
return VLC_EGENERIC;
}
- p_sys->b_audio = VLC_TRUE;
- p_sys->b_video = VLC_TRUE;
- p_sys->i_delay = 100*1000;
- if( sout_cfg_find( p_stream->p_cfg, "noaudio" ) )
- {
- p_sys->b_audio = VLC_FALSE;
- }
- if( sout_cfg_find( p_stream->p_cfg, "novideo" ) )
- {
- p_sys->b_video = VLC_FALSE;
- }
- if( ( val = sout_cfg_find_value( p_stream->p_cfg, "delay" ) ) )
- {
- p_sys->i_delay = (mtime_t)atoi( val ) * (mtime_t)1000;
- }
+ var_Get( p_stream, SOUT_CFG_PREFIX "audio", &val );
+ p_sys->b_audio = val.b_bool;
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "video", &val );
+ p_sys->b_video = val.b_bool;
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "delay", &val );
+ p_sys->i_delay = (int64_t)val.i_int * 1000;
p_stream->pf_add = Add;
p_stream->pf_del = Del;
#include <vlc/input.h>
#include <vlc/sout.h>
-#define FREE( p ) if( p ) { free( p ); (p) = NULL; }
/*****************************************************************************
- * Exported prototypes
+ * Module descriptor
*****************************************************************************/
static int Open ( vlc_object_t * );
static void Close ( vlc_object_t * );
-static sout_stream_id_t *Add ( sout_stream_t *, es_format_t * );
-static int Del ( sout_stream_t *, sout_stream_id_t * );
-static int Send( sout_stream_t *, sout_stream_id_t *, block_t* );
+#define SOUT_CFG_PREFIX "sout-es-"
-/*****************************************************************************
- * Module descriptor
- *****************************************************************************/
vlc_module_begin();
set_description( _("Elementary stream output") );
set_capability( "sout stream", 50 );
add_shortcut( "es" );
+
+ add_string( SOUT_CFG_PREFIX "access", "", NULL, "access", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "access-audio", "", NULL, "access audio", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "access-video", "", NULL, "access video", "", VLC_TRUE );
+
+ add_string( SOUT_CFG_PREFIX "mux", "", NULL, "mux", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "mux-audio", "", NULL, "mux audio", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "mux-video", "", NULL, "mux video", "", VLC_TRUE );
+
+ add_string( SOUT_CFG_PREFIX "dst", "", NULL, "dst", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "dst-audio", "", NULL, "dst audio", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "dst-video", "", NULL, "dst video", "", VLC_TRUE );
+
set_callbacks( Open, Close );
vlc_module_end();
+
+#define FREE( p ) if( p ) { free( p ); (p) = NULL; }
+/*****************************************************************************
+ * Exported prototypes
+ *****************************************************************************/
+static const char *ppsz_sout_options[] = {
+ "access", "access-audio", "access-video",
+ "mux", "mux-audio", "mux-video",
+ "dst", "dst-audio", "dst-video",
+ NULL
+};
+
+static sout_stream_id_t *Add ( sout_stream_t *, es_format_t * );
+static int Del ( sout_stream_t *, sout_stream_id_t * );
+static int Send( sout_stream_t *, sout_stream_id_t *, block_t* );
+
struct sout_stream_sys_t
{
int i_count_audio;
char *psz_access_audio;
char *psz_access_video;
- char *psz_url;
- char *psz_url_audio;
- char *psz_url_video;
+ char *psz_dst;
+ char *psz_dst_audio;
+ char *psz_dst_video;
};
/*****************************************************************************
{
sout_stream_t *p_stream = (sout_stream_t*)p_this;
sout_stream_sys_t *p_sys;
+ vlc_value_t val;
- /* p_sout->i_preheader = __MAX( p_sout->i_preheader, p_mux->i_preheader ); */
-
+ sout_ParseCfg( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options, p_stream->p_cfg );
p_sys = malloc( sizeof( sout_stream_sys_t ) );
p_sys->i_count = 0;
p_sys->i_count_audio = 0;
p_sys->i_count_video = 0;
- p_sys->psz_access = sout_cfg_find_value( p_stream->p_cfg, "access" );
- p_sys->psz_access_audio = sout_cfg_find_value( p_stream->p_cfg, "access_audio" );
- p_sys->psz_access_video = sout_cfg_find_value( p_stream->p_cfg, "access_video" );
-
- p_sys->psz_mux = sout_cfg_find_value( p_stream->p_cfg, "mux" );
- p_sys->psz_mux_audio = sout_cfg_find_value( p_stream->p_cfg, "mux_audio" );
- p_sys->psz_mux_video = sout_cfg_find_value( p_stream->p_cfg, "mux_video" );
-
- p_sys->psz_url = sout_cfg_find_value( p_stream->p_cfg, "url" );
- p_sys->psz_url_audio = sout_cfg_find_value( p_stream->p_cfg, "url_audio" );
- p_sys->psz_url_video = sout_cfg_find_value( p_stream->p_cfg, "url_video" );
+ var_Get( p_stream, SOUT_CFG_PREFIX "access", &val );
+ p_sys->psz_access = val.psz_string;
+ var_Get( p_stream, SOUT_CFG_PREFIX "access-audio", &val );
+ p_sys->psz_access_audio = val.psz_string;
+ var_Get( p_stream, SOUT_CFG_PREFIX "access-video", &val );
+ p_sys->psz_access_video = val.psz_string;
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "mux", &val );
+ p_sys->psz_mux = val.psz_string;
+ var_Get( p_stream, SOUT_CFG_PREFIX "mux-audio", &val );
+ p_sys->psz_mux_audio = val.psz_string;
+ var_Get( p_stream, SOUT_CFG_PREFIX "mux-video", &val );
+ p_sys->psz_mux_video = val.psz_string;
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "dst", &val );
+ p_sys->psz_dst = val.psz_string;
+ var_Get( p_stream, SOUT_CFG_PREFIX "dst-audio", &val );
+ p_sys->psz_dst_audio = val.psz_string;
+ var_Get( p_stream, SOUT_CFG_PREFIX "dst-video", &val );
+ p_sys->psz_dst_video = val.psz_string;
p_stream->pf_add = Add;
p_stream->pf_del = Del;
sout_stream_t *p_stream = (sout_stream_t*)p_this;
sout_stream_sys_t *p_sys = p_stream->p_sys;
+ free( p_sys->psz_access );
+ free( p_sys->psz_access_audio );
+ free( p_sys->psz_access_video );
+
+ free( p_sys->psz_mux );
+ free( p_sys->psz_mux_audio );
+ free( p_sys->psz_mux_video );
+
+ free( p_sys->psz_dst );
+ free( p_sys->psz_dst_audio );
+ free( p_sys->psz_dst_video );
+
free( p_sys );
}
static char * es_print_url( char *psz_fmt, vlc_fourcc_t i_fourcc, int i_count,
char *psz_access, char *psz_mux )
{
- char *psz_url, *p;
+ char *psz_dst, *p;
if( psz_fmt == NULL || !*psz_fmt )
{
psz_fmt = "stream-%n-%c.%m";
}
- p = psz_url = malloc( 4096 );
+ p = psz_dst = malloc( 4096 );
memset( p, 0, 4096 );
for( ;; )
{
}
}
- return( psz_url );
+ return( psz_dst );
}
static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
char *psz_access;
char *psz_mux;
- char *psz_url;
+ char *psz_dst;
sout_access_out_t *p_access;
sout_mux_t *p_mux;
/* *** get access name *** */
- if( p_fmt->i_cat == AUDIO_ES && p_sys->psz_access_audio )
+ if( p_fmt->i_cat == AUDIO_ES && p_sys->psz_access_audio && *p_sys->psz_access_audio )
{
psz_access = p_sys->psz_access_audio;
}
- else if( p_fmt->i_cat == VIDEO_ES && p_sys->psz_access_video )
+ else if( p_fmt->i_cat == VIDEO_ES && p_sys->psz_access_video && *p_sys->psz_access_video )
{
psz_access = p_sys->psz_access_video;
}
}
/* *** get mux name *** */
- if( p_fmt->i_cat == AUDIO_ES && p_sys->psz_mux_audio )
+ if( p_fmt->i_cat == AUDIO_ES && p_sys->psz_mux_audio && *p_sys->psz_mux_audio )
{
psz_mux = p_sys->psz_mux_audio;
}
- else if( p_fmt->i_cat == VIDEO_ES && p_sys->psz_mux_video )
+ else if( p_fmt->i_cat == VIDEO_ES && p_sys->psz_mux_video && *p_sys->psz_mux_video )
{
psz_mux = p_sys->psz_mux_video;
}
}
/* Get url (%d expanded as a codec count, %c expanded as codec fcc ) */
- if( p_fmt->i_cat == AUDIO_ES && p_sys->psz_url_audio )
+ if( p_fmt->i_cat == AUDIO_ES && p_sys->psz_dst_audio && *p_sys->psz_dst_audio )
{
- psz_url = es_print_url( p_sys->psz_url_audio, p_fmt->i_codec,
+ psz_dst = es_print_url( p_sys->psz_dst_audio, p_fmt->i_codec,
p_sys->i_count_audio, psz_access, psz_mux );
}
- else if( p_fmt->i_cat == VIDEO_ES && p_sys->psz_url_video )
+ else if( p_fmt->i_cat == VIDEO_ES && p_sys->psz_dst_video && *p_sys->psz_dst_video )
{
- psz_url = es_print_url( p_sys->psz_url_video, p_fmt->i_codec,
+ psz_dst = es_print_url( p_sys->psz_dst_video, p_fmt->i_codec,
p_sys->i_count_video, psz_access, psz_mux );
}
else
i_count = p_sys->i_count;
}
- psz_url = es_print_url( p_sys->psz_url, p_fmt->i_codec,
+ psz_dst = es_print_url( p_sys->psz_dst, p_fmt->i_codec,
i_count, psz_access, psz_mux );
}
p_sys->i_count_audio++;
}
msg_Dbg( p_stream, "creating `%s/%s://%s'",
- psz_access, psz_mux, psz_url );
+ psz_access, psz_mux, psz_dst );
/* *** find and open appropriate access module *** */
- p_access = sout_AccessOutNew( p_sout, psz_access, psz_url );
+ p_access = sout_AccessOutNew( p_sout, psz_access, psz_dst );
if( p_access == NULL )
{
msg_Err( p_stream, "no suitable sout access module for `%s/%s://%s'",
- psz_access, psz_mux, psz_url );
+ psz_access, psz_mux, psz_dst );
return( NULL );
}
if( p_mux == NULL )
{
msg_Err( p_stream, "no suitable sout mux module for `%s/%s://%s'",
- psz_access, psz_mux, psz_url );
+ psz_access, psz_mux, psz_dst );
sout_AccessOutDelete( p_access );
return( NULL );
}
static int Open ( vlc_object_t * );
static void Close( vlc_object_t * );
+#define SOUT_CFG_PREFIX "sout-rtp-"
+
vlc_module_begin();
set_description( _("RTP stream output") );
set_capability( "sout stream", 0 );
add_shortcut( "rtp" );
+ add_string( SOUT_CFG_PREFIX "dst", "", NULL, "destination", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "name", "", NULL, "name", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "sdp", "", NULL, "sdp", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "mux", "", NULL, "mux", "", VLC_TRUE );
+
+ add_integer( SOUT_CFG_PREFIX "port", 1234, NULL, "port", "", VLC_TRUE );
+ add_integer( SOUT_CFG_PREFIX "ttl", 0, NULL, "port", "", VLC_TRUE );
+
set_callbacks( Open, Close );
vlc_module_end();
/*****************************************************************************
* Exported prototypes
*****************************************************************************/
+static const char *ppsz_sout_options[] = {
+ "dst", "name", "port", "sdp", "ttl", "mux", NULL
+};
+
static sout_stream_id_t *Add ( sout_stream_t *, es_format_t * );
static int Del ( sout_stream_t *, sout_stream_id_t * );
static int Send( sout_stream_t *, sout_stream_id_t *,
sout_stream_t *p_stream = (sout_stream_t*)p_this;
sout_instance_t *p_sout = p_stream->p_sout;
sout_stream_sys_t *p_sys;
+ vlc_value_t val;
- char *val;
+ sout_ParseCfg( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options, p_stream->p_cfg );
p_sys = malloc( sizeof( sout_stream_sys_t ) );
- p_sys->psz_destination = sout_cfg_find_value( p_stream->p_cfg, "dst" );
- p_sys->psz_session_name = sout_cfg_find_value( p_stream->p_cfg, "name" );
- if( ( val = sout_cfg_find_value( p_stream->p_cfg, "port" ) ) )
- {
- p_sys->i_port = atoi( val );
- }
- else
- {
- p_sys->i_port = 1234;
- }
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "dst", &val );
+ p_sys->psz_destination = *val.psz_string ? val.psz_string : NULL;
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "name", &val );
+ p_sys->psz_session_name = *val.psz_string ? val.psz_string : NULL;
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "port", &val );
+ p_sys->i_port = val.i_int;
+
if( !p_sys->psz_session_name )
{
if( p_sys->psz_destination )
- {
p_sys->psz_session_name = strdup( p_sys->psz_destination );
- }
else
- {
p_sys->psz_session_name = strdup( "NONE" );
- }
}
if( !p_sys->psz_destination || *p_sys->psz_destination == '\0' )
{
- val = sout_cfg_find_value( p_stream->p_cfg, "sdp" );
- if( val == NULL || strncasecmp( val, "rtsp", 4 ) )
+ var_Get( p_stream, SOUT_CFG_PREFIX "sdp", &val );
+
+ if( strncasecmp( val.psz_string, "rtsp", 4 ) )
{
msg_Err( p_stream, "missing destination and not in rtsp mode" );
free( p_sys );
return VLC_EGENERIC;
}
p_sys->psz_destination = NULL;
+ free( val.psz_string );
}
else if( p_sys->i_port <= 0 )
{
return VLC_EGENERIC;
}
- if( ( val = sout_cfg_find_value( p_stream->p_cfg, "ttl" ) ) )
- {
- p_sys->i_ttl = atoi( val );
- }
- else
- {
- p_sys->i_ttl = config_GetInt( p_stream, "ttl" );
- }
+ var_Get( p_stream, SOUT_CFG_PREFIX "ttl", &val );
+ p_sys->i_ttl = val.i_int;
p_sys->i_payload_type = 96;
p_sys->i_es = 0;
p_stream->p_sys = p_sys;
- if( ( val = sout_cfg_find_value( p_stream->p_cfg, "mux" ) ) )
+ var_Get( p_stream, SOUT_CFG_PREFIX "mux", &val );
+ if( *val.psz_string )
{
sout_access_out_t *p_grab;
char url[strlen( p_sys->psz_destination ) + 1 + 12 + 1];
/* Check muxer type */
- if( !strncasecmp( val, "ps", 2 ) || !strncasecmp( val, "mpeg1", 5 ) )
+ if( !strncasecmp( val.psz_string, "ps", 2 ) || !strncasecmp( val.psz_string, "mpeg1", 5 ) )
{
psz_rtpmap = "MP2P/90000";
}
- else if( !strncasecmp( val, "ts", 2 ) )
+ else if( !strncasecmp( val.psz_string, "ts", 2 ) )
{
psz_rtpmap = "MP2T/90000";
p_sys->i_payload_type = 33;
p_grab->pf_write = AccessOutGrabberWrite;
/* the muxer */
- if( !( p_sys->p_mux = sout_MuxNew( p_sout, val, p_sys->p_grab ) ) )
+ if( !( p_sys->p_mux = sout_MuxNew( p_sout, val.psz_string, p_sys->p_grab ) ) )
{
- msg_Err( p_stream, "cannot create the muxer (%s)", val );
+ msg_Err( p_stream, "cannot create the muxer (%s)", val.psz_string );
sout_AccessOutDelete( p_sys->p_grab );
sout_AccessOutDelete( p_sys->p_access );
free( p_sys );
p_sys->p_access = NULL;
p_sys->p_grab = NULL;
}
+ free( val.psz_string );
+
- if( ( val = sout_cfg_find_value( p_stream->p_cfg, "sdp" ) ) )
+ var_Get( p_stream, SOUT_CFG_PREFIX "sdp", &val );
+ if( *val.psz_string )
{
vlc_url_t url;
- vlc_UrlParse( &url, val, 0 );
+ vlc_UrlParse( &url, val.psz_string, 0 );
if( url.psz_protocol && !strcasecmp( url.psz_protocol, "http" ) )
{
if( HttpSetup( p_stream, &url ) )
}
vlc_UrlClean( &url );
}
+ free( val.psz_string );
/* update p_sout->i_out_pace_nocontrol */
p_stream->p_sout->i_out_pace_nocontrol++;
#include "announce.h"
#include "network.h"
-#define DEFAULT_IPV6_SCOPE '8'
-#define DEFAULT_PORT 1234
-
/*****************************************************************************
- * Exported prototypes
+ * Module descriptor
*****************************************************************************/
static int Open ( vlc_object_t * );
static void Close ( vlc_object_t * );
-static sout_stream_id_t *Add ( sout_stream_t *, es_format_t * );
-static int Del ( sout_stream_t *, sout_stream_id_t * );
-static int Send( sout_stream_t *, sout_stream_id_t *, block_t* );
+#define SOUT_CFG_PREFIX "sout-standard-"
-/*****************************************************************************
- * Module descriptor
- *****************************************************************************/
vlc_module_begin();
set_description( _("Standard stream output") );
set_capability( "sout stream", 50 );
add_shortcut( "standard" );
add_shortcut( "std" );
+
+ add_string( SOUT_CFG_PREFIX "access", "", NULL, "access", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "mux", "", NULL, "mux", "", VLC_TRUE );
+ add_string( SOUT_CFG_PREFIX "url", "", NULL, "url", "", VLC_TRUE );
+
set_callbacks( Open, Close );
vlc_module_end();
+
+/*****************************************************************************
+ * Exported prototypes
+ *****************************************************************************/
+static const char *ppsz_sout_options[] = {
+ "access", "mux", "url", NULL
+};
+
+#define DEFAULT_IPV6_SCOPE '8'
+#define DEFAULT_PORT 1234
+
+static sout_stream_id_t *Add ( sout_stream_t *, es_format_t * );
+static int Del ( sout_stream_t *, sout_stream_id_t * );
+static int Send( sout_stream_t *, sout_stream_id_t *, block_t* );
+
struct sout_stream_sys_t
{
sout_mux_t *p_mux;
sout_stream_t *p_stream = (sout_stream_t*)p_this;
sout_instance_t *p_sout = p_stream->p_sout;
slp_session_t *p_slp = NULL;
- session_descriptor_t *p_session = NULL;
- char *psz_mux = sout_cfg_find_value( p_stream->p_cfg, "mux" );
- char *psz_access = sout_cfg_find_value( p_stream->p_cfg, "access" );
- char *psz_url = sout_cfg_find_value( p_stream->p_cfg, "url" );
- char *psz_sdp = NULL;
+ char *psz_mux;
+ char *psz_access;
+ char *psz_url;
- vlc_url_t *p_url;
sout_cfg_t *p_sap_cfg = sout_cfg_find( p_stream->p_cfg, "sap" );
#ifdef HAVE_SLP_H
sout_cfg_t *p_slp_cfg = sout_cfg_find( p_stream->p_cfg, "slp" );
#endif
+ vlc_value_t val;
+
sout_access_out_t *p_access;
sout_mux_t *p_mux;
char *psz_mux_byext = NULL;
+ sout_ParseCfg( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options, p_stream->p_cfg );
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "access", &val );
+ psz_access = *val.psz_string ? val.psz_string : NULL;
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "mux", &val );
+ psz_mux = *val.psz_string ? val.psz_string : NULL;
+
+ var_Get( p_stream, SOUT_CFG_PREFIX "url", &val );
+ psz_url = *val.psz_string ? val.psz_string : NULL;
+
p_stream->p_sys = malloc( sizeof( sout_stream_sys_t) );
p_stream->p_sys->p_session = NULL;
/* We fix access/mux to valid couple */
- if( ( psz_access == NULL || *psz_access == '\0' )&&
- ( psz_mux == NULL || *psz_mux == '\0' ) )
+ if( psz_access == NULL && psz_mux == NULL )
{
if( psz_mux_byext )
{
}
}
- if( psz_access && *psz_access &&
- ( psz_mux == NULL || *psz_mux == '\0' ) )
+ if( psz_access && psz_mux == NULL )
{
/* access given, no mux */
if( !strncmp( psz_access, "mmsh", 4 ) )
psz_mux = psz_mux_byext;
}
}
- else if( psz_mux && *psz_mux &&
- ( psz_access == NULL || *psz_access == '\0' ) )
+ else if( psz_mux && psz_access == NULL )
{
/* mux given, no access */
if( !strncmp( psz_mux, "asfh", 4 ) )
}
/* fix or warm of incompatible couple */
- if( psz_mux && *psz_mux && psz_access && *psz_access )
+ if( psz_mux && psz_access )
{
if( !strncmp( psz_access, "mmsh", 4 ) && strncmp( psz_mux, "asfh", 4 ) )
{
msg_Dbg( p_stream, "mux opened" );
/* *** Create the SAP Session structure *** */
- if( psz_access && p_sap_cfg && ( strstr( psz_access, "udp" ) ||
- strstr( psz_access , "rtp" ) ) )
+ if( psz_access && p_sap_cfg &&
+ ( strstr( psz_access, "udp" ) || strstr( psz_access , "rtp" ) ) )
{
- session_descriptor_t *p_session= sout_AnnounceSessionCreate();
- announce_method_t *p_method = sout_AnnounceMethodCreate(
- METHOD_TYPE_SAP);
+ session_descriptor_t *p_session = sout_AnnounceSessionCreate();
+ announce_method_t *p_method =
+ sout_AnnounceMethodCreate( METHOD_TYPE_SAP );
+ vlc_url_t url;
/* Parse user input */
if( p_sap_cfg->psz_value )
psz_curr = sout_cfg_find_value( p_cfg,"ip_version");
if( psz_curr != NULL)
{
- p_method->i_ip_version = atoi( psz_curr ) != 0 ?
- atoi(psz_curr) :
- 4;
+ p_method->i_ip_version =
+ atoi( psz_curr ) != 0 ? atoi(psz_curr) : 4;
}
}
else
}
/* Now, parse the URL to extract host and port */
- p_url = (vlc_url_t *)malloc( sizeof(vlc_url_t ) );
- if ( ! p_url )
- {
- return NULL;
- }
+ vlc_UrlParse( &url, psz_url , 0);
- vlc_UrlParse( p_url, psz_url , 0);
-
- if (!p_url->psz_host)
- {
- return NULL;
- }
-
- if(p_url->i_port == 0)
+ if( url.psz_host )
{
- p_url->i_port = DEFAULT_PORT;
- }
-
- p_session->psz_uri = p_url->psz_host;
- p_session->i_port = p_url->i_port;
- p_session->psz_sdp = NULL;
+ if( url.i_port == 0 )
+ {
+ url.i_port = DEFAULT_PORT;
+ }
- p_session->i_ttl = config_GetInt( p_sout,"ttl" );
- p_session->i_payload = 33;
+ p_session->psz_uri = url.psz_host;
+ p_session->i_port = url.i_port;
+ p_session->psz_sdp = NULL;
- msg_Info( p_this, "SAP Enabled");
+ p_session->i_ttl = config_GetInt( p_sout, "ttl" );
+ p_session->i_payload = 33;
- sout_AnnounceRegister( p_sout, p_session, p_method );
+ msg_Info( p_this, "SAP Enabled");
- /* FIXME: Free p_method */
+ sout_AnnounceRegister( p_sout, p_session, p_method );
- p_stream->p_sys->p_session = p_session;
+ /* FIXME: Free p_method */
- if( p_url )
- {
- vlc_UrlClean( p_url );
- free( p_url );
- p_url = NULL;
+ p_stream->p_sys->p_session = p_session;
}
+ vlc_UrlClean( &url );
}
/* *** Register with slp *** */
}
else
{
- p_slp = (slp_session_t*)malloc(sizeof(slp_session_t));
- if(!p_slp)
- {
- msg_Warn(p_sout,"out of memory");
-// if( p_sap ) free( p_sap );
- return -1;
- }
+ p_slp = malloc(sizeof(slp_session_t));
p_slp->psz_url= strdup(psz_url);
p_slp->psz_name = strdup(
p_slp_cfg->psz_value ? p_slp_cfg->psz_value : psz_url);
block_t *p_buffer )
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
- sout_instance_t *p_sout = p_stream->p_sout;
sout_MuxSendBuffer( p_sys->p_mux, id->p_input, p_buffer );