]> git.sesse.net Git - vlc/blobdiff - src/control/mediacontrol_core.c
async event handling: Push is now O(1) instead of O(n).
[vlc] / src / control / mediacontrol_core.c
index 8ed878b9574ee810beb86be543737112bdbbe188..489b15fff925c981cacb17d6c553c01f1bd8ec61 100644 (file)
 #include <stdlib.h>                                      /* malloc(), free() */
 #include <string.h>
 
-#include <errno.h>                                                 /* ENOMEM */
 #include <stdio.h>
-#include <ctype.h>
 
 #ifdef HAVE_UNISTD_H
 #    include <unistd.h>
 #endif
-#ifdef HAVE_SYS_TIME_H
-#    include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_TYPES_H
-#    include <sys/types.h>
-#endif
+#include <sys/types.h>
 
 mediacontrol_Instance* mediacontrol_new( int argc, char** argv, mediacontrol_Exception *exception )
 {
@@ -196,8 +189,7 @@ mediacontrol_start( mediacontrol_Instance *self,
     mediacontrol_exception_init( exception );
     libvlc_exception_init( &ex );
 
-    p_media = libvlc_media_player_get_media( self->p_media_player, &ex );
-    HANDLE_LIBVLC_EXCEPTION_VOID( &ex );
+    p_media = libvlc_media_player_get_media( self->p_media_player );
 
     if ( ! p_media )
     {
@@ -208,7 +200,7 @@ mediacontrol_start( mediacontrol_Instance *self,
     {
         /* A media was defined. Get its mrl to reuse it, but reset the options
            (because start-time may have been set on the previous invocation */
-        psz_name = libvlc_media_get_mrl( p_media, &ex );
+        psz_name = libvlc_media_get_mrl( p_media );
         HANDLE_LIBVLC_EXCEPTION_VOID( &ex );
 
         /* Create a new media */
@@ -224,12 +216,11 @@ mediacontrol_start( mediacontrol_Instance *self,
             psz_from = ( char * )malloc( 20 * sizeof( char ) );
             i_from = private_mediacontrol_position2microsecond( self->p_media_player, a_position ) / 1000000;
             snprintf( psz_from, 20, "start-time=%"PRId64, i_from );
-            libvlc_media_add_option( p_media, psz_from, &ex );
+            libvlc_media_add_option( p_media, psz_from );
             HANDLE_LIBVLC_EXCEPTION_VOID( &ex );
         }
 
-        libvlc_media_player_set_media( self->p_media_player, p_media, &ex );
-        HANDLE_LIBVLC_EXCEPTION_VOID( &ex );
+        libvlc_media_player_set_media( self->p_media_player, p_media );
 
         libvlc_media_player_play( self->p_media_player, &ex );
         HANDLE_LIBVLC_EXCEPTION_VOID( &ex );
@@ -268,8 +259,7 @@ mediacontrol_stop( mediacontrol_Instance *self,
 
     mediacontrol_exception_init( exception );
     libvlc_exception_init( &ex );
-    libvlc_media_player_stop( self->p_media_player, &ex );
-    HANDLE_LIBVLC_EXCEPTION_VOID( &ex );
+    libvlc_media_player_stop( self->p_media_player );
 }
 
 /**************************************************************************
@@ -290,8 +280,7 @@ mediacontrol_set_mrl( mediacontrol_Instance *self,
     p_media = libvlc_media_new( self->p_instance, psz_file, &ex );
     HANDLE_LIBVLC_EXCEPTION_VOID( &ex );
 
-    libvlc_media_player_set_media( self->p_media_player, p_media, &ex );
-    HANDLE_LIBVLC_EXCEPTION_VOID( &ex );
+    libvlc_media_player_set_media( self->p_media_player, p_media );
 }
 
 char *
@@ -304,8 +293,7 @@ mediacontrol_get_mrl( mediacontrol_Instance *self,
     mediacontrol_exception_init( exception );
     libvlc_exception_init( &ex );
 
-    p_media = libvlc_media_player_get_media( self->p_media_player, &ex );
-    HANDLE_LIBVLC_EXCEPTION_NULL( &ex );
+    p_media = libvlc_media_player_get_media( self->p_media_player );
 
     if ( ! p_media )
     {
@@ -315,7 +303,7 @@ mediacontrol_get_mrl( mediacontrol_Instance *self,
     {
         char * psz_mrl;
 
-        psz_mrl = libvlc_media_get_mrl( p_media, &ex );
+        psz_mrl = libvlc_media_get_mrl( p_media );
         HANDLE_LIBVLC_EXCEPTION_NULL( &ex );
         return psz_mrl;
     }
@@ -330,6 +318,7 @@ mediacontrol_get_stream_information( mediacontrol_Instance *self,
                                      mediacontrol_PositionKey a_key,
                                      mediacontrol_Exception *exception )
 {
+    (void)a_key;
     mediacontrol_StreamInformation *retval = NULL;
     libvlc_media_t * p_media;
     libvlc_exception_t ex;
@@ -344,8 +333,7 @@ mediacontrol_get_stream_information( mediacontrol_Instance *self,
         return NULL;
     }
 
-    p_media = libvlc_media_player_get_media( self->p_media_player, &ex );
-    HANDLE_LIBVLC_EXCEPTION_NULL( &ex );
+    p_media = libvlc_media_player_get_media( self->p_media_player );
     if( ! p_media )
     {
         /* No p_media defined */
@@ -357,8 +345,8 @@ mediacontrol_get_stream_information( mediacontrol_Instance *self,
     else
     {
         libvlc_state_t state;
-        state = libvlc_media_player_get_state( self->p_media_player, &ex );
-        HANDLE_LIBVLC_EXCEPTION_NULL( &ex );
+
+        state = libvlc_media_player_get_state( self->p_media_player );
         switch( state )
         {
         case libvlc_NothingSpecial:
@@ -379,12 +367,6 @@ mediacontrol_get_stream_information( mediacontrol_Instance *self,
         case libvlc_Stopped:
             retval->streamstatus = mediacontrol_StopStatus;
             break;
-        case libvlc_Forward:
-            retval->streamstatus = mediacontrol_ForwardStatus;
-            break;
-        case libvlc_Backward:
-            retval->streamstatus = mediacontrol_BackwardStatus;
-            break;
         case libvlc_Ended:
             retval->streamstatus = mediacontrol_EndStatus;
             break;
@@ -396,19 +378,22 @@ mediacontrol_get_stream_information( mediacontrol_Instance *self,
             break;
         }
 
-        retval->url = libvlc_media_get_mrl( p_media, &ex );
+        retval->url = libvlc_media_get_mrl( p_media );
 
-        /* TIME and LENGTH are in microseconds. We want them in ms */
         retval->position = libvlc_media_player_get_time( self->p_media_player, &ex );
+        if( libvlc_exception_raised( &ex ) )
+        {
+            libvlc_exception_clear( &ex );
+            retval->position = 0;
+        }
 
         retval->length = libvlc_media_player_get_length( self->p_media_player, &ex );
+        if( libvlc_exception_raised( &ex ) )
+        {
+            libvlc_exception_clear( &ex );
+            retval->length = 0;
+        }
 
-        retval->position = private_mediacontrol_unit_convert( self->p_media_player,
-                                         mediacontrol_MediaTime, a_key,
-                                         retval->position );
-        retval->length   = private_mediacontrol_unit_convert( self->p_media_player,
-                                         mediacontrol_MediaTime, a_key,
-                                         retval->length );
     }
     return retval;
 }