gstreamer_vulkan/auto/
vulkan_fence.rs1use crate::{ffi, VulkanDevice};
7use glib::{prelude::*, translate::*};
8
9glib::wrapper! {
10    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
11    pub struct VulkanFence(Boxed<ffi::GstVulkanFence>);
12
13    match fn {
14        copy => |ptr| glib::gobject_ffi::g_boxed_copy(ffi::gst_vulkan_fence_get_type(), ptr as *mut _) as *mut ffi::GstVulkanFence,
15        free => |ptr| glib::gobject_ffi::g_boxed_free(ffi::gst_vulkan_fence_get_type(), ptr as *mut _),
16        type_ => || ffi::gst_vulkan_fence_get_type(),
17    }
18}
19
20impl VulkanFence {
21    #[doc(alias = "gst_vulkan_fence_new")]
28    pub fn new(device: &impl IsA<VulkanDevice>) -> Result<VulkanFence, glib::Error> {
29        skip_assert_initialized!();
30        unsafe {
31            let mut error = std::ptr::null_mut();
32            let ret = ffi::gst_vulkan_fence_new(device.as_ref().to_glib_none().0, &mut error);
33            if error.is_null() {
34                Ok(from_glib_full(ret))
35            } else {
36                Err(from_glib_full(error))
37            }
38        }
39    }
40
41    #[doc(alias = "gst_vulkan_fence_new_always_signalled")]
46    pub fn new_always_signalled(device: &impl IsA<VulkanDevice>) -> VulkanFence {
47        skip_assert_initialized!();
48        unsafe {
49            from_glib_full(ffi::gst_vulkan_fence_new_always_signalled(
50                device.as_ref().to_glib_none().0,
51            ))
52        }
53    }
54
55    #[doc(alias = "gst_vulkan_fence_is_signaled")]
60    pub fn is_signaled(&mut self) -> bool {
61        unsafe { from_glib(ffi::gst_vulkan_fence_is_signaled(self.to_glib_none_mut().0)) }
62    }
63
64    #[doc(alias = "gst_vulkan_fence_reset")]
65    pub fn reset(&mut self) {
66        unsafe {
67            ffi::gst_vulkan_fence_reset(self.to_glib_none_mut().0);
68        }
69    }
70}
71
72unsafe impl Send for VulkanFence {}
73unsafe impl Sync for VulkanFence {}