summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-03-12 22:35:53 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-14 17:40:51 +0000
commit9a1deb5b57452abbcb3176a7897556832714c2d2 (patch)
treeaf67dea13c659203fe70b1edd24bc89466b0ad83
parenta55dd73313f0fc6288ca4713157ec13282dd850b (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.cpp27
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,