/**@{*/
uint16_t i_changes; /**< changes made to the thread.
\see \ref vout_changes */
- bool b_fullscreen; /**< toogle fullscreen display */
- bool b_autoscale; /**< auto scaling picture or not */
+ unsigned b_fullscreen:1; /**< toogle fullscreen display */
+ unsigned b_autoscale:1; /**< auto scaling picture or not */
+ unsigned b_on_top:1; /**< stay always on top of other windows */
int i_zoom; /**< scaling factor if no auto */
unsigned int i_window_width; /**< video window width */
unsigned int i_window_height; /**< video window height */
#define VOUT_INTF_CHANGE 0x0004
/** b_autoscale changed */
#define VOUT_SCALE_CHANGE 0x0008
+/** b_on_top changed */
+#define VOUT_ON_TOP_CHANGE 0x0010
/** b_cursor changed */
#define VOUT_CURSOR_CHANGE 0x0020
/** b_fullscreen changed */
enum output_query_e
{
- VOUT_GET_SIZE, /* arg1= unsigned int*, arg2= unsigned int*, res= */
VOUT_SET_SIZE, /* arg1= unsigned int, arg2= unsigned int, res= */
VOUT_SET_STAY_ON_TOP, /* arg1= bool res= */
VOUT_REPARENT,
int i_ret = VLC_SUCCESS;
switch( i_query )
{
- case VOUT_GET_SIZE:
- {
- unsigned int *pi_width = va_arg( args, unsigned int * );
- unsigned int *pi_height = va_arg( args, unsigned int * );
- *pi_width = videoWidget->videoSize.width();
- *pi_height = videoWidget->videoSize.height();
- break;
- }
case VOUT_SET_SIZE:
{
unsigned int i_width = va_arg( args, unsigned int );
{
switch (query)
{
- case VOUT_GET_SIZE:
- {
- unsigned int *pi_width = va_arg (ap, unsigned int *);
- unsigned int *pi_height = va_arg (ap, unsigned int *);
- *pi_width = wnd->width;
- *pi_height = wnd->height;
- return VLC_SUCCESS;
- }
-
case VOUT_SET_SIZE: /* not allowed */
case VOUT_SET_STAY_ON_TOP: /* not allowed either, would be ugly */
return VLC_EGENERIC;
switch( i_query )
{
- case VOUT_GET_SIZE:
- if( p_vout->p_sys->parent_window )
- return vaControlParentWindow( p_vout, i_query, args );
-
- pi_width = va_arg( args, unsigned int * );
- pi_height = va_arg( args, unsigned int * );
-
- GetClientRect( p_vout->p_sys->hwnd, &rect_window );
-
- *pi_width = rect_window.right - rect_window.left;
- *pi_height = rect_window.bottom - rect_window.top;
- return VLC_SUCCESS;
-
case VOUT_SET_SIZE:
if( p_vout->p_sys->parent_window )
return vaControlParentWindow( p_vout, i_query, args );
switch( i_query )
{
- case VOUT_GET_SIZE:
- if( p_vout->p_sys->p_win->owner_window )
- return vout_ControlWindow( p_vout->p_sys->p_win->owner_window,
- i_query, args);
-
- pi_width = va_arg( args, unsigned int * );
- pi_height = va_arg( args, unsigned int * );
-
- *pi_width = p_vout->p_sys->p_win->i_width;
- *pi_height = p_vout->p_sys->p_win->i_height;
- return VLC_SUCCESS;
-
case VOUT_SET_SIZE:
if( p_vout->p_sys->p_win->owner_window )
return vout_ControlWindow( p_vout->p_sys->p_win->owner_window,
break;
}
+ while( p_vout->i_changes & VOUT_ON_TOP_CHANGE )
+ {
+ p_vout->i_changes &= ~VOUT_ON_TOP_CHANGE;
+ vlc_mutex_unlock( &p_vout->change_lock );
+ vout_Control( p_vout, VOUT_SET_STAY_ON_TOP, p_vout->b_on_top );
+ vlc_mutex_lock( &p_vout->change_lock );
+ }
+
if( p_vout->i_changes & VOUT_SIZE_CHANGE )
{
/* this must only happen when the vout plugin is incapable of
vlc_value_t oldval, vlc_value_t newval, void *p_data )
{
vout_thread_t *p_vout = (vout_thread_t *)p_this;
- vout_Control( p_vout, VOUT_SET_STAY_ON_TOP, newval.b_bool );
- (void)psz_cmd; (void)oldval; (void)p_data;
+
+ vlc_mutex_lock( &p_vout->change_lock );
+ p_vout->i_changes |= VOUT_ON_TOP_CHANGE;
+ p_vout->b_on_top = newval.b_bool;
+ vlc_mutex_unlock( &p_vout->change_lock );
/* Modify libvlc as well because the vout might have to be restarted */
var_Create( p_vout->p_libvlc, "video-on-top", VLC_VAR_BOOL );
var_Set( p_vout->p_libvlc, "video-on-top", newval );
+ (void)psz_cmd; (void)oldval; (void)p_data;
return VLC_SUCCESS;
}