/************************************************************************** * Previous (Public) **************************************************************************/ void libvlc_media_list_player_previous(libvlc_media_list_player_t * p_mlp, libvlc_exception_t * p_e) { lock(p_mlp); set_relative_playlist_position_and_play(p_mlp, -1, p_e); unlock(p_mlp); }
/************************************************************************** * Previous (Public) **************************************************************************/ int libvlc_media_list_player_previous(libvlc_media_list_player_t * p_mlp) { lock(p_mlp); int failure = set_relative_playlist_position_and_play(p_mlp, -1); unlock(p_mlp); return failure; }
/************************************************************************** * media_player_reached_end (private) (Event Callback) **************************************************************************/ static void media_player_reached_end(const libvlc_event_t * p_event, void * p_user_data) { VLC_UNUSED(p_event); libvlc_media_list_player_t * p_mlp = p_user_data; vlc_mutex_lock(&p_mlp->mp_callback_lock); if (!p_mlp->are_mp_callback_cancelled) set_relative_playlist_position_and_play(p_mlp, 1); vlc_mutex_unlock(&p_mlp->mp_callback_lock); }
/************************************************************************** * Play (Public) **************************************************************************/ void libvlc_media_list_player_play(libvlc_media_list_player_t * p_mlp, libvlc_exception_t * p_e) { lock(p_mlp); if (!p_mlp->current_playing_item_path) { set_relative_playlist_position_and_play(p_mlp, 1, p_e); unlock(p_mlp); return; /* Will set to play */ } libvlc_media_player_play(p_mlp->p_mi, p_e); unlock(p_mlp); }
/************************************************************************** * media_player_reached_end (private) (Event Callback) **************************************************************************/ static void media_player_reached_end(const libvlc_event_t * p_event, void * p_user_data) { VLC_UNUSED(p_event); libvlc_media_list_player_t * p_mlp = p_user_data; libvlc_exception_t e; libvlc_exception_init(&e); vlc_mutex_lock(&p_mlp->mp_callback_lock); if (!p_mlp->are_mp_callback_cancelled) set_relative_playlist_position_and_play(p_mlp, 1, &e); vlc_mutex_unlock(&p_mlp->mp_callback_lock); // There is no point in reporting an error from this callback libvlc_exception_clear(&e); }
static void *playlist_thread(void *data) { libvlc_media_list_player_t *mlp = data; vlc_mutex_lock(&mlp->mp_callback_lock); mutex_cleanup_push(&mlp->mp_callback_lock); for (;;) { int canc; while (mlp->seek_offset == 0) vlc_cond_wait(&mlp->seek_pending, &mlp->mp_callback_lock); canc = vlc_savecancel(); set_relative_playlist_position_and_play(mlp, mlp->seek_offset); mlp->seek_offset = 0; vlc_restorecancel(canc); } vlc_cleanup_pop(); vlc_assert_unreachable(); }