]> git.sesse.net Git - vlc/blobdiff - src/video_output/display.c
Use var_Inherit* instead of var_CreateGet*.
[vlc] / src / video_output / display.c
index 1c1d3f452a382aee73be88aacaf9bd63e445c597..600fedf846fdfd95e45144944ce378ce44956ad7 100644 (file)
@@ -34,6 +34,7 @@
 #include <vlc_vout_display.h>
 #include <vlc_vout.h>
 #include <vlc_block.h>
+#include <vlc_modules.h>
 
 #include <libvlc.h>
 
@@ -255,7 +256,7 @@ void vout_display_PlacePicture(vout_display_place_t *place,
         place->x = cfg->display.width - place->width;
         break;
     default:
-        place->x = (cfg->display.width - place->width) / 2;
+        place->x = ((int)cfg->display.width - (int)place->width) / 2;
         break;
     }
 
@@ -267,7 +268,7 @@ void vout_display_PlacePicture(vout_display_place_t *place,
         place->y = cfg->display.height - place->height;
         break;
     default:
-        place->y = (cfg->display.height - place->height) / 2;
+        place->y = ((int)cfg->display.height - (int)place->height) / 2;
         break;
     }
 }
@@ -286,8 +287,8 @@ struct vout_display_owner_sys_t {
     } sar_initial;
 
     /* */
-    int  width_saved;
-    int  height_saved;
+    unsigned width_saved;
+    unsigned height_saved;
 
     struct {
         unsigned num;
@@ -466,15 +467,12 @@ static void VoutDisplayEventMouse(vout_display_t *vd, int event, va_list args)
     case VOUT_DISPLAY_EVENT_MOUSE_MOVED: {
         const int x = (int)va_arg(args, int);
         const int y = (int)va_arg(args, int);
-        if (x != osys->mouse.state.i_x || y != osys->mouse.state.i_y) {
-            //msg_Dbg(vd, "VoutDisplayEvent 'mouse' @%d,%d", x, y);
 
-            m.i_x = x;
-            m.i_y = y;
-            m.b_double_click = false;
-        } else {
-            is_ignored = true;
-        }
+        //msg_Dbg(vd, "VoutDisplayEvent 'mouse' @%d,%d", x, y);
+
+        m.i_x = x;
+        m.i_y = y;
+        m.b_double_click = false;
         break;
     }
     case VOUT_DISPLAY_EVENT_MOUSE_PRESSED:
@@ -546,8 +544,7 @@ static void VoutDisplayEventMouse(vout_display_t *vd, int event, va_list args)
 
 static void *VoutDisplayEventKeyDispatch(void *data)
 {
-    vout_display_t *vd = data;
-    vout_display_owner_sys_t *osys = vd->owner.sys;
+    vout_display_owner_sys_t *osys = data;
 
     for (;;) {
         block_t *event = block_FifoGet(osys->event.fifo);
@@ -572,7 +569,7 @@ static void VoutDisplayEventKey(vout_display_t *vd, int key)
         if (!osys->event.fifo)
             return;
         if (vlc_clone(&osys->event.thread, VoutDisplayEventKeyDispatch,
-                      vd, VLC_THREAD_PRIORITY_LOW)) {
+                      osys, VLC_THREAD_PRIORITY_LOW)) {
             block_FifoRelease(osys->event.fifo);
             osys->event.fifo = NULL;
             return;
@@ -682,12 +679,29 @@ static vout_window_t *VoutDisplayNewWindow(vout_display_t *vd, const vout_window
 {
     vout_display_owner_sys_t *osys = vd->owner.sys;
 
+#ifdef ALLOW_DUMMY_VOUT
+    if (!osys->vout->p) {
+        vout_window_cfg_t cfg_override = *cfg;
+
+        if (!var_InheritBool(osys->vout, "embedded-video"))
+            cfg_override.is_standalone = true;
+
+        return vout_window_New(VLC_OBJECT(osys->vout), NULL, &cfg_override);
+    }
+#endif
     return vout_NewDisplayWindow(osys->vout, vd, cfg);
 }
 static void VoutDisplayDelWindow(vout_display_t *vd, vout_window_t *window)
 {
     vout_display_owner_sys_t *osys = vd->owner.sys;
 
+#ifdef ALLOW_DUMMY_VOUT
+    if (!osys->vout->p) {
+        if( window)
+            vout_window_Delete(window);
+        return;
+    }
+#endif
     vout_DeleteDisplayWindow(osys->vout, vd, window);
 }
 
@@ -770,7 +784,7 @@ void vout_ManageDisplay(vout_display_t *vd, bool allow_reset_pictures)
 
     if (hide_mouse) {
         if (!vd->info.has_hide_mouse) {
-            msg_Dbg(vd, "auto hidding mouse");
+            msg_Dbg(vd, "auto hiding mouse");
             vout_display_Control(vd, VOUT_DISPLAY_HIDE_MOUSE);
         }
         vout_SendEventMouseHidden(osys->vout);
@@ -1281,6 +1295,7 @@ void vout_DeleteDisplay(vout_display_t *vd, vout_display_state_t *state)
     vout_display_Delete(vd);
     if (osys->event.fifo) {
         vlc_cancel(osys->event.thread);
+        vlc_join(osys->event.thread, NULL);
         block_FifoRelease(osys->event.fifo);
     }
     vlc_mutex_destroy(&osys->lock);
@@ -1546,18 +1561,20 @@ 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_mouse_t tmp1, tmp2;
 
     /* The check on p_spu is needed as long as ALLOW_DUMMY_VOUT is defined */
     if (vout->p->p_spu && spu_ProcessMouse( vout->p->p_spu, m, &vout->p->display.vd->source))
         return;
 
-    vlc_mutex_lock( &vout->p->vfilter_lock );
-    if (vout->p->vfilter_chain) {
-        if (!filter_chain_MouseFilter(vout->p->vfilter_chain, &tmp, m))
-            m = &tmp;
+    vlc_mutex_lock( &vout->p->filter.lock );
+    if (vout->p->filter.chain_static && vout->p->filter.chain_interactive) {
+        if (!filter_chain_MouseFilter(vout->p->filter.chain_interactive, &tmp1, m))
+            m = &tmp1;
+        if (!filter_chain_MouseFilter(vout->p->filter.chain_static,      &tmp2, m))
+            m = &tmp2;
     }
-    vlc_mutex_unlock( &vout->p->vfilter_lock );
+    vlc_mutex_unlock( &vout->p->filter.lock );
 
     if (vlc_mouse_HasMoved(&vout->p->mouse, m)) {
         vout_SendEventMouseMoved(vout, m->i_x, m->i_y);
@@ -1590,14 +1607,15 @@ static void DummyVoutSendDisplayEventMouse(vout_thread_t *vout, vlc_mouse_t *fal
 
     if (!vout->p) {
         p.mouse = *fallback;
-        vlc_mutex_init(&p.vfilter_lock);
-        p.vfilter_chain = NULL;
+        vlc_mutex_init(&p.filter.lock);
+        p.filter.chain_static = NULL;
+        p.filter.chain_interactive = NULL;
         p.p_spu = NULL;
         vout->p = &p;
     }
     vout_SendDisplayEventMouse(vout, m);
     if (vout->p == &p) {
-        vlc_mutex_destroy(&p.vfilter_lock);
+        vlc_mutex_destroy(&p.filter.lock);
         *fallback = p.mouse;
         vout->p = NULL;
     }