summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-03-21 10:33:36 +0800
committerTim Blechmann <tim@klingt.org>2024-03-30 16:45:23 +0000
commite7797cd61c4d4acbeff27fb45018958efec71799 (patch)
tree280dbaaa2e3c12f3deb862c08a51a9060627e74b
parent766c2a92c17da193661389a4b15577294478007f (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.cpp52
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgst_p.h6
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>