[vlc-devel] commit: libvlc: when calling libvlc_media_player_stop() check for playing or paused state before to send a stopped event ( Tanguy Krotoff )

git version control git at videolan.org
Sun May 18 13:08:58 CEST 2008


vlc | branch: master | Tanguy Krotoff <tkrotoff at> | Fri May 30 03:12:38 2008 +0000| [4a66eee1f0a52d8e1a10a47984e3146af958b1f0]

libvlc: when calling libvlc_media_player_stop() check for playing or paused state before to send a stopped event

Signed-off-by: Jean-Paul Saman <jpsaman at videolan.org>

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

 src/control/media_player.c |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/control/media_player.c b/src/control/media_player.c
index a38df31..f112c2e 100644
--- a/src/control/media_player.c
+++ b/src/control/media_player.c
@@ -487,7 +487,7 @@ void libvlc_media_player_set_media(
     release_input_thread( p_mi );
 
     if( p_mi->p_md )
-        libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL );
+        libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, p_e );
 
     libvlc_media_release( p_mi->p_md );
 
@@ -605,9 +605,9 @@ void libvlc_media_player_pause( libvlc_media_player_t *p_mi,
     if( !p_input_thread )
         return;
 
-    int state = var_GetInteger( p_input_thread, "state" );
+    libvlc_state_t state = libvlc_media_player_get_state( p_mi, p_e );
 
-    if( state == PLAYING_S )
+    if( state == libvlc_Playing )
     {
         if( libvlc_media_player_can_pause( p_mi, p_e ) )
             input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S );
@@ -626,6 +626,20 @@ void libvlc_media_player_pause( libvlc_media_player_t *p_mi,
 void libvlc_media_player_stop( libvlc_media_player_t *p_mi,
                                  libvlc_exception_t *p_e )
 {
+    libvlc_state_t state = libvlc_media_player_get_state( p_mi, p_e );
+
+    if( state == libvlc_Playing || state == libvlc_Paused )
+    {
+        /* Send a stop notification event only of we are in playing or paused states */
+
+        libvlc_media_set_state( p_mi->p_md, libvlc_Stopped, p_e );
+
+        /* Construct and send the event */
+        libvlc_event_t event;
+        event.type = libvlc_MediaPlayerStopped;
+        libvlc_event_send( p_mi->p_event_manager, &event );
+    }
+
     if( p_mi->b_own_its_input_thread )
     {
         vlc_mutex_lock( &p_mi->object_lock );
@@ -642,12 +656,6 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi,
         input_StopThread( p_input_thread );
         vlc_object_release( p_input_thread );
     }
-
-    /* Send a stop notification event */
-    libvlc_event_t event;
-    libvlc_media_set_state( p_mi->p_md, libvlc_Stopped, NULL);
-    event.type = libvlc_MediaPlayerStopped;
-    libvlc_event_send( p_mi->p_event_manager, &event );
 }
 
 /**************************************************************************




More information about the vlc-devel mailing list