diff --git a/gstreamer/src/lib.rs b/gstreamer/src/lib.rs index 3c61c0e7d..1bd1dc406 100644 --- a/gstreamer/src/lib.rs +++ b/gstreamer/src/lib.rs @@ -104,7 +104,8 @@ pub mod meta; #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] pub use crate::meta::MetaSeqnum; pub use crate::meta::{ - Meta, MetaAPI, MetaRef, MetaRefMut, ParentBufferMeta, ProtectionMeta, ReferenceTimestampMeta, + Meta, MetaAPI, MetaAPIExt, MetaRef, MetaRefMut, ParentBufferMeta, ProtectionMeta, + ReferenceTimestampMeta, }; pub mod buffer; pub use crate::buffer::{ @@ -320,7 +321,7 @@ pub mod prelude { gobject::GObjectExtManualGst, memory::MemoryType, message::MessageErrorDomain, - meta::MetaAPI, + meta::{MetaAPI, MetaAPIExt}, miniobject::IsMiniObject, object::GstObjectExtManual, pad::PadExtManual, diff --git a/gstreamer/src/meta.rs b/gstreamer/src/meta.rs index 96f295804..e42f42453 100644 --- a/gstreamer/src/meta.rs +++ b/gstreamer/src/meta.rs @@ -14,7 +14,17 @@ pub unsafe trait MetaAPI: Sync + Send + Sized { #[doc(alias = "get_meta_api")] fn meta_api() -> glib::Type; +} +pub trait MetaAPIExt: MetaAPI { + unsafe fn from_ptr(buffer: &BufferRef, ptr: *const Self::GstType) -> MetaRef; + unsafe fn from_mut_ptr( + buffer: &mut BufferRef, + ptr: *mut Self::GstType, + ) -> MetaRefMut; +} + +impl MetaAPIExt for A { #[inline] unsafe fn from_ptr(buffer: &BufferRef, ptr: *const Self::GstType) -> MetaRef { debug_assert!(!ptr.is_null());