]> git.sesse.net Git - vlc/blobdiff - lib/media_player.c
decoder: drain the audio output properly
[vlc] / lib / media_player.c
index cb6b60401c5ff73130e5411e49f1c24cecae637e..b41d6f36016f66606818a7e662f5facc53a7576b 100644 (file)
@@ -124,7 +124,7 @@ static inline void unlock_input(libvlc_media_player_t *mp)
  * Object lock is NOT held.
  * Input lock is held or instance is being destroyed.
  */
-static void release_input_thread( libvlc_media_player_t *p_mi, bool b_input_abort )
+static void release_input_thread( libvlc_media_player_t *p_mi )
 {
     assert( p_mi );
 
@@ -144,7 +144,7 @@ static void release_input_thread( libvlc_media_player_t *p_mi, bool b_input_abor
     del_es_callbacks( p_input_thread, p_mi );
 
     /* We owned this one */
-    input_Stop( p_input_thread, b_input_abort );
+    input_Stop( p_input_thread );
     input_Close( p_input_thread );
 }
 
@@ -302,9 +302,9 @@ input_event_changed( vlc_object_t * p_this, char const * psz_cmd,
         set_state( p_mi, libvlc_state, false );
         libvlc_event_send( p_mi->p_event_manager, &event );
     }
-    else if( newval.i_int == INPUT_EVENT_ABORT )
+    else if( newval.i_int == INPUT_EVENT_DEAD )
     {
-        libvlc_state_t libvlc_state = libvlc_Stopped;
+        libvlc_state_t libvlc_state = libvlc_Ended;
         event.type = libvlc_MediaPlayerStopped;
 
         set_state( p_mi, libvlc_state, false );
@@ -685,7 +685,7 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi )
 
     /* No need for lock_input() because no other threads knows us anymore */
     if( p_mi->input.p_thread )
-        release_input_thread(p_mi, true);
+        release_input_thread(p_mi);
     input_resource_Terminate( p_mi->input.p_resource );
     input_resource_Release( p_mi->input.p_resource );
     vlc_mutex_destroy( &p_mi->input.lock );
@@ -742,12 +742,7 @@ void libvlc_media_player_set_media(
 {
     lock_input(p_mi);
 
-    /* FIXME I am not sure if it is a user request or on die(eof/error)
-     * request here */
-    release_input_thread( p_mi,
-                          p_mi->input.p_thread &&
-                          !p_mi->input.p_thread->b_eof &&
-                          !p_mi->input.p_thread->b_error );
+    release_input_thread( p_mi );
 
     lock( p_mi );
     set_state( p_mi, libvlc_NothingSpecial, true );
@@ -899,7 +894,7 @@ void libvlc_media_player_set_pause( libvlc_media_player_t *p_mi, int 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, true );
+                input_Stop( p_input_thread );
         }
     }
     else
@@ -938,14 +933,12 @@ int libvlc_media_player_is_playing( libvlc_media_player_t *p_mi )
  **************************************************************************/
 void libvlc_media_player_stop( libvlc_media_player_t *p_mi )
 {
-    libvlc_state_t state = libvlc_media_player_get_state( p_mi );
-
     lock_input(p_mi);
-    release_input_thread( p_mi, true ); /* This will stop the input thread */
+    release_input_thread( p_mi ); /* This will stop the input thread */
 
     /* Force to go to stopped state, in case we were in Ended, or Error
      * state. */
-    if( state != libvlc_Stopped )
+    if( p_mi->state != libvlc_Stopped )
     {
         set_state( p_mi, libvlc_Stopped, false );