summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-02-21 19:36:08 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-02-28 16:46:35 +0000
commitfbc6f09f49734b44ce6ef8eede04fb4b5c5d493d (patch)
treef46fb09313338a2867d5c93517daa32046b41c5e
parentf725d348d354efb993c95a2c4fb0c2e8a2a9b5d2 (diff)
GStreamer: QGstElement - simplify callback apis
* Use lambdas instead of local Impl structs * pass callback via lambda function Pick-to: 6.6 6.5 Change-Id: Icb1db5ef55e6ce0bcb61ec823bfb8a7c4bd16ed0 Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Mikko Hallamaa <mikko.hallamaa@qt.io> Reviewed-by: Lars Sutterud <lars.sutterud@qt.io> (cherry picked from commit ca444c770cfc1f6da6a0dd953dcbe2a3e4019139) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgst_p.h36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgst_p.h b/src/plugins/multimedia/gstreamer/common/qgst_p.h
index 9b02b2dbc..e1f5b92fc 100644
--- a/src/plugins/multimedia/gstreamer/common/qgst_p.h
+++ b/src/plugins/multimedia/gstreamer/common/qgst_p.h
@@ -428,21 +428,25 @@ public:
template<auto Member, typename T>
void addProbe(T *instance, GstPadProbeType type) {
- struct Impl {
- static GstPadProbeReturn callback(GstPad *pad, GstPadProbeInfo *info, gpointer userData) {
- return (static_cast<T *>(userData)->*Member)(QGstPad(pad, NeedsRef), info);
- };
+ auto callback = [](GstPad *pad, GstPadProbeInfo *info, gpointer userData) {
+ return (static_cast<T *>(userData)->*Member)(QGstPad(pad, NeedsRef), info);
};
- gst_pad_add_probe (pad(), type, Impl::callback, instance, nullptr);
+ gst_pad_add_probe(pad(), type, callback, instance, nullptr);
}
- void doInIdleProbe(std::function<void()> work) {
+ template <typename Functor>
+ void doInIdleProbe(Functor &&work)
+ {
struct CallbackData {
QSemaphore waitDone;
- std::function<void()> work;
- } cd;
- cd.work = work;
+ Functor work;
+ };
+
+ CallbackData cd{
+ .waitDone = QSemaphore{},
+ .work = std::forward<Functor>(work),
+ };
auto callback= [](GstPad *, GstPadProbeInfo *, gpointer p) {
auto cd = reinterpret_cast<CallbackData*>(p);
@@ -457,16 +461,14 @@ public:
template<auto Member, typename T>
void addEosProbe(T *instance) {
- struct Impl {
- static GstPadProbeReturn callback(GstPad */*pad*/, GstPadProbeInfo *info, gpointer userData) {
- if (GST_EVENT_TYPE(GST_PAD_PROBE_INFO_DATA(info)) != GST_EVENT_EOS)
- return GST_PAD_PROBE_PASS;
- (static_cast<T *>(userData)->*Member)();
- return GST_PAD_PROBE_REMOVE;
- };
+ auto callback = [](GstPad *, GstPadProbeInfo *info, gpointer userData) {
+ if (GST_EVENT_TYPE(GST_PAD_PROBE_INFO_DATA(info)) != GST_EVENT_EOS)
+ return GST_PAD_PROBE_PASS;
+ (static_cast<T *>(userData)->*Member)();
+ return GST_PAD_PROBE_REMOVE;
};
- gst_pad_add_probe (pad(), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, Impl::callback, instance, nullptr);
+ gst_pad_add_probe(pad(), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, callback, instance, nullptr);
}
};