Commit 3d821993 authored by Laurent Aimar's avatar Laurent Aimar

Added basic VLM events.

 You need to attach a callback on the variable 'intf-event' of the vlm
object.
 Becarefull, as (always) inside an event callback you cannot call back
the object (here vlm).
parent 77f33915
...@@ -87,6 +87,29 @@ typedef struct ...@@ -87,6 +87,29 @@ typedef struct
} vlm_schedule_t } vlm_schedule_t
#endif #endif
/** VLM events
* You can catch vlm event by adding a callback on the variable "intf-event"
* of the VLM object.
* This variable is an address that will hold a vlm_event_t* value.
*/
enum vlm_event_type_e
{
/* */
VLM_EVENT_MEDIA_ADDED = 0x100,
VLM_EVENT_MEDIA_REMOVED,
VLM_EVENT_MEDIA_CHANGED,
/* */
VLM_EVENT_MEDIA_INSTANCE_STARTED = 0x200,
VLM_EVENT_MEDIA_INSTANCE_STOPPED,
};
typedef struct
{
int i_type; /* a vlm_event_type_e value */
int64_t id; /* Media ID */
} vlm_event_t;
/** VLM control query */ /** VLM control query */
enum vlm_query_e enum vlm_query_e
{ {
......
...@@ -310,6 +310,7 @@ SOURCES_libvlc_common = \ ...@@ -310,6 +310,7 @@ SOURCES_libvlc_common = \
input/input_internal.h \ input/input_internal.h \
input/input_interface.h \ input/input_interface.h \
input/vlm_internal.h \ input/vlm_internal.h \
input/vlm_event.h \
input/resource.h \ input/resource.h \
input/resource.c \ input/resource.c \
input/stream.c \ input/stream.c \
...@@ -403,6 +404,7 @@ SOURCES_libvlc_sout = \ ...@@ -403,6 +404,7 @@ SOURCES_libvlc_sout = \
SOURCES_libvlc_vlm = \ SOURCES_libvlc_vlm = \
input/vlm.c \ input/vlm.c \
input/vlm_event.c \
input/vlmshell.c \ input/vlmshell.c \
$(NULL) $(NULL)
......
...@@ -52,9 +52,9 @@ ...@@ -52,9 +52,9 @@
#endif #endif
#include <vlc_input.h> #include <vlc_input.h>
#include "input_internal.h"
#include <vlc_stream.h> #include <vlc_stream.h>
#include "vlm_internal.h" #include "vlm_internal.h"
#include "vlm_event.h"
#include <vlc_vod.h> #include <vlc_vod.h>
#include <vlc_charset.h> #include <vlc_charset.h>
#include <vlc_sout.h> #include <vlc_sout.h>
...@@ -110,6 +110,7 @@ vlm_t *__vlm_New ( vlc_object_t *p_this ) ...@@ -110,6 +110,7 @@ vlm_t *__vlm_New ( vlc_object_t *p_this )
TAB_INIT( p_vlm->i_schedule, p_vlm->schedule ); TAB_INIT( p_vlm->i_schedule, p_vlm->schedule );
p_vlm->i_vod = 0; p_vlm->i_vod = 0;
p_vlm->p_vod = NULL; p_vlm->p_vod = NULL;
var_Create( p_vlm, "intf-event", VLC_VAR_ADDRESS );
vlc_object_attach( p_vlm, p_this->p_libvlc ); vlc_object_attach( p_vlm, p_this->p_libvlc );
if( vlc_clone( &p_vlm->thread, Manage, p_vlm, VLC_THREAD_PRIORITY_LOW ) ) if( vlc_clone( &p_vlm->thread, Manage, p_vlm, VLC_THREAD_PRIORITY_LOW ) )
...@@ -574,6 +575,7 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media ) ...@@ -574,6 +575,7 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media )
/* TODO add support of var vlm_media_broadcast/vlm_media_vod */ /* TODO add support of var vlm_media_broadcast/vlm_media_vod */
vlm_SendEventMediaChanged( p_vlm, p_cfg->id );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
static int vlm_ControlMediaChange( vlm_t *p_vlm, vlm_media_t *p_cfg ) static int vlm_ControlMediaChange( vlm_t *p_vlm, vlm_media_t *p_cfg )
...@@ -648,6 +650,8 @@ static int vlm_ControlMediaAdd( vlm_t *p_vlm, vlm_media_t *p_cfg, int64_t *p_id ...@@ -648,6 +650,8 @@ static int vlm_ControlMediaAdd( vlm_t *p_vlm, vlm_media_t *p_cfg, int64_t *p_id
if( p_id ) if( p_id )
*p_id = p_media->cfg.id; *p_id = p_media->cfg.id;
/* */
vlm_SendEventMediaAdded( p_vlm, p_media->cfg.id );
return vlm_OnMediaUpdate( p_vlm, p_media ); return vlm_OnMediaUpdate( p_vlm, p_media );
} }
...@@ -684,6 +688,9 @@ static int vlm_ControlMediaDel( vlm_t *p_vlm, int64_t id ) ...@@ -684,6 +688,9 @@ static int vlm_ControlMediaDel( vlm_t *p_vlm, int64_t id )
vlc_object_release( p_vlm->p_vod ); vlc_object_release( p_vlm->p_vod );
p_vlm->p_vod = NULL; p_vlm->p_vod = NULL;
} }
/* */
vlm_SendEventMediaRemoved( p_vlm, id );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -763,7 +770,7 @@ static vlm_media_instance_sys_t *vlm_MediaInstanceNew( vlm_t *p_vlm, const char ...@@ -763,7 +770,7 @@ static vlm_media_instance_sys_t *vlm_MediaInstanceNew( vlm_t *p_vlm, const char
return p_instance; return p_instance;
} }
static void vlm_MediaInstanceDelete( vlm_media_instance_sys_t *p_instance ) static void vlm_MediaInstanceDelete( vlm_t *p_vlm, int64_t id, vlm_media_instance_sys_t *p_instance )
{ {
input_thread_t *p_input = p_instance->p_input; input_thread_t *p_input = p_instance->p_input;
if( p_input ) if( p_input )
...@@ -777,6 +784,8 @@ static void vlm_MediaInstanceDelete( vlm_media_instance_sys_t *p_instance ) ...@@ -777,6 +784,8 @@ static void vlm_MediaInstanceDelete( vlm_media_instance_sys_t *p_instance )
input_resource_Delete( p_resource ); input_resource_Delete( p_resource );
vlc_object_release( p_input ); vlc_object_release( p_input );
vlm_SendEventMediaInstanceStopped( p_vlm, id );
} }
if( p_instance->p_input_resource ) if( p_instance->p_input_resource )
input_resource_Delete( p_instance->p_input_resource ); input_resource_Delete( p_instance->p_input_resource );
...@@ -861,6 +870,8 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char * ...@@ -861,6 +870,8 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char *
if( !p_instance->b_sout_keep ) if( !p_instance->b_sout_keep )
input_resource_TerminateSout( p_instance->p_input_resource ); input_resource_TerminateSout( p_instance->p_input_resource );
input_resource_TerminateVout( p_instance->p_input_resource ); input_resource_TerminateVout( p_instance->p_input_resource );
vlm_SendEventMediaInstanceStopped( p_vlm, id );
} }
/* Start new one */ /* Start new one */
...@@ -876,7 +887,11 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char * ...@@ -876,7 +887,11 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char *
if( !p_instance->p_input ) if( !p_instance->p_input )
{ {
TAB_REMOVE( p_media->i_instance, p_media->instance, p_instance ); TAB_REMOVE( p_media->i_instance, p_media->instance, p_instance );
vlm_MediaInstanceDelete( p_instance ); vlm_MediaInstanceDelete( p_vlm, id, p_instance );
}
else
{
vlm_SendEventMediaInstanceStarted( p_vlm, id );
} }
free( psz_log ); free( psz_log );
} }
...@@ -898,7 +913,7 @@ static int vlm_ControlMediaInstanceStop( vlm_t *p_vlm, int64_t id, const char *p ...@@ -898,7 +913,7 @@ static int vlm_ControlMediaInstanceStop( vlm_t *p_vlm, int64_t id, const char *p
TAB_REMOVE( p_media->i_instance, p_media->instance, p_instance ); TAB_REMOVE( p_media->i_instance, p_media->instance, p_instance );
vlm_MediaInstanceDelete( p_instance ); vlm_MediaInstanceDelete( p_vlm, id, p_instance );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#define _VLM_INTERNAL_H 1 #define _VLM_INTERNAL_H 1
#include <vlc_vlm.h> #include <vlc_vlm.h>
#include "input_internal.h"
/* Private */ /* Private */
typedef struct typedef struct
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment