/* playlist node */
playlist_item_t *p_node_cat;
playlist_item_t *p_node_one;
- playlist_t *p_playlist;
/* Table of announces */
int i_announces;
? VLC_TRUE : VLC_FALSE;
/* Create our playlist node */
- p_sys->p_playlist = (playlist_t *)vlc_object_find( p_sd,
- VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( !p_sys->p_playlist )
- {
- msg_Warn( p_sd, "unable to find playlist, cancelling SAP listening");
- return VLC_EGENERIC;
- }
+ pl_Yield( p_sd );
- playlist_NodesPairCreate( p_sys->p_playlist, _("SAP sessions"),
+ playlist_NodesPairCreate( pl_Get( p_sd ), _("SAP sessions"),
&p_sys->p_node_cat, &p_sys->p_node_one,
VLC_TRUE );
}
FREENULL( p_sys->pp_announces );
- if( p_sys->p_playlist )
- {
- playlist_NodeDelete( p_sys->p_playlist, p_sys->p_node_cat, VLC_TRUE,
- VLC_TRUE );
- playlist_NodeDelete( p_sys->p_playlist, p_sys->p_node_one, VLC_TRUE,
- VLC_TRUE );
- vlc_object_release( p_sys->p_playlist );
- }
-
+ playlist_NodeDelete( pl_Get(p_sd), p_sys->p_node_cat, VLC_TRUE,
+ VLC_TRUE );
+ playlist_NodeDelete( pl_Get(p_sd), p_sys->p_node_one, VLC_TRUE,
+ VLC_TRUE );
+ pl_Release( p_sd );
free( p_sys );
}
static int Demux( demux_t *p_demux )
{
sdp_t *p_sdp = p_demux->p_sys->p_sdp;
- playlist_t *p_playlist;
input_thread_t *p_input;
input_item_t *p_parent_input;
- p_playlist = (playlist_t *)vlc_object_find( p_demux, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( !p_playlist )
- {
- msg_Err( p_demux, "playlist could not be found" );
- return VLC_EGENERIC;
- }
-
+ playlist_t *p_playlist = pl_Yield( p_demux );
p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT,
- FIND_PARENT );
+ FIND_PARENT );
+ assert( p_input );
if( !p_input )
{
msg_Err( p_demux, "parent input could not be found" );
if( p_child == NULL )
{
- p_child = playlist_NodeCreate( p_sys->p_playlist, psz_value,
+ p_child = playlist_NodeCreate( pl_Get( p_sd ), psz_value,
p_sys->p_node_cat );
p_child->i_flags &= ~PLAYLIST_SKIP_FLAG;
}
p_child = p_sys->p_node_cat;
}
- p_item = playlist_NodeAddInput( p_sys->p_playlist, p_input, p_child,
+ p_item = playlist_NodeAddInput( pl_Get( p_sd ), p_input, p_child,
PLAYLIST_APPEND, PLAYLIST_END );
p_item->i_flags &= ~PLAYLIST_SKIP_FLAG;
p_item->i_flags &= ~PLAYLIST_SAVE_FLAG;
p_sap->i_item_id_cat = p_item->i_id;
- p_item = playlist_NodeAddInput( p_sys->p_playlist, p_input,
+ p_item = playlist_NodeAddInput( pl_Get( p_sd ), p_input,
p_sys->p_node_one, PLAYLIST_APPEND, PLAYLIST_END );
p_item->i_flags &= ~PLAYLIST_SKIP_FLAG;
p_item->i_flags &= ~PLAYLIST_SAVE_FLAG;
}
if( p_announce->i_input_id > -1 )
- {
- playlist_LockDeleteAllFromInput(
- p_sd->p_sys->p_playlist, p_announce->i_input_id );
- }
+ playlist_LockDeleteAllFromInput( pl_Get(p_sd), p_announce->i_input_id );
for( i = 0; i< p_sd->p_sys->i_announces; i++)
{
static int Open( vlc_object_t *p_this, int i_type )
{
services_discovery_t *p_sd = ( services_discovery_t* )p_this;
- services_discovery_sys_t *p_sys = malloc(
- sizeof( services_discovery_sys_t ) );
-
vlc_value_t val;
- playlist_t *p_playlist;
playlist_view_t *p_view;
-
- p_sd->pf_run = Run;
+ playlist_t *p_playlist = pl_Yield( p_this );
+ DECMALLOC_ERR( p_sys, services_discovery_sys_t );
p_sd->p_sys = p_sys;
- /* Create our playlist node */
- p_playlist = (playlist_t *)vlc_object_find( p_sd, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( !p_playlist )
- {
- msg_Warn( p_sd, "unable to find playlist, cancelling");
- return VLC_EGENERIC;
- }
-
switch( i_type )
{
case TV:
p_sys->p_node_one->i_flags |= PLAYLIST_SKIP_FLAG;
p_sys->p_node_one->p_input->i_id = p_sys->p_node_cat->p_input->i_id;
- val.b_bool = VLC_TRUE;
- var_Set( p_playlist, "intf-change", val );
+ var_SetVoid( p_playlist, "intf-change" );
- vlc_object_release( p_playlist );
+ pl_Release( p_this );
+ input_Read( p_sd, p_sys->p_input, VLC_FALSE );
return VLC_SUCCESS;
}
{
services_discovery_t *p_sd = ( services_discovery_t* )p_this;
services_discovery_sys_t *p_sys = p_sd->p_sys;
- playlist_t *p_playlist = (playlist_t *) vlc_object_find( p_sd,
- VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
- if( p_playlist )
- {
- playlist_NodeDelete( p_playlist, p_sys->p_node_cat, VLC_TRUE, VLC_TRUE );
- playlist_NodeDelete( p_playlist, p_sys->p_node_one, VLC_TRUE, VLC_TRUE );
- vlc_object_release( p_playlist );
- }
+ playlist_t *p_playlist = pl_Yield( p_sd );
+ playlist_NodeDelete( p_playlist, p_sys->p_node_cat, VLC_TRUE, VLC_TRUE );
+ playlist_NodeDelete( p_playlist, p_sys->p_node_one, VLC_TRUE, VLC_TRUE );
+ pl_Release( p_sd );
free( p_sys );
}
-
-/*****************************************************************************
- * Run: main thread
- *****************************************************************************/
-static void Run( services_discovery_t *p_sd )
-{
- services_discovery_sys_t *p_sys = p_sd->p_sys;
- int i_id = input_Read( p_sd, p_sys->p_input, VLC_FALSE );
- while( !p_sd->b_die )
- {
- msleep( 10*INTF_IDLE_SLEEP );
- }
-}
vlc_mutex_unlock( &p_playlist->object_lock );
+ if( !p_sd->pf_run ) return VLC_SUCCESS;
+
if( vlc_thread_create( p_sd, "services_discovery", RunSD,
VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
{
{
int i;
services_discovery_t *p_sd = NULL;
- vlc_mutex_lock( &p_playlist->object_lock );
+ PL_LOCK;
for( i = 0 ; i< p_playlist->i_sds ; i ++ )
{
if( !strcmp( psz_module, p_playlist->pp_sds[i]->psz_module ) )
if( p_sd )
{
- vlc_mutex_unlock( &p_playlist->object_lock );
+ PL_UNLOCK;
p_sd->b_die = VLC_TRUE;
- vlc_thread_join( p_sd );
+ if( p_sd->pf_run ) vlc_thread_join( p_sd );
+
free( p_sd->psz_module );
module_Unneed( p_sd, p_sd->p_module );
- vlc_mutex_lock( &p_playlist->object_lock );
+ PL_LOCK;
vlc_object_destroy( p_sd );
}
else
{
msg_Warn( p_playlist, "module %s is not loaded", psz_module );
- vlc_mutex_unlock( &p_playlist->object_lock );
+ PL_UNLOCK;
return VLC_EGENERIC;
}
-
- vlc_mutex_unlock( &p_playlist->object_lock );
+ PL_UNLOCK;
return VLC_SUCCESS;
}
const char *psz_module )
{
int i;
- vlc_mutex_lock( &p_playlist->object_lock );
+ PL_LOCK;
for( i = 0 ; i< p_playlist->i_sds ; i ++ )
{
if( !strcmp( psz_module, p_playlist->pp_sds[i]->psz_module ) )
{
- vlc_mutex_unlock( &p_playlist->object_lock );
+ PL_UNLOCK;
return VLC_TRUE;
}
}
- vlc_mutex_unlock( &p_playlist->object_lock );
+ PL_UNLOCK;
return VLC_FALSE;
}
while( psz_parser && *psz_parser )
{
while( *psz_parser == ' ' || *psz_parser == ':' )
- {
psz_parser++;
- }
if( (psz_next = strchr( psz_parser, ':' ) ) )
- {
*psz_next++ = '\0';
- }
+
if( *psz_parser == '\0' )
{
break;