summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-11-09 23:55:42 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2023-11-09 23:55:42 +0100
commitc69f0f95a9d847bafb36a94ca289e763a46bd544 (patch)
treeddcfafe53cd46be66b7c3a3c0892045db7a591d2 /src
parentFix call only ringing the second time (diff)
downloadnheko-c69f0f95a9d847bafb36a94ca289e763a46bd544.tar.xz
Fix Nheko freezing after stopping a call on Wayland
Diffstat (limited to 'src')
-rw-r--r--src/voip/WebRTCSession.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/voip/WebRTCSession.cpp b/src/voip/WebRTCSession.cpp
index d3e88c32..332a27fd 100644
--- a/src/voip/WebRTCSession.cpp
+++ b/src/voip/WebRTCSession.cpp
@@ -25,6 +25,7 @@
 #ifdef GSTREAMER_AVAILABLE
 extern "C"
 {
+#include "gst/gl/gstgldisplay.h"
 #include "gst/gst.h"
 #include "gst/sdp/sdp.h"
 
@@ -346,6 +347,21 @@ newVideoSinkChain(GstElement *pipe)
     gst_element_sync_state_with_parent(glupload);
     gst_element_sync_state_with_parent(glcolorconvert);
     gst_element_sync_state_with_parent(glsinkbin);
+
+    // to propagate context (hopefully)
+    gst_element_set_state(qmlglsink, GST_STATE_READY);
+
+    // Workaround: On wayland, when egl is used, gstreamer might terminate the display connection.
+    // Prevent that by "leaking" a reference to the display. See
+    // https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3743
+    if (QGuiApplication::platformName() == QStringLiteral("wayland")) {
+        auto context = gst_element_get_context(qmlglsink, "gst.gl.GLDisplay");
+        if (context) {
+            GstGLDisplay *display;
+            gst_context_get_gl_display(context, &display);
+        }
+    }
+
     return queue;
 }