@ -22,6 +22,9 @@
# include "config.h"
# endif
# include <vlc_common.h>
# include <vlc_interface.h>
# include "player.h"
# include "../player/player.h"
@ -72,6 +75,17 @@ player_on_current_media_changed(vlc_player_t *player, input_item_t *new_media,
vlc_playlist_state_NotifyChanges ( playlist , & state ) ;
}
static void
on_player_state_changed ( vlc_player_t * player ,
enum vlc_player_state new_state , void * userdata )
{
vlc_playlist_t * playlist = userdata ;
if ( new_state = = VLC_PLAYER_STATE_STOPPED
& & playlist - > stopped_action = = VLC_PLAYLIST_MEDIA_STOPPED_EXIT )
libvlc_Quit ( vlc_object_instance ( player ) ) ;
}
static void
on_player_media_meta_changed ( vlc_player_t * player , input_item_t * media ,
void * userdata )
@ -117,7 +131,17 @@ player_get_next_media(vlc_player_t *player, void *userdata)
{
VLC_UNUSED ( player ) ;
vlc_playlist_t * playlist = userdata ;
return vlc_playlist_GetNextMedia ( playlist ) ;
switch ( playlist - > stopped_action )
{
case VLC_PLAYLIST_MEDIA_STOPPED_CONTINUE :
case VLC_PLAYLIST_MEDIA_STOPPED_PAUSE :
case VLC_PLAYLIST_MEDIA_STOPPED_EXIT :
return vlc_playlist_GetNextMedia ( playlist ) ;
case VLC_PLAYLIST_MEDIA_STOPPED_STOP :
return NULL ;
default :
vlc_assert_unreachable ( ) ;
}
}
static const struct vlc_player_media_provider player_media_provider = {
@ -126,6 +150,7 @@ static const struct vlc_player_media_provider player_media_provider = {
static const struct vlc_player_cbs player_callbacks = {
. on_current_media_changed = player_on_current_media_changed ,
. on_state_changed = on_player_state_changed ,
. on_media_meta_changed = on_player_media_meta_changed ,
. on_length_changed = on_player_media_length_changed ,
. on_media_subitems_changed = on_player_media_subitems_changed ,
@ -193,3 +218,15 @@ vlc_playlist_Resume(vlc_playlist_t *playlist)
{
vlc_player_Resume ( playlist - > player ) ;
}
void
vlc_playlist_SetMediaStoppedAction ( vlc_playlist_t * playlist ,
enum vlc_playlist_media_stopped_action action )
{
vlc_playlist_AssertLocked ( playlist ) ;
playlist - > stopped_action = action ;
var_SetBool ( playlist - > player , " play-and-pause " ,
action = = VLC_PLAYLIST_MEDIA_STOPPED_PAUSE ) ;
vlc_player_InvalidateNextMedia ( playlist - > player ) ;
vlc_playlist_Notify ( playlist , on_media_stopped_action_changed , action ) ;
}