* the global stats. Check if there is already someone doing this */
if( p_input->p_libvlc->p_stats && !b_quick )
{
+ libvlc_priv_t *priv = libvlc_priv (p_input->p_libvlc);
vlc_mutex_lock( &p_input->p_libvlc->p_stats->lock );
- if( p_input->p_libvlc->p_stats_computer == NULL )
- {
- p_input->p_libvlc->p_stats_computer = p_input;
- }
+ if( priv->p_stats_computer == NULL )
+ priv->p_stats_computer = p_input;
vlc_mutex_unlock( &p_input->p_libvlc->p_stats->lock );
}
/* We have finished */
p_input->b_eof = true;
- playlist_Signal( pl_Get( p_input ) );
+ playlist_Signal( libvlc_priv (p_input->p_libvlc)->p_playlist );
}
/* Wait until we are asked to die */
{
stats_ComputeInputStats( p_input, p_input->p->input.p_item->p_stats );
/* Are we the thread responsible for computing global stats ? */
- if( p_input->p_libvlc->p_stats_computer == p_input )
+ if( libvlc_priv (p_input->p_libvlc)->p_stats_computer == p_input )
{
stats_ComputeGlobalStats( p_input->p_libvlc,
- p_input->p_libvlc->p_stats );
+ p_input->p_libvlc->p_stats );
}
}
}
/* Prepare statistics */
#define INIT_COUNTER( c, type, compute ) p_input->p->counters.p_##c = \
stats_CounterCreate( p_input, VLC_VAR_##type, STATS_##compute);
- if( p_input->p_libvlc->b_stats )
+ if( libvlc_stats (p_input) )
{
INIT_COUNTER( read_bytes, INTEGER, COUNTER );
INIT_COUNTER( read_packets, INTEGER, COUNTER );
return VLC_EGENERIC;
}
}
- if( p_input->p_libvlc->b_stats )
+ if( libvlc_stats (p_input) )
{
INIT_COUNTER( sout_sent_packets, INTEGER, COUNTER );
INIT_COUNTER (sout_sent_bytes, INTEGER, COUNTER );
}
#endif
- if( !p_input->b_preparsing && p_input->p_libvlc->b_stats )
+ if( !p_input->b_preparsing && libvlc_stats (p_input) )
{
#define EXIT_COUNTER( c ) do { if( p_input->p->counters.p_##c ) \
stats_CounterClean( p_input->p->counters.p_##c );\
if( !p_input->b_preparsing )
{
#define CL_CO( c ) stats_CounterClean( p_input->p->counters.p_##c ); p_input->p->counters.p_##c = NULL;
- if( p_input->p_libvlc->b_stats )
+ if( libvlc_stats (p_input) )
{
+ libvlc_priv_t *priv = libvlc_priv (p_input->p_libvlc);
+
/* make sure we are up to date */
stats_ComputeInputStats( p_input, p_input->p->input.p_item->p_stats );
- if( p_input->p_libvlc->p_stats_computer == p_input )
+ if( priv->p_stats_computer == p_input )
{
stats_ComputeGlobalStats( p_input->p_libvlc,
p_input->p_libvlc->p_stats );
- p_input->p_libvlc->p_stats_computer = NULL;
+ priv->p_stats_computer = NULL;
}
CL_CO( read_bytes );
CL_CO( read_packets );
* XXX it might be unusable but this will be checked later */
if( b_keep_sout )
{
- p_sout = vlc_object_find( p_parent->p_libvlc, VLC_OBJECT_SOUT,
- FIND_CHILD );
- if( p_sout )
+ playlist_t *p_playlist = vlc_object_find( p_parent->p_libvlc,
+ VLC_OBJECT_PLAYLIST, FIND_CHILD );
+ if( p_playlist )
{
- if( p_sout->p_parent != VLC_OBJECT( p_sout->p_libvlc ) )
- {
- vlc_object_release( p_sout );
- p_sout = NULL;
- }
- else
+ vlc_mutex_lock( &p_playlist->gc_lock );
+ p_sout = vlc_object_find( p_playlist, VLC_OBJECT_SOUT, FIND_CHILD );
+ if( p_sout )
{
- vlc_object_detach( p_sout ); /* Remove it from the GC */
- vlc_object_release( p_sout );
+ if( p_sout->p_parent != VLC_OBJECT( p_playlist ) )
+ {
+ vlc_object_release( p_sout );
+ p_sout = NULL;
+ }
+ else
+ {
+ vlc_object_detach( p_sout ); /* Remove it from the GC */
+ vlc_object_release( p_sout );
+ }
}
+ vlc_mutex_unlock( &p_playlist->gc_lock );
+ vlc_object_release( p_playlist );
}
}
static void SoutKeep( sout_instance_t *p_sout )
{
+ playlist_t * p_playlist = vlc_object_find( p_sout, VLC_OBJECT_PLAYLIST,
+ FIND_PARENT );
+ if( !p_playlist ) return;
+
msg_Dbg( p_sout, "sout has been kept" );
- vlc_object_attach( p_sout, p_sout->p_libvlc );
+ vlc_object_attach( p_sout, p_playlist );
+
+ vlc_object_release( p_playlist );
}
/*****************************************************************************
vlc_meta_t *p_meta = vlc_meta_New();
access_Control( p_input->p->input.p_access,ACCESS_GET_META, p_meta );
InputUpdateMeta( p_input, p_meta );
- var_SetInteger( pl_Get( p_input ), "item-change", p_input->p->input.p_item->i_id );
+ var_SetInteger( libvlc_priv (p_input->p_libvlc)->p_playlist,
+ "item-change", p_input->p->input.p_item->i_id );
p_access->info.i_update &= ~INPUT_UPDATE_META;
}
if( !p_input->b_preparsing )
{
pl_Yield( p_input );
- var_SetInteger( pl_Get( p_input ), "item-change",
- p_input->p->input.p_item->i_id );
+ var_SetInteger( libvlc_priv (p_input->p_libvlc)->p_playlist,
+ "item-change", p_input->p->input.p_item->i_id );
pl_Release( p_input );
}
}