Title: [257452] releases/WebKitGTK/webkit-2.28/Source/WebCore
Revision
257452
Author
[email protected]
Date
2020-02-26 02:57:56 -0800 (Wed, 26 Feb 2020)

Log Message

Merge r257202 - [GStreamer][WPE] Add GstGLMemoryEGL support for the video-plane-display
https://bugs.webkit.org/show_bug.cgi?id=208046

Reviewed by Žan Doberšek.

The glupload element might fill EGL memories in some cases, so for
the video sink we can then directly access the corresponding
EGLImage and export it to DMABuf, instead of using the more
general GLMemory code path.

With this patch we also ensure that both DMABuf FD and stride are valid.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
(WebCore::GstVideoFrameHolder::handoffVideoDmaBuf):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog (257451 => 257452)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog	2020-02-26 10:57:51 UTC (rev 257451)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog	2020-02-26 10:57:56 UTC (rev 257452)
@@ -1,3 +1,21 @@
+2020-02-24  Philippe Normand  <[email protected]>
+
+        [GStreamer][WPE] Add GstGLMemoryEGL support for the video-plane-display
+        https://bugs.webkit.org/show_bug.cgi?id=208046
+
+        Reviewed by Žan Doberšek.
+
+        The glupload element might fill EGL memories in some cases, so for
+        the video sink we can then directly access the corresponding
+        EGLImage and export it to DMABuf, instead of using the more
+        general GLMemory code path.
+
+        With this patch we also ensure that both DMABuf FD and stride are valid.
+
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
+        (WebCore::GstVideoFrameHolder::handoffVideoDmaBuf):
+
 2020-02-21  Michael Catanzaro  <[email protected]>
 
         [WPE][GTK] googleapis.com is a public suffix, defeating isGoogle() check in UserAgentQuirks.cpp

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp (257451 => 257452)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2020-02-26 10:57:51 UTC (rev 257451)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2020-02-26 10:57:56 UTC (rev 257452)
@@ -147,6 +147,7 @@
 #if USE(WPE_VIDEO_PLANE_DISPLAY_DMABUF)
 #include "PlatformDisplayLibWPE.h"
 #include <gst/gl/egl/gsteglimage.h>
+#include <gst/gl/egl/gstglmemoryegl.h>
 #include <wpe/extensions/video-plane-display-dmabuf.h>
 #endif
 
@@ -206,14 +207,28 @@
         m_flags = flags | (m_hasAlphaChannel ? TextureMapperGL::ShouldBlend : 0);
 
 #if USE(WPE_VIDEO_PLANE_DISPLAY_DMABUF)
+        m_dmabufFD = -1;
+        gsize offset;
         GstMemory* memory = gst_buffer_peek_memory(m_buffer.get(), 0);
-        if (gst_is_gl_memory(memory)) {
-            GstGLMemory* glMemory = GST_GL_MEMORY_CAST(memory);
-            GRefPtr<GstEGLImage> eglImage = adoptGRef(gst_egl_image_from_texture(GST_GL_BASE_MEMORY_CAST(memory)->context, glMemory, nullptr));
-            gsize offset;
-            if (eglImage && gst_egl_image_export_dmabuf(eglImage.get(), &m_dmabufFD, &m_dmabufStride, &offset))
-                return;
+        if (gst_is_gl_memory_egl(memory)) {
+            GstGLMemoryEGL* eglMemory = (GstGLMemoryEGL*) memory;
+            gst_egl_image_export_dmabuf(eglMemory->image, &m_dmabufFD, &m_dmabufStride, &offset);
+        } else if (gst_is_gl_memory(memory)) {
+            GRefPtr<GstEGLImage> eglImage = adoptGRef(gst_egl_image_from_texture(GST_GL_BASE_MEMORY_CAST(memory)->context, GST_GL_MEMORY_CAST(memory), nullptr));
+
+            if (eglImage)
+                gst_egl_image_export_dmabuf(eglImage.get(), &m_dmabufFD, &m_dmabufStride, &offset);
         }
+
+        if (hasDMABuf() && m_dmabufStride == -1) {
+            m_isMapped = gst_video_frame_map(&m_videoFrame, &videoInfo, m_buffer.get(), GST_MAP_READ);
+            if (m_isMapped)
+                m_dmabufStride = GST_VIDEO_INFO_PLANE_STRIDE(&m_videoFrame.info, 0);
+        }
+
+        if (hasDMABuf() && m_dmabufStride)
+            return;
+
         static std::once_flag s_onceFlag;
         std::call_once(s_onceFlag, [] {
             GST_WARNING("Texture export to DMABuf failed, falling back to internal rendering");
@@ -256,9 +271,6 @@
         if (m_dmabufFD <= 0)
             return;
 
-        if (m_dmabufStride == -1)
-            m_dmabufStride = GST_VIDEO_INFO_PLANE_STRIDE(&m_videoFrame.info, 0);
-
         wpe_video_plane_display_dmabuf_source_update(videoPlaneDisplayDmaBufSource, m_dmabufFD, rect.x(), rect.y(), m_size.width(), m_size.height(), m_dmabufStride, [](void* data) {
             gst_buffer_unref(GST_BUFFER_CAST(data));
         }, gst_buffer_ref(m_buffer.get()));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to