X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_streaming.h;h=fa08252ba8ee8752f5a98d041228eef7a63ee897;hb=b344dc6f7e63b4cb016fda81f2fdcbe5b575611a;hp=a7e6e8249a03f622c06b64a411cfb790737884aa;hpb=81ad2fc1a3798ed265bb301178ca03aa3ace3605;p=vlc diff --git a/include/vlc_streaming.h b/include/vlc_streaming.h index a7e6e8249a..fa08252ba8 100644 --- a/include/vlc_streaming.h +++ b/include/vlc_streaming.h @@ -2,7 +2,7 @@ * vlc_streaming.h: Methods and descriptions for Streaming profiles ***************************************************************************** * Copyright (C) 2002-2005 the VideoLAN team - * $Id: stream_output.h 14151 2006-02-04 00:08:50Z zorglub $ + * $Id$ * * Authors: Clément Stenac * @@ -21,11 +21,19 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#if !defined( __LIBVLC__ ) + #error You are not libvlc or one of its plugins. You cannot include this file +#endif + #ifndef _VLC_STREAMING_H_ #define _VLC_STREAMING_H_ #include +/*********************************************************************** + * Predefined lists of streaming data + ***********************************************************************/ + #ifdef WIN32 #define VCODECS_NUMBER 13 #else @@ -38,26 +46,11 @@ #define MUXERS_NUMBER 10 enum { - MUX_PS, - MUX_TS, - MUX_MPEG, - MUX_OGG, - MUX_RAW, - MUX_ASF, - MUX_AVI, - MUX_MP4, - MUX_MOV, - MUX_WAV, + MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_RAW, + MUX_ASF, MUX_AVI, MUX_MP4, MUX_MOV, MUX_WAV, }; -enum -{ - ACCESS_HTTP, - ACCESS_UDP, - ACCESS_MMS, - ACCESS_RTP, - ACCESS_FILE -}; +enum { ACCESS_HTTP, ACCESS_UDP, ACCESS_MMS, ACCESS_RTP, ACCESS_FILE }; struct codec_desc_t { char *psz_display; @@ -93,33 +86,87 @@ struct mux_desc_t { //static const char *abitrates_array[] = //{ "512", "256", "192", "128", "96", "64", "32", "16" } ; +// + + +/*********************************************************************** + * Streaming profiles + ***********************************************************************/ + +/****************** Parameters handling *********************/ +struct sout_param_t +{ + int i_type; + int i_element; + char *psz_id; + char *psz_string; + vlc_value_t value; +}; + +struct sout_pcat_t +{ + char *psz_name; + int i_params; + sout_param_t **pp_params; +}; +void streaming_ParameterApply( sout_param_t *p_param, char **ppsz_dest, + int *pi_dest, float *pf_dest, vlc_bool_t *pb_dest ); + + +/******** Module types definitions and parametrable elements ***************/ + +/* Transcode */ +enum { I_VB, I_AB, I_CHANNELS, F_SCALE, B_SOVERLAY, PSZ_VC, PSZ_AC, PSZ_SC, + PSZ_VE, PSZ_AE }; struct sout_transcode_t { - int i_vb, i_ab, i_channels; + int32_t i_vb; + int32_t i_ab; + int32_t i_channels; float f_scale; vlc_bool_t b_soverlay; - char *psz_vcodec, *psz_acodec, *psz_scodec, *psz_venc, *psz_aenc; + char *psz_vcodec; + char *psz_acodec; + char *psz_scodec; + char *psz_venc; + char *psz_aenc; char *psz_additional; + + int32_t i_params; + sout_param_t **pp_params; }; +void streaming_TranscodeParametersApply( sout_transcode_t *p_module ); -struct sout_std_t +/* Standard */ +enum { PSZ_MUX, PSZ_ACCESS, PSZ_URL, PSZ_NAME, PSZ_GROUP }; +struct sout_std_t { - char *psz_mux, *psz_access; - char *psz_url, *psz_name, *psz_group; + char *psz_mux; + char *psz_access; + char *psz_url; + char *psz_name; + char *psz_group; + int i_params; + sout_param_t **pp_params; }; +void streaming_StdParametersApply( sout_std_t *p_module ); -struct sout_display_t +/* Display */ +struct sout_display_t { }; +/* Duplicate */ struct sout_duplicate_t { - int i_children, i_conditions; + int i_children; + int i_conditions; sout_chain_t **pp_children; char **ppsz_conditions; }; +/******* Generic profile structures and manipulation functions ********/ typedef union { sout_transcode_t *p_transcode; @@ -128,7 +175,6 @@ typedef union sout_display_t *p_display; } sout_module_type_t; - struct sout_module_t { int i_type; @@ -136,14 +182,8 @@ struct sout_module_t sout_module_t *p_parent; }; -enum -{ - SOUT_MOD_TRANSCODE, - SOUT_MOD_STD, - SOUT_MOD_RTP, - SOUT_MOD_DUPLICATE, - SOUT_MOD_DISPLAY -}; +enum { SOUT_MOD_TRANSCODE, SOUT_MOD_STD, SOUT_MOD_RTP, SOUT_MOD_DUPLICATE, + SOUT_MOD_DISPLAY }; struct sout_chain_t { @@ -152,45 +192,94 @@ struct sout_chain_t int i_options; char **ppsz_options; + + int i_pcats; + sout_pcat_t **pp_pcats; }; -struct sout_gui_descr_t +static inline sout_chain_t *streaming_ChainNew(void) { - /* Access */ - vlc_bool_t b_local, b_file, b_http, b_mms, b_rtp, b_udp, b_dump; - char *psz_file, *psz_http, *psz_mms, *psz_rtp, *psz_udp; - int i_http, i_mms, i_rtp, i_udp; + DECMALLOC_NULL( p_chain, sout_chain_t ); + memset( p_chain, 0, sizeof( sout_chain_t ) ); + p_chain->i_options = 0; + return p_chain; +} + +struct streaming_profile_t +{ + char *psz_title; + char *psz_description; + sout_chain_t *p_chain; +}; + +/** struct for holding account information needed to access the services */ +struct streaming_account_t +{ + char *psz_username; /*< username of account */ + char *psz_password; /*< password of account */ +}; + +/**************** GUI interaction *****************/ +/** struct to hold user interface information */ +struct sout_gui_descr_t +{ + /* Access types */ + vlc_bool_t b_local; /*< local access module */ + vlc_bool_t b_file; /*< file access module */ + vlc_bool_t b_http; /*< http access module */ + vlc_bool_t b_mms; /*< mms access module */ + vlc_bool_t b_rtp; /*< rtp access module */ + vlc_bool_t b_udp; /*< udp access module */ + vlc_bool_t b_dump; /*< dump access module */ + vlc_bool_t b_icecast; /*< icecast access module */ + + char *psz_file; /*< filename */ + char *psz_http; /*< HTTP servername or ipaddress */ + char *psz_mms; /*< MMS servername or ipaddress */ + char *psz_rtp; /*< RTP servername or ipaddress */ + char *psz_udp; /*< UDP servername or ipaddress */ + char *psz_icecast; /*< Icecast servername or ipaddress*/ + + int32_t i_http; /*< http port number */ + int32_t i_mms; /*< mms port number */ + int32_t i_rtp; /*< rtp port number */ + int32_t i_udp; /*< udp port number */ + int32_t i_icecast; /*< icecast port number */ /* Mux */ - char *psz_mux; + char *psz_mux; /*< name of muxer to use in streaming */ /* Transcode */ - vlc_bool_t b_soverlay; - char *psz_vcodec, *psz_acodec, *psz_scodec; - int i_vb, i_ab, i_channels; - float f_scale; + vlc_bool_t b_soverlay; /*< enable burning overlay in the video */ + char *psz_vcodec; /*< video codec to use in transcoding */ + char *psz_acodec; /*< audio codec to use in transcoding */ + char *psz_scodec; /*< subtitle codec to use in transcoding */ + int32_t i_vb; /*< video bitrate to use in transcoding */ + int32_t i_ab; /*< audio bitrate to use in transcoding */ + int32_t i_channels; /*< number of audio channels to use in transcoding */ + float f_scale; /*< scaling factor to use in transcoding */ /* Misc */ - vlc_bool_t b_sap, b_all_es; - char *psz_group, *psz_name; - int i_ttl; -}; + vlc_bool_t b_sap; /*< send SAP announcement */ + vlc_bool_t b_all_es;/*< send all elementary streams from source stream */ + char *psz_group; /*< SAP Group name */ + char *psz_name; /*< SAP name */ + int32_t i_ttl; /*< Time To Live (TTL) for network traversal */ -struct streaming_profile_t -{ - i18n_string_t *p_title; - i18n_string_t *p_description; - sout_chain_t *p_chain; + /* Icecast */ + char *psz_icecast_mountpoint;/*< path to Icecast mountpoint */ + struct streaming_account_t sa_icecast; /*< Icecast account information */ }; -static inline sout_chain_t *streaming_ChainNew() -{ - DECMALLOC_NULL( p_chain, sout_chain_t ); - memset( p_chain, 0, sizeof( sout_chain_t ) ); - p_chain->i_options = 0; - return p_chain; -} +VLC_EXPORT(void, streaming_GuiDescToChain,(vlc_object_t*, sout_chain_t*, sout_gui_descr_t*)); +VLC_EXPORT(char*, streaming_ChainToPsz,(sout_chain_t*)); -//VLC_XEXPORT( char *, streaming_ChainToPsz, (sout_chain_t * ) ); +/***************** Profile parsing ***********************/ + +struct profile_parser_t +{ + char *psz_profile; + streaming_profile_t *p_profile; +}; #endif