gstreamer_editing_services/
formatter.rs
1use crate::{ffi, prelude::*, Formatter};
3use gst::glib::translate::*;
4
5pub trait FormatterExtManual: IsA<Formatter> + 'static {
6 fn can_load_uri(&self, uri: &str) -> Result<(), glib::Error> {
7 unsafe {
8 let klass = self.class_of::<crate::Formatter>().unwrap();
9
10 let f = klass.as_ref().can_load_uri.ok_or_else(|| {
11 glib::Error::new(gst::CoreError::Failed, "No `can_load_uri` method defined")
12 })?;
13
14 let mut err = std::ptr::null_mut();
15 let res = f(
16 self.as_ref().to_glib_none().0,
17 uri.to_glib_none().0,
18 &mut err,
19 );
20
21 if res == glib::ffi::GTRUE {
22 Ok(())
23 } else {
24 Err(from_glib_full(err))
25 }
26 }
27 }
28
29 #[doc(alias = "ges_formatter_class_register_metas")]
30 fn register(
31 type_: glib::types::Type,
32 name: &str,
33 description: Option<&str>,
34 extensions: Option<&str>,
35 caps: Option<&str>,
36 version: f64,
37 rank: gst::Rank,
38 ) {
39 skip_assert_initialized!();
40
41 unsafe {
42 let klass = mut_override(
43 gst::glib::Class::<crate::Formatter>::from_type(type_)
44 .unwrap()
45 .as_ref(),
46 );
47
48 ffi::ges_formatter_class_register_metas(
49 klass,
50 name.to_glib_none().0,
51 description.to_glib_none().0,
52 extensions.to_glib_none().0,
53 caps.to_glib_none().0,
54 version,
55 rank.into_glib(),
56 )
57 }
58 }
59}
60
61impl<O: IsA<Formatter>> FormatterExtManual for O {}