summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-10-18 16:40:46 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-11-01 17:48:14 +0000
commit2635fcdc8ca0c5ebdf34fd5ce67a6cf255933bb0 (patch)
tree02ab7c86393b3ee566175b7ba0e5a30a7869ec7b
parentfc1ca6261de0af1d9f8342e60f0c1fc556be325f (diff)
downloadqtmultimedia-2635fcdc8ca0c5ebdf34fd5ce67a6cf255933bb0.tar.gz
Compile on systems that do not support eglCreateImage
Systems that do not support eglCreateImage also can't support DMA buffer transfers of decoded video, so that's the feature we want to test for and disable if eglCreateImage is not found. Fixes: QTBUG-97440 Change-Id: Ie65a21407aae74bc1b4325d3ffc5b833f34d3b2a Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit 2fb1985c6be885d4c2443eca5e61a5006757d68d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/multimedia/CMakeLists.txt4
-rw-r--r--src/multimedia/configure.cmake27
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstvideobuffer.cpp6
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstvideorenderersink.cpp4
4 files changed, 34 insertions, 7 deletions
diff --git a/src/multimedia/CMakeLists.txt b/src/multimedia/CMakeLists.txt
index f5479be10..df5bace5a 100644
--- a/src/multimedia/CMakeLists.txt
+++ b/src/multimedia/CMakeLists.txt
@@ -238,10 +238,6 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_gstreamer AND QT_FEATU
-lgstphotography-1.0#GStreamer::Photography # special case
)
-if (QT_FEATURE_gstreamer AND QT_FEATURE_gstreamer_gl)
- qt_find_package(EGL)
-endif()
-
qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_gstreamer AND QT_FEATURE_gstreamer_gl
LIBRARIES
GStreamer::Gl # special case
diff --git a/src/multimedia/configure.cmake b/src/multimedia/configure.cmake
index 543529bec..c5ffae9c9 100644
--- a/src/multimedia/configure.cmake
+++ b/src/multimedia/configure.cmake
@@ -20,6 +20,7 @@ if((QNX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
endif()
qt_find_package(WrapPulseAudio PROVIDED_TARGETS WrapPulseAudio::WrapPulseAudio MODULE_NAME multimedia QMAKE_LIB pulseaudio)
qt_find_package(WMF PROVIDED_TARGETS WMF::WMF MODULE_NAME multimedia QMAKE_LIB wmf)
+qt_find_package(EGL)
#### Tests
@@ -44,7 +45,26 @@ qt_config_compile_test("wmsdk"
LABEL "wmsdk.h"
PROJECT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../config.tests/wmsdk"
)
-
+qt_config_compile_test(linux_dmabuf
+ LABEL "Linux DMA buffer support"
+ LIBRARIES
+ EGL::EGL
+ CODE
+"#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+int main(int, char **)
+{
+ /* BEGIN TEST: */
+ eglCreateImage(nullptr,
+ EGL_NO_CONTEXT,
+ EGL_LINUX_DMA_BUF_EXT,
+ nullptr,
+ nullptr);
+ /* END TEST: */
+ return 0;
+}
+")
#### Features
@@ -93,6 +113,10 @@ qt_feature("linux_v4l" PRIVATE
LABEL "Video for Linux"
CONDITION UNIX AND TEST_linux_v4l
)
+qt_feature("linux_dmabuf" PRIVATE
+ LABEL "Linux DMA buffer support"
+ CONDITION UNIX AND TEST_linux_dmabuf
+)
qt_feature("mmrenderer" PUBLIC PRIVATE
LABEL "MMRenderer"
CONDITION MMRenderer_FOUND AND false
@@ -118,6 +142,7 @@ qt_configure_add_summary_section(NAME "Qt Multimedia")
qt_configure_add_summary_entry(ARGS "gstreamer_1_0")
qt_configure_add_summary_entry(ARGS "linux_v4l")
#qt_configure_add_summary_entry(ARGS "pulseaudio")
+qt_configure_add_summary_entry(ARGS "linux_dmabuf")
qt_configure_add_summary_entry(ARGS "mmrenderer")
qt_configure_add_summary_entry(ARGS "avfoundation")
qt_configure_add_summary_entry(ARGS "wmf")
diff --git a/src/multimedia/platform/gstreamer/common/qgstvideobuffer.cpp b/src/multimedia/platform/gstreamer/common/qgstvideobuffer.cpp
index 878b4d410..ccb135676 100644
--- a/src/multimedia/platform/gstreamer/common/qgstvideobuffer.cpp
+++ b/src/multimedia/platform/gstreamer/common/qgstvideobuffer.cpp
@@ -60,7 +60,9 @@
#include <gst/gl/gstglconfig.h>
#include <gst/gl/gstglmemory.h>
#include <gst/gl/gstglsyncmeta.h>
+#if QT_CONFIG(linux_dmabuf)
#include <gst/allocators/gstdmabuf.h>
+#endif
#include <EGL/egl.h>
#include <EGL/eglext.h>
@@ -175,7 +177,7 @@ void QGstVideoBuffer::unmap()
m_mode = QVideoFrame::NotMapped;
}
-#if QT_CONFIG(gstreamer_gl)
+#if QT_CONFIG(gstreamer_gl) && QT_CONFIG(linux_dmabuf)
static int
fourccFromVideoInfo(const GstVideoInfo * info, int plane)
{
@@ -289,7 +291,7 @@ void QGstVideoBuffer::mapTextures()
gst_video_frame_unmap(&m_frame);
}
}
-#if GST_GL_HAVE_PLATFORM_EGL
+#if GST_GL_HAVE_PLATFORM_EGL && QT_CONFIG(linux_dmabuf)
else if (memoryFormat == QGstCaps::DMABuf) {
if (m_textures[0])
return;
diff --git a/src/multimedia/platform/gstreamer/common/qgstvideorenderersink.cpp b/src/multimedia/platform/gstreamer/common/qgstvideorenderersink.cpp
index 2c15d71dc..e9a9cf678 100644
--- a/src/multimedia/platform/gstreamer/common/qgstvideorenderersink.cpp
+++ b/src/multimedia/platform/gstreamer/common/qgstvideorenderersink.cpp
@@ -62,7 +62,9 @@
#endif // #if QT_CONFIG(gstreamer_gl)
// DMA support
+#if QT_CONFIG(linux_dmabuf)
#include <gst/allocators/gstdmabuf.h>
+#endif
//#define DEBUG_VIDEO_SURFACE_SINK
@@ -111,6 +113,7 @@ void QGstVideoRenderer::createSurfaceCaps()
#if QT_CONFIG(gstreamer_gl)
if (rhi && rhi->backend() == QRhi::OpenGLES2) {
caps.addPixelFormats(formats, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+#if QT_CONFIG(linux_dmabuf)
if (m_sink->eglDisplay() && m_sink->eglImageTargetTexture2D()) {
// We currently do not handle planar DMA buffers, as it's somewhat unclear how to
// convert the planar EGLImage into something we can use from OpenGL
@@ -131,6 +134,7 @@ void QGstVideoRenderer::createSurfaceCaps()
;
caps.addPixelFormats(singlePlaneFormats, GST_CAPS_FEATURE_MEMORY_DMABUF);
}
+#endif
}
#endif
caps.addPixelFormats(formats);