Commit c4d19b85 authored by Laurent Aimar's avatar Laurent Aimar

Added sout-mux-caching option. It allow to set the initial muxer cache value

in millisecond.
 Original patch created by Jeff Hansen.
parent 8281a155
......@@ -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,
......
......@@ -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 );
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment