]> git.sesse.net Git - vlc/blobdiff - src/control/media_player.c
Fix [10fcb9f9c3c73d13340c0bd4153fc4c9c87b7186] (win doesn't have setenv).
[vlc] / src / control / media_player.c
index a96715ed3750b5a7cbe2518a713c3cad18faabde..a52fa0cbe69ca11f39561aa3ca0cf3e998ed8615 100644 (file)
@@ -51,11 +51,14 @@ input_time_changed( vlc_object_t * p_this, char const * psz_cmd,
 
 static const libvlc_state_t vlc_to_libvlc_state_array[] =
 {
-    [INIT_S]        = libvlc_Opening,
+    [INIT_S]        = libvlc_NothingSpecial,
     [OPENING_S]     = libvlc_Opening,
     [BUFFERING_S]   = libvlc_Buffering,
     [PLAYING_S]     = libvlc_Playing,
     [PAUSE_S]       = libvlc_Paused,
+    [STOP_S]        = libvlc_Stopped,
+    [FORWARD_S]     = libvlc_Forward,
+    [BACKWARD_S]    = libvlc_Backward,
     [END_S]         = libvlc_Ended,
     [ERROR_S]       = libvlc_Error,
 };
@@ -63,7 +66,7 @@ static const libvlc_state_t vlc_to_libvlc_state_array[] =
 static inline libvlc_state_t vlc_to_libvlc_state( int vlc_state )
 {
     if( vlc_state < 0 || vlc_state > 6 )
-        return libvlc_Stopped;
+        return libvlc_Ended;
 
     return vlc_to_libvlc_state_array[vlc_state];
 }
@@ -140,26 +143,50 @@ input_state_changed( const vlc_event_t * event, void * p_userdata )
 {
     libvlc_media_player_t * p_mi = p_userdata;
     libvlc_event_t forwarded_event;
-    libvlc_event_type_t type = event->u.vlc_input_state_changed.new_state;
+    libvlc_event_type_t type = event->u.input_state_changed.new_state;
 
     switch ( type )
     {
-        case END_S:
+        case INIT_S:
             libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL);
-            forwarded_event.type = libvlc_MediaPlayerEndReached;
+            forwarded_event.type = libvlc_MediaPlayerNothingSpecial;
             break;
-        case PAUSE_S:
-            libvlc_media_set_state( p_mi->p_md, libvlc_Playing, NULL);
-            forwarded_event.type = libvlc_MediaPlayerPaused;
+        case OPENING_S:
+            libvlc_media_set_state( p_mi->p_md, libvlc_Opening, NULL);
+            forwarded_event.type = libvlc_MediaPlayerOpening;
+            break;
+        case BUFFERING_S:
+            libvlc_media_set_state( p_mi->p_md, libvlc_Buffering, NULL);
+            forwarded_event.type = libvlc_MediaPlayerBuffering;
             break;
         case PLAYING_S:
             libvlc_media_set_state( p_mi->p_md, libvlc_Playing, NULL);
-            forwarded_event.type = libvlc_MediaPlayerPlayed;
+            forwarded_event.type = libvlc_MediaPlayerPlaying;
+            break;
+        case PAUSE_S:
+            libvlc_media_set_state( p_mi->p_md, libvlc_Paused, NULL);
+            forwarded_event.type = libvlc_MediaPlayerPaused;
+            break;
+        case STOP_S:
+            libvlc_media_set_state( p_mi->p_md, libvlc_Stopped, NULL);
+            forwarded_event.type = libvlc_MediaPlayerStopped;
+            break;
+        case FORWARD_S:
+            libvlc_media_set_state( p_mi->p_md, libvlc_Forward, NULL);
+            forwarded_event.type = libvlc_MediaPlayerForward;
+            break;
+        case BACKWARD_S:
+            libvlc_media_set_state( p_mi->p_md, libvlc_Backward, NULL);
+            forwarded_event.type = libvlc_MediaPlayerBackward;
             break;
+        case END_S:
+            libvlc_media_set_state( p_mi->p_md, libvlc_Ended, NULL);
+            forwarded_event.type = libvlc_MediaPlayerEndReached;
         case ERROR_S:
             libvlc_media_set_state( p_mi->p_md, libvlc_Error, NULL);
             forwarded_event.type = libvlc_MediaPlayerEncounteredError;
             break;
+
         default:
             return;
     }
@@ -317,15 +344,26 @@ libvlc_media_player_new( libvlc_instance_t * p_libvlc_instance,
     }
 
     libvlc_event_manager_register_event_type( p_mi->p_event_manager,
-            libvlc_MediaPlayerEndReached, p_e );
+            libvlc_MediaPlayerNothingSpecial, p_e );
     libvlc_event_manager_register_event_type( p_mi->p_event_manager,
-            libvlc_MediaPlayerStopped, p_e );
+            libvlc_MediaPlayerOpening, p_e );
     libvlc_event_manager_register_event_type( p_mi->p_event_manager,
-            libvlc_MediaPlayerEncounteredError, p_e );
+            libvlc_MediaPlayerBuffering, p_e );
+    libvlc_event_manager_register_event_type( p_mi->p_event_manager,
+            libvlc_MediaPlayerPlaying, p_e );
     libvlc_event_manager_register_event_type( p_mi->p_event_manager,
             libvlc_MediaPlayerPaused, p_e );
     libvlc_event_manager_register_event_type( p_mi->p_event_manager,
-            libvlc_MediaPlayerPlayed, p_e );
+            libvlc_MediaPlayerStopped, p_e );
+    libvlc_event_manager_register_event_type( p_mi->p_event_manager,
+            libvlc_MediaPlayerForward, p_e );
+    libvlc_event_manager_register_event_type( p_mi->p_event_manager,
+            libvlc_MediaPlayerBackward, p_e );
+    libvlc_event_manager_register_event_type( p_mi->p_event_manager,
+            libvlc_MediaPlayerEndReached, p_e );
+    libvlc_event_manager_register_event_type( p_mi->p_event_manager,
+            libvlc_MediaPlayerEncounteredError, p_e );
+
     libvlc_event_manager_register_event_type( p_mi->p_event_manager,
             libvlc_MediaPlayerPositionChanged, p_e );
     libvlc_event_manager_register_event_type( p_mi->p_event_manager,
@@ -636,12 +674,11 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi,
     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 );
