1*4882a593SmuzhiyunFrom d1cd7ffc2011c035091f1fa9fbd75c7810dcc7b0 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com>
3*4882a593SmuzhiyunDate: Tue, 19 Jan 2021 11:16:36 +0800
4*4882a593SmuzhiyunSubject: [PATCH 16/41] waylandsink: Defer prepare window when getting zero
5*4882a593Smuzhiyun window handle
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunThe window might not ready when we requesting it.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
10*4882a593Smuzhiyun---
11*4882a593Smuzhiyun ext/wayland/gstwaylandsink.c | 8 ++++++++
12*4882a593Smuzhiyun 1 file changed, 8 insertions(+)
13*4882a593Smuzhiyun
14*4882a593Smuzhiyundiff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
15*4882a593Smuzhiyunindex dddfe06..7917c69 100644
16*4882a593Smuzhiyun--- a/ext/wayland/gstwaylandsink.c
17*4882a593Smuzhiyun+++ b/ext/wayland/gstwaylandsink.c
18*4882a593Smuzhiyun@@ -193,6 +193,8 @@ gst_wayland_sink_init (GstWaylandSink * self)
19*4882a593Smuzhiyun {
20*4882a593Smuzhiyun   g_mutex_init (&self->display_lock);
21*4882a593Smuzhiyun   g_mutex_init (&self->render_lock);
22*4882a593Smuzhiyun+
23*4882a593Smuzhiyun+  self->window_handle = 1;
24*4882a593Smuzhiyun }
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun static void
27*4882a593Smuzhiyun@@ -762,6 +764,12 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
28*4882a593Smuzhiyun     gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (self));
29*4882a593Smuzhiyun     g_mutex_lock (&self->render_lock);
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun+    /* HACK: Defer window prepare when getting zero window handle */
32*4882a593Smuzhiyun+    if (!self->window_handle) {
33*4882a593Smuzhiyun+      GST_LOG_OBJECT (self, "buffer %p dropped (window not ready)", buffer);
34*4882a593Smuzhiyun+      goto done;
35*4882a593Smuzhiyun+    }
36*4882a593Smuzhiyun+
37*4882a593Smuzhiyun     if (!self->window) {
38*4882a593Smuzhiyun       /* if we were not provided a window, create one ourselves */
39*4882a593Smuzhiyun       self->window = gst_wl_window_new_toplevel (self->display,
40*4882a593Smuzhiyun--
41*4882a593Smuzhiyun2.20.1
42*4882a593Smuzhiyun
43