diff options
author | Tim Blechmann <tim@klingt.org> | 2024-03-12 22:35:53 +0800 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-03-14 17:40:51 +0000 |
commit | 9a1deb5b57452abbcb3176a7897556832714c2d2 (patch) | |
tree | af67dea13c659203fe70b1edd24bc89466b0ad83 | |
parent | a55dd73313f0fc6288ca4713157ec13282dd850b (diff) |
GStreamer: provide environment variable to inject conversion element
Using the new
`QT_MULTIMEDIA_GSTREAMER_OVERRIDE_VIDEO_CONVERSION_ELEMENT`
environment variable, users can provide their custom video conversion
elements.
Fixes: QTBUG-123205
Pick-to: 6.5
Change-Id: Ife24d8e864956d78088d520e8e4cbecc36bfa33e
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
(cherry picked from commit d0f27b34b6e24e20865cf2d4c43ae2a78e316f64)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit d3d7f9a934010102e178fabbde57d2a22950d62c)
-rw-r--r-- | src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp index 7806e8915..f3dc36271 100644 --- a/src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp +++ b/src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp @@ -34,6 +34,8 @@ QT_BEGIN_NAMESPACE +static Q_LOGGING_CATEGORY(qLcGstVideoSink, "qt.multimedia.gstvideosink"); + QGstreamerVideoSink::QGstreamerVideoSink(QVideoSink *parent) : QPlatformVideoSink(parent) { @@ -48,9 +50,24 @@ QGstreamerVideoSink::QGstreamerVideoSink(QVideoSink *parent) // we simply use an identity element. gstQueue = QGstElement::createFromFactory("queue", "videoSinkQueue"); - QGstElementFactoryHandle factory = QGstElementFactoryHandle{ - gst_element_factory_find("imxvideoconvert_g2d"), - }; + QGstElementFactoryHandle factory; + + // QT_MULTIMEDIA_GSTREAMER_OVERRIDE_VIDEO_CONVERSION_ELEMENT allows users to override the + // conversion element. Ideally we construct the element programatically, though. + QByteArray preprocessOverride = + qgetenv("QT_MULTIMEDIA_GSTREAMER_OVERRIDE_VIDEO_CONVERSION_ELEMENT"); + if (!preprocessOverride.isEmpty()) { + qCDebug(qLcGstVideoSink) << "requesting conversion element from environment: " + << preprocessOverride; + factory = QGstElementFactoryHandle{ + gst_element_factory_find(preprocessOverride.constData()), + }; + } + + if (!factory) + factory = QGstElementFactoryHandle{ + gst_element_factory_find("imxvideoconvert_g2d"), + }; if (!factory) factory = QGstElementFactoryHandle{ @@ -58,6 +75,10 @@ QGstreamerVideoSink::QGstreamerVideoSink(QVideoSink *parent) }; if (factory) { + qCDebug(qLcGstVideoSink) << "instantiating conversion element: " + << g_type_name( + gst_element_factory_get_element_type(factory.get())); + gstPreprocess = QGstElement{ gst_element_factory_create(factory.get(), "preprocess"), QGstElement::NeedsRef, |