]> git.sesse.net Git - vlc/blobdiff - modules/video_output/sdl.c
Use gettext_noop() consistently
[vlc] / modules / video_output / sdl.c
index 86a9144ed5036883fc93c63b5436b84eece33baf..86a0da4e7bb85b596872c72c8bebf62b7bbed690 100644 (file)
  *****************************************************************************/
 #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>
@@ -59,8 +64,10 @@ struct vout_sys_t
     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 */
@@ -68,12 +75,11 @@ struct vout_sys_t
     /* 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;
 };
 
 /*****************************************************************************
@@ -118,10 +124,10 @@ vlc_module_begin();
     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 */
@@ -156,8 +162,6 @@ static int Open ( vlc_object_t *p_this )
         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 )
     {
@@ -196,7 +200,7 @@ static int Open ( vlc_object_t *p_this )
     /* 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
@@ -215,13 +219,18 @@ static int Open ( vlc_object_t *p_this )
     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 ) )
     {
@@ -339,8 +348,6 @@ static void Close ( vlc_object_t *p_this )
     CloseDisplay( p_vout );
     SDL_QuitSubSystem( SDL_INIT_VIDEO );
 
-    vlc_mutex_destroy( &p_vout->p_sys->lock );
-
     free( p_vout->p_sys );
 }
 
@@ -356,8 +363,6 @@ static int Manage( vout_thread_t *p_vout )
     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 ) )
     {
@@ -376,14 +381,33 @@ static int Manage( vout_thread_t *p_vout )
                                p_vout->p_sys->i_height,
                                &i_x, &i_y, &i_width, &i_height );
 
-            val.i_int = ( event.motion.x - i_x )
-                         * p_vout->render.i_width / i_width;
+            /* Compute the x coordinate and check if the value is
+               in [0,p_vout->fmt_in.i_visible_width] */
+            val.i_int = ( event.motion.x - i_x ) *
+                        p_vout->fmt_in.i_visible_width / i_width +
+                        p_vout->fmt_in.i_x_offset;
+
+            if( (int)(event.motion.x - i_x) < 0 )
+                val.i_int = 0;
+            else if( (unsigned int)val.i_int > p_vout->fmt_in.i_visible_width )
+                val.i_int = p_vout->fmt_in.i_visible_width;
+
             var_Set( p_vout, "mouse-x", val );
-            val.i_int = ( event.motion.y - i_y )
-                         * p_vout->render.i_height / i_height;
+
+            /* compute the y coordinate and check if the value is
+               in [0,p_vout->fmt_in.i_visible_height] */
+            val.i_int = ( event.motion.y - i_y ) *
+                        p_vout->fmt_in.i_visible_height / i_height +
+                        p_vout->fmt_in.i_y_offset;
+
+            if( (int)(event.motion.y - i_y) < 0 )
+                val.i_int = 0;
+            else if( (unsigned int)val.i_int > p_vout->fmt_in.i_visible_height )
+                val.i_int = p_vout->fmt_in.i_visible_height;
+
             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 )
@@ -409,7 +433,7 @@ static int Manage( vout_thread_t *p_vout )
                 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;
 
@@ -456,7 +480,7 @@ static int Manage( vout_thread_t *p_vout )
                     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 );
                     }
@@ -605,15 +629,14 @@ static int Manage( vout_thread_t *p_vout )
 
     /* 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;
 }
 
@@ -693,8 +716,6 @@ static void Display( vout_thread_t *p_vout, picture_t *p_pic )
     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;
@@ -714,8 +735,6 @@ static void Display( vout_thread_t *p_vout, picture_t *p_pic )
         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 */
@@ -737,10 +756,17 @@ static int OpenDisplay( vout_thread_t *p_vout )
     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;