]> git.sesse.net Git - vlc/blobdiff - src/control/vlm.c
- input: make sure time units are in milliseconds, as expected
[vlc] / src / control / vlm.c
index f95c79fbda2a8678c74cda6ff56033bf3f4e1deb..8f2d617ae9ff0b220242cbeaf940dea73c2d96d0 100644 (file)
 #include <vlc/libvlc.h>
 
 #include <vlc/vlc.h>
+#include <vlc_es.h>
 #include <vlc_input.h>
 #include <vlc_vlm.h>
 
 void InitVLM( libvlc_instance_t *p_instance )
 {
+#ifdef ENABLE_VLM
     if( p_instance->p_vlm ) return;
-    p_instance->p_vlm = vlm_New( p_instance->p_vlc );
+    p_instance->p_vlm = vlm_New( p_instance->p_libvlc_int );
+#else
+    p_instance->p_vlm = NULL;
+#endif
 }
 
 #define CHECK_VLM { if( !p_instance->p_vlm ) InitVLM( p_instance ); \
                     if( !p_instance->p_vlm ) {\
-                      libvlc_exception_raise( p_exception, \
-                                         "Unable to create VLM" ); return; } }
+                  libvlc_exception_raise( p_exception, \
+                  "Unable to create VLM. It might be disabled." ); return; } }
 
 #define GET_MEDIA { p_media = vlm_MediaSearch( p_instance->p_vlm, psz_name );\
                    if( !p_media ) \
@@ -74,6 +79,7 @@ void libvlc_vlm_del_media( libvlc_instance_t *p_instance, char *psz_name,
     char *psz_message;
     vlm_message_t *answer;
     CHECK_VLM;
+#ifdef ENABLE_VLM
     asprintf( &psz_message, "del %s", psz_name );
     vlm_ExecuteCommand( p_instance->p_vlm, psz_message, &answer );
     if( answer->psz_value )
@@ -82,6 +88,7 @@ void libvlc_vlm_del_media( libvlc_instance_t *p_instance, char *psz_name,
                                 psz_name );
     }
     free( psz_message);
