summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-05-09 10:03:47 +0800
committerTim Blechmann <tim@klingt.org>2024-05-10 18:24:05 +0800
commit00140209034cb9dac000d7a11c09f60408153c7e (patch)
treedd3290f4263adb636f1aafe32a16aa2069905d5e
parenta0f9540728ad6defca11c243a0cb402734db10ab (diff)
GStreamer: add qIsGstObjectOfType and unit tests for casts
Pick-to: 6.5 6.7 Change-Id: Idc10294704a28c6fae08cfa095d35df76fda1d0d Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgst_p.h7
-rw-r--r--tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.cpp33
-rw-r--r--tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.h4
3 files changed, 44 insertions, 0 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgst_p.h b/src/plugins/multimedia/gstreamer/common/qgst_p.h
index 34b7e7e22..285a4ec47 100644
--- a/src/plugins/multimedia/gstreamer/common/qgst_p.h
+++ b/src/plugins/multimedia/gstreamer/common/qgst_p.h
@@ -145,6 +145,13 @@ struct GstObjectTraits<GObject>
} // namespace QGstImpl
template <typename DestinationType, typename SourceType>
+bool qIsGstObjectOfType(SourceType *arg)
+{
+ using Traits = QGstImpl::GstObjectTraits<DestinationType>;
+ return arg && Traits::isObjectOfType(arg);
+}
+
+template <typename DestinationType, typename SourceType>
DestinationType *qGstSafeCast(SourceType *arg)
{
using Traits = QGstImpl::GstObjectTraits<DestinationType>;
diff --git a/tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.cpp b/tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.cpp
index 763ff01bf..2cecbe21b 100644
--- a/tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.cpp
+++ b/tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.cpp
@@ -7,6 +7,7 @@
#include <QtQGstreamerMediaPlugin/private/qgst_handle_types_p.h>
#include <QtQGstreamerMediaPlugin/private/qgst_p.h>
+#include <QtQGstreamerMediaPlugin/private/qgstpipeline_p.h>
#include <QtQGstreamerMediaPlugin/private/qgstreamermetadata_p.h>
QT_USE_NAMESPACE
@@ -27,6 +28,38 @@ QGstTagListHandle tst_GStreamer::parseTagList(const QByteArray &ba)
return parseTagList(ba.constData());
}
+void tst_GStreamer::qGstCasts_withElement()
+{
+ QGstElement element = QGstElement::createFromFactory("identity", "myPipeline");
+ QVERIFY(element);
+
+ QVERIFY(!qIsGstObjectOfType<GstPipeline>(element.element()));
+ QVERIFY(!qIsGstObjectOfType<GstBin>(element.element()));
+}
+
+void tst_GStreamer::qGstCasts_withBin()
+{
+ QGstBin bin = QGstBin::create("bin");
+ QVERIFY(bin);
+
+ QVERIFY(!qIsGstObjectOfType<GstPipeline>(bin.element()));
+ QVERIFY(qIsGstObjectOfType<GstBin>(bin.element()));
+}
+
+void tst_GStreamer::qGstCasts_withPipeline()
+{
+ QGstPipeline pipeline = QGstPipeline::create("myPipeline");
+
+ QGstElement element{
+ qGstSafeCast<GstElement>(pipeline.pipeline()),
+ QGstElement::NeedsRef,
+ };
+
+ QVERIFY(element);
+ QVERIFY(qIsGstObjectOfType<GstPipeline>(element.element()));
+ QVERIFY(qIsGstObjectOfType<GstBin>(element.element()));
+}
+
void tst_GStreamer::metadata_taglistToMetaData()
{
QGstTagListHandle tagList = parseTagList(R"(taglist, title="My Video", comment="yada")");
diff --git a/tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.h b/tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.h
index 0a1628031..7b490c22b 100644
--- a/tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.h
+++ b/tests/auto/unit/multimedia/gstreamer_backend/tst_gstreamer_backend.h
@@ -19,6 +19,10 @@ class tst_GStreamer : public QObject
QGstTagListHandle parseTagList(const QByteArray &);
private slots:
+ void qGstCasts_withElement();
+ void qGstCasts_withBin();
+ void qGstCasts_withPipeline();
+
void metadata_taglistToMetaData();
void metadata_taglistToMetaData_extractsOrientation();
void metadata_taglistToMetaData_extractsOrientation_data();