diff options
author | Tim Blechmann <tim@klingt.org> | 2024-05-09 10:03:47 +0800 |
---|---|---|
committer | Tim Blechmann <tim@klingt.org> | 2024-05-10 18:24:05 +0800 |
commit | 00140209034cb9dac000d7a11c09f60408153c7e (patch) | |
tree | dd3290f4263adb636f1aafe32a16aa2069905d5e | |
parent | a0f9540728ad6defca11c243a0cb402734db10ab (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>
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(); |