From: Laurent Aimar Date: Fri, 12 Oct 2007 23:41:31 +0000 (+0000) Subject: Added sout-mux-caching option. It allow to set the initial muxer cache value X-Git-Tag: 0.9.0-test0~5056 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c4d19b859876eee3510940ae172d66d4723ba1a8;p=vlc Added sout-mux-caching option. It allow to set the initial muxer cache value in millisecond. Original patch created by Jeff Hansen. --- diff --git a/src/libvlc-module.c b/src/libvlc-module.c index 1e59c0a4bf..3f7e94ae13 100644 --- a/src/libvlc-module.c +++ b/src/libvlc-module.c @@ -844,6 +844,11 @@ static const char *ppsz_clock_descriptions[] = "multiple playlist item (automatically insert the gather stream output " \ "if not specified)" ) +#define SOUT_MUX_CACHING_TEXT N_("Stream output muxer caching (ms)") +#define SOUT_MUX_CACHING_LONGTEXT N_( \ + "This allow you to configure the initial caching amount for stream output " \ + " muxer. This value should be set in milliseconds." ) + #define PACKETIZER_TEXT N_("Preferred packetizer list") #define PACKETIZER_LONGTEXT N_( \ "This allows you to select the order in which VLC will choose its " \ @@ -1686,6 +1691,8 @@ vlc_module_begin(); SOUT_VIDEO_LONGTEXT, VLC_TRUE ); add_bool( "sout-spu", 1, NULL, SOUT_SPU_TEXT, SOUT_SPU_LONGTEXT, VLC_TRUE ); + add_integer( "sout-mux-caching", 1500, NULL, SOUT_MUX_CACHING_TEXT, + SOUT_MUX_CACHING_LONGTEXT, VLC_TRUE ); set_section( N_("VLM"), NULL ); add_string( "vlm-conf", NULL, NULL, VLM_CONF_TEXT, diff --git a/src/stream_output/stream_output.c b/src/stream_output/stream_output.c index 1d12e1cd0c..2d512e664e 100644 --- a/src/stream_output/stream_output.c +++ b/src/stream_output/stream_output.c @@ -103,8 +103,11 @@ sout_instance_t *__sout_NewInstance( vlc_object_t *p_parent, char * psz_dest ) /* attach it for inherit */ vlc_object_attach( p_sout, p_parent ); - p_sout->p_stream = sout_StreamNew( p_sout, p_sout->psz_chain ); + /* */ + var_Create( p_sout, "sout-mux-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); + /* */ + p_sout->p_stream = sout_StreamNew( p_sout, p_sout->psz_chain ); if( p_sout->p_stream == NULL ) { msg_Err( p_sout, "stream chain failed for `%s'", p_sout->psz_chain ); @@ -470,7 +473,7 @@ sout_input_t *sout_MuxAddStream( sout_mux_t *p_mux, es_format_t *p_fmt ) if( !p_mux->b_add_stream_any_time && !p_mux->b_waiting_stream ) { msg_Err( p_mux, "cannot add a new stream (unsupported while muxing " - "to this format)" ); + "to this format). You can try increasing sout-mux-caching value" ); return NULL; } @@ -551,22 +554,16 @@ void sout_MuxSendBuffer( sout_mux_t *p_mux, sout_input_t *p_input, if( p_mux->b_waiting_stream ) { + const int64_t i_caching = var_GetInteger( p_mux->p_sout, "sout-mux-caching" ) * I64C(1000); + if( p_mux->i_add_stream_start < 0 ) - { p_mux->i_add_stream_start = p_buffer->i_dts; - } - if( p_mux->i_add_stream_start >= 0 && - p_mux->i_add_stream_start + I64C(1500000) < p_buffer->i_dts ) - { - /* Wait until we have more than 1.5 seconds worth of data - * before start muxing */ - p_mux->b_waiting_stream = VLC_FALSE; - } - else - { + /* Wait until we have enought data before muxing */ + if( p_mux->i_add_stream_start < 0 || + p_buffer->i_dts < p_mux->i_add_stream_start + i_caching ) return; - } + p_mux->b_waiting_stream = VLC_FALSE; } p_mux->pf_mux( p_mux ); }