1From d6867946e3c19a13cd60a26c98afe68fb24ea0cb 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/41] 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 dddfe06..7917c69 100644
16--- a/ext/wayland/gstwaylandsink.c
17+++ b/ext/wayland/gstwaylandsink.c
18@@ -193,6 +193,8 @@ gst_wayland_sink_init (GstWaylandSink * self)
19 {
20   g_mutex_init (&self->display_lock);
21   g_mutex_init (&self->render_lock);
22+
23+  self->window_handle = 1;
24 }
25
26 static void
27@@ -762,6 +764,12 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
28     gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (self));
29     g_mutex_lock (&self->render_lock);
30
31+    /* HACK: Defer window prepare when getting zero window handle */
32+    if (!self->window_handle) {
33+      GST_LOG_OBJECT (self, "buffer %p dropped (window not ready)", buffer);
34+      goto done;
35+    }
36+
37     if (!self->window) {
38       /* if we were not provided a window, create one ourselves */
39       self->window = gst_wl_window_new_toplevel (self->display,
40--
412.20.1
42
43