diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-10-18 16:40:46 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-11-01 17:48:14 +0000 |
commit | 2635fcdc8ca0c5ebdf34fd5ce67a6cf255933bb0 (patch) | |
tree | 02ab7c86393b3ee566175b7ba0e5a30a7869ec7b | |
parent | fc1ca6261de0af1d9f8342e60f0c1fc556be325f (diff) | |
download | qtmultimedia-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.txt | 4 | ||||
-rw-r--r-- | src/multimedia/configure.cmake | 27 | ||||
-rw-r--r-- | src/multimedia/platform/gstreamer/common/qgstvideobuffer.cpp | 6 | ||||
-rw-r--r-- | src/multimedia/platform/gstreamer/common/qgstvideorenderersink.cpp | 4 |
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); |