[vlc-commits] splitter: partially handle close event

Rémi Denis-Courmont git at videolan.org
Sun Jan 13 14:44:48 CET 2019


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Jan 13 15:12:02 2019 +0200| [08141130b33d3b853f4b39c83d01ad481d3b7286] | committer: Rémi Denis-Courmont

splitter: partially handle close event

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=08141130b33d3b853f4b39c83d01ad481d3b7286
---

 modules/video_output/splitter.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/modules/video_output/splitter.c b/modules/video_output/splitter.c
index 8a6fcd1244..ca5fa61632 100644
--- a/modules/video_output/splitter.c
+++ b/modules/video_output/splitter.c
@@ -106,7 +106,8 @@ static void vlc_vidsplit_Close(vout_display_t *vd)
     for (int i = 0; i < n; i++) {
         struct vlc_vidsplit_part *part = &sys->parts[i];
 
-        vout_display_Delete(part->display);
+        if (part->display != NULL)
+            vout_display_Delete(part->display);
         vout_window_Disable(part->window);
         vout_window_Delete(part->window);
         vlc_sem_destroy(&part->lock);
@@ -131,9 +132,24 @@ static void vlc_vidsplit_window_Resized(vout_window_t *wnd,
     vlc_sem_post(&part->lock);
 }
 
+static void vlc_vidsplit_window_Closed(vout_window_t *wnd)
+{
+    struct vlc_vidsplit_part *part = wnd->owner.sys;
+    vout_display_t *display;
+
+    vlc_sem_wait(&part->lock);
+    display = part->display;
+    part->display = NULL;
+    vlc_sem_post(&part->lock);
+
+    if (display != NULL)
+        vout_display_Delete(display);
+}
+
 static const struct vout_window_callbacks vlc_vidsplit_window_cbs =
 {
     .resized = vlc_vidsplit_window_Resized,
+    .closed = vlc_vidsplit_window_Closed,
 };
 
 static vout_window_t *video_splitter_CreateWindow(vlc_object_t *obj,



More information about the vlc-commits mailing list