[vlc-commits] libvlc: don't check current state in libvlc_media_player_set_pause

Zhao Zhili git at videolan.org
Fri Sep 29 09:36:56 CEST 2017


vlc | branch: master | Zhao Zhili <quinkblack at foxmail.com> | Thu Sep 28 10:34:20 2017 +0800| [fe0668c889117eff61444af22fd9e37461b806ca] | committer: Thomas Guillem

libvlc: don't check current state in libvlc_media_player_set_pause

Since input_Control is executed asynchronously, current state may be
different to the state when INPUT_SET_STATE executing. Here is a use
case which is broken by check current state in
libvlc_media_player_set_pause():

1. current state is paused
2. call libvlc_media_player_play()
3. call libvlc_media_player_set_pause() immediately before
INPUT_SET_STATE PLAYING_S is executed, libvlc_media_player_set_pause()
will do nothing, so it looks like the pause request is been dropped
silently

Signed-off-by: Thomas Guillem <thomas at gllm.fr>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fe0668c889117eff61444af22fd9e37461b806ca
---

 lib/media_player.c | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/lib/media_player.c b/lib/media_player.c
index a462f46e29..8ccf3179cb 100644
--- a/lib/media_player.c
+++ b/lib/media_player.c
@@ -1007,21 +1007,16 @@ void libvlc_media_player_set_pause( libvlc_media_player_t *p_mi, int paused )
     if( !p_input_thread )
         return;
 
-    libvlc_state_t state = libvlc_media_player_get_state( p_mi );
-    if( state == libvlc_Playing )
+    if( paused )
     {
-        if( paused )
-        {
-            if( libvlc_media_player_can_pause( p_mi ) )
-                input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S );
-            else
-                input_Stop( p_input_thread );
-        }
+        if( libvlc_media_player_can_pause( p_mi ) )
+            input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S );
+        else
+            input_Stop( p_input_thread );
     }
     else
     {
-        if( !paused )
-            input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S );
+        input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S );
     }
 
     vlc_object_release( p_input_thread );



More information about the vlc-commits mailing list