Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  s0063.patch  Sprache: unbekannt

 
Spracherkennung für: .patch vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

From: Jan Grulich <jgrulich@redhat.com>
Date: Fri, 10 Mar 2023 09:21:00 +0000
Subject: Bug 1819035 - get EGL display based on the used platform in the
 browser r=webrtc-reviewers,ng

Because of a possible misconfiguration or a possible driver issue it
might happen that the browser will use a different driver on X11 and
end up using yet another one for wayland/gbm, which might lead to not
working screen sharing in the better case, but also to a crash in the
other driver (Nvidia). This adds a check for platform the browser runs
on, if it's XWayland or Wayland and based on that query EGL display for
that specific platform, rather than going for the Wayland one only.

Differential Revision: https://phabricator.services.mozilla.com/D171858
Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/c8606497de1f461a6352456e0e511c2ae498d526
---
 .../linux/wayland/egl_dmabuf.cc               | 30 +++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/modules/desktop_capture/linux/wayland/egl_dmabuf.cc b/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
index 10bfd88d14..c8653928d9 100644
--- a/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
+++ b/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
@@ -19,6 +19,7 @@
 #include <dlfcn.h>
 #include <fcntl.h>
 #include <gbm.h>
+#include <gdk/gdk.h>
 #include <libdrm/drm_fourcc.h>
 #include <spa/param/video/raw.h>
 #include <sys/stat.h>
@@ -239,6 +240,26 @@ static void CloseLibrary(void* library) {
   }
 }
 
+static bool IsWaylandDisplay() {
+  static auto sGdkWaylandDisplayGetType =
+    (GType (*)(void))dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_type");
+  if (!sGdkWaylandDisplayGetType) {
+    return false;
+  }
+  return (G_TYPE_CHECK_INSTANCE_TYPE ((gdk_display_get_default()),
+                                      sGdkWaylandDisplayGetType()));
+}
+
+static bool IsX11Display() {
+  static auto sGdkX11DisplayGetType =
+    (GType (*)(void))dlsym(RTLD_DEFAULT, "gdk_x11_display_get_type");
+  if (!sGdkX11DisplayGetType) {
+    return false;
+  }
+  return (G_TYPE_CHECK_INSTANCE_TYPE ((gdk_display_get_default()),
+                                      sGdkX11DisplayGetType()));
+}
+
 RTC_NO_SANITIZE("cfi-icall")
 static std::vector<std::string> GetClientExtensions(EGLDisplay display,
                                                     EGLint name) {
@@ -817,8 +838,13 @@ RTC_NO_SANITIZE("cfi-icall")
 bool EglDmaBuf::CreatePlatformDevice() {
   EGLDisplay display = EGL_NO_DISPLAY;
 
-  display = EglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR,
-                                  (void*)EGL_DEFAULT_DISPLAY, nullptr);
+  if (IsWaylandDisplay()) {
+    display = EglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR,
+                                    (void*)EGL_DEFAULT_DISPLAY, nullptr);
+  } else if (IsX11Display()) {
+    display = EglGetPlatformDisplay(EGL_PLATFORM_X11_KHR,
+                                    (void*)EGL_DEFAULT_DISPLAY, nullptr);
+  }
 
   if (display == EGL_NO_DISPLAY) {
     RTC_LOG(LS_ERROR) << "Failed to obtain platform EGL display: "

[Dauer der Verarbeitung: 0.21 Sekunden, vorverarbeitet 2026-09-30]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126864
#Domains=1897691