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