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