diff --git a/gstreamer-analytics/src/tensor.rs b/gstreamer-analytics/src/tensor.rs index e3a45f8c1..c52a00d90 100644 --- a/gstreamer-analytics/src/tensor.rs +++ b/gstreamer-analytics/src/tensor.rs @@ -78,6 +78,27 @@ impl Tensor { pub fn dims_order(&self) -> TensorDimOrder { unsafe { from_glib(self.inner.dims_order) } } + + #[cfg(feature = "v1_28")] + #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))] + #[doc(alias = "gst_tensor_check_type")] + pub fn check_type( + &self, + order: crate::TensorDimOrder, + num_dims: usize, + data_type: crate::TensorDataType, + data: &gst::BufferRef, + ) -> bool { + unsafe { + from_glib(ffi::gst_tensor_check_type( + self.to_glib_none().0, + order.into_glib(), + num_dims, + data_type.into_glib(), + mut_override(data.as_ptr()), + )) + } + } } #[cfg(test)] diff --git a/gstreamer-analytics/src/tensor_meta.rs b/gstreamer-analytics/src/tensor_meta.rs index 02fad9fdb..7f775acb2 100644 --- a/gstreamer-analytics/src/tensor_meta.rs +++ b/gstreamer-analytics/src/tensor_meta.rs @@ -47,6 +47,37 @@ impl TensorMeta { unsafe fn as_mut_ptr(&self) -> *mut ffi::GstTensorMeta { mut_override(&self.0) } + + #[cfg(feature = "v1_28")] + #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))] + #[doc(alias = "gst_tensor_meta_get_typed_tensor")] + pub fn typed_tensor( + &self, + id: glib::Quark, + order: crate::TensorDimOrder, + num_dims: usize, + data_type: crate::TensorDataType, + data: &gst::BufferRef, + ) -> Option<&crate::Tensor> { + unsafe { + let res = ffi::gst_tensor_meta_get_typed_tensor( + self.as_mut_ptr(), + id.into_glib(), + order.into_glib(), + num_dims, + data_type.into_glib(), + mut_override(data.as_ptr()), + ); + if res.is_null() { + None + } else { + // FIXME: This is not ideal but otherwise we can't return a reference safely + self.as_slice() + .iter() + .find(|t| t.as_ptr() == res as *mut ffi::GstTensor) + } + } + } } unsafe impl MetaAPI for TensorMeta {