From 4faa38ecba8274d50fb03ff070ff18df9f4f9875 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 27 Jun 2010 16:52:58 +0300 Subject: [PATCH 1/1] libvlc_media_player_set_pause: race-free pause/resume function While -confusingly IMHO- libvlc_media_player_pause() toggles the pause state, libvlc_media_player_set_pause() sets it. --- include/vlc/libvlc_media_player.h | 9 +++++++++ src/control/media_player.c | 32 ++++++++++++++++++++++--------- src/libvlc.sym | 1 + 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h index 0c1a4ef17b..435bb4f9df 100644 --- a/include/vlc/libvlc_media_player.h +++ b/include/vlc/libvlc_media_player.h @@ -176,6 +176,15 @@ VLC_PUBLIC_API int libvlc_media_player_is_playing ( libvlc_media_player_t *p_mi */ VLC_PUBLIC_API int libvlc_media_player_play ( libvlc_media_player_t *p_mi ); +/** + * Pause or resume (no effect if there is no media) + * + * \param mp the Media Player + * \param do_pause play/resume if zero, pause if non-zero + */ +VLC_PUBLIC_API void libvlc_media_player_set_pause ( libvlc_media_player_t *mp, + int do_pause ); + /** * Toggle pause (no effect if there is no media) * diff --git a/src/control/media_player.c b/src/control/media_player.c index a9104eeb34..158cf3d551 100644 --- a/src/control/media_player.c +++ b/src/control/media_player.c @@ -690,10 +690,7 @@ int libvlc_media_player_play( libvlc_media_player_t *p_mi ) return 0; } -/************************************************************************** - * Pause. - **************************************************************************/ -void libvlc_media_player_pause( libvlc_media_player_t *p_mi ) +void libvlc_media_player_set_pause( libvlc_media_player_t *p_mi, int paused ) { input_thread_t * p_input_thread = libvlc_get_input_thread( p_mi ); if( !p_input_thread ) @@ -702,17 +699,34 @@ void libvlc_media_player_pause( libvlc_media_player_t *p_mi ) libvlc_state_t state = libvlc_media_player_get_state( p_mi ); if( state == libvlc_Playing || state == libvlc_Buffering ) { - if( libvlc_media_player_can_pause( p_mi ) ) - input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S ); - else - libvlc_media_player_stop( p_mi ); + if( paused ) + { + if( libvlc_media_player_can_pause( p_mi ) ) + input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S ); + else + libvlc_media_player_stop( p_mi ); + } } else - input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S ); + { + if( !paused ) + input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S ); + } vlc_object_release( p_input_thread ); } +/************************************************************************** + * Toggle pause. + **************************************************************************/ +void libvlc_media_player_pause( libvlc_media_player_t *p_mi ) +{ + libvlc_state_t state = libvlc_media_player_get_state( p_mi ); + bool playing = (state == libvlc_Playing || state == libvlc_Buffering); + + libvlc_media_player_set_pause( p_mi, playing ); +} + /************************************************************************** * Tells whether the media player is currently playing. * diff --git a/src/libvlc.sym b/src/libvlc.sym index b732453525..fa92d462db 100644 --- a/src/libvlc.sym +++ b/src/libvlc.sym @@ -129,6 +129,7 @@ libvlc_media_player_is_playing libvlc_media_player_new libvlc_media_player_new_from_media libvlc_media_player_next_chapter +libvlc_media_player_set_pause libvlc_media_player_pause libvlc_media_player_play libvlc_media_player_previous_chapter -- 2.39.2