Fix Nheko freezing after stopping a call on Wayland

pull/1614/head
Nicolas Werner 1 year ago
parent 34ebd2b30e
commit c69f0f95a9
No known key found for this signature in database
GPG Key ID: C8D75E610773F2D9
  1. 2
      CMakeLists.txt
  2. 16
      src/voip/WebRTCSession.cpp

@ -606,7 +606,7 @@ endif()
if(VOIP)
include(FindPkgConfig)
pkg_check_modules(GSTREAMER REQUIRED IMPORTED_TARGET gstreamer-sdp-1.0>=1.18 gstreamer-webrtc-1.0>=1.18)
pkg_check_modules(GSTREAMER REQUIRED IMPORTED_TARGET gstreamer-sdp-1.0>=1.18 gstreamer-webrtc-1.0>=1.18 gstreamer-gl-1.0)
endif()
if(X11 AND NOT WIN32 AND NOT APPLE AND NOT HAIKU)

@ -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;
}

Loading…
Cancel
Save