]> git.sesse.net Git - vlc/blobdiff - src/video_output/video_output.c
* all: modified files for video transcoding. Still needed configure.ac.in
[vlc] / src / video_output / video_output.c
index 8c9e33395ee17cc7424fb3813c695d76508b8a78..eed2c83a4ccca1a8e4404d1161a9d6353f517828 100644 (file)
@@ -5,7 +5,7 @@
  * thread, and destroy a previously oppened video output thread.
  *****************************************************************************
  * Copyright (C) 2000-2001 VideoLAN
- * $Id: video_output.c,v 1.202 2002/11/28 17:35:00 sam Exp $
+ * $Id: video_output.c,v 1.207 2003/01/22 10:44:50 fenrir Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *
@@ -71,8 +71,20 @@ vout_thread_t * __vout_Request ( vlc_object_t *p_this, vout_thread_t *p_vout,
         /* Reattach video output to p_vlc before bailing out */
         if( p_vout )
         {
-            vlc_object_detach( p_vout );
-            vlc_object_attach( p_vout, p_this->p_vlc );
+            char *psz_sout = config_GetPsz( p_this, "sout" );
+
+            if( !psz_sout || !*psz_sout )
+            {
+                vlc_object_detach( p_vout );
+                vlc_object_attach( p_vout, p_this->p_vlc );
+            }
+            else
+            {
+                vlc_object_detach( p_vout );
+//                vlc_object_release( p_vout );
+                vout_Destroy( p_vout );
+            }
+            if( psz_sout ) free( psz_sout );
         }
 
         return NULL;
@@ -98,7 +110,8 @@ vout_thread_t * __vout_Request ( vlc_object_t *p_this, vout_thread_t *p_vout,
     {
         if( ( p_vout->render.i_width != i_width ) ||
             ( p_vout->render.i_height != i_height ) ||
-            ( p_vout->render.i_chroma != i_chroma ) )
+            ( p_vout->render.i_chroma != i_chroma ) ||
+            ( p_vout->render.i_aspect != i_aspect ) )
         {
             /* We are not interested in this format, close this vout */
             vlc_object_detach( p_vout );
@@ -138,6 +151,7 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent,
     vout_thread_t * p_vout;                             /* thread descriptor */
     int             i_index;                                /* loop variable */
     char          * psz_plugin;
+    vlc_value_t     val;
 
     /* Allocate descriptor */
     p_vout = vlc_object_create( p_parent, VLC_OBJECT_VOUT );
@@ -147,6 +161,10 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent,
         return NULL;
     }
 
+    var_Create( p_vout, "intf-change", VLC_VAR_BOOL );
+    val.b_bool = VLC_TRUE;
+    var_Set( p_vout, "intf-change", val );
+
     /* If the parent is not a VOUT object, that means we are at the start of
      * the video output pipe */
     if( p_parent->i_object_type != VLC_OBJECT_VOUT )
@@ -275,6 +293,7 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent,
     var_Create( p_vout, "mouse-y", VLC_VAR_INTEGER );
     var_Create( p_vout, "mouse-moved", VLC_VAR_BOOL );
     var_Create( p_vout, "mouse-clicked", VLC_VAR_INTEGER );
+    var_Create( p_vout, "key-pressed", VLC_VAR_STRING );
 
     /* user requested fullscreen? */
     if( config_GetInt( p_vout, "fullscreen" ) )
@@ -333,6 +352,8 @@ void vout_Destroy( vout_thread_t *p_vout )
     p_vout->b_die = VLC_TRUE;
     vlc_thread_join( p_vout );
 
+    var_Destroy( p_vout, "intf-change" );
+
     /* Free structure */
     vlc_object_destroy( p_vout );
 }
@@ -469,7 +490,8 @@ static int InitThread( vout_thread_t *p_vout )
         if( p_vout->chroma.p_module == NULL )
         {
             msg_Err( p_vout, "no chroma module for %4.4s to %4.4s",
-                     &p_vout->render.i_chroma, &p_vout->output.i_chroma );
+                     (char*)&p_vout->render.i_chroma,
+                     (char*)&p_vout->output.i_chroma );
             p_vout->pf_end( p_vout );
             vlc_mutex_unlock( &p_vout->change_lock );
             return VLC_EGENERIC;
@@ -1040,3 +1062,17 @@ static void InitWindowSize( vout_thread_t *p_vout, int *pi_width,
 
 #undef FP_FACTOR
 }
+
+/*****************************************************************************
+ * vout_VarCallback: generic callback for intf variables
+ *****************************************************************************/
+int vout_VarCallback( vlc_object_t * p_this, const char * psz_variable,
+                      vlc_value_t old_value, vlc_value_t new_value,
+                      void * unused )
+{
+    vout_thread_t * p_vout = (vout_thread_t *)p_this;
+    vlc_value_t val;
+    val.b_bool = 1;
+    var_Set( p_vout, "intf-change", val );
+    return 0;
+}