]> git.sesse.net Git - vlc/blobdiff - src/video_output/video_output.c
Accelerate the network port SpinBox chooser.
[vlc] / src / video_output / video_output.c
index b0e1eb53e90131121981fdf98d5fe24d5d5f0d93..4c115056e2b59c7bee5799be2eee1b2d66b5b5b7 100644 (file)
@@ -131,6 +131,9 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
         if( p_vout )
         {
             spu_Attach( p_vout->p_spu, p_this, false );
+            vlc_object_kill( p_vout );
+            vlc_thread_join( p_vout );
+            module_Unneed( p_vout, p_vout->p_module );
             vlc_object_release( p_vout );
         }
         return NULL;
@@ -446,6 +449,9 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
         msg_Err( p_vout, "video output creation failed" );
 
         /* Make sure the thread is destroyed and data released */
+        vlc_object_kill( p_vout );
+        vlc_thread_join( p_vout );
+        module_Unneed( p_vout, p_vout->p_module );
         vlc_object_release( p_vout );
         return NULL;
     }
@@ -462,12 +468,6 @@ static void vout_Destructor( vlc_object_t * p_this )
     vlc_mutex_destroy( &p_vout->change_lock );
     vlc_mutex_destroy( &p_vout->vfilter_lock );
 
-    /* Release the module */
-    if( p_vout->p_module )
-    {
-        module_Unneed( p_vout, p_vout->p_module );
-    }
-
     free( p_vout->psz_filter_chain );
 
     config_ChainDestroy( p_vout->p_cfg );
@@ -1226,7 +1226,7 @@ static picture_t *ChromaGetPicture( filter_t *p_filter )
     return p_pic;
 }
 
-static int ChromaCopyRgbInfo( es_format_t *p_fmt, picture_heap_t *p_heap )
+static void ChromaCopyRgbInfo( es_format_t *p_fmt, picture_heap_t *p_heap )
 {
     p_fmt->video.i_rmask = p_heap->i_rmask;
     p_fmt->video.i_gmask = p_heap->i_gmask;
@@ -1241,10 +1241,13 @@ static int ChromaCopyRgbInfo( es_format_t *p_fmt, picture_heap_t *p_heap )
 
 static int ChromaCreate( vout_thread_t *p_vout )
 {
+    static const char typename[] = "chroma";
     filter_t *p_chroma;
 
     /* Choose the best module */
-    p_chroma = p_vout->p_chroma = vlc_object_create( p_vout, sizeof(filter_t) );
+    p_chroma = p_vout->p_chroma =
+        vlc_custom_create( p_vout, sizeof(filter_t), VLC_OBJECT_GENERIC,
+                           typename );
 
     vlc_object_attach( p_chroma, p_vout );
 
@@ -1512,8 +1515,10 @@ static int FilterCallback( vlc_object_t *p_this, char const *psz_cmd,
     var_Get( p_input, "video-es", &val );
     if( val.i_int >= 0 )
     {
+        static const char typename[] = "kludge";
         suxor_thread_t *p_suxor =
-            vlc_object_create( p_vout, sizeof(suxor_thread_t) );
+            vlc_custom_create( p_vout, sizeof(suxor_thread_t),
+                               VLC_OBJECT_GENERIC, typename );
         p_suxor->p_input = p_input;
         p_vout->b_filter_change = true;
         vlc_object_yield( p_input );