ActionsManager::~ActionsManager() { if ( p_rd != NULL ) { if (b_rd_started) { vlc_event_manager_t *em = vlc_rd_event_manager( p_rd ); vlc_event_detach( em, vlc_RendererDiscoveryItemAdded, renderer_event_received, p_intf); vlc_event_detach( em, vlc_RendererDiscoveryItemRemoved, renderer_event_received, p_intf); vlc_rd_stop( p_rd ); } vlc_rd_release( p_rd ); } }
void RendererDialog::setVisible(bool visible) { QVLCDialog::setVisible(visible); if (visible) { /* SD subnodes */ char **ppsz_longnames; char **ppsz_names; if( vlc_rd_get_names( THEPL, &ppsz_names, &ppsz_longnames ) != VLC_SUCCESS ) return; char **ppsz_name = ppsz_names, **ppsz_longname = ppsz_longnames; for( ; *ppsz_name; ppsz_name++, ppsz_longname++ ) { /* TODO launch all discovery services for renderers */ msg_Dbg( p_intf, "starting renderer discovery service %s", *ppsz_longname ); if ( p_rd == NULL ) { p_rd = vlc_rd_new( VLC_OBJECT(p_intf), *ppsz_name ); if( !p_rd ) msg_Err( p_intf, "Could not start renderer discovery services" ); } break; } free( ppsz_names ); free( ppsz_longnames ); if ( p_rd != NULL ) { int row = -1; char *psz_renderer = var_InheritString( THEPL, "sout" ); if ( psz_renderer != NULL ) { for ( row = 0 ; row < ui.receiversListWidget->count(); row++ ) { RendererItem *rowItem = reinterpret_cast<RendererItem*>( ui.receiversListWidget->item( row ) ); if ( rowItem->isItemSout( psz_renderer, false ) ) break; } if ( row == ui.receiversListWidget->count() ) row = -1; free( psz_renderer ); } ui.receiversListWidget->setCurrentRow( row ); if ( !b_rd_started ) { vlc_event_manager_t *em = vlc_rd_event_manager( p_rd ); vlc_event_attach( em, vlc_RendererDiscoveryItemAdded, renderer_event_received, this ); vlc_event_attach( em, vlc_RendererDiscoveryItemRemoved, renderer_event_received, this ); b_rd_started = vlc_rd_start( p_rd ) == VLC_SUCCESS; if ( !b_rd_started ) { vlc_event_detach( em, vlc_RendererDiscoveryItemAdded, renderer_event_received, this); vlc_event_detach( em, vlc_RendererDiscoveryItemRemoved, renderer_event_received, this); } } } } else { if ( p_rd != NULL ) { if ( b_rd_started ) { vlc_event_manager_t *em = vlc_rd_event_manager( p_rd ); vlc_event_detach( em, vlc_RendererDiscoveryItemAdded, renderer_event_received, this); vlc_event_detach( em, vlc_RendererDiscoveryItemRemoved, renderer_event_received, this); vlc_rd_stop( p_rd ); b_rd_started = false; } } ui.receiversListWidget->clear(); } }