]> git.sesse.net Git - vlc/commitdiff
libvlc_media_player_set_pause: race-free pause/resume function
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 27 Jun 2010 13:52:58 +0000 (16:52 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 27 Jun 2010 13:52:58 +0000 (16:52 +0300)
While -confusingly IMHO- libvlc_media_player_pause() toggles the pause
state, libvlc_media_player_set_pause() sets it.

include/vlc/libvlc_media_player.h
src/control/media_player.c
src/libvlc.sym

index 0c1a4ef17be8effa3ade60e7216f311e6da37e19..435bb4f9df3b981457ea5cb63c9fd7345127b0e3 100644 (file)
@@ -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)
  *
index a9104eeb344a2def327cb33cf02a828fad201f7f..158cf3d5515542adcfa43786469a3b0736530539 100644 (file)
@@ -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.
  *
index b732453525d0cc1c5d9bdfa5da05421738e3cf06..fa92d462dbccb8115e0373de2ef2a3084923b681 100644 (file)
@@ -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