# include <sys/time.h> /* gettimeofday() */
#endif
+#ifdef UNDER_CE
+#include <sys/time.h> /* gettimeofday() */
+#endif
+
#ifdef HAVE_TIME_H
# include <time.h> /* ctime() */
# include <sys/timeb.h> /* ftime() */
#endif
#include <vlc_input.h>
-#include "input_internal.h"
#include <vlc_stream.h>
#include "vlm_internal.h"
+#include "vlm_event.h"
#include <vlc_vod.h>
#include <vlc_charset.h>
#include <vlc_sout.h>
TAB_INIT( p_vlm->i_schedule, p_vlm->schedule );
p_vlm->i_vod = 0;
p_vlm->p_vod = NULL;
+ var_Create( p_vlm, "intf-event", VLC_VAR_ADDRESS );
vlc_object_attach( p_vlm, p_this->p_libvlc );
if( vlc_clone( &p_vlm->thread, Manage, p_vlm, VLC_THREAD_PRIORITY_LOW ) )
int64_t vlm_Date(void)
{
-#ifdef WIN32
+#if defined (WIN32) && !defined (UNDER_CE)
struct timeb tm;
ftime( &tm );
return ((int64_t)tm.time) * 1000000 + ((int64_t)tm.millitm) * 1000;
if( psz_output && asprintf( &psz_dup, "sout=%s", psz_output ) != -1 )
{
- input_item_AddOption( p_media->vod.p_item, psz_dup );
+ input_item_AddOption( p_media->vod.p_item, psz_dup, VLC_INPUT_OPTION_TRUSTED );
free( psz_dup );
}
free( psz_output );
for( i = 0; i < p_cfg->i_option; i++ )
input_item_AddOption( p_media->vod.p_item,
- p_cfg->ppsz_option[i] );
+ p_cfg->ppsz_option[i], VLC_INPUT_OPTION_TRUSTED );
if( asprintf( &psz_header, _("Media: %s"), p_cfg->psz_name ) == -1 )
psz_header = NULL;
/* TODO add support of var vlm_media_broadcast/vlm_media_vod */
+ vlm_SendEventMediaChanged( p_vlm, p_cfg->id );
return VLC_SUCCESS;
}
static int vlm_ControlMediaChange( vlm_t *p_vlm, vlm_media_t *p_cfg )
p_vlm->p_vod = vlc_custom_create( VLC_OBJECT(p_vlm), sizeof( vod_t ),
VLC_OBJECT_GENERIC, "vod server" );
vlc_object_attach( p_vlm->p_vod, p_vlm );
- p_vlm->p_vod->p_module = module_need( p_vlm->p_vod, "vod server", 0, 0 );
+ p_vlm->p_vod->p_module = module_need( p_vlm->p_vod, "vod server", NULL, false );
if( !p_vlm->p_vod->p_module )
{
msg_Err( p_vlm, "cannot find vod server" );
vlc_object_detach( p_vlm->p_vod );
vlc_object_release( p_vlm->p_vod );
- p_vlm->p_vod = 0;
+ p_vlm->p_vod = NULL;
return VLC_EGENERIC;
}
p_vlm->p_vod->pf_media_control = vlm_MediaVodControl;
}
- p_media = malloc( sizeof( vlm_media_sys_t ) );
+ p_media = calloc( 1, sizeof( vlm_media_sys_t ) );
if( !p_media )
return VLC_ENOMEM;
- memset( p_media, 0, sizeof(vlm_media_sys_t) );
if( p_cfg->b_vod )
p_vlm->i_vod++;
if( p_id )
*p_id = p_media->cfg.id;
+ /* */
+ vlm_SendEventMediaAdded( p_vlm, p_media->cfg.id );
return vlm_OnMediaUpdate( p_vlm, p_media );
}
vlc_object_release( p_vlm->p_vod );
p_vlm->p_vod = NULL;
}
+
+ /* */
+ vlm_SendEventMediaRemoved( p_vlm, id );
return VLC_SUCCESS;
}
}
static vlm_media_instance_sys_t *vlm_MediaInstanceNew( vlm_t *p_vlm, const char *psz_name )
{
- vlm_media_instance_sys_t *p_instance = malloc( sizeof(vlm_media_instance_sys_t) );
+ vlm_media_instance_sys_t *p_instance = calloc( 1, sizeof(vlm_media_instance_sys_t) );
if( !p_instance )
return NULL;
- memset( p_instance, 0, sizeof(vlm_media_instance_sys_t) );
-
p_instance->psz_name = NULL;
if( psz_name )
p_instance->psz_name = strdup( psz_name );
p_instance->i_index = 0;
p_instance->b_sout_keep = false;
p_instance->p_input = NULL;
- p_instance->p_sout = NULL;
+ p_instance->p_input_resource = NULL;
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;
if( p_input )
{
+ input_resource_t *p_resource;
+
input_StopThread( p_input );
- p_instance->p_sout = input_DetachSout( p_input );
vlc_thread_join( p_input );
+
+ p_resource = input_DetachResource( p_input );
+ input_resource_Delete( p_resource );
+
vlc_object_release( p_input );
+
+ vlm_SendEventMediaInstanceStopped( p_vlm, id );
}
- if( p_instance->p_sout )
- sout_DeleteInstance( p_instance->p_sout );
+ if( p_instance->p_input_resource )
+ input_resource_Delete( p_instance->p_input_resource );
vlc_gc_decref( p_instance->p_item );
free( p_instance->psz_name );
(p_cfg->psz_output && psz_vod_output) ? ":" : psz_vod_output ? "#" : "",
psz_vod_output ? psz_vod_output : "" ) != -1 )
{
- input_item_AddOption( p_instance->p_item, psz_buffer );
+ input_item_AddOption( p_instance->p_item, psz_buffer, VLC_INPUT_OPTION_TRUSTED );
free( psz_buffer );
}
}
else if( !strcmp( p_cfg->ppsz_option[i], "nosout-keep" ) || !strcmp( p_cfg->ppsz_option[i], "no-sout-keep" ) )
p_instance->b_sout_keep = false;
else
- input_item_AddOption( p_instance->p_item, p_cfg->ppsz_option[i] );
+ input_item_AddOption( p_instance->p_item, p_cfg->ppsz_option[i], VLC_INPUT_OPTION_TRUSTED );
}
TAB_APPEND( p_media->i_instance, p_media->instance, p_instance );
}
}
input_StopThread( p_input );
- p_instance->p_sout = input_DetachSout( p_input );
vlc_thread_join( p_input );
+
+ p_instance->p_input_resource = input_DetachResource( p_input );
+
vlc_object_release( p_input );
- if( !p_instance->b_sout_keep && p_instance->p_sout )
- {
- sout_DeleteInstance( p_instance->p_sout );
- p_instance->p_sout = NULL;
- }
+
+ if( !p_instance->b_sout_keep )
+ input_resource_TerminateSout( p_instance->p_input_resource );
+ input_resource_TerminateVout( p_instance->p_input_resource );
+
+ vlm_SendEventMediaInstanceStopped( p_vlm, id );
}
/* Start new one */
if( asprintf( &psz_log, _("Media: %s"), p_media->cfg.psz_name ) != -1 )
{
- p_instance->p_input = input_CreateThreadExtended( p_vlm, p_instance->p_item, psz_log, p_instance->p_sout );
+ p_instance->p_input = input_CreateThreadExtended( p_vlm, p_instance->p_item,
+ psz_log, p_instance->p_input_resource );
+ p_instance->p_input_resource = NULL;
+
if( !p_instance->p_input )
{
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 );
}
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 i_result;
}
+