[vlc-devel] [PATCH] Revert "vout: assume/require a window"

Steve Lhomme robux4 at ycbcr.xyz
Tue Aug 28 15:30:42 CEST 2018


This reverts commit 5563c33a5cf02c9d7adb6bb6e3f6a3994282408c.

--
It works but I have no idea what I'm doing.
---
 include/vlc_vout_display.h      |  3 ++-
 src/video_output/display.c      | 12 ++++++------
 src/video_output/display.h      |  1 +
 src/video_output/video_output.c | 24 ++++++++++++++----------
 4 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h
index 86eb1bced0..95990bda34 100644
--- a/include/vlc_vout_display.h
+++ b/include/vlc_vout_display.h
@@ -377,7 +377,8 @@ static inline vout_window_t *vout_display_NewWindow(vout_display_t *vd, unsigned
 
 static inline bool vout_display_IsWindowed(vout_display_t *vd)
 {
-    return vd->cfg->window->type != VOUT_WINDOW_TYPE_DUMMY;
+    return vd->cfg->window != NULL
+        && vd->cfg->window->type != VOUT_WINDOW_TYPE_DUMMY;
 }
 
 /**
diff --git a/src/video_output/display.c b/src/video_output/display.c
index b0c0fdbb3e..e0d44bd190 100644
--- a/src/video_output/display.c
+++ b/src/video_output/display.c
@@ -113,7 +113,10 @@ static vout_display_t *vout_display_New(vlc_object_t *obj,
         vd->module = NULL;
     }
 
-    vout_window_SetSize(cfg->window, cfg->display.width, cfg->display.height);
+    if (cfg->window != NULL)
+        vout_window_SetSize(cfg->window,
+                            cfg->display.width, cfg->display.height);
+
     return vd;
 }
 
@@ -1201,7 +1204,8 @@ static void SplitterClose(vout_display_t *vd)
         vout_window_t *wnd = sys->display[i]->cfg->window;
 
         vout_DeleteDisplay(sys->display[i], NULL);
-        vout_display_window_Delete(wnd);
+        if (wnd != NULL)
+            vout_display_window_Delete(wnd);
     }
     TAB_CLEAN(sys->count, sys->display);
     free(sys->picture);
@@ -1274,10 +1278,6 @@ vout_display_t *vout_NewSplitter(vout_thread_t *vout,
         vout_display_GetDefaultDisplaySize(&cfg.width, &cfg.height,
                                            source, &ostate.cfg);
         ostate.cfg.window = vout_display_window_New(vout, &cfg);
-        if (unlikely(ostate.cfg.window == NULL)) {
-            vout_DeleteDisplay(wrapper, NULL);
-            return NULL;
-        }
 
         vout_display_t *vd = DisplayNew(vout, &output->fmt, &ostate,
                                         output->psz_module ? output->psz_module : module,
diff --git a/src/video_output/display.h b/src/video_output/display.h
index 875981e1a9..54d69b3c83 100644
--- a/src/video_output/display.h
+++ b/src/video_output/display.h
@@ -32,6 +32,7 @@ vout_display_t *vout_NewSplitter(vout_thread_t *vout,
 /* FIXME should not be there */
 void vout_SendDisplayEventMouse(vout_thread_t *, const vlc_mouse_t *);
 
+void vout_DeleteDisplayWindow(vout_thread_t *);
 void vout_SetDisplayWindowSize(vout_thread_t *, unsigned, unsigned);
 
 void vout_UpdateDisplaySourceProperties(vout_display_t *vd, const video_format_t *);
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index 0abc33368c..ee61dab871 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -184,17 +184,13 @@ static vout_thread_t *VoutCreate(vlc_object_t *object,
         };
 
         vout_window_t *window = vout_display_window_New(vout, &wcfg);
-        if (unlikely(window == NULL)) {
-            spu_Destroy(vout->p->spu);
-            vlc_object_release(vout);
-            return NULL;
+        if (window != NULL)
+        {
+            if (var_InheritBool(vout, "video-wallpaper"))
+                vout_window_SetState(window, VOUT_WINDOW_STATE_BELOW);
+            else if (var_InheritBool(vout, "video-on-top"))
+                vout_window_SetState(window, VOUT_WINDOW_STATE_ABOVE);
         }
-
-        if (var_InheritBool(vout, "video-wallpaper"))
-            vout_window_SetState(window, VOUT_WINDOW_STATE_BELOW);
-        else if (var_InheritBool(vout, "video-on-top"))
-            vout_window_SetState(window, VOUT_WINDOW_STATE_ABOVE);
-
         vout->p->window = window;
     } else
         vout->p->window = NULL;
@@ -680,6 +676,14 @@ static void VoutGetDisplayCfg(vout_thread_t *vout, vout_display_cfg_t *cfg)
         cfg->align.vertical = VOUT_DISPLAY_ALIGN_BOTTOM;
 }
 
+void vout_DeleteDisplayWindow(vout_thread_t *vout)
+{
+    if (vout->p->window != NULL) {
+        vout_display_window_Delete(vout->p->window);
+        vout->p->window = NULL;
+    }
+}
+
 void vout_SetDisplayWindowSize(vout_thread_t *vout,
                                unsigned width, unsigned height)
 {
-- 
2.17.0.windows.1



More information about the vlc-devel mailing list