]> git.sesse.net Git - vlc/commitdiff
Let mouse events go through vout filter chain.
authorLaurent Aimar <fenrir@videolan.org>
Tue, 13 Apr 2010 20:26:00 +0000 (22:26 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Sat, 17 Apr 2010 18:36:19 +0000 (20:36 +0200)
It only works for vout display modules.

src/video_output/display.c
src/video_output/video_output.c
src/video_output/vout_internal.h

index 6d64e34ad04e5f8406e841c9982a0a433606b6cd..b910095baf734ce690720aa907ed80f32c4f28e2 100644 (file)
@@ -1422,6 +1422,15 @@ vout_display_t *vout_NewSplitter(vout_thread_t *vout,
 #include "vout_internal.h"
 void vout_SendDisplayEventMouse(vout_thread_t *vout, const vlc_mouse_t *m)
 {
+    vlc_mouse_t tmp;
+
+    vlc_mutex_lock( &vout->p->vfilter_lock );
+    if (vout->p->p_vf2_chain) {
+        if (!filter_chain_MouseFilter(vout->p->p_vf2_chain, &tmp, m))
+            m = &tmp;
+    }
+    vlc_mutex_unlock( &vout->p->vfilter_lock );
+
     if (vlc_mouse_HasMoved(&vout->p->mouse, m)) {
         vout_SendEventMouseMoved(vout, m->i_x, m->i_y);
     }
@@ -1453,10 +1462,13 @@ static void DummyVoutSendDisplayEventMouse(vout_thread_t *vout, vlc_mouse_t *fal
 
     if (!vout->p) {
         p.mouse = *fallback;
+        vlc_mutex_init(&p.vfilter_lock);
+        p.p_vf2_chain = NULL;
         vout->p = &p;
     }
     vout_SendDisplayEventMouse(vout, m);
     if (vout->p == &p) {
+        vlc_mutex_destroy(&p.vfilter_lock);
         *fallback = p.mouse;
         vout->p = NULL;
     }
index 859bdb486b7de0d819de9c79435d16a625eed0b0..7ed3dc55ee4faa6c77f3ec4d4203d757285b550a 100644 (file)
@@ -1111,8 +1111,12 @@ static void* RunThread( void *p_this )
 
         p_filtered_picture = NULL;
         if( p_picture )
+        {
+            vlc_mutex_lock( &p_vout->p->vfilter_lock );
             p_filtered_picture = filter_chain_VideoFilter( p_vout->p->p_vf2_chain,
                                                            p_picture );
+            vlc_mutex_unlock( &p_vout->p->vfilter_lock );
+        }
 
         const bool b_snapshot = vout_snapshot_IsRequested( &p_vout->p->snapshot );
 
index ffbe222366cb2acb43803783ea0f865405438896..2fc62004e1b3a2a20ac4f8b8ea4a12cdf614247c 100644 (file)
@@ -60,7 +60,7 @@ struct vout_thread_sys_t
     vlc_cond_t      picture_wait;
 
     /* */
-    vlc_mutex_t     vfilter_lock;         /**< video filter2 change lock */
+    vlc_mutex_t     vfilter_lock;         /**< video filter2 lock */
 
     /* */
     uint32_t        render_time;           /**< last picture render time */