/************************************************************************** * set_media_list (Public) **************************************************************************/ void libvlc_media_list_player_set_media_list(libvlc_media_list_player_t * p_mlp, libvlc_media_list_t * p_mlist) { assert (p_mlist); lock(p_mlp); if (p_mlp->p_mlist) { uninstall_playlist_observer(p_mlp); libvlc_media_list_release(p_mlp->p_mlist); } libvlc_media_list_retain(p_mlist); p_mlp->p_mlist = p_mlist; install_playlist_observer(p_mlp); unlock(p_mlp); }
/************************************************************************** * set_media_list (Public) **************************************************************************/ void libvlc_media_list_player_set_media_list(libvlc_media_list_player_t * p_mlp, libvlc_media_list_t * p_mlist, libvlc_exception_t * p_e) { VLC_UNUSED( p_e ); assert (p_mlist); lock(p_mlp); if (p_mlp->p_mlist) { uninstall_playlist_observer(p_mlp); libvlc_media_list_release(p_mlp->p_mlist); } libvlc_media_list_retain(p_mlist); p_mlp->p_mlist = p_mlist; install_playlist_observer(p_mlp); unlock(p_mlp); }
/************************************************************************** * release (Public) **************************************************************************/ void libvlc_media_list_player_release(libvlc_media_list_player_t * p_mlp) { if (!p_mlp) return; lock(p_mlp); p_mlp->i_refcount--; if (p_mlp->i_refcount > 0) { unlock(p_mlp); return; } assert(p_mlp->i_refcount == 0); unlock(p_mlp); vlc_cancel(p_mlp->thread); vlc_join(p_mlp->thread, NULL); lock(p_mlp); /* Keep the lock(), because the uninstall functions * check for it. That's convenient. */ uninstall_media_player_observer(p_mlp); libvlc_media_player_release(p_mlp->p_mi); if (p_mlp->p_mlist) { uninstall_playlist_observer(p_mlp); libvlc_media_list_release(p_mlp->p_mlist); } unlock(p_mlp); libvlc_event_manager_destroy(&p_mlp->event_manager); vlc_cond_destroy(&p_mlp->seek_pending); vlc_mutex_destroy(&p_mlp->mp_callback_lock); vlc_mutex_destroy(&p_mlp->object_lock); free(p_mlp->current_playing_item_path); free(p_mlp); }