+int libvlc_vlm_set_enabled( libvlc_instance_t *p_instance,
+ const char *psz_name, int b_enabled )
+{
+#define VLM_CHANGE_CODE { p_media->b_enabled = b_enabled; }
+ VLM_CHANGE( "Unable to delete %s", VLM_CHANGE_CODE );
+#undef VLM_CHANGE_CODE
+}
+
+int libvlc_vlm_set_loop( libvlc_instance_t *p_instance, const char *psz_name,
+ int b_loop )
+{
+#define VLM_CHANGE_CODE { p_media->broadcast.b_loop = b_loop; }
+ VLM_CHANGE( "Unable to change %s loop property", VLM_CHANGE_CODE );
+#undef VLM_CHANGE_CODE
+}
+
+int libvlc_vlm_set_mux( libvlc_instance_t *p_instance, const char *psz_name,
+ const char *psz_mux )
+{
+#define VLM_CHANGE_CODE { if( p_media->b_vod ) { \
+ free( p_media->vod.psz_mux ); \
+ p_media->vod.psz_mux = psz_mux \
+ ? strdup( psz_mux ) : NULL; \
+ } }
+ VLM_CHANGE( "Unable to change %s mux property", VLM_CHANGE_CODE );
+#undef VLM_CHANGE_CODE
+}
+
+int libvlc_vlm_set_output( libvlc_instance_t *p_instance,
+ const char *psz_name, const char *psz_output )
+{
+#define VLM_CHANGE_CODE { free( p_media->psz_output ); \
+ p_media->psz_output = strdup( psz_output ); }
+ VLM_CHANGE( "Unable to change %s output property", VLM_CHANGE_CODE );
+#undef VLM_CHANGE_CODE
+}
+
+int libvlc_vlm_set_input( libvlc_instance_t *p_instance,
+ const char *psz_name, const char *psz_input )
+{
+#define VLM_CHANGE_CODE { while( p_media->i_input > 0 ) \
+ free( p_media->ppsz_input[--p_media->i_input] );\
+ TAB_APPEND( p_media->i_input, p_media->ppsz_input, \
+ strdup(psz_input) ); }
+ VLM_CHANGE( "Unable to change %s input property", VLM_CHANGE_CODE );
+#undef VLM_CHANGE_CODE
+}
+
+int libvlc_vlm_add_input( libvlc_instance_t *p_instance,
+ const char *psz_name, const char *psz_input )
+{
+#define VLM_CHANGE_CODE { TAB_APPEND( p_media->i_input, p_media->ppsz_input, \
+ strdup(psz_input) ); }
+ VLM_CHANGE( "Unable to change %s input property", VLM_CHANGE_CODE );
+#undef VLM_CHANGE_CODE
+}
+
+int libvlc_vlm_change_media( libvlc_instance_t *p_instance,
+ const char *psz_name, const char *psz_input,
+ const char *psz_output, int i_options,
+ const char * const *ppsz_options, int b_enabled,
+ int b_loop )
+{
+#define VLM_CHANGE_CODE { int n; \
+ p_media->b_enabled = b_enabled; \
+ p_media->broadcast.b_loop = b_loop; \
+ while( p_media->i_input > 0 ) \
+ free( p_media->ppsz_input[--p_media->i_input] ); \
+ if( psz_input ) \
+ TAB_APPEND( p_media->i_input, p_media->ppsz_input, strdup(psz_input) ); \
+ free( p_media->psz_output ); \
+ p_media->psz_output = psz_output ? strdup( psz_output ) : NULL; \
+ while( p_media->i_option > 0 ) \
+ free( p_media->ppsz_option[--p_media->i_option] ); \
+ for( n = 0; n < i_options; n++ ) \
+ TAB_APPEND( p_media->i_option, p_media->ppsz_option, \
+ strdup(ppsz_options[n]) ); \
+ }
+ VLM_CHANGE( "Unable to change %s properties", VLM_CHANGE_CODE );
+#undef VLM_CHANGE_CODE
+}
+
+int libvlc_vlm_play_media( libvlc_instance_t *p_instance,
+ const char *psz_name )
+{
+ vlm_t *p_vlm;
+ int64_t id;
+
+ VLM_RET(p_vlm, -1);
+
+ if( vlm_Control( p_vlm, VLM_GET_MEDIA_ID, psz_name, &id ) ||
+ vlm_Control( p_vlm, VLM_START_MEDIA_BROADCAST_INSTANCE, id, NULL, 0 ) )