diff options
author | Tim Blechmann <tim@klingt.org> | 2024-02-21 19:36:08 +0800 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-02-28 16:46:35 +0000 |
commit | fbc6f09f49734b44ce6ef8eede04fb4b5c5d493d (patch) | |
tree | f46fb09313338a2867d5c93517daa32046b41c5e | |
parent | f725d348d354efb993c95a2c4fb0c2e8a2a9b5d2 (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.h | 36 |
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); } }; |