* 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>
*
/* 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;
{
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 );
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 );
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 )
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" ) )
p_vout->b_die = VLC_TRUE;
vlc_thread_join( p_vout );
+ var_Destroy( p_vout, "intf-change" );
+
/* Free structure */
vlc_object_destroy( 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;
#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;
+}