From 67af5ac569efdeff077a4e003a804aef5d75aaa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sun, 17 Oct 2021 14:39:38 +0300 Subject: [PATCH] gstreamer: Add support for 1.18 instant rate request message --- gstreamer/src/message.rs | 63 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/gstreamer/src/message.rs b/gstreamer/src/message.rs index a4687a6e5..a4196d397 100644 --- a/gstreamer/src/message.rs +++ b/gstreamer/src/message.rs @@ -121,6 +121,10 @@ impl MessageRef { } #[cfg(any(feature = "v1_16", feature = "dox"))] ffi::GST_MESSAGE_DEVICE_CHANGED => MessageView::DeviceChanged(DeviceChanged(self)), + #[cfg(any(feature = "v1_18", feature = "dox"))] + ffi::GST_MESSAGE_INSTANT_RATE_REQUEST => { + MessageView::InstantRateRequest(InstantRateRequest(self)) + } _ => MessageView::Other, } } @@ -222,6 +226,9 @@ pub enum MessageView<'a> { #[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] DeviceChanged(DeviceChanged<'a>), + #[cfg(any(feature = "v1_18", feature = "dox"))] + #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] + InstantRateRequest(InstantRateRequest<'a>), Other, } @@ -1615,6 +1622,39 @@ impl<'a> DeviceChanged<'a> { } } +#[cfg(any(feature = "v1_18", feature = "dox"))] +#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] +declare_concrete_message!(InstantRateRequest); +#[cfg(any(feature = "v1_18", feature = "dox"))] +#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] +impl<'a> InstantRateRequest<'a> { + #[allow(clippy::new_ret_no_self)] + pub fn new(rate_multiplier: f64) -> Message { + skip_assert_initialized!(); + Self::builder(rate_multiplier).build() + } + + pub fn builder(rate_multiplier: f64) -> InstantRateRequestBuilder<'a> { + assert_initialized_main_thread!(); + InstantRateRequestBuilder::new(rate_multiplier) + } + + #[doc(alias = "parse_instant_rate_request")] + #[doc(alias = "gst_message_parse_instant_rate_request")] + pub fn rate_multiplier(&self) -> f64 { + unsafe { + let mut rate_multiplier = mem::MaybeUninit::uninit(); + + ffi::gst_message_parse_instant_rate_request( + self.as_mut_ptr(), + rate_multiplier.as_mut_ptr(), + ); + + rate_multiplier.assume_init() + } + } +} + struct MessageBuilder<'a> { src: Option, seqnum: Option, @@ -2912,6 +2952,29 @@ impl<'a> DeviceChangedBuilder<'a> { )); } +#[cfg(any(feature = "v1_18", feature = "dox"))] +#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] +pub struct InstantRateRequestBuilder<'a> { + builder: MessageBuilder<'a>, + rate_multiplier: f64, +} + +#[cfg(any(feature = "v1_18", feature = "dox"))] +#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] +impl<'a> InstantRateRequestBuilder<'a> { + fn new(rate_multiplier: f64) -> Self { + skip_assert_initialized!(); + Self { + builder: MessageBuilder::new(), + rate_multiplier, + } + } + + message_builder_generic_impl!( + |s: &mut Self, src| ffi::gst_message_new_instant_rate_request(src, s.rate_multiplier,) + ); +} + #[cfg(test)] mod tests { use super::*;