add mutex to the sdl video_output
[vlc.git] / modules / video_output / sdl.c
index 0966b02..a04b949 100644 (file)
@@ -69,6 +69,8 @@ struct vout_sys_t
     vlc_bool_t  b_cursor_autohidden;
     mtime_t     i_lastmoved;
     mtime_t     i_lastpressed;                        /* to track dbl-clicks */
+
+    vlc_mutex_t lock;
 };
 
 /*****************************************************************************
@@ -151,6 +153,9 @@ 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 )
     {
         vlc_mutex_unlock( lock );
@@ -159,7 +164,6 @@ static int Open ( vlc_object_t *p_this )
     }
 
     /* Allocate structure */
-
     p_vout->pf_init = Init;
     p_vout->pf_end = End;
     p_vout->pf_manage = Manage;
@@ -326,6 +330,8 @@ 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 );
 }
 
@@ -341,6 +347,8 @@ 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 ) )
     {
@@ -588,6 +596,8 @@ static int Manage( vout_thread_t *p_vout )
         SDL_ShowCursor( 0 );
     }
 
+    vlc_mutex_unlock( &p_vout->p_sys->lock );
+
     return VLC_SUCCESS;
 }
 
@@ -667,6 +677,8 @@ 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;
@@ -686,6 +698,8 @@ 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 */