gstreamer-rs/gstreamer/src/parse_context.rs
Marijn Suijten 3c610e12e5 gst,base,sdp: Use specific copy/free or (un)ref instead of g_boxed
SDPMessage, FlowCombiner and ParseContext have specific functions
available to perform copying, freeing and (un)ref'ing. Calling them
directly on versions where they are supported prevents us from going
through GType machinery and locks that end up the same functions in the
end.
2021-01-08 10:41:06 +01:00

46 lines
1.2 KiB
Rust

// Take a look at the license at the top of the repository in the LICENSE file.
use glib::translate::*;
glib::wrapper! {
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ParseContext(Boxed<ffi::GstParseContext>);
match fn {
copy => |ptr| {
cfg_if::cfg_if! {
if #[cfg(feature = "v1_12_1")] {
ffi::gst_parse_context_copy(ptr)
} else {
glib::gobject_ffi::g_boxed_copy(ffi::gst_parse_context_get_type(), ptr as *mut _) as *mut ffi::GstParseContext
}
}
},
free => |ptr| ffi::gst_parse_context_free(ptr),
get_type => || ffi::gst_parse_context_get_type(),
}
}
unsafe impl Send for ParseContext {}
unsafe impl Sync for ParseContext {}
impl ParseContext {
pub fn new() -> Self {
unsafe { from_glib_full(ffi::gst_parse_context_new()) }
}
pub fn get_missing_elements(&self) -> Vec<String> {
unsafe {
FromGlibPtrContainer::from_glib_full(ffi::gst_parse_context_get_missing_elements(
mut_override(self.to_glib_none().0),
))
}
}
}
impl Default for ParseContext {
fn default() -> Self {
Self::new()
}
}