/*****************************************************************************
- * Upnp_intell.cpp : UPnP discovery module (Intel SDK)
+ * Upnp_intel.cpp : UPnP discovery module (Intel SDK)
*****************************************************************************
- * Copyright (C) 2004-2006 the VideoLAN team
+ * Copyright (C) 2004-2008 the VideoLAN team
* $Id$
*
* Authors: RĂ©mi Denis-Courmont <rem # videolan.org> (original plugin)
# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_playlist.h>
static int Open( vlc_object_t* );
static void Close( vlc_object_t* );
static void Run( services_discovery_t *p_sd );
-static playlist_t *pl_Get( service_discovery_t *p_sd )
+static playlist_t *pl_Get( services_discovery_t *p_sd )
{
return p_sd->p_sys->p_playlist;
}
vlc_module_begin();
set_shortname( "UPnP" );
-set_description( _( "Universal Plug'n'Play discovery ( Intel SDK )" ) );
+set_description( N_( "Universal Plug'n'Play discovery ( Intel SDK )" ) );
set_category( CAT_PLAYLIST );
set_subcategory( SUBCAT_PLAYLIST_SD );
set_capability( "services_discovery", 0 );
p_sys->p_playlist = pl_Yield( p_sd );
/* Create our playlist node */
+ vlc_object_lock( p_sys->p_playlist );
playlist_NodesPairCreate( pl_Get( p_sd ), _("Devices"),
&p_sys->p_node_cat, &p_sys->p_node_one,
true );
+ vlc_object_unlock( p_sys->p_playlist );
return VLC_SUCCESS;
}
services_discovery_t *p_sd = ( services_discovery_t* )p_this;
services_discovery_sys_t *p_sys = p_sd->p_sys;
+ vlc_object_lock( p_sys->p_playlist );
playlist_NodeDelete( pl_Get( p_sd ), p_sys->p_node_one, true,
true );
playlist_NodeDelete( pl_Get( p_sd ), p_sys->p_node_cat, true,
true );
- pl_Release( p_intf );
+ vlc_object_unlock( p_sys->p_playlist );
+ pl_Release( p_sd );
free( p_sys );
}
}
msg_Dbg( p_sd, "UPnP discovery started" );
- while( !p_sd->b_die )
+ while( vlc_object_alive (p_sd) )
{
msleep( 500 );
}
{
if ( _contents )
{
+ vlc_object_lock( _cookie->serviceDiscovery->p_sys->p_playlist );
playlist_NodeDelete( pl_Get( _cookie->serviceDiscovery ) ,
_playlistNode, true, true );
+ vlc_object_unlock( _cookie->serviceDiscovery->p_sys->p_playlist );
}
delete _contents;
/* FIXME: playlist_AddInput() can fail */
playlist_BothAddInput( p_playlist, p_input, parentNode,
PLAYLIST_APPEND, PLAYLIST_END, &i_cat, NULL,
- false );
+ pl_Unlocked );
vlc_gc_decref( p_input );
/* TODO: do this better by storing ids */
playlist_item_t *p_node = playlist_ItemGetById( p_playlist, i_cat, false );
_list.push_back( s );
char* name = strdup( s->getFriendlyName() );
- playlist_item_t* node = playlist_NodeCreate( pl_Get( _cookie->serviceDiscovery ),
- name,
- _cookie->serviceDiscovery->p_sys->p_node_cat, 0, NULL );
+ vlc_object_lock( _cookie->serviceDiscovery->p_sys->p_playlist );
+ playlist_item_t* node = playlist_NodeCreate(
+ pl_Get( _cookie->serviceDiscovery ), name,
+ _cookie->serviceDiscovery->p_sys->p_node_cat,
+ 0, NULL );
+ vlc_object_unlock( _cookie->serviceDiscovery->p_sys->p_playlist );
free( name );
s->setPlaylistNode( node );