if( p_vout->p_sys == NULL )
return VLC_ENOMEM;
- vlc_mutex_init( &p_vout->p_sys->lock );
-
/* key and mouse event handling */
p_vout->p_sys->i_vout_event = var_CreateGetInteger( p_vout, "vout-event" );
XCloseDisplay( p_vout->p_sys->p_display );
/* Destroy structure */
- vlc_mutex_destroy( &p_vout->p_sys->lock );
#ifdef MODULE_NAME_IS_xvmc
free_context_lock( &p_vout->p_sys->xvmc_lock );
#endif
{
vlc_xxmc_t *xxmc = NULL;
- vlc_mutex_lock( &p_vout->p_sys->lock );
xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock );
xxmc = &p_pic->p_sys->xxmc_data;
if( (!xxmc->decoded ||
!xxmc_xvmc_surface_valid( p_vout, p_pic->p_sys->xvmc_surf )) )
{
- vlc_mutex_unlock( &p_vout->p_sys->lock );
xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
return;
}
vlc_mutex_unlock( &p_vout->lastsubtitle_lock );
#endif
xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
-
- vlc_mutex_unlock( &p_vout->p_sys->lock );
}
#endif
p_vout->p_sys->p_win->i_height,
&i_x, &i_y, &i_width, &i_height );
- vlc_mutex_lock( &p_vout->p_sys->lock );
-
#ifdef MODULE_NAME_IS_xvmc
xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock );
msg_Dbg( p_vout, "DisplayVideo decoded=%d\tsurfacevalid=%d",
xxmc->decoded,
xxmc_xvmc_surface_valid( p_vout, p_pic->p_sys->xvmc_surf ) );
- vlc_mutex_unlock( &p_vout->p_sys->lock );
xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
return;
}
/* Make sure the command is sent now - do NOT use XFlush !*/
XSync( p_vout->p_sys->p_display, False );
-
- vlc_mutex_unlock( &p_vout->p_sys->lock );
}
/*****************************************************************************
XEvent xevent; /* X11 event */
vlc_value_t val;
- vlc_mutex_lock( &p_vout->p_sys->lock );
-
#ifdef MODULE_NAME_IS_xvmc
xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock );
#endif
var_Set( p_vout, "mouse-button-down", val );
var_SetBool( p_vout, "mouse-clicked", true );
-
- vlc_value_t val; val.b_bool = false;
- var_Set( p_vout->p_libvlc, "intf-popupmenu", val );
+ var_SetBool( p_vout->p_libvlc, "intf-popupmenu", false );
}
break;
val.i_int &= ~4;
var_Set( p_vout, "mouse-button-down", val );
- vlc_value_t val; val.b_bool = true;
- var_Set( p_vout->p_libvlc, "intf-popupmenu", val );
+ var_SetBool( p_vout->p_libvlc, "intf-popupmenu", true );
}
break;
else if( xevent.type == MotionNotify )
{
unsigned int i_width, i_height, i_x, i_y;
- vlc_value_t val;
/* somewhat different use for vout_PlacePicture:
* here the values are needed to give to mouse coordinates
var_Set( p_vout, "mouse-y", val );
- val.b_bool = true;
- var_Set( p_vout, "mouse-moved", val );
+ var_SetBool( p_vout, "mouse-moved", true );
p_vout->p_sys->i_time_mouse_last_moved = mdate();
if( ! p_vout->p_sys->b_mouse_pointer_visible )
p_vout->i_changes &= ~VOUT_FULLSCREEN_CHANGE;
}
+ /* autoscale toggle */
+ if( p_vout->i_changes & VOUT_SCALE_CHANGE )
+ {
+ p_vout->i_changes &= ~VOUT_SCALE_CHANGE;
+
+ p_vout->b_autoscale = var_GetBool( p_vout, "autoscale" );
+ p_vout->i_zoom = ZOOM_FP_FACTOR;
+
+ p_vout->i_changes |= VOUT_SIZE_CHANGE;
+ }
+
+ /* scaling factor */
+ if( p_vout->i_changes & VOUT_ZOOM_CHANGE )
+ {
+ p_vout->i_changes &= ~VOUT_ZOOM_CHANGE;
+
+ p_vout->b_autoscale = false;
+ p_vout->i_zoom =
+ (int)( ZOOM_FP_FACTOR * var_GetFloat( p_vout, "scale" ) );
+
+ p_vout->i_changes |= VOUT_SIZE_CHANGE;
+ }
+
if( p_vout->i_changes & VOUT_CROP_CHANGE ||
p_vout->i_changes & VOUT_ASPECT_CHANGE )
{
}
}
#endif
-
- vlc_mutex_unlock( &p_vout->p_sys->lock );
return 0;
}
XGCValues xgcvalues;
XEvent xevent;
- bool b_expose = false;
- bool b_configure_notify = false;
bool b_map_notify = false;
vlc_value_t val;
&p_win->i_height,
&dummy4, &dummy5 );
- /* We are already configured */
- b_configure_notify = true;
-
/* From man XSelectInput: only one client at a time can select a
* ButtonPress event, so we need to open a new window anyway. */
p_win->base_window =
p_win->base_window,
GCGraphicsExposures, &xgcvalues );
- /* Send orders to server, and wait until window is displayed - three
- * events must be received: a MapNotify event, an Expose event allowing
- * drawing in the window, and a ConfigureNotify to get the window
- * dimensions. Once those events have been received, only
- * ConfigureNotify events need to be received. */
+ /* Wait till the window is mapped */
XMapWindow( p_vout->p_sys->p_display, p_win->base_window );
do
{
XWindowEvent( p_vout->p_sys->p_display, p_win->base_window,
- SubstructureNotifyMask | StructureNotifyMask |
- ExposureMask, &xevent);
- if( (xevent.type == Expose)
- && (xevent.xexpose.window == p_win->base_window) )
- {
- b_expose = true;
- /* ConfigureNotify isn't sent if there isn't a window manager.
- * Expose should be the last event to be received so it should
- * be fine to assume we won't receive it anymore. */
- b_configure_notify = true;
- }
- else if( (xevent.type == MapNotify)
+ SubstructureNotifyMask | StructureNotifyMask, &xevent);
+ if( (xevent.type == MapNotify)
&& (xevent.xmap.window == p_win->base_window) )
{
b_map_notify = true;
else if( (xevent.type == ConfigureNotify)
&& (xevent.xconfigure.window == p_win->base_window) )
{
- b_configure_notify = true;
p_win->i_width = xevent.xconfigure.width;
p_win->i_height = xevent.xconfigure.height;
}
- } while( !( b_expose && b_configure_notify && b_map_notify ) );
+ } while( !b_map_notify );
/* key and mouse events handling depending on --vout-event option
* activated if:
static void ToggleFullScreen ( vout_thread_t *p_vout )
{
Atom prop;
- XEvent xevent;
mwmhints_t mwmhints;
XSetWindowAttributes attributes;
* the call is first redirected to the window manager) */
#if BADFS // RASTER: this is silly... if we have already mapped before
+ XEvent xevent;
do
{
XWindowEvent( p_vout->p_sys->p_display,
if( p_vout->p_sys->i_shm_opcode )
{
- int major, minor;
+ int minor;
Bool pixmaps;
XShmQueryVersion( p_vout->p_sys->p_display, &major, &minor,
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 * );
-
- vlc_mutex_lock( &p_vout->p_sys->lock );
- *pi_width = p_vout->p_sys->p_win->i_width;
- *pi_height = p_vout->p_sys->p_win->i_height;
- vlc_mutex_unlock( &p_vout->p_sys->lock );
- 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,
i_query, args);
- vlc_mutex_lock( &p_vout->p_sys->lock );
-
i_width = va_arg( args, unsigned int );
i_height = va_arg( args, unsigned int );
if( !i_width ) i_width = p_vout->i_window_width;
#ifdef MODULE_NAME_IS_xvmc
xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
#endif
- vlc_mutex_unlock( &p_vout->p_sys->lock );
- return VLC_SUCCESS;
-
- case VOUT_CLOSE:
- vlc_mutex_lock( &p_vout->p_sys->lock );
- XUnmapWindow( p_vout->p_sys->p_display,
- p_vout->p_sys->original_window.base_window );
- vlc_mutex_unlock( &p_vout->p_sys->lock );
- /* Fall through */
-
- case VOUT_REPARENT:
- vlc_mutex_lock( &p_vout->p_sys->lock );
- if( i_query == VOUT_REPARENT ) d = (Drawable)va_arg( args, int );
- if( !d )
- {
-#ifdef MODULE_NAME_IS_xvmc
- xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock );
-#endif
- XReparentWindow( p_vout->p_sys->p_display,
- p_vout->p_sys->original_window.base_window,
- DefaultRootWindow( p_vout->p_sys->p_display ),
- 0, 0 );
- }
- else
- XReparentWindow( p_vout->p_sys->p_display,
- p_vout->p_sys->original_window.base_window,
- d, 0, 0);
- XSync( p_vout->p_sys->p_display, False );
-#ifdef MODULE_NAME_IS_xvmc
- xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
-#endif
- vlc_mutex_unlock( &p_vout->p_sys->lock );
- vout_ReleaseWindow( p_vout->p_sys->p_win->owner_window );
- p_vout->p_sys->original_window.owner_window = NULL;
return VLC_SUCCESS;
case VOUT_SET_STAY_ON_TOP:
i_query, args);
b_arg = (bool) va_arg( args, int );
- vlc_mutex_lock( &p_vout->p_sys->lock );
#ifdef MODULE_NAME_IS_xvmc
xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock );
#endif
#ifdef MODULE_NAME_IS_xvmc
xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
#endif
- vlc_mutex_unlock( &p_vout->p_sys->lock );
return VLC_SUCCESS;
default:
- return vout_vaControlDefault( p_vout, i_query, args );
+ return VLC_EGENERIC;
}
}