1From aaad3daa6439625f9b71e5874a8638264a23f5ed Mon Sep 17 00:00:00 2001
2From: Jeffy Chen <jeffy.chen@rock-chips.com>
3Date: Tue, 19 Jan 2021 11:16:36 +0800
4Subject: [PATCH 16/33] waylandsink: Defer prepare window when getting zero
5 window handle
6
7The window might not ready when we requesting it.
8
9Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
10---
11 ext/wayland/gstwaylandsink.c | 8 ++++++++
12 1 file changed, 8 insertions(+)
13
14diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
15index 56140c4..4577e6c 100644
16--- a/ext/wayland/gstwaylandsink.c
17+++ b/ext/wayland/gstwaylandsink.c
18@@ -223,6 +223,8 @@ gst_wayland_sink_init (GstWaylandSink * sink)
19 {
20   g_mutex_init (&sink->display_lock);
21   g_mutex_init (&sink->render_lock);
22+
23+  sink->window_handle = 1;
24 }
25
26 static void
27@@ -722,6 +724,12 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
28     gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (sink));
29     g_mutex_lock (&sink->render_lock);
30
31+    /* HACK: Defer window prepare when getting zero window handle */
32+    if (!sink->window_handle) {
33+      GST_LOG_OBJECT (sink, "buffer %p dropped (window not ready)", buffer);
34+      goto done;
35+    }
36+
37     if (!sink->window) {
38       /* if we were not provided a window, create one ourselves */
39       sink->window = gst_wl_window_new_toplevel (sink->display,
40--
412.20.1
42
43