gstreamer_editing_services/
formatter.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2use 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 {}