]> git.sesse.net Git - vlc/blobdiff - src/input/vlm.c
Activated vout/aout recycling with playlist inputs.
[vlc] / src / input / vlm.c
index f7f80edfdcee7053ee7179978df2d5d6bc69b4b0..ad6b00bf14333644588230555abe57063c35709c 100644 (file)
@@ -195,7 +195,7 @@ int vlm_ExecuteCommand( vlm_t *p_vlm, const char *psz_command,
 
 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;
@@ -521,7 +521,7 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media )
 
             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] );
 
             if( asprintf( &psz_header, _("Media: %s"), p_cfg->psz_name ) == -1 )
                 psz_header = NULL;
@@ -608,13 +608,13 @@ static int vlm_ControlMediaAdd( vlm_t *p_vlm, vlm_media_t *p_cfg, int64_t *p_id
         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;
         }
 
@@ -622,10 +622,9 @@ static int vlm_ControlMediaAdd( vlm_t *p_vlm, vlm_media_t *p_cfg, int64_t *p_id
         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++;
@@ -743,12 +742,10 @@ static vlm_media_instance_sys_t *vlm_ControlMediaInstanceGetByName( vlm_media_sy
 }
 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 );
@@ -758,7 +755,7 @@ static vlm_media_instance_sys_t *vlm_MediaInstanceNew( vlm_t *p_vlm, const char
     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_ressource = NULL;
 
     return p_instance;
 }
@@ -767,13 +764,18 @@ static void vlm_MediaInstanceDelete( vlm_media_instance_sys_t *p_instance )
     input_thread_t *p_input = p_instance->p_input;
     if( p_input )
     {
+        input_ressource_t *p_ressource;
+
         input_StopThread( p_input );
-        p_instance->p_sout = input_DetachSout( p_input );
         vlc_thread_join( p_input );
+
+        p_ressource = input_DetachRessource( p_input );
+        input_ressource_Delete( p_ressource );
+
         vlc_object_release( p_input );
     }
-    if( p_instance->p_sout )
-        sout_DeleteInstance( p_instance->p_sout );
+    if( p_instance->p_input_ressource )
+        input_ressource_Delete( p_instance->p_input_ressource );
 
     vlc_gc_decref( p_instance->p_item );
     free( p_instance->psz_name );
@@ -846,14 +848,15 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char *
         }
 
         input_StopThread( p_input );
-        p_instance->p_sout = input_DetachSout( p_input );
         vlc_thread_join( p_input );
+
+        p_instance->p_input_ressource = input_DetachRessource( 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_ressource_TerminateSout( p_instance->p_input_ressource );
+        input_ressource_TerminateVout( p_instance->p_input_ressource );
     }
 
     /* Start new one */
@@ -862,7 +865,10 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char *
 
     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_ressource );
+        p_instance->p_input_ressource = NULL;
+
         if( !p_instance->p_input )
         {
             TAB_REMOVE( p_media->i_instance, p_media->instance, p_instance );
@@ -1154,3 +1160,4 @@ int vlm_Control( vlm_t *p_vlm, int i_query, ... )
 
     return i_result;
 }
+