X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fstream_output%2Fprofiles.c;h=70e0349e592207868200447d1acf11f0c4992a27;hb=cb02b264b58150bf45d0f68019ac32c02d2b5f1e;hp=fafd2c0ab1dd324f58d4e668ede41faab86b5c46;hpb=bf38fbd08fe8f79d5bca1231545834b3fabc5102;p=vlc diff --git a/src/stream_output/profiles.c b/src/stream_output/profiles.c index fafd2c0ab1..70e0349e59 100644 --- a/src/stream_output/profiles.c +++ b/src/stream_output/profiles.c @@ -21,6 +21,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include #include #include @@ -87,7 +92,7 @@ static sout_display_t *streaming_ChainAddDisplay( sout_chain_t *p_chain ) static sout_transcode_t *streaming_ChainAddTranscode( sout_chain_t *p_chain, char *psz_vcodec, char * psz_acodec, char * psz_scodec, int i_vb, float f_scale, int i_ab, int i_channels, - vlc_bool_t b_soverlay, char *psz_additional ) + bool b_soverlay, char *psz_additional ) { DECMALLOC_NULL( p_module, sout_module_t ); MALLOC_NULL( TRAM, sout_transcode_t ); @@ -221,7 +226,7 @@ void streaming_TranscodeParametersApply( sout_transcode_t *p_module ) * \param pb_dest target bool, if param is a bool */ void streaming_ParameterApply( sout_param_t *p_param, char **ppsz_dest, - int *pi_dest, float *pf_dest, vlc_bool_t *pb_dest ) + int *pi_dest, float *pf_dest, bool *pb_dest ) { /* Todo : Handle psz_string like formatting */ if( p_param->psz_string ) @@ -262,26 +267,26 @@ void streaming_ParameterApply( sout_param_t *p_param, char **ppsz_dest, #define DO_ENABLE_ACCESS \ if( !strcmp( STDM->psz_access, "file" ) )\ { \ - pd->b_file = VLC_TRUE; pd->psz_file = strdup( STDM->psz_url ); \ + pd->b_file = true; pd->psz_file = strdup( STDM->psz_url ); \ } \ - else if( !strcmp( STDM->psz_access, "http" ) )\ + else if( !strcmp( STDM->psz_access, "http" ) )\ { \ - pd->b_http = VLC_TRUE; pd->psz_http = strdup( STDM->psz_url ); \ + pd->b_http = true; pd->psz_http = strdup( STDM->psz_url ); \ } \ - else if( !strcmp( STDM->psz_access, "mms" ) )\ + else if( !strcmp( STDM->psz_access, "mms" ) )\ { \ - pd->b_mms = VLC_TRUE; pd->psz_mms = strdup( STDM->psz_url ); \ + pd->b_mms = true; pd->psz_mms = strdup( STDM->psz_url ); \ } \ - else if( !strcmp( STDM->psz_access, "udp" ) )\ + else if( !strcmp( STDM->psz_access, "udp" ) )\ { \ - pd->b_udp = VLC_TRUE; pd->psz_udp = strdup( STDM->psz_url ); \ + pd->b_udp = true; pd->psz_udp = strdup( STDM->psz_url ); \ } \ else \ { \ msg_Err( p_this, "unahandled access %s", STDM->psz_access ); \ } - +#if 0 /** * Try to convert a chain to a gui descriptor. This is only possible for * "simple" chains. @@ -290,16 +295,16 @@ void streaming_ParameterApply( sout_param_t *p_param, char **ppsz_dest, * \param pd the destination gui descriptor object * \return TRUE if the conversion succeeded, false else */ -vlc_bool_t streaming_ChainToGuiDesc( vlc_object_t *p_this, +bool streaming_ChainToGuiDesc( vlc_object_t *p_this, sout_chain_t *p_chain, sout_gui_descr_t *pd ) { int j, i_last = 0; sout_module_t *p_module; - if( p_chain->i_modules == 0 || p_chain->i_modules > 2 ) return VLC_FALSE; + if( p_chain->i_modules == 0 || p_chain->i_modules > 2 ) return false; if( p_chain->pp_modules[0]->i_type == SOUT_MOD_TRANSCODE ) { - if( p_chain->i_modules == 1 ) return VLC_FALSE; + if( p_chain->i_modules == 1 ) return false; p_module = p_chain->pp_modules[0]; i_last++; @@ -316,22 +321,22 @@ vlc_bool_t streaming_ChainToGuiDesc( vlc_object_t *p_this, // Nothing allowed after duplicate. Duplicate mustn't be empty if( p_chain->i_modules > i_last +1 || !DUPM->i_children ) - return VLC_FALSE; + return false; for( j = 0 ; j< DUPM->i_children ; j++ ) { sout_chain_t *p_child = DUPM->pp_children[j]; - if( p_child->i_modules != 1 ) return VLC_FALSE; + if( p_child->i_modules != 1 ) return false; p_module = p_child->pp_modules[0]; if( p_module->i_type == SOUT_MOD_STD ) { DO_ENABLE_ACCESS } else if( p_module->i_type == SOUT_MOD_DISPLAY ) - pd->b_local = VLC_TRUE; + pd->b_local = true; else if( p_module->i_type == SOUT_MOD_RTP ) { msg_Err( p_this, "RTP unhandled" ); - return VLC_FALSE; + return false; } } i_last++; @@ -343,17 +348,18 @@ vlc_bool_t streaming_ChainToGuiDesc( vlc_object_t *p_this, } else if( p_chain->pp_modules[i_last]->i_type == SOUT_MOD_DISPLAY ) { - pd->b_local = VLC_TRUE; + pd->b_local = true; } else if( p_chain->pp_modules[i_last]->i_type == SOUT_MOD_RTP ) { msg_Err( p_this, "RTP unhandled" ); - return VLC_FALSE; + return false; } - return VLC_TRUE; + return true; } +#endif #define HANDLE_GUI_URL( type, access ) if( pd->b_##type ) { \ if( p_dup ) streaming_DupAddChild( p_dup ); \ @@ -376,6 +382,8 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain, sout_gui_descr_t *pd ) { sout_duplicate_t *p_dup = NULL; + (void)p_obj; + /* Clean up the chain */ streaming_ChainClean( p_chain ); @@ -390,7 +398,7 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain, } /* #std{} */ if( pd->b_local + pd->b_file + pd->b_http + pd->b_mms + pd->b_rtp + - pd->b_udp > 1 ) + pd->b_udp + pd->b_icecast > 1 ) { p_dup = streaming_ChainAddDup( p_chain ); } @@ -422,14 +430,52 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain, p_std = streaming_ChainAddStd( DUP_OR_CHAIN, "udp", pd->psz_mux, pd->psz_udp ); } - if( pd->i_ttl ) ADD_OPT( "ttl=%i", pd->i_ttl ); + if( pd->i_ttl ) + ADD_OPT( "ttl=%i", pd->i_ttl ); if( pd->b_sap ) { - pd->b_sap = VLC_TRUE; + pd->b_sap = true; p_std->psz_name = strdup( pd->psz_name ); p_std->psz_group = pd->psz_group ? strdup( pd->psz_group ) : NULL; } } + if( pd->b_icecast ) + { + sout_std_t *p_std; + char *psz_username; + + if( p_dup ) streaming_DupAddChild( p_dup ); + + if( !strcmp( pd->sa_icecast.psz_username, "" ) ) + { + asprintf( &psz_username, "%s", "" ); + } + else + { + asprintf( &psz_username, "%s:%s@", pd->sa_icecast.psz_username, + pd->sa_icecast.psz_password ); + } + if( pd->i_icecast > 0 ) + { + char *psz_url; + asprintf( &psz_url, "%s%s:%i%s", psz_username, pd->psz_icecast, + pd->i_icecast, pd->psz_icecast_mountpoint ); + p_std = streaming_ChainAddStd( DUP_OR_CHAIN, "shout", + pd->psz_mux, psz_url ); + free( psz_url ); + } + else + { + char *psz_url; + asprintf( &psz_url, "%s:%s@%s%s", pd->sa_icecast.psz_username, + pd->sa_icecast.psz_password, pd->psz_icecast, + pd->psz_icecast_mountpoint ); + p_std = streaming_ChainAddStd( DUP_OR_CHAIN, "shout", + pd->psz_mux, psz_url ); + free( psz_url ); + } + free( psz_username ); + } HANDLE_GUI_URL( http, "http" ) HANDLE_GUI_URL( mms, "mms" ) } @@ -438,7 +484,7 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain, /********************************************************************** * Create a sout string from a chain **********************************************************************/ -static char * ChainToPsz( sout_chain_t *p_chain, vlc_bool_t b_root ) +static char * ChainToPsz( sout_chain_t *p_chain, bool b_root ) { int i, j; char psz_output[MAX_CHAIN]; @@ -455,7 +501,7 @@ static char * ChainToPsz( sout_chain_t *p_chain, vlc_bool_t b_root ) CHAIN_APPEND( "duplicate{" ); for( j = 0 ; j < DUPM->i_children ; j ++ ) { - char *psz_child = ChainToPsz( DUPM->pp_children[j], VLC_FALSE); + char *psz_child = ChainToPsz( DUPM->pp_children[j], false); fprintf(stderr, "child %s\n", psz_child); CHAIN_APPEND( "dst=%s", psz_child ); free( psz_child ); @@ -488,11 +534,12 @@ static char * ChainToPsz( sout_chain_t *p_chain, vlc_bool_t b_root ) break; case SOUT_MOD_DISPLAY: - CHAIN_APPEND( "display" ) + CHAIN_APPEND( "display" ); break; case SOUT_MOD_STD: - CHAIN_APPEND( "std{access=%s,url=%s,mux=%s}", STDM->psz_access, + CHAIN_APPEND( "std{access=%s,dst=%s,mux=%s}", STDM->psz_access, STDM->psz_url, STDM->psz_mux ); + break; } if( i != p_chain->i_modules - 1 ) CHAIN_APPEND( ":" ); } @@ -501,13 +548,14 @@ static char * ChainToPsz( sout_chain_t *p_chain, vlc_bool_t b_root ) char * streaming_ChainToPsz( sout_chain_t *p_chain ) { - return ChainToPsz( p_chain, VLC_TRUE ); + return ChainToPsz( p_chain, true ); } /********************************************************************** * Handle streaming profiles **********************************************************************/ +#if 0 /** * List the available profiles. Fills the pp_profiles list with preinitialized * values. @@ -535,7 +583,7 @@ int streaming_ProfileParse( vlc_object_t *p_this,streaming_profile_t *p_profile, p_this->p_private = (void *)p_parser; /* And call the module ! All work is done now */ - p_module = module_Need( p_this, "profile parser", "", VLC_TRUE ); + p_module = module_Need( p_this, "profile parser", "", true ); if( !p_module ) { msg_Warn( p_this, "parsing profile failed" ); @@ -543,3 +591,4 @@ int streaming_ProfileParse( vlc_object_t *p_this,streaming_profile_t *p_profile, } return VLC_SUCCESS; } +#endif