gstreamer/
device_provider.rs1use std::ffi::CStr;
4
5use glib::{prelude::*, translate::*};
6
7use crate::{ffi, DeviceProvider, Plugin, Rank};
8
9impl DeviceProvider {
10 #[doc(alias = "gst_device_provider_register")]
26 pub fn register(
27 plugin: Option<&Plugin>,
28 name: &str,
29 rank: Rank,
30 type_: glib::types::Type,
31 ) -> Result<(), glib::error::BoolError> {
32 skip_assert_initialized!();
33 unsafe {
34 glib::result_from_gboolean!(
35 ffi::gst_device_provider_register(
36 plugin.to_glib_none().0,
37 name.to_glib_none().0,
38 rank.into_glib() as u32,
39 type_.into_glib()
40 ),
41 "Failed to register device provider factory"
42 )
43 }
44 }
45}
46
47mod sealed {
48 pub trait Sealed {}
49 impl<T: super::IsA<super::DeviceProvider>> Sealed for T {}
50}
51
52pub trait DeviceProviderExtManual: sealed::Sealed + IsA<DeviceProvider> + 'static {
53 #[doc(alias = "get_metadata")]
61 #[doc(alias = "gst_device_provider_class_get_metadata")]
62 fn metadata<'a>(&self, key: &str) -> Option<&'a str> {
63 unsafe {
64 self.unsafe_cast_ref::<DeviceProvider>()
65 .class()
66 .metadata(key)
67 }
68 }
69
70 #[doc(alias = "gst_device_provider_get_devices")]
81 #[doc(alias = "get_devices")]
82 fn devices(&self) -> glib::List<crate::Device> {
83 unsafe {
84 FromGlibPtrContainer::from_glib_full(ffi::gst_device_provider_get_devices(
85 self.as_ref().to_glib_none().0,
86 ))
87 }
88 }
89}
90
91impl<O: IsA<DeviceProvider>> DeviceProviderExtManual for O {}
92
93pub unsafe trait DeviceProviderClassExt {
94 #[doc(alias = "get_metadata")]
102 #[doc(alias = "gst_device_provider_class_get_metadata")]
103 fn metadata<'a>(&self, key: &str) -> Option<&'a str> {
104 unsafe {
105 let klass = self as *const _ as *const ffi::GstDeviceProviderClass;
106
107 let ptr = ffi::gst_device_provider_class_get_metadata(
108 mut_override(klass),
109 key.to_glib_none().0,
110 );
111
112 if ptr.is_null() {
113 None
114 } else {
115 Some(CStr::from_ptr(ptr).to_str().unwrap())
116 }
117 }
118 }
119}
120
121unsafe impl<T: IsA<DeviceProvider> + glib::object::IsClass> DeviceProviderClassExt
122 for glib::object::Class<T>
123{
124}