]> git.sesse.net Git - vlc/blobdiff - src/control/media_list_player.c
vcdx: Fix memleaks.
[vlc] / src / control / media_list_player.c
index 4db4c86ccafb79b0c0140443991f5e09243d7e0b..40b45dba0b70e8cec0662d770da64d24b3e1f080 100644 (file)
@@ -170,7 +170,7 @@ static void
 install_media_player_observer( libvlc_media_list_player_t * p_mlp )
 {
     libvlc_event_attach( libvlc_media_player_event_manager( p_mlp->p_mi, NULL ),
-                         libvlc_MediaInstanceReachedEnd,
+                         libvlc_MediaPlayerEndReached,
                           media_player_reached_end, p_mlp, NULL );
 }
 
@@ -185,9 +185,9 @@ uninstall_media_player_observer( libvlc_media_list_player_t * p_mlp )
     {
         return;
     }
-        
+
     libvlc_event_detach( libvlc_media_player_event_manager( p_mlp->p_mi, NULL ),
-                         libvlc_MediaInstanceReachedEnd,
+                         libvlc_MediaPlayerEndReached,
                          media_player_reached_end, p_mlp, NULL );
 }
 
@@ -259,7 +259,7 @@ libvlc_media_list_player_new( libvlc_instance_t * p_instance,
     p_mlp->current_playing_item_path = NULL;
     p_mlp->p_mi = NULL;
     p_mlp->p_mlist = NULL;
-    vlc_mutex_init( p_instance->p_libvlc_int, &p_mlp->object_lock );
+    vlc_mutex_init( &p_mlp->object_lock );
     p_mlp->p_event_manager = libvlc_event_manager_new( p_mlp,
                                                        p_instance,
                                                        p_e );
@@ -368,6 +368,7 @@ libvlc_media_list_player_is_playing( libvlc_media_list_player_t * p_mlp,
 {
     libvlc_state_t state = libvlc_media_player_get_state( p_mlp->p_mi, p_e );
     return (state == libvlc_Opening) || (state == libvlc_Buffering) ||
+           (state == libvlc_Forward) || (state == libvlc_Backward) ||
            (state == libvlc_Playing);
 }
 
@@ -379,7 +380,7 @@ libvlc_media_list_player_get_state( libvlc_media_list_player_t * p_mlp,
                                     libvlc_exception_t * p_e )
 {
     if( !p_mlp->p_mi )
-        return libvlc_Stopped;
+        return libvlc_Ended;
     return libvlc_media_player_get_state( p_mlp->p_mi, p_e );
 }
 
@@ -434,7 +435,10 @@ void libvlc_media_list_player_stop( libvlc_media_list_player_t * p_mlp,
 {
     if ( p_mlp->p_mi )
     {
-        libvlc_media_player_stop( p_mlp->p_mi, p_e );        
+        /* We are not interested in getting media stop event now */
+        uninstall_media_player_observer( p_mlp );
+        libvlc_media_player_stop( p_mlp->p_mi, p_e );
+        install_media_player_observer( p_mlp );
     }
 
     vlc_mutex_lock( &p_mlp->object_lock );
@@ -448,7 +452,7 @@ void libvlc_media_list_player_stop( libvlc_media_list_player_t * p_mlp,
  **************************************************************************/
 void libvlc_media_list_player_next( libvlc_media_list_player_t * p_mlp,
                                     libvlc_exception_t * p_e )
-{    
+{
     libvlc_media_list_path_t path;
 
     if (! p_mlp->p_mlist )
@@ -456,7 +460,7 @@ void libvlc_media_list_player_next( libvlc_media_list_player_t * p_mlp,
         libvlc_exception_raise( p_e, "No more element to play" );
         return;
     }
-    
+
     libvlc_media_list_lock( p_mlp->p_mlist );
 
     path = get_next_path( p_mlp );
@@ -470,7 +474,7 @@ void libvlc_media_list_player_next( libvlc_media_list_player_t * p_mlp,
     }
 
     set_current_playing_item( p_mlp, path, p_e );
-    
+
     libvlc_media_player_play( p_mlp->p_mi, p_e );
 
     libvlc_media_list_unlock( p_mlp->p_mlist );