Skip to main content

gstreamer_vulkan/auto/
vulkan_instance.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
4// DO NOT EDIT
5
6use crate::{VulkanDevice, ffi};
7#[cfg(feature = "v1_26")]
8#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
9use glib::object::ObjectType as _;
10use glib::{
11    prelude::*,
12    signal::{SignalHandlerId, connect_raw},
13    translate::*,
14};
15use std::boxed::Box as Box_;
16
17glib::wrapper! {
18    #[doc(alias = "GstVulkanInstance")]
19    pub struct VulkanInstance(Object<ffi::GstVulkanInstance, ffi::GstVulkanInstanceClass>) @extends gst::Object;
20
21    match fn {
22        type_ => || ffi::gst_vulkan_instance_get_type(),
23    }
24}
25
26impl VulkanInstance {
27    pub const NONE: Option<&'static VulkanInstance> = None;
28
29    #[doc(alias = "gst_vulkan_instance_new")]
30    pub fn new() -> VulkanInstance {
31        assert_initialized_main_thread!();
32        unsafe { from_glib_full(ffi::gst_vulkan_instance_new()) }
33    }
34
35    #[doc(alias = "gst_vulkan_instance_handle_context_query")]
36    pub fn handle_context_query(
37        element: &impl IsA<gst::Element>,
38        query: &gst::Query,
39        instance: Option<&impl IsA<VulkanInstance>>,
40    ) -> bool {
41        assert_initialized_main_thread!();
42        unsafe {
43            from_glib(ffi::gst_vulkan_instance_handle_context_query(
44                element.as_ref().to_glib_none().0,
45                query.to_glib_none().0,
46                instance.map(|p| p.as_ref()).to_glib_none().0,
47            ))
48        }
49    }
50
51    //#[doc(alias = "gst_vulkan_instance_run_context_query")]
52    //pub fn run_context_query(element: &impl IsA<gst::Element>, instance: impl IsA<VulkanInstance>) -> bool {
53    //    unsafe { TODO: call ffi:gst_vulkan_instance_run_context_query() }
54    //}
55}
56
57impl Default for VulkanInstance {
58    fn default() -> Self {
59        Self::new()
60    }
61}
62
63unsafe impl Send for VulkanInstance {}
64unsafe impl Sync for VulkanInstance {}
65
66pub trait VulkanInstanceExt: IsA<VulkanInstance> + 'static {
67    #[cfg(feature = "v1_26")]
68    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
69    #[doc(alias = "gst_vulkan_instance_check_api_version")]
70    fn check_api_version(&self, major: u32, minor: u32, patch: u32) -> bool {
71        unsafe {
72            from_glib(ffi::gst_vulkan_instance_check_api_version(
73                self.as_ref().to_glib_none().0,
74                major,
75                minor,
76                patch,
77            ))
78        }
79    }
80
81    #[doc(alias = "gst_vulkan_instance_check_version")]
82    fn check_version(&self, major: u32, minor: u32, patch: u32) -> bool {
83        unsafe {
84            from_glib(ffi::gst_vulkan_instance_check_version(
85                self.as_ref().to_glib_none().0,
86                major,
87                minor,
88                patch,
89            ))
90        }
91    }
92
93    #[doc(alias = "gst_vulkan_instance_create_device")]
94    fn create_device(&self) -> Result<VulkanDevice, glib::Error> {
95        unsafe {
96            let mut error = std::ptr::null_mut();
97            let ret =
98                ffi::gst_vulkan_instance_create_device(self.as_ref().to_glib_none().0, &mut error);
99            if error.is_null() {
100                Ok(from_glib_full(ret))
101            } else {
102                Err(from_glib_full(error))
103            }
104        }
105    }
106
107    #[cfg(feature = "v1_26")]
108    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
109    #[doc(alias = "gst_vulkan_instance_create_device_with_index")]
110    fn create_device_with_index(&self, device_index: u32) -> Result<VulkanDevice, glib::Error> {
111        unsafe {
112            let mut error = std::ptr::null_mut();
113            let ret = ffi::gst_vulkan_instance_create_device_with_index(
114                self.as_ref().to_glib_none().0,
115                device_index,
116                &mut error,
117            );
118            if error.is_null() {
119                Ok(from_glib_full(ret))
120            } else {
121                Err(from_glib_full(error))
122            }
123        }
124    }
125
126    #[doc(alias = "gst_vulkan_instance_disable_extension")]
127    fn disable_extension(&self, name: &str) -> bool {
128        unsafe {
129            from_glib(ffi::gst_vulkan_instance_disable_extension(
130                self.as_ref().to_glib_none().0,
131                name.to_glib_none().0,
132            ))
133        }
134    }
135
136    #[doc(alias = "gst_vulkan_instance_enable_extension")]
137    fn enable_extension(&self, name: &str) -> bool {
138        unsafe {
139            from_glib(ffi::gst_vulkan_instance_enable_extension(
140                self.as_ref().to_glib_none().0,
141                name.to_glib_none().0,
142            ))
143        }
144    }
145
146    #[doc(alias = "gst_vulkan_instance_enable_layer")]
147    fn enable_layer(&self, name: &str) -> bool {
148        unsafe {
149            from_glib(ffi::gst_vulkan_instance_enable_layer(
150                self.as_ref().to_glib_none().0,
151                name.to_glib_none().0,
152            ))
153        }
154    }
155
156    #[doc(alias = "gst_vulkan_instance_fill_info")]
157    fn fill_info(&self) -> Result<(), glib::Error> {
158        unsafe {
159            let mut error = std::ptr::null_mut();
160            let is_ok =
161                ffi::gst_vulkan_instance_fill_info(self.as_ref().to_glib_none().0, &mut error);
162            debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
163            if error.is_null() {
164                Ok(())
165            } else {
166                Err(from_glib_full(error))
167            }
168        }
169    }
170
171    #[cfg(feature = "v1_26")]
172    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
173    #[doc(alias = "gst_vulkan_instance_get_api_version")]
174    #[doc(alias = "get_api_version")]
175    fn api_version(&self) -> (u32, u32, u32) {
176        unsafe {
177            let mut major = std::mem::MaybeUninit::uninit();
178            let mut minor = std::mem::MaybeUninit::uninit();
179            let mut patch = std::mem::MaybeUninit::uninit();
180            ffi::gst_vulkan_instance_get_api_version(
181                self.as_ref().to_glib_none().0,
182                major.as_mut_ptr(),
183                minor.as_mut_ptr(),
184                patch.as_mut_ptr(),
185            );
186            (
187                major.assume_init(),
188                minor.assume_init(),
189                patch.assume_init(),
190            )
191        }
192    }
193
194    #[doc(alias = "gst_vulkan_instance_get_extension_info")]
195    #[doc(alias = "get_extension_info")]
196    fn extension_info(&self, name: &str) -> Option<u32> {
197        unsafe {
198            let mut spec_version = std::mem::MaybeUninit::uninit();
199            let ret = from_glib(ffi::gst_vulkan_instance_get_extension_info(
200                self.as_ref().to_glib_none().0,
201                name.to_glib_none().0,
202                spec_version.as_mut_ptr(),
203            ));
204            if ret {
205                Some(spec_version.assume_init())
206            } else {
207                None
208            }
209        }
210    }
211
212    #[doc(alias = "gst_vulkan_instance_get_layer_info")]
213    #[doc(alias = "get_layer_info")]
214    fn layer_info(&self, name: &str) -> Option<(Option<glib::GString>, u32, u32)> {
215        unsafe {
216            let mut description = std::ptr::null_mut();
217            let mut spec_version = std::mem::MaybeUninit::uninit();
218            let mut implementation_version = std::mem::MaybeUninit::uninit();
219            let ret = from_glib(ffi::gst_vulkan_instance_get_layer_info(
220                self.as_ref().to_glib_none().0,
221                name.to_glib_none().0,
222                &mut description,
223                spec_version.as_mut_ptr(),
224                implementation_version.as_mut_ptr(),
225            ));
226            if ret {
227                Some((
228                    from_glib_full(description),
229                    spec_version.assume_init(),
230                    implementation_version.assume_init(),
231                ))
232            } else {
233                None
234            }
235        }
236    }
237
238    //#[doc(alias = "gst_vulkan_instance_get_proc_address")]
239    //#[doc(alias = "get_proc_address")]
240    //fn proc_address(&self, name: &str) -> /*Unimplemented*/Option<Basic: Pointer> {
241    //    unsafe { TODO: call ffi:gst_vulkan_instance_get_proc_address() }
242    //}
243
244    #[doc(alias = "gst_vulkan_instance_get_version")]
245    #[doc(alias = "get_version")]
246    fn version(&self) -> (u32, u32, u32) {
247        unsafe {
248            let mut major = std::mem::MaybeUninit::uninit();
249            let mut minor = std::mem::MaybeUninit::uninit();
250            let mut patch = std::mem::MaybeUninit::uninit();
251            ffi::gst_vulkan_instance_get_version(
252                self.as_ref().to_glib_none().0,
253                major.as_mut_ptr(),
254                minor.as_mut_ptr(),
255                patch.as_mut_ptr(),
256            );
257            (
258                major.assume_init(),
259                minor.assume_init(),
260                patch.assume_init(),
261            )
262        }
263    }
264
265    #[doc(alias = "gst_vulkan_instance_is_extension_enabled")]
266    fn is_extension_enabled(&self, name: &str) -> bool {
267        unsafe {
268            from_glib(ffi::gst_vulkan_instance_is_extension_enabled(
269                self.as_ref().to_glib_none().0,
270                name.to_glib_none().0,
271            ))
272        }
273    }
274
275    #[doc(alias = "gst_vulkan_instance_is_layer_enabled")]
276    fn is_layer_enabled(&self, name: &str) -> bool {
277        unsafe {
278            from_glib(ffi::gst_vulkan_instance_is_layer_enabled(
279                self.as_ref().to_glib_none().0,
280                name.to_glib_none().0,
281            ))
282        }
283    }
284
285    #[doc(alias = "gst_vulkan_instance_open")]
286    fn open(&self) -> Result<(), glib::Error> {
287        unsafe {
288            let mut error = std::ptr::null_mut();
289            let is_ok = ffi::gst_vulkan_instance_open(self.as_ref().to_glib_none().0, &mut error);
290            debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
291            if error.is_null() {
292                Ok(())
293            } else {
294                Err(from_glib_full(error))
295            }
296        }
297    }
298
299    #[doc(alias = "requested-api-major")]
300    fn requested_api_major(&self) -> u32 {
301        ObjectExt::property(self.as_ref(), "requested-api-major")
302    }
303
304    #[doc(alias = "requested-api-major")]
305    fn set_requested_api_major(&self, requested_api_major: u32) {
306        ObjectExt::set_property(self.as_ref(), "requested-api-major", requested_api_major)
307    }
308
309    #[doc(alias = "requested-api-minor")]
310    fn requested_api_minor(&self) -> u32 {
311        ObjectExt::property(self.as_ref(), "requested-api-minor")
312    }
313
314    #[doc(alias = "requested-api-minor")]
315    fn set_requested_api_minor(&self, requested_api_minor: u32) {
316        ObjectExt::set_property(self.as_ref(), "requested-api-minor", requested_api_minor)
317    }
318
319    #[cfg(feature = "v1_26")]
320    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
321    #[doc(alias = "create-device")]
322    fn connect_create_device<F: Fn(&Self, u32) -> VulkanDevice + Send + Sync + 'static>(
323        &self,
324        f: F,
325    ) -> SignalHandlerId {
326        unsafe extern "C" fn create_device_trampoline<
327            P: IsA<VulkanInstance>,
328            F: Fn(&P, u32) -> VulkanDevice + Send + Sync + 'static,
329        >(
330            this: *mut ffi::GstVulkanInstance,
331            device_index: std::ffi::c_uint,
332            f: glib::ffi::gpointer,
333        ) -> *mut ffi::GstVulkanDevice {
334            unsafe {
335                let f: &F = &*(f as *const F);
336                f(
337                    VulkanInstance::from_glib_borrow(this).unsafe_cast_ref(),
338                    device_index,
339                )
340                .to_glib_full()
341            }
342        }
343        unsafe {
344            let f: Box_<F> = Box_::new(f);
345            connect_raw(
346                self.as_ptr() as *mut _,
347                c"create-device".as_ptr(),
348                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
349                    create_device_trampoline::<Self, F> as *const (),
350                )),
351                Box_::into_raw(f),
352            )
353        }
354    }
355
356    #[doc(alias = "requested-api-major")]
357    fn connect_requested_api_major_notify<F: Fn(&Self) + Send + Sync + 'static>(
358        &self,
359        f: F,
360    ) -> SignalHandlerId {
361        unsafe extern "C" fn notify_requested_api_major_trampoline<
362            P: IsA<VulkanInstance>,
363            F: Fn(&P) + Send + Sync + 'static,
364        >(
365            this: *mut ffi::GstVulkanInstance,
366            _param_spec: glib::ffi::gpointer,
367            f: glib::ffi::gpointer,
368        ) {
369            unsafe {
370                let f: &F = &*(f as *const F);
371                f(VulkanInstance::from_glib_borrow(this).unsafe_cast_ref())
372            }
373        }
374        unsafe {
375            let f: Box_<F> = Box_::new(f);
376            connect_raw(
377                self.as_ptr() as *mut _,
378                c"notify::requested-api-major".as_ptr(),
379                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
380                    notify_requested_api_major_trampoline::<Self, F> as *const (),
381                )),
382                Box_::into_raw(f),
383            )
384        }
385    }
386
387    #[doc(alias = "requested-api-minor")]
388    fn connect_requested_api_minor_notify<F: Fn(&Self) + Send + Sync + 'static>(
389        &self,
390        f: F,
391    ) -> SignalHandlerId {
392        unsafe extern "C" fn notify_requested_api_minor_trampoline<
393            P: IsA<VulkanInstance>,
394            F: Fn(&P) + Send + Sync + 'static,
395        >(
396            this: *mut ffi::GstVulkanInstance,
397            _param_spec: glib::ffi::gpointer,
398            f: glib::ffi::gpointer,
399        ) {
400            unsafe {
401                let f: &F = &*(f as *const F);
402                f(VulkanInstance::from_glib_borrow(this).unsafe_cast_ref())
403            }
404        }
405        unsafe {
406            let f: Box_<F> = Box_::new(f);
407            connect_raw(
408                self.as_ptr() as *mut _,
409                c"notify::requested-api-minor".as_ptr(),
410                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
411                    notify_requested_api_minor_trampoline::<Self, F> as *const (),
412                )),
413                Box_::into_raw(f),
414            )
415        }
416    }
417}
418
419impl<O: IsA<VulkanInstance>> VulkanInstanceExt for O {}