/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-
#include <vlc/vlc.h>
#include <vlc_interface.h>
#include <vlc_playlist.h>
#include <vlc_vout.h>
#include <vlc_keys.h>
+#include <errno.h> /* ENOMEM */
+
#ifdef HAVE_MACHINE_PARAM_H
/* BSD */
# include <machine/param.h>
#endif
#ifdef HAVE_OSSO
- p_vout->p_sys->i_backlight_on_counter = i_backlight_on_interval;
+ p_vout->p_sys->i_backlight_on_counter = i_backlight_on_interval;
p_vout->p_sys->p_octx = osso_initialize( "vlc", VERSION, 0, NULL );
if ( p_vout->p_sys->p_octx == NULL ) {
msg_Err( p_vout, "Could not get osso context" );
#ifdef HAVE_XSP
DisablePixelDoubling(p_vout);
#endif
-
+
DestroyCursor( p_vout );
EnableXScreenSaver( p_vout );
DestroyWindow( p_vout, &p_vout->p_sys->original_window );
first_field);
XVMCUNLOCKDISPLAY( p_vout->p_sys->p_display );
- if( p_vout->p_sys->xvmc_deinterlace_method == 2 )
+ if( p_vout->p_sys->xvmc_deinterlace_method == 2 )
{ /* BOB DEINTERLACE */
if( p_picture->p_sys->nb_display == 0 )/* && ((t2-t1) < 15000)) */
{
*/
if ( p_vout->i_changes & VOUT_FULLSCREEN_CHANGE )
{
- vlc_value_t val;
+ vlc_value_t val_fs, val_ontop;
/* Update the object variable and trigger callback */
- val.b_bool = !p_vout->b_fullscreen;
+ val_fs.b_bool = !p_vout->b_fullscreen;
- /*
- * FIXME FIXME FIXME FIXME: EXPLICIT HACK.
- * On the one hand, we cannot hold the lock while triggering a
- * callback, as it causes a deadlock with video-on-top handling.
- * On the other hand, we have to lock while triggering the
- * callback to:
- * 1/ make sure video-on-top remains in sync with fullscreen
- * (i.e. unlocking creates a race condition if fullscreen is
- * switched on and off VERY FAST).
- * 2/ avoid possible corruption bugs if another thread gets the
- * mutex and modifies our data in-between.
- *
- * This is obviously contradictory. Correct solutions may include:
- * - putting the fullscreen NAND video-on-top logic out of libvlc,
- * back into the video output plugins (ugly code duplication...),
- * - serializing fullscreen and video-on-top handling properly
- * instead of doing it via the fullscreen callback. That's got to
- * be the correct one.
- */
-#ifdef MODULE_NAME_IS_xvmc
- xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
-#endif
- vlc_mutex_unlock( &p_vout->p_sys->lock );
+ var_Set( p_vout, "fullscreen", val_fs );
- var_Set( p_vout, "fullscreen", 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
+ /* Disable "always on top" in fullscreen mode */
+ var_Get( p_vout, "video-on-top", &val_ontop );
+ if( val_ontop.b_bool )
+ WindowOnTop( p_vout, val_fs.b_bool );
ToggleFullScreen( p_vout );
p_vout->i_changes &= ~VOUT_FULLSCREEN_CHANGE;
#ifdef MODULE_NAME_IS_xvmc
xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
#endif
-
+
#ifdef HAVE_OSSO
if ( p_vout->p_sys->p_octx != NULL ) {
if ( p_vout->p_sys->i_backlight_on_counter == i_backlight_on_interval ) {
if ( osso_display_blanking_pause( p_vout->p_sys->p_octx ) != OSSO_OK ) {
msg_Err( p_vout, "Could not disable backlight blanking" );
- } else {
+ } else {
msg_Dbg( p_vout, "Backlight blanking disabled" );
}
p_vout->p_sys->i_backlight_on_counter = 0;
}
}
#endif
-
+
vlc_mutex_unlock( &p_vout->p_sys->lock );
return 0;
}
p_pic->p_sys->p_image =
CreateImage( p_vout, p_vout->p_sys->p_display,
#if defined(MODULE_NAME_IS_xvideo) || defined(MODULE_NAME_IS_xvmc)
- p_vout->p_sys->i_xvport,
+ p_vout->p_sys->i_xvport,
VLC2X11_FOURCC(p_vout->output.i_chroma),
p_pic->format.i_bits_per_pixel,
#else
#ifdef HAVE_XSP
EnablePixelDoubling( p_vout );
#endif
-
+
}
else
{