From 1fb531bba2f3376f03c1dd49244f3cf05edee096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 21 Nov 2022 12:39:54 +0200 Subject: [PATCH] base: Add manual bindings for new 1.22 typefind helper API Part-of: --- gstreamer-base/Gir.toml | 23 ++++++++++--- gstreamer-base/src/functions.rs | 60 +++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 4 deletions(-) diff --git a/gstreamer-base/Gir.toml b/gstreamer-base/Gir.toml index a044bd761..a75e7a64b 100644 --- a/gstreamer-base/Gir.toml +++ b/gstreamer-base/Gir.toml @@ -107,22 +107,37 @@ status = "generate" [[object.function]] name = "type_find_helper_for_data" # broken return value - ignore = true + manual = true [[object.function]] name = "type_find_helper_for_data_with_extension" # broken return value - ignore = true + manual = true [[object.function]] name = "type_find_helper_for_buffer" # broken return value - ignore = true + manual = true [[object.function]] name = "type_find_helper_for_buffer_with_extension" # broken return value - ignore = true + manual = true + + [[object.function]] + name = "type_find_helper_for_buffer_with_caps" + # broken return value + manual = true + + [[object.function]] + name = "type_find_helper_for_data_with_caps" + # broken return value + manual = true + + [[object.function]] + name = "type_find_list_factories_for_caps" + # broken return value + manual = true [[object.function]] name = "type_find_helper" diff --git a/gstreamer-base/src/functions.rs b/gstreamer-base/src/functions.rs index 7f5ddcec9..751c6eb6a 100644 --- a/gstreamer-base/src/functions.rs +++ b/gstreamer-base/src/functions.rs @@ -101,3 +101,63 @@ pub fn type_find_helper_for_buffer_with_extension>( } } } + +#[cfg(any(feature = "v1_22", feature = "dox"))] +#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_22")))] +#[doc(alias = "gst_type_find_helper_for_buffer_with_caps")] +pub fn type_find_helper_for_buffer_with_caps( + obj: Option<&impl IsA>, + buf: &gst::BufferRef, + caps: &gst::CapsRef, +) -> (Option, gst::TypeFindProbability) { + assert_initialized_main_thread!(); + unsafe { + let mut prob = mem::MaybeUninit::uninit(); + let ret = from_glib_full(ffi::gst_type_find_helper_for_buffer_with_caps( + obj.map(|p| p.as_ref()).to_glib_none().0, + mut_override(buf.as_ptr()), + mut_override(caps.as_ptr()), + prob.as_mut_ptr(), + )); + (ret, from_glib(prob.assume_init())) + } +} + +#[cfg(any(feature = "v1_22", feature = "dox"))] +#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_22")))] +#[doc(alias = "gst_type_find_helper_for_data_with_caps")] +pub fn type_find_helper_for_data_with_caps( + obj: Option<&impl IsA>, + data: &[u8], + caps: &gst::CapsRef, +) -> (Option, gst::TypeFindProbability) { + assert_initialized_main_thread!(); + let size = data.len() as _; + unsafe { + let mut prob = mem::MaybeUninit::uninit(); + let ret = from_glib_full(ffi::gst_type_find_helper_for_data_with_caps( + obj.map(|p| p.as_ref()).to_glib_none().0, + data.to_glib_none().0, + size, + mut_override(caps.as_ptr()), + prob.as_mut_ptr(), + )); + (ret, from_glib(prob.assume_init())) + } +} + +#[cfg(any(feature = "v1_22", feature = "dox"))] +#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_22")))] +#[doc(alias = "gst_type_find_list_factories_for_caps")] +pub fn type_find_list_factories_for_caps( + obj: Option<&impl IsA>, + caps: &gst::CapsRef, +) -> glib::List { + assert_initialized_main_thread!(); + unsafe { + glib::collections::List::from_glib_full(ffi::gst_type_find_list_factories_for_caps( + obj.map(|p| p.as_ref()).to_glib_none().0, + mut_override(caps.as_ptr()), + )) + } +}