gstreamer/auto/
device_provider.rs1use crate::{ffi, Bus, Device, DeviceProviderFactory, Object};
7use glib::{
8 object::ObjectType as _,
9 prelude::*,
10 signal::{connect_raw, SignalHandlerId},
11 translate::*,
12};
13use std::boxed::Box as Box_;
14
15glib::wrapper! {
16 #[doc(alias = "GstDeviceProvider")]
17 pub struct DeviceProvider(Object<ffi::GstDeviceProvider, ffi::GstDeviceProviderClass>) @extends Object;
18
19 match fn {
20 type_ => || ffi::gst_device_provider_get_type(),
21 }
22}
23
24impl DeviceProvider {
25 pub const NONE: Option<&'static DeviceProvider> = None;
26}
27
28unsafe impl Send for DeviceProvider {}
29unsafe impl Sync for DeviceProvider {}
30
31mod sealed {
32 pub trait Sealed {}
33 impl<T: super::IsA<super::DeviceProvider>> Sealed for T {}
34}
35
36pub trait DeviceProviderExt: IsA<DeviceProvider> + sealed::Sealed + 'static {
37 #[doc(alias = "gst_device_provider_can_monitor")]
38 fn can_monitor(&self) -> bool {
39 unsafe {
40 from_glib(ffi::gst_device_provider_can_monitor(
41 self.as_ref().to_glib_none().0,
42 ))
43 }
44 }
45
46 #[doc(alias = "gst_device_provider_device_add")]
47 fn device_add(&self, device: &impl IsA<Device>) {
48 unsafe {
49 ffi::gst_device_provider_device_add(
50 self.as_ref().to_glib_none().0,
51 device.as_ref().to_glib_none().0,
52 );
53 }
54 }
55
56 #[cfg(feature = "v1_16")]
57 #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
58 #[doc(alias = "gst_device_provider_device_changed")]
59 fn device_changed(&self, device: &impl IsA<Device>, changed_device: &impl IsA<Device>) {
60 unsafe {
61 ffi::gst_device_provider_device_changed(
62 self.as_ref().to_glib_none().0,
63 device.as_ref().to_glib_none().0,
64 changed_device.as_ref().to_glib_none().0,
65 );
66 }
67 }
68
69 #[doc(alias = "gst_device_provider_device_remove")]
70 fn device_remove(&self, device: &impl IsA<Device>) {
71 unsafe {
72 ffi::gst_device_provider_device_remove(
73 self.as_ref().to_glib_none().0,
74 device.as_ref().to_glib_none().0,
75 );
76 }
77 }
78
79 #[doc(alias = "gst_device_provider_get_bus")]
80 #[doc(alias = "get_bus")]
81 fn bus(&self) -> Bus {
82 unsafe {
83 from_glib_full(ffi::gst_device_provider_get_bus(
84 self.as_ref().to_glib_none().0,
85 ))
86 }
87 }
88
89 #[doc(alias = "gst_device_provider_get_factory")]
90 #[doc(alias = "get_factory")]
91 fn factory(&self) -> Option<DeviceProviderFactory> {
92 unsafe {
93 from_glib_none(ffi::gst_device_provider_get_factory(
94 self.as_ref().to_glib_none().0,
95 ))
96 }
97 }
98
99 #[doc(alias = "gst_device_provider_get_hidden_providers")]
100 #[doc(alias = "get_hidden_providers")]
101 fn hidden_providers(&self) -> Vec<glib::GString> {
102 unsafe {
103 FromGlibPtrContainer::from_glib_full(ffi::gst_device_provider_get_hidden_providers(
104 self.as_ref().to_glib_none().0,
105 ))
106 }
107 }
108
109 #[doc(alias = "gst_device_provider_hide_provider")]
110 fn hide_provider(&self, name: &str) {
111 unsafe {
112 ffi::gst_device_provider_hide_provider(
113 self.as_ref().to_glib_none().0,
114 name.to_glib_none().0,
115 );
116 }
117 }
118
119 #[cfg(feature = "v1_20")]
120 #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
121 #[doc(alias = "gst_device_provider_is_started")]
122 fn is_started(&self) -> bool {
123 unsafe {
124 from_glib(ffi::gst_device_provider_is_started(
125 self.as_ref().to_glib_none().0,
126 ))
127 }
128 }
129
130 #[doc(alias = "gst_device_provider_start")]
131 fn start(&self) -> Result<(), glib::error::BoolError> {
132 unsafe {
133 glib::result_from_gboolean!(
134 ffi::gst_device_provider_start(self.as_ref().to_glib_none().0),
135 "Failed to start"
136 )
137 }
138 }
139
140 #[doc(alias = "gst_device_provider_stop")]
141 fn stop(&self) {
142 unsafe {
143 ffi::gst_device_provider_stop(self.as_ref().to_glib_none().0);
144 }
145 }
146
147 #[doc(alias = "gst_device_provider_unhide_provider")]
148 fn unhide_provider(&self, name: &str) {
149 unsafe {
150 ffi::gst_device_provider_unhide_provider(
151 self.as_ref().to_glib_none().0,
152 name.to_glib_none().0,
153 );
154 }
155 }
156
157 #[doc(alias = "provider-hidden")]
158 fn connect_provider_hidden<F: Fn(&Self, &str) + Send + Sync + 'static>(
159 &self,
160 f: F,
161 ) -> SignalHandlerId {
162 unsafe extern "C" fn provider_hidden_trampoline<
163 P: IsA<DeviceProvider>,
164 F: Fn(&P, &str) + Send + Sync + 'static,
165 >(
166 this: *mut ffi::GstDeviceProvider,
167 object: *mut std::ffi::c_char,
168 f: glib::ffi::gpointer,
169 ) {
170 let f: &F = &*(f as *const F);
171 f(
172 DeviceProvider::from_glib_borrow(this).unsafe_cast_ref(),
173 &glib::GString::from_glib_borrow(object),
174 )
175 }
176 unsafe {
177 let f: Box_<F> = Box_::new(f);
178 connect_raw(
179 self.as_ptr() as *mut _,
180 b"provider-hidden\0".as_ptr() as *const _,
181 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
182 provider_hidden_trampoline::<Self, F> as *const (),
183 )),
184 Box_::into_raw(f),
185 )
186 }
187 }
188
189 #[doc(alias = "provider-unhidden")]
190 fn connect_provider_unhidden<F: Fn(&Self, &str) + Send + Sync + 'static>(
191 &self,
192 f: F,
193 ) -> SignalHandlerId {
194 unsafe extern "C" fn provider_unhidden_trampoline<
195 P: IsA<DeviceProvider>,
196 F: Fn(&P, &str) + Send + Sync + 'static,
197 >(
198 this: *mut ffi::GstDeviceProvider,
199 object: *mut std::ffi::c_char,
200 f: glib::ffi::gpointer,
201 ) {
202 let f: &F = &*(f as *const F);
203 f(
204 DeviceProvider::from_glib_borrow(this).unsafe_cast_ref(),
205 &glib::GString::from_glib_borrow(object),
206 )
207 }
208 unsafe {
209 let f: Box_<F> = Box_::new(f);
210 connect_raw(
211 self.as_ptr() as *mut _,
212 b"provider-unhidden\0".as_ptr() as *const _,
213 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
214 provider_unhidden_trampoline::<Self, F> as *const (),
215 )),
216 Box_::into_raw(f),
217 )
218 }
219 }
220}
221
222impl<O: IsA<DeviceProvider>> DeviceProviderExt for O {}