use crate::{VulkanCommandPool, VulkanDevice, ffi};
use glib::{prelude::*, translate::*};
glib::wrapper! {
#[doc(alias = "GstVulkanQueue")]
pub struct VulkanQueue(Object<ffi::GstVulkanQueue, ffi::GstVulkanQueueClass>) @extends gst::Object;
match fn {
type_ => || ffi::gst_vulkan_queue_get_type(),
}
}
impl VulkanQueue {
pub const NONE: Option<&'static VulkanQueue> = None;
#[doc(alias = "gst_vulkan_queue_handle_context_query")]
pub fn handle_context_query(
element: &impl IsA<gst::Element>,
query: &gst::Query,
queue: Option<&impl IsA<VulkanQueue>>,
) -> bool {
assert_initialized_main_thread!();
unsafe {
from_glib(ffi::gst_vulkan_queue_handle_context_query(
element.as_ref().to_glib_none().0,
query.to_glib_none().0,
queue.map(|p| p.as_ref()).to_glib_none().0,
))
}
}
}
unsafe impl Send for VulkanQueue {}
unsafe impl Sync for VulkanQueue {}
pub trait VulkanQueueExt: IsA<VulkanQueue> + 'static {
#[doc(alias = "gst_vulkan_queue_create_command_pool")]
fn create_command_pool(&self) -> Result<VulkanCommandPool, glib::Error> {
unsafe {
let mut error = std::ptr::null_mut();
let ret = ffi::gst_vulkan_queue_create_command_pool(
self.as_ref().to_glib_none().0,
&mut error,
);
if error.is_null() {
Ok(from_glib_full(ret))
} else {
Err(from_glib_full(error))
}
}
}
#[doc(alias = "gst_vulkan_queue_get_device")]
#[doc(alias = "get_device")]
fn device(&self) -> Option<VulkanDevice> {
unsafe {
from_glib_full(ffi::gst_vulkan_queue_get_device(
self.as_ref().to_glib_none().0,
))
}
}
}
impl<O: IsA<VulkanQueue>> VulkanQueueExt for O {}