*****************************************************************************/
#include <errno.h> /* ENOMEM */
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include <vlc/vlc.h>
+#include <vlc_plugin.h>
#include <vlc_interface.h>
#include <vlc_playlist.h>
#include <vlc_vout.h>
int i_width;
int i_height;
+#if SDL_VERSION_ATLEAST(1,2,10)
unsigned int i_desktop_width;
unsigned int i_desktop_height;
+#endif
/* For YUV output */
SDL_Overlay * p_overlay; /* An overlay we keep to grab the XVideo port */
/* For RGB output */
int i_surfaces;
- vlc_bool_t b_cursor;
- vlc_bool_t b_cursor_autohidden;
+ bool b_cursor;
+ bool b_cursor_autohidden;
mtime_t i_lastmoved;
+ mtime_t i_mouse_hide_timeout;
mtime_t i_lastpressed; /* to track dbl-clicks */
-
- vlc_mutex_t lock;
};
/*****************************************************************************
set_shortname( "SDL" );
set_category( CAT_VIDEO );
set_subcategory( SUBCAT_VIDEO_VOUT );
- set_description( _("Simple DirectMedia Layer video output") );
+ set_description( N_("Simple DirectMedia Layer video output") );
set_capability( "video output", 60 );
add_shortcut( "sdl" );
- add_string( "sdl-chroma", NULL, NULL, CHROMA_TEXT, CHROMA_LONGTEXT, VLC_TRUE );
+ add_string( "sdl-chroma", NULL, NULL, CHROMA_TEXT, CHROMA_LONGTEXT, true );
set_callbacks( Open, Close );
#if defined( __i386__ ) || defined( __x86_64__ )
/* On i386, SDL is linked against svgalib */
return VLC_ENOMEM;
}
- vlc_mutex_init( p_vout, &p_vout->p_sys->lock );
-
/* Check if SDL video module has been initialized */
if( SDL_WasInit( SDL_INIT_VIDEO ) != 0 )
{
/* Win32 SDL implementation doesn't support SDL_INIT_EVENTTHREAD yet*/
| SDL_INIT_EVENTTHREAD
#endif
-#ifdef DEBUG
+#ifndef NDEBUG
/* In debug mode you may want vlc to dump a core instead of staying
* stuck */
| SDL_INIT_NOPARACHUTE
SDL_EnableUNICODE(1);
/* Get the desktop resolution */
+#if SDL_VERSION_ATLEAST(1,2,10)
+ /* FIXME: SDL has a problem with virtual desktop */
p_vout->p_sys->i_desktop_width = SDL_GetVideoInfo()->current_w;
p_vout->p_sys->i_desktop_height = SDL_GetVideoInfo()->current_h;
+#endif
/* Create the cursor */
p_vout->p_sys->b_cursor = 1;
p_vout->p_sys->b_cursor_autohidden = 0;
p_vout->p_sys->i_lastmoved = p_vout->p_sys->i_lastpressed = mdate();
+ p_vout->p_sys->i_mouse_hide_timeout =
+ var_GetInteger(p_vout, "mouse-hide-timeout") * 1000;
if( OpenDisplay( p_vout ) )
{
CloseDisplay( p_vout );
SDL_QuitSubSystem( SDL_INIT_VIDEO );
- vlc_mutex_destroy( &p_vout->p_sys->lock );
-
free( p_vout->p_sys );
}
vlc_value_t val;
unsigned int i_width, i_height, i_x, i_y;
- vlc_mutex_lock( &p_vout->p_sys->lock );
-
/* Process events */
while( SDL_PollEvent( &event ) )
{
var_Set( p_vout, "mouse-y", val );
- val.b_bool = VLC_TRUE;
+ val.b_bool = true;
var_Set( p_vout, "mouse-moved", val );
if( p_vout->p_sys->b_cursor )
val.i_int &= ~1;
var_Set( p_vout, "mouse-button-down", val );
- val.b_bool = VLC_TRUE;
+ val.b_bool = true;
var_Set( p_vout, "mouse-clicked", val );
break;
if( p_playlist != NULL )
{
vlc_value_t val;
- val.b_bool = VLC_TRUE;
+ val.b_bool = true;
var_Set( p_playlist, "intf-popupmenu", val );
vlc_object_release( p_playlist );
}
/* Pointer change */
if( ! p_vout->p_sys->b_cursor_autohidden &&
- ( mdate() - p_vout->p_sys->i_lastmoved > 2000000 ) )
+ ( mdate() - p_vout->p_sys->i_lastmoved >
+ p_vout->p_sys->i_mouse_hide_timeout ) )
{
/* Hide the mouse automatically */
p_vout->p_sys->b_cursor_autohidden = 1;
SDL_ShowCursor( 0 );
}
- vlc_mutex_unlock( &p_vout->p_sys->lock );
-
return VLC_SUCCESS;
}
unsigned int x, y, w, h;
SDL_Rect disp;
- vlc_mutex_lock( &p_vout->p_sys->lock );
-
vout_PlacePicture( p_vout, p_vout->p_sys->i_width, p_vout->p_sys->i_height,
&x, &y, &w, &h );
disp.x = x;
SDL_DisplayYUVOverlay( p_pic->p_sys->p_overlay , &disp );
SDL_LockYUVOverlay( p_pic->p_sys->p_overlay);
}
-
- vlc_mutex_unlock( &p_vout->p_sys->lock );
}
/* following functions are local */
uint32_t i_chroma = 0;
/* Set main window's size */
+#if SDL_VERSION_ATLEAST(1,2,10)
p_vout->p_sys->i_width = p_vout->b_fullscreen ? p_vout->p_sys->i_desktop_width :
p_vout->i_window_width;
p_vout->p_sys->i_height = p_vout->b_fullscreen ? p_vout->p_sys->i_desktop_height :
p_vout->i_window_height;
+#else
+ p_vout->p_sys->i_width = p_vout->b_fullscreen ? p_vout->output.i_width :
+ p_vout->i_window_width;
+ p_vout->p_sys->i_height = p_vout->b_fullscreen ? p_vout->output.i_height :
+ p_vout->i_window_height;
+#endif
/* Initialize flags and cursor */
i_flags = SDL_ANYFORMAT | SDL_HWPALETTE | SDL_HWSURFACE | SDL_DOUBLEBUF;