+        libvlc_media_set_state( p_mi->p_md, libvlc_Ended, p_e );
 
         /* Construct and send the event */
         libvlc_event_t event;
-        event.type = libvlc_MediaPlayerStopped;
+        event.type = libvlc_MediaPlayerEndReached;
         libvlc_event_send( p_mi->p_event_manager, &event );
     }
 
@@ -680,12 +717,14 @@ void libvlc_media_player_set_drawable( libvlc_media_player_t *p_mi,
      * because of some creepy drawable type that are not flexible enough
      * (Win32 HWND for instance) */
     p_input_thread = libvlc_get_input_thread( p_mi, p_e );
-    if( !p_input_thread ) return;
+    if( !p_input_thread ) {
+        /* No input, nothing more to do, we are fine */
+        libvlc_exception_clear( p_e );
+        return;
+    }
 
     p_vout = vlc_object_find( p_input_thread, VLC_OBJECT_VOUT, FIND_CHILD );
-    if( !p_vout )
-        libvlc_exception_raise( p_e, "No active video output" );
-    else
+    if( p_vout )
     {
         vout_Control( p_vout , VOUT_REPARENT, drawable);
         vlc_object_release( p_vout );
@@ -925,7 +964,7 @@ libvlc_state_t libvlc_media_player_get_state(
         /* We do return the right value, no need to throw an exception */
         if( libvlc_exception_raised( p_e ) )
             libvlc_exception_clear( p_e );
-        return libvlc_Stopped;
+        return libvlc_Ended;
     }
 
     var_Get( p_input_thread, "state", &val );