Commit 893fb2e2 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

sout: mostly fix and clean up pace control setting

Still transcode and ES are broken.
parent 938d93aa
...@@ -40,7 +40,8 @@ extern "C" { ...@@ -40,7 +40,8 @@ extern "C" {
#include <sys/types.h> #include <sys/types.h>
#include <vlc_es.h> #include <vlc_es.h>
/** Stream output instance */ /** Stream output instance (FIXME: should be private to src/ to avoid
* invalid unsycnrhonized access) */
struct sout_instance_t struct sout_instance_t
{ {
VLC_COMMON_MEMBERS VLC_COMMON_MEMBERS
...@@ -189,8 +190,8 @@ struct sout_stream_t ...@@ -189,8 +190,8 @@ struct sout_stream_t
/* manage a packet */ /* manage a packet */
int (*pf_send)( sout_stream_t *, sout_stream_id_t *, block_t* ); int (*pf_send)( sout_stream_t *, sout_stream_id_t *, block_t* );
/* private */
sout_stream_sys_t *p_sys; sout_stream_sys_t *p_sys;
bool pace_nocontrol;
}; };
VLC_API void sout_StreamChainDelete(sout_stream_t *p_first, sout_stream_t *p_last ); VLC_API void sout_StreamChainDelete(sout_stream_t *p_first, sout_stream_t *p_last );
......
...@@ -216,8 +216,7 @@ static int OpenOut( vlc_object_t *p_this ) ...@@ -216,8 +216,7 @@ static int OpenOut( vlc_object_t *p_this )
p_stream->pf_send = SendOut; p_stream->pf_send = SendOut;
p_stream->p_sys = (sout_stream_sys_t *)p_sys; p_stream->p_sys = (sout_stream_sys_t *)p_sys;
p_stream->pace_nocontrol = true;
p_stream->p_sout->i_out_pace_nocontrol++;
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -230,8 +229,6 @@ static void CloseOut( vlc_object_t * p_this ) ...@@ -230,8 +229,6 @@ static void CloseOut( vlc_object_t * p_this )
sout_stream_t *p_stream = (sout_stream_t*)p_this; sout_stream_t *p_stream = (sout_stream_t*)p_this;
out_sout_stream_sys_t *p_sys = (out_sout_stream_sys_t *)p_stream->p_sys; out_sout_stream_sys_t *p_sys = (out_sout_stream_sys_t *)p_stream->p_sys;
p_stream->p_sout->i_out_pace_nocontrol--;
free( p_sys->psz_name ); free( p_sys->psz_name );
free( p_sys ); free( p_sys );
} }
...@@ -435,9 +432,7 @@ static int OpenIn( vlc_object_t *p_this ) ...@@ -435,9 +432,7 @@ static int OpenIn( vlc_object_t *p_this )
p_stream->pf_send = SendIn; p_stream->pf_send = SendIn;
p_stream->p_sys = (sout_stream_sys_t *)p_sys; p_stream->p_sys = (sout_stream_sys_t *)p_sys;
p_stream->pace_nocontrol = true;
/* update p_sout->i_out_pace_nocontrol */
p_stream->p_sout->i_out_pace_nocontrol++;
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -450,8 +445,6 @@ static void CloseIn( vlc_object_t * p_this ) ...@@ -450,8 +445,6 @@ static void CloseIn( vlc_object_t * p_this )
sout_stream_t *p_stream = (sout_stream_t*)p_this; sout_stream_t *p_stream = (sout_stream_t*)p_this;
in_sout_stream_sys_t *p_sys = (in_sout_stream_sys_t *)p_stream->p_sys; in_sout_stream_sys_t *p_sys = (in_sout_stream_sys_t *)p_stream->p_sys;
p_stream->p_sout->i_out_pace_nocontrol--;
free( p_sys->psz_name ); free( p_sys->psz_name );
free( p_sys ); free( p_sys );
} }
......
...@@ -118,9 +118,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -118,9 +118,7 @@ static int Open( vlc_object_t *p_this )
p_stream->pf_del = Del; p_stream->pf_del = Del;
p_stream->pf_send = Send; p_stream->pf_send = Send;
p_stream->p_sys = p_sys; p_stream->p_sys = p_sys;
p_stream->pace_nocontrol = true;
/* update p_sout->i_out_pace_nocontrol */
p_stream->p_sout->i_out_pace_nocontrol++;
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -133,9 +131,6 @@ static void Close( vlc_object_t * p_this ) ...@@ -133,9 +131,6 @@ static void Close( vlc_object_t * p_this )
sout_stream_t *p_stream = (sout_stream_t*)p_this; sout_stream_t *p_stream = (sout_stream_t*)p_this;
sout_stream_sys_t *p_sys = p_stream->p_sys; sout_stream_sys_t *p_sys = p_stream->p_sys;
/* update p_sout->i_out_pace_nocontrol */
p_stream->p_sout->i_out_pace_nocontrol--;
input_resource_Terminate( p_sys->p_resource ); input_resource_Terminate( p_sys->p_resource );
input_resource_Release( p_sys->p_resource ); input_resource_Release( p_sys->p_resource );
free( p_sys ); free( p_sys );
......
...@@ -249,8 +249,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -249,8 +249,7 @@ static int Open( vlc_object_t *p_this )
p_stream->pf_add = Add; p_stream->pf_add = Add;
p_stream->pf_del = Del; p_stream->pf_del = Del;
p_stream->pf_send = Send; p_stream->pf_send = Send;
p_stream->pace_nocontrol = true;
p_stream->p_sout->i_out_pace_nocontrol++;
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -270,8 +269,6 @@ static void Close( vlc_object_t * p_this ) ...@@ -270,8 +269,6 @@ static void Close( vlc_object_t * p_this )
var_DelCallback( p_stream, CFG_PREFIX "x", xCallback, p_stream ); var_DelCallback( p_stream, CFG_PREFIX "x", xCallback, p_stream );
var_DelCallback( p_stream, CFG_PREFIX "y", yCallback, p_stream ); var_DelCallback( p_stream, CFG_PREFIX "y", yCallback, p_stream );
p_stream->p_sout->i_out_pace_nocontrol--;
free( p_sys->psz_id ); free( p_sys->psz_id );
free( p_sys ); free( p_sys );
......
...@@ -1390,11 +1390,11 @@ static int Open( vlc_object_t *p_this ) ...@@ -1390,11 +1390,11 @@ static int Open( vlc_object_t *p_this )
goto error; goto error;
} }
p_stream->p_sys = p_sys;
p_stream->pf_add = Add; p_stream->pf_add = Add;
p_stream->pf_del = Del; p_stream->pf_del = Del;
p_stream->pf_send = Send; p_stream->pf_send = Send;
p_stream->p_sout->i_out_pace_nocontrol++; p_stream->p_sys = p_sys;
p_stream->pace_nocontrol = true;
p_sys->i_control_fd = -1; p_sys->i_control_fd = -1;
p_sys->i_stream_fd = -1; p_sys->i_stream_fd = -1;
...@@ -1554,8 +1554,6 @@ static void Close( vlc_object_t *p_this ) ...@@ -1554,8 +1554,6 @@ static void Close( vlc_object_t *p_this )
SendTeardown( p_this ); SendTeardown( p_this );
FreeSys( p_this, p_sys ); FreeSys( p_this, p_sys );
p_stream->p_sout->i_out_pace_nocontrol--;
} }
......
...@@ -601,6 +601,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -601,6 +601,7 @@ static int Open( vlc_object_t *p_this )
p_stream->pf_del = Del; p_stream->pf_del = Del;
p_stream->pf_send = Send; p_stream->pf_send = Send;
} }
p_stream->pace_nocontrol = true;
if( var_GetBool( p_stream, SOUT_CFG_PREFIX"sap" ) ) if( var_GetBool( p_stream, SOUT_CFG_PREFIX"sap" ) )
SDPHandleUrl( p_stream, "sap" ); SDPHandleUrl( p_stream, "sap" );
...@@ -629,9 +630,6 @@ static int Open( vlc_object_t *p_this ) ...@@ -629,9 +630,6 @@ static int Open( vlc_object_t *p_this )
free( psz ); free( psz );
} }
/* update p_sout->i_out_pace_nocontrol */
p_stream->p_sout->i_out_pace_nocontrol++;
if( p_sys->p_mux != NULL ) if( p_sys->p_mux != NULL )
{ {
sout_stream_id_t *id = Add( p_stream, NULL ); sout_stream_id_t *id = Add( p_stream, NULL );
...@@ -653,9 +651,6 @@ static void Close( vlc_object_t * p_this ) ...@@ -653,9 +651,6 @@ static void Close( vlc_object_t * p_this )
sout_stream_t *p_stream = (sout_stream_t*)p_this; sout_stream_t *p_stream = (sout_stream_t*)p_this;
sout_stream_sys_t *p_sys = p_stream->p_sys; sout_stream_sys_t *p_sys = p_stream->p_sys;
/* update p_sout->i_out_pace_nocontrol */
p_stream->p_sout->i_out_pace_nocontrol--;
if( p_sys->p_mux ) if( p_sys->p_mux )
{ {
assert( p_sys->i_es <= 1 ); assert( p_sys->i_es <= 1 );
......
...@@ -191,10 +191,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -191,10 +191,7 @@ static int Open( vlc_object_t *p_this )
p_stream->pf_add = Add; p_stream->pf_add = Add;
p_stream->pf_del = Del; p_stream->pf_del = Del;
p_stream->pf_send = Send; p_stream->pf_send = Send;
p_stream->pace_nocontrol = p_sys->time_sync;
/* Does the module need out_pace_control? */
if ( p_sys->time_sync )
p_stream->p_sout->i_out_pace_nocontrol++;
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -205,8 +202,6 @@ static int Open( vlc_object_t *p_this ) ...@@ -205,8 +202,6 @@ static int Open( vlc_object_t *p_this )
static void Close( vlc_object_t * p_this ) static void Close( vlc_object_t * p_this )
{ {
sout_stream_t *p_stream = (sout_stream_t*)p_this; sout_stream_t *p_stream = (sout_stream_t*)p_this;
if ( p_stream->p_sys->time_sync )
p_stream->p_sout->i_out_pace_nocontrol--;
free( p_stream->p_sys ); free( p_stream->p_sys );
} }
......
...@@ -406,12 +406,11 @@ static int Open( vlc_object_t *p_this ) ...@@ -406,12 +406,11 @@ static int Open( vlc_object_t *p_this )
if( var_GetBool( p_stream, SOUT_CFG_PREFIX"sap" ) ) if( var_GetBool( p_stream, SOUT_CFG_PREFIX"sap" ) )
create_SDP( p_stream, p_access ); create_SDP( p_stream, p_access );
if( !sout_AccessOutCanControlPace( p_access ) )
p_stream->p_sout->i_out_pace_nocontrol++;
p_stream->pf_add = Add; p_stream->pf_add = Add;
p_stream->pf_del = Del; p_stream->pf_del = Del;
p_stream->pf_send = Send; p_stream->pf_send = Send;
if( !sout_AccessOutCanControlPace( p_access ) )
p_stream->pace_nocontrol = true;
ret = VLC_SUCCESS; ret = VLC_SUCCESS;
...@@ -440,8 +439,6 @@ static void Close( vlc_object_t * p_this ) ...@@ -440,8 +439,6 @@ static void Close( vlc_object_t * p_this )
sout_AnnounceUnRegister( p_stream, p_sys->p_session ); sout_AnnounceUnRegister( p_stream, p_sys->p_session );
sout_MuxDelete( p_sys->p_mux ); sout_MuxDelete( p_sys->p_mux );
if( !sout_AccessOutCanControlPace( p_access ) )
p_stream->p_sout->i_out_pace_nocontrol--;
sout_AccessOutDelete( p_access ); sout_AccessOutDelete( p_access );
free( p_sys ); free( p_sys );
......
...@@ -717,9 +717,14 @@ static void mrl_Clean( mrl_t *p_mrl ) ...@@ -717,9 +717,14 @@ static void mrl_Clean( mrl_t *p_mrl )
/* Destroy a "stream_out" module */ /* Destroy a "stream_out" module */
static void sout_StreamDelete( sout_stream_t *p_stream ) static void sout_StreamDelete( sout_stream_t *p_stream )
{ {
sout_instance_t *p_sout = (sout_instance_t *)(p_stream->p_parent);
msg_Dbg( p_stream, "destroying chain... (name=%s)", p_stream->psz_name ); msg_Dbg( p_stream, "destroying chain... (name=%s)", p_stream->psz_name );
if( p_stream->p_module ) module_unneed( p_stream, p_stream->p_module ); p_sout->i_out_pace_nocontrol -= p_stream->pace_nocontrol;
if( p_stream->p_module != NULL )
module_unneed( p_stream, p_stream->p_module );
FREENULL( p_stream->psz_name ); FREENULL( p_stream->psz_name );
...@@ -765,10 +770,11 @@ static sout_stream_t *sout_StreamNew( sout_instance_t *p_sout, char *psz_name, ...@@ -765,10 +770,11 @@ static sout_stream_t *sout_StreamNew( sout_instance_t *p_sout, char *psz_name,
return NULL; return NULL;
p_stream->p_sout = p_sout; p_stream->p_sout = p_sout;
p_stream->p_sys = NULL;
p_stream->psz_name = psz_name; p_stream->psz_name = psz_name;
p_stream->p_cfg = p_cfg; p_stream->p_cfg = p_cfg;
p_stream->p_next = p_next; p_stream->p_next = p_next;
p_stream->pace_nocontrol = false;
p_stream->p_sys = NULL;
msg_Dbg( p_sout, "stream=`%s'", p_stream->psz_name ); msg_Dbg( p_sout, "stream=`%s'", p_stream->psz_name );
...@@ -785,6 +791,7 @@ static sout_stream_t *sout_StreamNew( sout_instance_t *p_sout, char *psz_name, ...@@ -785,6 +791,7 @@ static sout_stream_t *sout_StreamNew( sout_instance_t *p_sout, char *psz_name,
return NULL; return NULL;
} }
p_sout->i_out_pace_nocontrol += p_stream->pace_nocontrol;
return p_stream; return p_stream;
} }
......
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