+#endif
 }
 
 void libvlc_vlm_set_enabled( libvlc_instance_t *p_instance, char *psz_name,
@@ -89,9 +96,11 @@ void libvlc_vlm_set_enabled( libvlc_instance_t *p_instance, char *psz_name,
 {
     vlm_media_t *p_media;
     CHECK_VLM;
+#ifdef ENABLE_VLM
     GET_MEDIA;
     if( b_enabled != 0 ) b_enabled = 1;
     p_media->b_enabled = b_enabled;
+#endif
 }
 
 void libvlc_vlm_set_loop( libvlc_instance_t *p_instance, char *psz_name,
@@ -99,9 +108,11 @@ void libvlc_vlm_set_loop( libvlc_instance_t *p_instance, char *psz_name,
 {
     vlm_media_t *p_media;
     CHECK_VLM;
+#ifdef ENABLE_VLM
     GET_MEDIA;
     if( b_loop != 0 ) b_loop = 1;
     p_media->b_loop = b_loop;
+#endif
 }
 
 void libvlc_vlm_set_output( libvlc_instance_t *p_instance, char *psz_name,
@@ -110,13 +121,19 @@ void libvlc_vlm_set_output( libvlc_instance_t *p_instance, char *psz_name,
     vlm_media_t *p_media;
     int i_ret;
     CHECK_VLM;
+#ifdef ENABLE_VLM
     GET_MEDIA;
 
     vlc_mutex_lock( &p_instance->p_vlm->lock );
     i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "output", psz_output );
     if( i_ret )
-    { libvlc_exception_raise( p_exception, "Unable to set output" ); return;}
+    {
+        libvlc_exception_raise( p_exception, "Unable to set output" );
+        vlc_mutex_unlock( &p_instance->p_vlm->lock );
+        return;
+    }
     vlc_mutex_unlock( &p_instance->p_vlm->lock );
+#endif
 }
 
 void libvlc_vlm_set_input( libvlc_instance_t *p_instance, char *psz_name,
@@ -125,18 +142,26 @@ void libvlc_vlm_set_input( libvlc_instance_t *p_instance, char *psz_name,
     vlm_media_t *p_media;
     int i_ret;
     CHECK_VLM;
-    GET_MEDIA;
-
+#ifdef ENABLE_VLM
     vlc_mutex_lock( &p_instance->p_vlm->lock );
+    GET_MEDIA;
 
-    vlm_MediaSetup( p_instance->p_vlm, p_media, "inputdel", "all" );
+    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "inputdel", "all" );
     if( i_ret )
-    { libvlc_exception_raise( p_exception, "Unable to change input" ); return;}
-    vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
+    {
+        libvlc_exception_raise( p_exception, "Unable to change input" );
+        vlc_mutex_unlock( &p_instance->p_vlm->lock );
+        return;
+    }
+    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
     if( i_ret )
-    { libvlc_exception_raise( p_exception, "Unable to change input" ); return;}
-
+    {
+        libvlc_exception_raise( p_exception, "Unable to change input" );
+        vlc_mutex_unlock( &p_instance->p_vlm->lock );
+        return;
+    }
     vlc_mutex_unlock( &p_instance->p_vlm->lock );
+#endif
 }
 
 void libvlc_vlm_add_input( libvlc_instance_t *p_instance, char *psz_name,
@@ -145,20 +170,23 @@ void libvlc_vlm_add_input( libvlc_instance_t *p_instance, char *psz_name,
     vlm_media_t *p_media;
     int i_ret;
     CHECK_VLM;
-    GET_MEDIA;
-
+#ifdef ENABLE_VLM
     vlc_mutex_lock( &p_instance->p_vlm->lock );
+    GET_MEDIA;
 
-    vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
+    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
     if( i_ret )
-    { libvlc_exception_raise( p_exception, "Unable to change input" ); return;}
+    {
+        libvlc_exception_raise( p_exception, "Unable to change input" );
+        vlc_mutex_unlock( &p_instance->p_vlm->lock );
+        return;
+    }
 
     vlc_mutex_unlock( &p_instance->p_vlm->lock );
+#endif
 }
 
 
-
-
 void libvlc_vlm_change_media( libvlc_instance_t *p_instance, char *psz_name,
                               char *psz_input, char *psz_output, int i_options,
                               char **ppsz_options, int b_enabled, int b_loop,
@@ -167,25 +195,101 @@ void libvlc_vlm_change_media( libvlc_instance_t *p_instance, char *psz_name,
     vlm_media_t *p_media;
     int i_ret;
     CHECK_VLM;
+#ifdef ENABLE_VLM
+    vlc_mutex_lock( &p_instance->p_vlm->lock );
     GET_MEDIA;
     if( b_enabled != 0 ) b_enabled = 1;
     if( b_loop != 0 ) b_loop = 1;
 
-    vlc_mutex_lock( &p_instance->p_vlm->lock );
     i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "output", psz_output );
-    if( i_ret ) libvlc_exception_raise( p_exception, "Unable to set output" );
+    if( i_ret )
+    {
+        libvlc_exception_raise( p_exception, "Unable to set output" );
+        vlc_mutex_unlock( &p_instance->p_vlm->lock );
+        return;
+    }
     p_media->b_enabled = b_enabled;
     p_media->b_loop = b_loop;
 
     i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "output", psz_output );
     if( i_ret )
-    { libvlc_exception_raise( p_exception, "Unable to set output" ); return;}
-    vlm_MediaSetup( p_instance->p_vlm, p_media, "inputdel", "all" );
+    {
+        libvlc_exception_raise( p_exception, "Unable to set output" );
+        vlc_mutex_unlock( &p_instance->p_vlm->lock );
+        return;
+    }
+    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "inputdel", "all" );
     if( i_ret )
-    { libvlc_exception_raise( p_exception, "Unable to change input" ); return;}
-    vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
+    {
+        libvlc_exception_raise( p_exception, "Unable to change input" );
+        vlc_mutex_unlock( &p_instance->p_vlm->lock );
+        return;
+    }
+    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
     if( i_ret )
-    { libvlc_exception_raise( p_exception, "Unable to change input" ); return;}
+    {
+        libvlc_exception_raise( p_exception, "Unable to change input" );
+        vlc_mutex_unlock( &p_instance->p_vlm->lock );
+        return;
+    }
 
     vlc_mutex_unlock( &p_instance->p_vlm->lock );
+#endif
+}
+
+void libvlc_vlm_play_media( libvlc_instance_t *p_instance, char *psz_name,
+                            libvlc_exception_t *p_exception )
+    
+{
+    char *psz_message;
+    vlm_message_t *answer;
+    CHECK_VLM;
+#ifdef ENABLE_VLM
+    asprintf( &psz_message, "control %s play", psz_name );
+    vlm_ExecuteCommand( p_instance->p_vlm, psz_message, &answer );
+    if( answer->psz_value )
+    {
+        libvlc_exception_raise( p_exception, "Unable to play %s",
+                                psz_name );
+    }
+    free( psz_message);
+#endif
+}
+
+void libvlc_vlm_stop_media( libvlc_instance_t *p_instance, char *psz_name,
+                            libvlc_exception_t *p_exception )
+    
+{
+    char *psz_message;
+    vlm_message_t *answer;
+    CHECK_VLM;
+#ifdef ENABLE_VLM
+    asprintf( &psz_message, "control %s stop", psz_name );
+    vlm_ExecuteCommand( p_instance->p_vlm, psz_message, &answer );
+    if( answer->psz_value )
+    {
+        libvlc_exception_raise( p_exception, "Unable to stop %s",
+                                psz_name );
+    }
+    free( psz_message);
+#endif
+}
+
+void libvlc_vlm_pause_media( libvlc_instance_t *p_instance, char *psz_name,
+                            libvlc_exception_t *p_exception )
+    
+{
+    char *psz_message;
+    vlm_message_t *answer;
+    CHECK_VLM;
+#ifdef ENABLE_VLM
+    asprintf( &psz_message, "control %s pause", psz_name );
+    vlm_ExecuteCommand( p_instance->p_vlm, psz_message, &answer );
+    if( answer->psz_value )
+    {
+        libvlc_exception_raise( p_exception, "Unable to pause %s",
+                                psz_name );
+    }
+    free( psz_message);
+#endif
 }