From 1f1989e70dca35b2a17e9d81e84536cfa687e047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 13 May 2025 13:04:57 +0300 Subject: [PATCH] base: Manually implement `AggregatorPad::current-level-time` bindings to get correct type Part-of: --- gstreamer-base/Gir.toml | 4 +++ gstreamer-base/src/aggregator_pad.rs | 38 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/gstreamer-base/Gir.toml b/gstreamer-base/Gir.toml index 1a2cdd8ad..5a86ccee9 100644 --- a/gstreamer-base/Gir.toml +++ b/gstreamer-base/Gir.toml @@ -238,6 +238,10 @@ manual_traits = ["AggregatorExtManual"] name = "GstBase.AggregatorPad" status = "generate" manual_traits = ["AggregatorPadExtManual"] + [[object.property]] + name = "current-level-time" + # ClockTime + manual = true [[object]] name = "GstBase.BaseParse" diff --git a/gstreamer-base/src/aggregator_pad.rs b/gstreamer-base/src/aggregator_pad.rs index ec1116fb5..570b7d148 100644 --- a/gstreamer-base/src/aggregator_pad.rs +++ b/gstreamer-base/src/aggregator_pad.rs @@ -14,6 +14,44 @@ pub trait AggregatorPadExtManual: IsA + 'static { from_glib_none(&ptr.segment as *const gst::ffi::GstSegment) } } + + #[cfg(feature = "v1_28")] + #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))] + #[doc(alias = "current-level-time")] + fn current_level_time(&self) -> Option { + ObjectExt::property(self.as_ref(), "current-level-time") + } + + #[cfg(feature = "v1_28")] + #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))] + #[doc(alias = "current-level-time")] + fn connect_current_level_time_notify( + &self, + f: F, + ) -> glib::SignalHandlerId { + unsafe extern "C" fn notify_current_level_time_trampoline< + P: IsA, + F: Fn(&P) + Send + Sync + 'static, + >( + this: *mut ffi::GstAggregatorPad, + _param_spec: glib::ffi::gpointer, + f: glib::ffi::gpointer, + ) { + let f: &F = &*(f as *const F); + f(AggregatorPad::from_glib_borrow(this).unsafe_cast_ref()) + } + unsafe { + let f: Box = Box::new(f); + glib::signal::connect_raw( + self.as_ptr() as *mut _, + c"notify::current-level-time".as_ptr() as *const _, + Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>( + notify_current_level_time_trampoline:: as *const (), + )), + Box::into_raw(f), + ) + } + } } impl> AggregatorPadExtManual for O {}