diff options
author | Tim Blechmann <tim@klingt.org> | 2024-03-21 10:33:36 +0800 |
---|---|---|
committer | Tim Blechmann <tim@klingt.org> | 2024-03-30 16:45:23 +0000 |
commit | e7797cd61c4d4acbeff27fb45018958efec71799 (patch) | |
tree | 280dbaaa2e3c12f3deb862c08a51a9060627e74b | |
parent | 766c2a92c17da193661389a4b15577294478007f (diff) |
GStreamer: Adapters - use qGstXXXCast
Our cast methods are a bit more typesafe than what gstreamer has to
offer.
Pick-to: 6.5
Change-Id: I70eb6cc1f94246783ee80a13f3622ab5cc56e432
Reviewed-by: Mikko Hallamaa <mikko.hallamaa@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
(cherry picked from commit 2e767cabc1fb0c597cd154078f6ae2aa054fa32e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit d7bde2df6ec4a45a0ca8e3d1ecd2dfa42789b5a5)
-rw-r--r-- | src/plugins/multimedia/gstreamer/common/qgst.cpp | 52 | ||||
-rw-r--r-- | src/plugins/multimedia/gstreamer/common/qgst_p.h | 6 |
2 files changed, 47 insertions, 11 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgst.cpp b/src/plugins/multimedia/gstreamer/common/qgst.cpp index 292ce5e25..301989833 100644 --- a/src/plugins/multimedia/gstreamer/common/qgst.cpp +++ b/src/plugins/multimedia/gstreamer/common/qgst.cpp @@ -637,9 +637,21 @@ const char *QGstObject::name() const // QGstPad -QGstPad::QGstPad(const QGstObject &o) : QGstPad(GST_PAD(o.object()), NeedsRef) { } +QGstPad::QGstPad(const QGstObject &o) + : QGstPad{ + qGstSafeCast<GstPad>(o.object()), + QGstElement::NeedsRef, + } +{ +} -QGstPad::QGstPad(GstPad *pad, RefMode mode) : QGstObject(&pad->object, mode) { } +QGstPad::QGstPad(GstPad *pad, RefMode mode) + : QGstObject{ + qGstCheckedCast<GstObject>(pad), + mode, + } +{ +} QGstCaps QGstPad::currentCaps() const { @@ -683,7 +695,7 @@ QGstElement QGstPad::parent() const GstPad *QGstPad::pad() const { - return GST_PAD_CAST(object()); + return qGstCheckedCast<GstPad>(object()); } GstEvent *QGstPad::stickyEvent(GstEventType type) @@ -698,15 +710,25 @@ bool QGstPad::sendEvent(GstEvent *event) // QGstClock -QGstClock::QGstClock(const QGstObject &o) : QGstClock(GST_CLOCK(o.object()), QGstElement::NeedsRef) +QGstClock::QGstClock(const QGstObject &o) + : QGstClock{ + qGstSafeCast<GstClock>(o.object()), + QGstElement::NeedsRef, + } { } -QGstClock::QGstClock(GstClock *clock, RefMode mode) : QGstObject(&clock->object, mode) { } +QGstClock::QGstClock(GstClock *clock, RefMode mode) + : QGstObject{ + qGstCheckedCast<GstObject>(clock), + mode, + } +{ +} GstClock *QGstClock::clock() const { - return GST_CLOCK_CAST(object()); + return qGstCheckedCast<GstClock>(object()); } GstClockTime QGstClock::time() const @@ -716,7 +738,13 @@ GstClockTime QGstClock::time() const // QGstElement -QGstElement::QGstElement(GstElement *element, RefMode mode) : QGstObject(&element->object, mode) { } +QGstElement::QGstElement(GstElement *element, RefMode mode) + : QGstObject{ + qGstCheckedCast<GstObject>(element), + mode, + } +{ +} QGstElement QGstElement::createFromFactory(const char *factory, const char *name) { @@ -897,11 +925,17 @@ QGstBin QGstBin::createFromFactory(const char *factory, const char *name) }; } -QGstBin::QGstBin(GstBin *bin, RefMode mode) : QGstElement(&bin->element, mode) { } +QGstBin::QGstBin(GstBin *bin, RefMode mode) + : QGstElement{ + qGstCheckedCast<GstElement>(bin), + mode, + } +{ +} GstBin *QGstBin::bin() const { - return GST_BIN_CAST(get()); + return qGstCheckedCast<GstBin>(object()); } void QGstBin::addGhostPad(const QGstElement &child, const char *name) diff --git a/src/plugins/multimedia/gstreamer/common/qgst_p.h b/src/plugins/multimedia/gstreamer/common/qgst_p.h index efd19edaa..284cbbc59 100644 --- a/src/plugins/multimedia/gstreamer/common/qgst_p.h +++ b/src/plugins/multimedia/gstreamer/common/qgst_p.h @@ -75,10 +75,12 @@ struct GstObjectTraits }; \ static_assert(true, "ensure semicolon") -QGST_DEFINE_CAST_TRAITS(GstPipeline, PIPELINE); -QGST_DEFINE_CAST_TRAITS(GstElement, ELEMENT); QGST_DEFINE_CAST_TRAITS(GstBin, BIN); +QGST_DEFINE_CAST_TRAITS(GstClock, CLOCK); +QGST_DEFINE_CAST_TRAITS(GstElement, ELEMENT); +QGST_DEFINE_CAST_TRAITS(GstObject, OBJECT); QGST_DEFINE_CAST_TRAITS(GstPad, PAD); +QGST_DEFINE_CAST_TRAITS(GstPipeline, PIPELINE); template <> struct GstObjectTraits<GObject> |