Skip to main content

gstreamer_vulkan_sys/
lib.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
6#![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
7#![allow(
8    clippy::approx_constant,
9    clippy::type_complexity,
10    clippy::unreadable_literal,
11    clippy::upper_case_acronyms
12)]
13#![cfg_attr(docsrs, feature(doc_cfg))]
14
15use glib_sys as glib;
16use gstreamer_base_sys as gst_base;
17use gstreamer_sys as gst;
18use gstreamer_video_sys as gst_video;
19
20mod manual;
21
22pub use manual::*;
23
24#[allow(unused_imports)]
25use libc::{FILE, intptr_t, off_t, size_t, ssize_t, time_t, uintptr_t};
26#[cfg(unix)]
27#[allow(unused_imports)]
28use libc::{dev_t, gid_t, pid_t, socklen_t, uid_t};
29#[allow(unused_imports)]
30use std::ffi::{
31    c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort, c_void,
32};
33
34#[allow(unused_imports)]
35use glib::{GType, gboolean, gconstpointer, gpointer};
36
37// Aliases
38pub type GstVulkanHandleTypedef = u64;
39
40// Enums
41pub type GstVulkanBarrierFlags = c_int;
42pub const GST_VULKAN_BARRIER_FLAG_NONE: GstVulkanBarrierFlags = 0;
43
44pub type GstVulkanBarrierType = c_int;
45pub const GST_VULKAN_BARRIER_NONE: GstVulkanBarrierType = 0;
46pub const GST_VULKAN_BARRIER_TYPE_MEMORY: GstVulkanBarrierType = 1;
47pub const GST_VULKAN_BARRIER_TYPE_BUFFER: GstVulkanBarrierType = 2;
48pub const GST_VULKAN_BARRIER_TYPE_IMAGE: GstVulkanBarrierType = 3;
49
50pub type GstVulkanError = c_int;
51pub const GST_VULKAN_FAILED: GstVulkanError = 0;
52
53pub type GstVulkanFormatScaling = c_int;
54pub const GST_VULKAN_FORMAT_SCALING_UNORM: GstVulkanFormatScaling = 1;
55pub const GST_VULKAN_FORMAT_SCALING_SNORM: GstVulkanFormatScaling = 2;
56pub const GST_VULKAN_FORMAT_SCALING_USCALED: GstVulkanFormatScaling = 3;
57pub const GST_VULKAN_FORMAT_SCALING_SSCALED: GstVulkanFormatScaling = 4;
58pub const GST_VULKAN_FORMAT_SCALING_UINT: GstVulkanFormatScaling = 5;
59pub const GST_VULKAN_FORMAT_SCALING_SINT: GstVulkanFormatScaling = 6;
60pub const GST_VULKAN_FORMAT_SCALING_SRGB: GstVulkanFormatScaling = 7;
61
62pub type GstVulkanHandleType = c_int;
63pub const GST_VULKAN_HANDLE_TYPE_DESCRIPTOR_SET_LAYOUT: GstVulkanHandleType = 1;
64pub const GST_VULKAN_HANDLE_TYPE_PIPELINE_LAYOUT: GstVulkanHandleType = 2;
65pub const GST_VULKAN_HANDLE_TYPE_PIPELINE: GstVulkanHandleType = 3;
66pub const GST_VULKAN_HANDLE_TYPE_RENDER_PASS: GstVulkanHandleType = 4;
67pub const GST_VULKAN_HANDLE_TYPE_SAMPLER: GstVulkanHandleType = 5;
68pub const GST_VULKAN_HANDLE_TYPE_FRAMEBUFFER: GstVulkanHandleType = 6;
69pub const GST_VULKAN_HANDLE_TYPE_SHADER: GstVulkanHandleType = 7;
70#[cfg(feature = "v1_24")]
71#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
72pub const GST_VULKAN_HANDLE_TYPE_VIDEO_SESSION: GstVulkanHandleType = 8;
73#[cfg(feature = "v1_24")]
74#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
75pub const GST_VULKAN_HANDLE_TYPE_VIDEO_SESSION_PARAMETERS: GstVulkanHandleType = 9;
76#[cfg(feature = "v1_24")]
77#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
78pub const GST_VULKAN_HANDLE_TYPE_SAMPLER_YCBCR_CONVERSION: GstVulkanHandleType = 10;
79
80pub type GstVulkanWindowError = c_int;
81pub const GST_VULKAN_WINDOW_ERROR_FAILED: GstVulkanWindowError = 0;
82pub const GST_VULKAN_WINDOW_ERROR_OLD_LIBS: GstVulkanWindowError = 1;
83pub const GST_VULKAN_WINDOW_ERROR_RESOURCE_UNAVAILABLE: GstVulkanWindowError = 2;
84
85// Constants
86pub const GST_BUFFER_POOL_OPTION_VULKAN_IMAGE_MULTIPLANAR_YUV: &[u8] =
87    b"GstBufferPoolOptionVulkanImageMultiplanarYUV\0";
88pub const GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER: &[u8] = b"memory:VulkanBuffer\0";
89pub const GST_CAPS_FEATURE_MEMORY_VULKAN_IMAGE: &[u8] = b"memory:VulkanImage\0";
90pub const GST_VULKAN_API_VERSION_FORMAT: &[u8] = b"u.%u.%u\0";
91pub const GST_VULKAN_BUFFER_MEMORY_ALLOCATOR_NAME: &[u8] = b"VulkanBuffer\0";
92pub const GST_VULKAN_DEVICE_CONTEXT_TYPE_STR: &[u8] = b"gst.vulkan.device\0";
93pub const GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR: &[u8] = b"gst.vulkan.display\0";
94pub const GST_VULKAN_IMAGE_MEMORY_ALLOCATOR_NAME: &[u8] = b"VulkanImage\0";
95pub const GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR: &[u8] = b"gst.vulkan.instance\0";
96pub const GST_VULKAN_MAX_COMPONENTS: c_int = 4;
97pub const GST_VULKAN_MEMORY_ALLOCATOR_NAME: &[u8] = b"Vulkan\0";
98pub const GST_VULKAN_QUEUE_CONTEXT_TYPE_STR: &[u8] = b"gst.vulkan.queue\0";
99pub const GST_VULKAN_REQUESTED_DEVICE_EXTENSIONS_CONTEXT_TYPE_STR: &[u8] =
100    b"gst.vulkan.requested-device-extensions\0";
101pub const GST_VULKAN_REQUESTED_INSTANCE_EXTENSIONS_CONTEXT_TYPE_STR: &[u8] =
102    b"gst.vulkan.requested-instance-extensions\0";
103pub const GST_VULKAN_SWAPPER_VIDEO_FORMATS: &[u8] = b" { RGBA, BGRA, RGB, BGR } \0";
104pub const GST_VULKAN_UUID_FORMAT: &[u8] =
105    b"02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\0";
106
107// Flags
108pub type GstVulkanDisplayType = c_uint;
109pub const GST_VULKAN_DISPLAY_TYPE_NONE: GstVulkanDisplayType = 0;
110pub const GST_VULKAN_DISPLAY_TYPE_XCB: GstVulkanDisplayType = 1;
111pub const GST_VULKAN_DISPLAY_TYPE_WAYLAND: GstVulkanDisplayType = 2;
112pub const GST_VULKAN_DISPLAY_TYPE_COCOA: GstVulkanDisplayType = 4;
113pub const GST_VULKAN_DISPLAY_TYPE_IOS: GstVulkanDisplayType = 8;
114pub const GST_VULKAN_DISPLAY_TYPE_WIN32: GstVulkanDisplayType = 16;
115pub const GST_VULKAN_DISPLAY_TYPE_ANDROID: GstVulkanDisplayType = 32;
116pub const GST_VULKAN_DISPLAY_TYPE_ANY: GstVulkanDisplayType = 4294967295;
117
118pub type GstVulkanFormatFlags = c_uint;
119pub const GST_VULKAN_FORMAT_FLAG_YUV: GstVulkanFormatFlags = 1;
120pub const GST_VULKAN_FORMAT_FLAG_RGB: GstVulkanFormatFlags = 2;
121pub const GST_VULKAN_FORMAT_FLAG_ALPHA: GstVulkanFormatFlags = 4;
122pub const GST_VULKAN_FORMAT_FLAG_LE: GstVulkanFormatFlags = 8;
123pub const GST_VULKAN_FORMAT_FLAG_COMPLEX: GstVulkanFormatFlags = 16;
124
125// Callbacks
126pub type GstVulkanDeviceForEachQueueFunc =
127    Option<unsafe extern "C" fn(*mut GstVulkanDevice, *mut GstVulkanQueue, gpointer) -> gboolean>;
128pub type GstVulkanHandleDestroyNotify =
129    Option<unsafe extern "C" fn(*mut GstVulkanHandle, gpointer)>;
130pub type GstVulkanImageMemoryFindViewFunc =
131    Option<unsafe extern "C" fn(*mut GstVulkanImageView, gpointer) -> gboolean>;
132pub type GstVulkanTrashListAdd =
133    Option<unsafe extern "C" fn(*mut GstVulkanTrashList, *mut GstVulkanTrash) -> gboolean>;
134pub type GstVulkanTrashListGC = Option<unsafe extern "C" fn(*mut GstVulkanTrashList)>;
135pub type GstVulkanTrashListWait =
136    Option<unsafe extern "C" fn(*mut GstVulkanTrashList, u64) -> gboolean>;
137pub type GstVulkanTrashNotify = Option<unsafe extern "C" fn(*mut GstVulkanDevice, gpointer)>;
138
139// Records
140#[repr(C)]
141#[allow(dead_code)]
142pub struct GstVulkanBarrierBufferInfo {
143    _truncated_record_marker: c_void,
144    // /*Ignored*/field parent has incomplete type
145}
146
147impl ::std::fmt::Debug for GstVulkanBarrierBufferInfo {
148    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
149        f.debug_struct(&format!("GstVulkanBarrierBufferInfo @ {self:p}"))
150            .finish()
151    }
152}
153
154#[repr(C)]
155#[allow(dead_code)]
156pub struct GstVulkanBarrierImageInfo {
157    _truncated_record_marker: c_void,
158    // /*Ignored*/field parent has incomplete type
159}
160
161impl ::std::fmt::Debug for GstVulkanBarrierImageInfo {
162    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
163        f.debug_struct(&format!("GstVulkanBarrierImageInfo @ {self:p}"))
164            .finish()
165    }
166}
167
168#[repr(C)]
169#[allow(dead_code)]
170pub struct GstVulkanBarrierMemoryInfo {
171    pub type_: GstVulkanBarrierType,
172    pub flags: GstVulkanBarrierFlags,
173    pub queue: *mut GstVulkanQueue,
174    pub pipeline_stages: u64,
175    pub access_flags: u64,
176    _truncated_record_marker: c_void,
177    // /*Ignored*/field semaphore has incomplete type
178}
179
180impl ::std::fmt::Debug for GstVulkanBarrierMemoryInfo {
181    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
182        f.debug_struct(&format!("GstVulkanBarrierMemoryInfo @ {self:p}"))
183            .field("type_", &self.type_)
184            .field("flags", &self.flags)
185            .field("queue", &self.queue)
186            .field("pipeline_stages", &self.pipeline_stages)
187            .field("access_flags", &self.access_flags)
188            .finish()
189    }
190}
191
192#[repr(C)]
193#[allow(dead_code)]
194pub struct GstVulkanBufferMemory {
195    pub parent: gst::GstMemory,
196    pub device: *mut GstVulkanDevice,
197    _truncated_record_marker: c_void,
198    // /*Ignored*/field buffer has incomplete type
199}
200
201impl ::std::fmt::Debug for GstVulkanBufferMemory {
202    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
203        f.debug_struct(&format!("GstVulkanBufferMemory @ {self:p}"))
204            .field("parent", &self.parent)
205            .field("device", &self.device)
206            .finish()
207    }
208}
209
210#[derive(Copy, Clone)]
211#[repr(C)]
212pub struct GstVulkanBufferMemoryAllocatorClass {
213    pub parent_class: gst::GstAllocatorClass,
214    pub _reserved: [gpointer; 4],
215}
216
217impl ::std::fmt::Debug for GstVulkanBufferMemoryAllocatorClass {
218    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
219        f.debug_struct(&format!("GstVulkanBufferMemoryAllocatorClass @ {self:p}"))
220            .field("parent_class", &self.parent_class)
221            .finish()
222    }
223}
224
225#[derive(Copy, Clone)]
226#[repr(C)]
227pub struct GstVulkanBufferPoolClass {
228    pub parent_class: gst::GstBufferPoolClass,
229    pub _padding: [gpointer; 4],
230}
231
232impl ::std::fmt::Debug for GstVulkanBufferPoolClass {
233    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
234        f.debug_struct(&format!("GstVulkanBufferPoolClass @ {self:p}"))
235            .field("parent_class", &self.parent_class)
236            .finish()
237    }
238}
239
240#[repr(C)]
241#[allow(dead_code)]
242pub struct _GstVulkanBufferPoolPrivate {
243    _data: [u8; 0],
244    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
245}
246
247pub type GstVulkanBufferPoolPrivate = _GstVulkanBufferPoolPrivate;
248
249#[repr(C)]
250#[allow(dead_code)]
251pub struct GstVulkanCommandBuffer {
252    pub parent: gst::GstMiniObject,
253    _truncated_record_marker: c_void,
254    // /*Ignored*/field cmd has incomplete type
255}
256
257impl ::std::fmt::Debug for GstVulkanCommandBuffer {
258    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
259        f.debug_struct(&format!("GstVulkanCommandBuffer @ {self:p}"))
260            .field("parent", &self.parent)
261            .finish()
262    }
263}
264
265#[derive(Copy, Clone)]
266#[repr(C)]
267pub struct GstVulkanCommandPoolClass {
268    pub parent_class: gst::GstObjectClass,
269    pub _reserved: [gpointer; 4],
270}
271
272impl ::std::fmt::Debug for GstVulkanCommandPoolClass {
273    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
274        f.debug_struct(&format!("GstVulkanCommandPoolClass @ {self:p}"))
275            .field("parent_class", &self.parent_class)
276            .finish()
277    }
278}
279
280#[repr(C)]
281#[allow(dead_code)]
282pub struct _GstVulkanCommandPoolPrivate {
283    _data: [u8; 0],
284    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
285}
286
287pub type GstVulkanCommandPoolPrivate = _GstVulkanCommandPoolPrivate;
288
289#[derive(Copy, Clone)]
290#[repr(C)]
291pub struct GstVulkanDescriptorCacheClass {
292    pub parent_class: GstVulkanHandlePoolClass,
293    pub _reserved: [gpointer; 4],
294}
295
296impl ::std::fmt::Debug for GstVulkanDescriptorCacheClass {
297    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
298        f.debug_struct(&format!("GstVulkanDescriptorCacheClass @ {self:p}"))
299            .field("parent_class", &self.parent_class)
300            .finish()
301    }
302}
303
304#[repr(C)]
305#[allow(dead_code)]
306pub struct _GstVulkanDescriptorCachePrivate {
307    _data: [u8; 0],
308    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
309}
310
311pub type GstVulkanDescriptorCachePrivate = _GstVulkanDescriptorCachePrivate;
312
313#[derive(Copy, Clone)]
314#[repr(C)]
315pub struct GstVulkanDescriptorPoolClass {
316    pub parent_class: gst::GstObjectClass,
317    pub _reserved: [gpointer; 4],
318}
319
320impl ::std::fmt::Debug for GstVulkanDescriptorPoolClass {
321    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
322        f.debug_struct(&format!("GstVulkanDescriptorPoolClass @ {self:p}"))
323            .field("parent_class", &self.parent_class)
324            .finish()
325    }
326}
327
328#[repr(C)]
329#[allow(dead_code)]
330pub struct _GstVulkanDescriptorPoolPrivate {
331    _data: [u8; 0],
332    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
333}
334
335pub type GstVulkanDescriptorPoolPrivate = _GstVulkanDescriptorPoolPrivate;
336
337#[repr(C)]
338#[allow(dead_code)]
339pub struct GstVulkanDescriptorSet {
340    pub parent: gst::GstMiniObject,
341    _truncated_record_marker: c_void,
342    // /*Ignored*/field set has incomplete type
343}
344
345impl ::std::fmt::Debug for GstVulkanDescriptorSet {
346    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
347        f.debug_struct(&format!("GstVulkanDescriptorSet @ {self:p}"))
348            .field("parent", &self.parent)
349            .finish()
350    }
351}
352
353#[derive(Copy, Clone)]
354#[repr(C)]
355pub struct GstVulkanDeviceClass {
356    pub parent_class: gst::GstObjectClass,
357    pub _reserved: [gpointer; 4],
358}
359
360impl ::std::fmt::Debug for GstVulkanDeviceClass {
361    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
362        f.debug_struct(&format!("GstVulkanDeviceClass @ {self:p}"))
363            .field("parent_class", &self.parent_class)
364            .finish()
365    }
366}
367
368#[repr(C)]
369#[allow(dead_code)]
370pub struct _GstVulkanDevicePrivate {
371    _data: [u8; 0],
372    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
373}
374
375pub type GstVulkanDevicePrivate = _GstVulkanDevicePrivate;
376
377#[derive(Copy, Clone)]
378#[repr(C)]
379pub struct GstVulkanDisplayClass {
380    pub object_class: gst::GstObjectClass,
381    pub get_handle: Option<unsafe extern "C" fn(*mut GstVulkanDisplay) -> gpointer>,
382    pub create_window: Option<unsafe extern "C" fn(*mut GstVulkanDisplay) -> *mut GstVulkanWindow>,
383    pub _reserved: [gpointer; 4],
384}
385
386impl ::std::fmt::Debug for GstVulkanDisplayClass {
387    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
388        f.debug_struct(&format!("GstVulkanDisplayClass @ {self:p}"))
389            .field("object_class", &self.object_class)
390            .field("get_handle", &self.get_handle)
391            .field("create_window", &self.create_window)
392            .finish()
393    }
394}
395
396#[repr(C)]
397#[allow(dead_code)]
398pub struct _GstVulkanDisplayPrivate {
399    _data: [u8; 0],
400    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
401}
402
403pub type GstVulkanDisplayPrivate = _GstVulkanDisplayPrivate;
404
405#[derive(Copy, Clone)]
406#[repr(C)]
407pub struct GstVulkanEncodeQueryResult {
408    pub offset: u32,
409    pub data_size: u32,
410    pub status: u32,
411}
412
413impl ::std::fmt::Debug for GstVulkanEncodeQueryResult {
414    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
415        f.debug_struct(&format!("GstVulkanEncodeQueryResult @ {self:p}"))
416            .field("offset", &self.offset)
417            .field("data_size", &self.data_size)
418            .field("status", &self.status)
419            .finish()
420    }
421}
422
423#[repr(C)]
424#[allow(dead_code)]
425pub struct GstVulkanFence {
426    pub parent: gst::GstMiniObject,
427    pub device: *mut GstVulkanDevice,
428    pub cache: *mut GstVulkanFenceCache,
429    _truncated_record_marker: c_void,
430    // /*Ignored*/field fence has incomplete type
431}
432
433impl ::std::fmt::Debug for GstVulkanFence {
434    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
435        f.debug_struct(&format!("GstVulkanFence @ {self:p}"))
436            .field("parent", &self.parent)
437            .field("device", &self.device)
438            .field("cache", &self.cache)
439            .finish()
440    }
441}
442
443#[derive(Copy, Clone)]
444#[repr(C)]
445pub struct GstVulkanFenceCacheClass {
446    pub parent_class: GstVulkanHandlePoolClass,
447    pub _reserved: [gpointer; 4],
448}
449
450impl ::std::fmt::Debug for GstVulkanFenceCacheClass {
451    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
452        f.debug_struct(&format!("GstVulkanFenceCacheClass @ {self:p}"))
453            .field("parent_class", &self.parent_class)
454            .finish()
455    }
456}
457
458#[repr(C)]
459#[allow(dead_code)]
460pub struct GstVulkanFormatInfo {
461    _truncated_record_marker: c_void,
462    // /*Ignored*/field format has incomplete type
463}
464
465impl ::std::fmt::Debug for GstVulkanFormatInfo {
466    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
467        f.debug_struct(&format!("GstVulkanFormatInfo @ {self:p}"))
468            .finish()
469    }
470}
471
472#[repr(C)]
473#[allow(dead_code)]
474pub struct GstVulkanFormatMap {
475    pub format: gst_video::GstVideoFormat,
476    _truncated_record_marker: c_void,
477    // /*Ignored*/field vkfrmt has incomplete type
478}
479
480impl ::std::fmt::Debug for GstVulkanFormatMap {
481    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
482        f.debug_struct(&format!("GstVulkanFormatMap @ {self:p}"))
483            .field("format", &self.format)
484            .finish()
485    }
486}
487
488#[derive(Copy, Clone)]
489#[repr(C)]
490pub struct GstVulkanFullScreenQuadClass {
491    pub parent_class: gst::GstObjectClass,
492    pub _reserved: [gpointer; 4],
493}
494
495impl ::std::fmt::Debug for GstVulkanFullScreenQuadClass {
496    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
497        f.debug_struct(&format!("GstVulkanFullScreenQuadClass @ {self:p}"))
498            .field("parent_class", &self.parent_class)
499            .finish()
500    }
501}
502
503#[repr(C)]
504#[allow(dead_code)]
505pub struct _GstVulkanFullScreenQuadPrivate {
506    _data: [u8; 0],
507    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
508}
509
510pub type GstVulkanFullScreenQuadPrivate = _GstVulkanFullScreenQuadPrivate;
511
512#[derive(Copy, Clone)]
513#[repr(C)]
514pub struct GstVulkanHandle {
515    pub parent: gst::GstMiniObject,
516    pub device: *mut GstVulkanDevice,
517    pub type_: GstVulkanHandleType,
518    pub handle: GstVulkanHandleTypedef,
519    pub notify: GstVulkanHandleDestroyNotify,
520    pub user_data: gpointer,
521    pub _reserved: [gpointer; 4],
522}
523
524impl ::std::fmt::Debug for GstVulkanHandle {
525    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
526        f.debug_struct(&format!("GstVulkanHandle @ {self:p}"))
527            .field("parent", &self.parent)
528            .field("device", &self.device)
529            .field("type_", &self.type_)
530            .field("handle", &self.handle)
531            .field("notify", &self.notify)
532            .field("user_data", &self.user_data)
533            .finish()
534    }
535}
536
537#[derive(Copy, Clone)]
538#[repr(C)]
539pub struct GstVulkanHandlePoolClass {
540    pub parent: gst::GstObjectClass,
541    pub alloc:
542        Option<unsafe extern "C" fn(*mut GstVulkanHandlePool, *mut *mut glib::GError) -> gpointer>,
543    pub acquire:
544        Option<unsafe extern "C" fn(*mut GstVulkanHandlePool, *mut *mut glib::GError) -> gpointer>,
545    pub release: Option<unsafe extern "C" fn(*mut GstVulkanHandlePool, gpointer)>,
546    pub free: Option<unsafe extern "C" fn(*mut GstVulkanHandlePool, gpointer)>,
547    pub _padding: [gpointer; 4],
548}
549
550impl ::std::fmt::Debug for GstVulkanHandlePoolClass {
551    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
552        f.debug_struct(&format!("GstVulkanHandlePoolClass @ {self:p}"))
553            .field("parent", &self.parent)
554            .field("alloc", &self.alloc)
555            .field("acquire", &self.acquire)
556            .field("release", &self.release)
557            .field("free", &self.free)
558            .finish()
559    }
560}
561
562#[derive(Copy, Clone)]
563#[repr(C)]
564pub struct GstVulkanImageBufferPoolClass {
565    pub parent_class: gst::GstBufferPoolClass,
566    pub _reserved: [gpointer; 4],
567}
568
569impl ::std::fmt::Debug for GstVulkanImageBufferPoolClass {
570    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
571        f.debug_struct(&format!("GstVulkanImageBufferPoolClass @ {self:p}"))
572            .field("parent_class", &self.parent_class)
573            .finish()
574    }
575}
576
577#[repr(C)]
578#[allow(dead_code)]
579pub struct _GstVulkanImageBufferPoolPrivate {
580    _data: [u8; 0],
581    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
582}
583
584pub type GstVulkanImageBufferPoolPrivate = _GstVulkanImageBufferPoolPrivate;
585
586#[repr(C)]
587#[allow(dead_code)]
588pub struct GstVulkanImageMemory {
589    pub parent: gst::GstMemory,
590    pub device: *mut GstVulkanDevice,
591    _truncated_record_marker: c_void,
592    // /*Ignored*/field image has incomplete type
593}
594
595impl ::std::fmt::Debug for GstVulkanImageMemory {
596    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
597        f.debug_struct(&format!("GstVulkanImageMemory @ {self:p}"))
598            .field("parent", &self.parent)
599            .field("device", &self.device)
600            .finish()
601    }
602}
603
604#[derive(Copy, Clone)]
605#[repr(C)]
606pub struct GstVulkanImageMemoryAllocatorClass {
607    pub parent_class: gst::GstAllocatorClass,
608    pub _reserved: [gpointer; 4],
609}
610
611impl ::std::fmt::Debug for GstVulkanImageMemoryAllocatorClass {
612    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
613        f.debug_struct(&format!("GstVulkanImageMemoryAllocatorClass @ {self:p}"))
614            .field("parent_class", &self.parent_class)
615            .finish()
616    }
617}
618
619#[repr(C)]
620#[allow(dead_code)]
621pub struct GstVulkanImageView {
622    pub parent: gst::GstMiniObject,
623    pub device: *mut GstVulkanDevice,
624    pub image: *mut GstVulkanImageMemory,
625    _truncated_record_marker: c_void,
626    // /*Ignored*/field view has incomplete type
627}
628
629impl ::std::fmt::Debug for GstVulkanImageView {
630    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
631        f.debug_struct(&format!("GstVulkanImageView @ {self:p}"))
632            .field("parent", &self.parent)
633            .field("device", &self.device)
634            .field("image", &self.image)
635            .finish()
636    }
637}
638
639#[derive(Copy, Clone)]
640#[repr(C)]
641pub struct GstVulkanInstanceClass {
642    pub parent_class: gst::GstObjectClass,
643    pub _reserved: [gpointer; 4],
644}
645
646impl ::std::fmt::Debug for GstVulkanInstanceClass {
647    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
648        f.debug_struct(&format!("GstVulkanInstanceClass @ {self:p}"))
649            .field("parent_class", &self.parent_class)
650            .finish()
651    }
652}
653
654#[repr(C)]
655#[allow(dead_code)]
656pub struct _GstVulkanInstancePrivate {
657    _data: [u8; 0],
658    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
659}
660
661pub type GstVulkanInstancePrivate = _GstVulkanInstancePrivate;
662
663#[repr(C)]
664#[allow(dead_code)]
665pub struct GstVulkanMemory {
666    pub mem: gst::GstMemory,
667    pub device: *mut GstVulkanDevice,
668    _truncated_record_marker: c_void,
669    // /*Ignored*/field mem_ptr has incomplete type
670}
671
672impl ::std::fmt::Debug for GstVulkanMemory {
673    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
674        f.debug_struct(&format!("GstVulkanMemory @ {self:p}"))
675            .field("mem", &self.mem)
676            .field("device", &self.device)
677            .finish()
678    }
679}
680
681#[derive(Copy, Clone)]
682#[repr(C)]
683pub struct GstVulkanMemoryAllocatorClass {
684    pub parent_class: gst::GstAllocatorClass,
685    pub _reserved: [gpointer; 4],
686}
687
688impl ::std::fmt::Debug for GstVulkanMemoryAllocatorClass {
689    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
690        f.debug_struct(&format!("GstVulkanMemoryAllocatorClass @ {self:p}"))
691            .field("parent_class", &self.parent_class)
692            .finish()
693    }
694}
695
696#[derive(Copy, Clone)]
697#[repr(C)]
698pub struct GstVulkanOperationClass {
699    pub parent_class: gst::GstObjectClass,
700    pub _reserved: [gpointer; 4],
701}
702
703impl ::std::fmt::Debug for GstVulkanOperationClass {
704    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
705        f.debug_struct(&format!("GstVulkanOperationClass @ {self:p}"))
706            .field("parent_class", &self.parent_class)
707            .finish()
708    }
709}
710
711#[repr(C)]
712#[allow(dead_code)]
713pub struct _GstVulkanOperationPrivate {
714    _data: [u8; 0],
715    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
716}
717
718pub type GstVulkanOperationPrivate = _GstVulkanOperationPrivate;
719
720#[derive(Copy, Clone)]
721#[repr(C)]
722pub struct GstVulkanPhysicalDeviceClass {
723    pub parent_class: gst::GstObjectClass,
724    pub _reserved: [gpointer; 4],
725}
726
727impl ::std::fmt::Debug for GstVulkanPhysicalDeviceClass {
728    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
729        f.debug_struct(&format!("GstVulkanPhysicalDeviceClass @ {self:p}"))
730            .field("parent_class", &self.parent_class)
731            .finish()
732    }
733}
734
735#[repr(C)]
736#[allow(dead_code)]
737pub struct _GstVulkanPhysicalDevicePrivate {
738    _data: [u8; 0],
739    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
740}
741
742pub type GstVulkanPhysicalDevicePrivate = _GstVulkanPhysicalDevicePrivate;
743
744#[derive(Copy, Clone)]
745#[repr(C)]
746pub struct GstVulkanQueueClass {
747    pub parent_class: gst::GstObjectClass,
748    pub _reserved: [gpointer; 4],
749}
750
751impl ::std::fmt::Debug for GstVulkanQueueClass {
752    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
753        f.debug_struct(&format!("GstVulkanQueueClass @ {self:p}"))
754            .field("parent_class", &self.parent_class)
755            .finish()
756    }
757}
758
759#[derive(Copy, Clone)]
760#[repr(C)]
761pub struct GstVulkanQueueFamilyOps {
762    pub video: u32,
763    pub query_result_status: gboolean,
764}
765
766impl ::std::fmt::Debug for GstVulkanQueueFamilyOps {
767    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
768        f.debug_struct(&format!("GstVulkanQueueFamilyOps @ {self:p}"))
769            .field("video", &self.video)
770            .field("query_result_status", &self.query_result_status)
771            .finish()
772    }
773}
774
775#[repr(C)]
776#[allow(dead_code)]
777pub struct _GstVulkanQueuePrivate {
778    _data: [u8; 0],
779    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
780}
781
782pub type GstVulkanQueuePrivate = _GstVulkanQueuePrivate;
783
784#[derive(Copy, Clone)]
785#[repr(C)]
786pub struct GstVulkanSwapperClass {
787    pub parent_class: gst::GstObjectClass,
788    pub _reserved: [gpointer; 4],
789}
790
791impl ::std::fmt::Debug for GstVulkanSwapperClass {
792    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
793        f.debug_struct(&format!("GstVulkanSwapperClass @ {self:p}"))
794            .field("parent_class", &self.parent_class)
795            .finish()
796    }
797}
798
799#[repr(C)]
800#[allow(dead_code)]
801pub struct _GstVulkanSwapperPrivate {
802    _data: [u8; 0],
803    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
804}
805
806pub type GstVulkanSwapperPrivate = _GstVulkanSwapperPrivate;
807
808#[derive(Copy, Clone)]
809#[repr(C)]
810pub struct GstVulkanTrash {
811    pub parent: gst::GstMiniObject,
812    pub cache: *mut GstVulkanTrashList,
813    pub fence: *mut GstVulkanFence,
814    pub notify: GstVulkanTrashNotify,
815    pub user_data: gpointer,
816    pub _padding: [gpointer; 4],
817}
818
819impl ::std::fmt::Debug for GstVulkanTrash {
820    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
821        f.debug_struct(&format!("GstVulkanTrash @ {self:p}"))
822            .field("parent", &self.parent)
823            .field("cache", &self.cache)
824            .field("fence", &self.fence)
825            .field("notify", &self.notify)
826            .field("user_data", &self.user_data)
827            .finish()
828    }
829}
830
831#[derive(Copy, Clone)]
832#[repr(C)]
833pub struct GstVulkanTrashFenceListClass {
834    pub parent_class: GstVulkanTrashListClass,
835}
836
837impl ::std::fmt::Debug for GstVulkanTrashFenceListClass {
838    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
839        f.debug_struct(&format!("GstVulkanTrashFenceListClass @ {self:p}"))
840            .field("parent_class", &self.parent_class)
841            .finish()
842    }
843}
844
845#[derive(Copy, Clone)]
846#[repr(C)]
847pub struct GstVulkanTrashListClass {
848    pub parent_class: GstVulkanHandlePoolClass,
849    pub add_func: GstVulkanTrashListAdd,
850    pub gc_func: GstVulkanTrashListGC,
851    pub wait_func: GstVulkanTrashListWait,
852    pub _reserved: [gpointer; 4],
853}
854
855impl ::std::fmt::Debug for GstVulkanTrashListClass {
856    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
857        f.debug_struct(&format!("GstVulkanTrashListClass @ {self:p}"))
858            .field("parent_class", &self.parent_class)
859            .field("add_func", &self.add_func)
860            .field("gc_func", &self.gc_func)
861            .field("wait_func", &self.wait_func)
862            .finish()
863    }
864}
865
866#[derive(Copy, Clone)]
867#[repr(C)]
868pub struct GstVulkanVideoFilterClass {
869    pub parent_class: gst_base::GstBaseTransformClass,
870    pub _reserved: [gpointer; 4],
871}
872
873impl ::std::fmt::Debug for GstVulkanVideoFilterClass {
874    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
875        f.debug_struct(&format!("GstVulkanVideoFilterClass @ {self:p}"))
876            .field("parent_class", &self.parent_class)
877            .finish()
878    }
879}
880
881#[derive(Copy, Clone)]
882#[repr(C)]
883pub struct GstVulkanWindowClass {
884    pub parent_class: gst::GstObjectClass,
885    pub open:
886        Option<unsafe extern "C" fn(*mut GstVulkanWindow, *mut *mut glib::GError) -> gboolean>,
887    pub close: Option<unsafe extern "C" fn(*mut GstVulkanWindow)>,
888    pub get_surface: Option<
889        unsafe extern "C" fn(*mut GstVulkanWindow, *mut *mut glib::GError) -> vulkan::VkSurfaceKHR,
890    >,
891    pub get_presentation_support:
892        Option<unsafe extern "C" fn(*mut GstVulkanWindow, *mut GstVulkanDevice, u32) -> gboolean>,
893    pub set_window_handle: Option<unsafe extern "C" fn(*mut GstVulkanWindow, uintptr_t)>,
894    pub get_surface_dimensions:
895        Option<unsafe extern "C" fn(*mut GstVulkanWindow, *mut c_uint, *mut c_uint)>,
896    pub handle_events: Option<unsafe extern "C" fn(*mut GstVulkanWindow, gboolean)>,
897    pub _reserved: [gpointer; 4],
898}
899
900impl ::std::fmt::Debug for GstVulkanWindowClass {
901    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
902        f.debug_struct(&format!("GstVulkanWindowClass @ {self:p}"))
903            .field("parent_class", &self.parent_class)
904            .field("open", &self.open)
905            .field("close", &self.close)
906            .field("get_surface", &self.get_surface)
907            .field("get_presentation_support", &self.get_presentation_support)
908            .field("set_window_handle", &self.set_window_handle)
909            .field("get_surface_dimensions", &self.get_surface_dimensions)
910            .field("handle_events", &self.handle_events)
911            .finish()
912    }
913}
914
915#[repr(C)]
916#[allow(dead_code)]
917pub struct _GstVulkanWindowPrivate {
918    _data: [u8; 0],
919    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
920}
921
922pub type GstVulkanWindowPrivate = _GstVulkanWindowPrivate;
923
924// Classes
925#[derive(Copy, Clone)]
926#[repr(C)]
927pub struct GstVulkanBufferMemoryAllocator {
928    pub parent: gst::GstAllocator,
929    pub _reserved: [gpointer; 4],
930}
931
932impl ::std::fmt::Debug for GstVulkanBufferMemoryAllocator {
933    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
934        f.debug_struct(&format!("GstVulkanBufferMemoryAllocator @ {self:p}"))
935            .field("parent", &self.parent)
936            .finish()
937    }
938}
939
940#[derive(Copy, Clone)]
941#[repr(C)]
942pub struct GstVulkanBufferPool {
943    pub bufferpool: gst::GstBufferPool,
944    pub device: *mut GstVulkanDevice,
945    pub _padding: [gpointer; 4],
946}
947
948impl ::std::fmt::Debug for GstVulkanBufferPool {
949    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
950        f.debug_struct(&format!("GstVulkanBufferPool @ {self:p}"))
951            .field("bufferpool", &self.bufferpool)
952            .field("device", &self.device)
953            .finish()
954    }
955}
956
957#[repr(C)]
958#[allow(dead_code)]
959pub struct GstVulkanCommandPool {
960    pub parent: gst::GstObject,
961    pub queue: *mut GstVulkanQueue,
962    _truncated_record_marker: c_void,
963    // /*Ignored*/field pool has incomplete type
964}
965
966impl ::std::fmt::Debug for GstVulkanCommandPool {
967    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
968        f.debug_struct(&format!("GstVulkanCommandPool @ {self:p}"))
969            .field("parent", &self.parent)
970            .field("queue", &self.queue)
971            .finish()
972    }
973}
974
975#[derive(Copy, Clone)]
976#[repr(C)]
977pub struct GstVulkanDescriptorCache {
978    pub parent: GstVulkanHandlePool,
979    pub pool: *mut GstVulkanDescriptorPool,
980    pub _reserved: [gpointer; 4],
981}
982
983impl ::std::fmt::Debug for GstVulkanDescriptorCache {
984    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
985        f.debug_struct(&format!("GstVulkanDescriptorCache @ {self:p}"))
986            .field("parent", &self.parent)
987            .field("pool", &self.pool)
988            .finish()
989    }
990}
991
992#[repr(C)]
993#[allow(dead_code)]
994pub struct GstVulkanDescriptorPool {
995    pub parent: gst::GstObject,
996    pub device: *mut GstVulkanDevice,
997    _truncated_record_marker: c_void,
998    // /*Ignored*/field pool has incomplete type
999}
1000
1001impl ::std::fmt::Debug for GstVulkanDescriptorPool {
1002    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1003        f.debug_struct(&format!("GstVulkanDescriptorPool @ {self:p}"))
1004            .field("parent", &self.parent)
1005            .field("device", &self.device)
1006            .finish()
1007    }
1008}
1009
1010#[repr(C)]
1011#[allow(dead_code)]
1012pub struct GstVulkanDevice {
1013    pub parent: gst::GstObject,
1014    pub instance: *mut GstVulkanInstance,
1015    pub physical_device: *mut GstVulkanPhysicalDevice,
1016    _truncated_record_marker: c_void,
1017    // /*Ignored*/field device has incomplete type
1018}
1019
1020impl ::std::fmt::Debug for GstVulkanDevice {
1021    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1022        f.debug_struct(&format!("GstVulkanDevice @ {self:p}"))
1023            .field("parent", &self.parent)
1024            .field("instance", &self.instance)
1025            .field("physical_device", &self.physical_device)
1026            .finish()
1027    }
1028}
1029
1030#[derive(Copy, Clone)]
1031#[repr(C)]
1032pub struct GstVulkanDisplay {
1033    pub object: gst::GstObject,
1034    pub type_: GstVulkanDisplayType,
1035    pub instance: *mut GstVulkanInstance,
1036    pub windows: *mut glib::GList,
1037    pub main_context: *mut glib::GMainContext,
1038    pub main_loop: *mut glib::GMainLoop,
1039    pub event_source: *mut glib::GSource,
1040    pub _reserved: [gpointer; 4],
1041}
1042
1043impl ::std::fmt::Debug for GstVulkanDisplay {
1044    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1045        f.debug_struct(&format!("GstVulkanDisplay @ {self:p}"))
1046            .finish()
1047    }
1048}
1049
1050#[derive(Copy, Clone)]
1051#[repr(C)]
1052pub struct GstVulkanFenceCache {
1053    pub parent: GstVulkanHandlePool,
1054    pub _reserved: [gpointer; 4],
1055}
1056
1057impl ::std::fmt::Debug for GstVulkanFenceCache {
1058    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1059        f.debug_struct(&format!("GstVulkanFenceCache @ {self:p}"))
1060            .field("parent", &self.parent)
1061            .finish()
1062    }
1063}
1064
1065#[derive(Copy, Clone)]
1066#[repr(C)]
1067pub struct GstVulkanFullScreenQuad {
1068    pub parent: gst::GstObject,
1069    pub out_info: gst_video::GstVideoInfo,
1070    pub in_info: gst_video::GstVideoInfo,
1071    pub queue: *mut GstVulkanQueue,
1072    pub render_pass: *mut GstVulkanHandle,
1073    pub pipeline_layout: *mut GstVulkanHandle,
1074    pub graphics_pipeline: *mut GstVulkanHandle,
1075    pub descriptor_set_layout: *mut GstVulkanHandle,
1076    pub descriptor_cache: *mut GstVulkanDescriptorCache,
1077    pub descriptor_set: *mut GstVulkanDescriptorSet,
1078    pub framebuffer: *mut GstVulkanHandle,
1079    pub sampler: *mut GstVulkanHandle,
1080    pub cmd_pool: *mut GstVulkanCommandPool,
1081    pub trash_list: *mut GstVulkanTrashList,
1082    pub last_fence: *mut GstVulkanFence,
1083    pub _reserved: [gpointer; 4],
1084}
1085
1086impl ::std::fmt::Debug for GstVulkanFullScreenQuad {
1087    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1088        f.debug_struct(&format!("GstVulkanFullScreenQuad @ {self:p}"))
1089            .field("parent", &self.parent)
1090            .field("out_info", &self.out_info)
1091            .field("in_info", &self.in_info)
1092            .field("queue", &self.queue)
1093            .field("render_pass", &self.render_pass)
1094            .field("pipeline_layout", &self.pipeline_layout)
1095            .field("graphics_pipeline", &self.graphics_pipeline)
1096            .field("descriptor_set_layout", &self.descriptor_set_layout)
1097            .field("descriptor_cache", &self.descriptor_cache)
1098            .field("descriptor_set", &self.descriptor_set)
1099            .field("framebuffer", &self.framebuffer)
1100            .field("sampler", &self.sampler)
1101            .field("cmd_pool", &self.cmd_pool)
1102            .field("trash_list", &self.trash_list)
1103            .field("last_fence", &self.last_fence)
1104            .finish()
1105    }
1106}
1107
1108#[derive(Copy, Clone)]
1109#[repr(C)]
1110pub struct GstVulkanHandlePool {
1111    pub parent: gst::GstObject,
1112    pub device: *mut GstVulkanDevice,
1113    pub outstanding: *mut glib::GPtrArray,
1114    pub available: *mut glib::GPtrArray,
1115    pub _padding: [gpointer; 4],
1116}
1117
1118impl ::std::fmt::Debug for GstVulkanHandlePool {
1119    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1120        f.debug_struct(&format!("GstVulkanHandlePool @ {self:p}"))
1121            .field("parent", &self.parent)
1122            .field("device", &self.device)
1123            .field("outstanding", &self.outstanding)
1124            .field("available", &self.available)
1125            .finish()
1126    }
1127}
1128
1129#[derive(Copy, Clone)]
1130#[repr(C)]
1131pub struct GstVulkanImageBufferPool {
1132    pub bufferpool: gst::GstBufferPool,
1133    pub device: *mut GstVulkanDevice,
1134    pub _reserved: [gpointer; 4],
1135}
1136
1137impl ::std::fmt::Debug for GstVulkanImageBufferPool {
1138    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1139        f.debug_struct(&format!("GstVulkanImageBufferPool @ {self:p}"))
1140            .field("bufferpool", &self.bufferpool)
1141            .field("device", &self.device)
1142            .finish()
1143    }
1144}
1145
1146#[derive(Copy, Clone)]
1147#[repr(C)]
1148pub struct GstVulkanImageMemoryAllocator {
1149    pub parent: gst::GstAllocator,
1150    pub _reserved: [gpointer; 4],
1151}
1152
1153impl ::std::fmt::Debug for GstVulkanImageMemoryAllocator {
1154    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1155        f.debug_struct(&format!("GstVulkanImageMemoryAllocator @ {self:p}"))
1156            .field("parent", &self.parent)
1157            .finish()
1158    }
1159}
1160
1161#[repr(C)]
1162#[allow(dead_code)]
1163pub struct GstVulkanInstance {
1164    pub parent: gst::GstObject,
1165    _truncated_record_marker: c_void,
1166    // /*Ignored*/field instance has incomplete type
1167}
1168
1169impl ::std::fmt::Debug for GstVulkanInstance {
1170    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1171        f.debug_struct(&format!("GstVulkanInstance @ {self:p}"))
1172            .field("parent", &self.parent)
1173            .finish()
1174    }
1175}
1176
1177#[derive(Copy, Clone)]
1178#[repr(C)]
1179pub struct GstVulkanMemoryAllocator {
1180    pub parent: gst::GstAllocator,
1181    pub _reserved: [gpointer; 4],
1182}
1183
1184impl ::std::fmt::Debug for GstVulkanMemoryAllocator {
1185    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1186        f.debug_struct(&format!("GstVulkanMemoryAllocator @ {self:p}"))
1187            .field("parent", &self.parent)
1188            .finish()
1189    }
1190}
1191
1192#[derive(Copy, Clone)]
1193#[repr(C)]
1194pub struct GstVulkanOperation {
1195    pub parent: gst::GstObject,
1196    pub cmd_buf: *mut GstVulkanCommandBuffer,
1197    pub _reserved: [gpointer; 4],
1198}
1199
1200impl ::std::fmt::Debug for GstVulkanOperation {
1201    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1202        f.debug_struct(&format!("GstVulkanOperation @ {self:p}"))
1203            .field("parent", &self.parent)
1204            .field("cmd_buf", &self.cmd_buf)
1205            .finish()
1206    }
1207}
1208
1209#[repr(C)]
1210#[allow(dead_code)]
1211pub struct GstVulkanPhysicalDevice {
1212    pub parent: gst::GstObject,
1213    pub instance: *mut GstVulkanInstance,
1214    pub device_index: c_uint,
1215    _truncated_record_marker: c_void,
1216    // /*Ignored*/field device has incomplete type
1217}
1218
1219impl ::std::fmt::Debug for GstVulkanPhysicalDevice {
1220    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1221        f.debug_struct(&format!("GstVulkanPhysicalDevice @ {self:p}"))
1222            .field("parent", &self.parent)
1223            .field("instance", &self.instance)
1224            .field("device_index", &self.device_index)
1225            .finish()
1226    }
1227}
1228
1229#[repr(C)]
1230#[allow(dead_code)]
1231pub struct GstVulkanQueue {
1232    pub parent: gst::GstObject,
1233    pub device: *mut GstVulkanDevice,
1234    _truncated_record_marker: c_void,
1235    // /*Ignored*/field queue has incomplete type
1236}
1237
1238impl ::std::fmt::Debug for GstVulkanQueue {
1239    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1240        f.debug_struct(&format!("GstVulkanQueue @ {self:p}"))
1241            .field("parent", &self.parent)
1242            .field("device", &self.device)
1243            .finish()
1244    }
1245}
1246
1247#[derive(Copy, Clone)]
1248#[repr(C)]
1249pub struct GstVulkanSwapper {
1250    pub parent: gst::GstObject,
1251    pub device: *mut GstVulkanDevice,
1252    pub window: *mut GstVulkanWindow,
1253    pub queue: *mut GstVulkanQueue,
1254    pub cmd_pool: *mut GstVulkanCommandPool,
1255    pub _reserved: [gpointer; 4],
1256}
1257
1258impl ::std::fmt::Debug for GstVulkanSwapper {
1259    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1260        f.debug_struct(&format!("GstVulkanSwapper @ {self:p}"))
1261            .field("parent", &self.parent)
1262            .field("device", &self.device)
1263            .field("window", &self.window)
1264            .field("queue", &self.queue)
1265            .field("cmd_pool", &self.cmd_pool)
1266            .finish()
1267    }
1268}
1269
1270#[repr(C)]
1271#[allow(dead_code)]
1272pub struct GstVulkanTrashFenceList {
1273    _data: [u8; 0],
1274    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
1275}
1276
1277impl ::std::fmt::Debug for GstVulkanTrashFenceList {
1278    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1279        f.debug_struct(&format!("GstVulkanTrashFenceList @ {self:p}"))
1280            .finish()
1281    }
1282}
1283
1284#[derive(Copy, Clone)]
1285#[repr(C)]
1286pub struct GstVulkanTrashList {
1287    pub parent: GstVulkanHandlePool,
1288    pub _reserved: [gpointer; 4],
1289}
1290
1291impl ::std::fmt::Debug for GstVulkanTrashList {
1292    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1293        f.debug_struct(&format!("GstVulkanTrashList @ {self:p}"))
1294            .field("parent", &self.parent)
1295            .finish()
1296    }
1297}
1298
1299#[derive(Copy, Clone)]
1300#[repr(C)]
1301pub struct GstVulkanVideoFilter {
1302    pub parent: gst_base::GstBaseTransform,
1303    pub instance: *mut GstVulkanInstance,
1304    pub device: *mut GstVulkanDevice,
1305    pub queue: *mut GstVulkanQueue,
1306    pub in_caps: *mut gst::GstCaps,
1307    pub in_info: gst_video::GstVideoInfo,
1308    pub out_caps: *mut gst::GstCaps,
1309    pub out_info: gst_video::GstVideoInfo,
1310    pub _reserved: [gpointer; 4],
1311}
1312
1313impl ::std::fmt::Debug for GstVulkanVideoFilter {
1314    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1315        f.debug_struct(&format!("GstVulkanVideoFilter @ {self:p}"))
1316            .field("parent", &self.parent)
1317            .field("instance", &self.instance)
1318            .field("device", &self.device)
1319            .field("queue", &self.queue)
1320            .field("in_caps", &self.in_caps)
1321            .field("in_info", &self.in_info)
1322            .field("out_caps", &self.out_caps)
1323            .field("out_info", &self.out_info)
1324            .finish()
1325    }
1326}
1327
1328#[derive(Copy, Clone)]
1329#[repr(C)]
1330pub struct GstVulkanWindow {
1331    pub parent: gst::GstObject,
1332    pub display: *mut GstVulkanDisplay,
1333    pub _reserved: [gpointer; 4],
1334}
1335
1336impl ::std::fmt::Debug for GstVulkanWindow {
1337    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1338        f.debug_struct(&format!("GstVulkanWindow @ {self:p}"))
1339            .finish()
1340    }
1341}
1342
1343unsafe extern "C" {
1344
1345    //=========================================================================
1346    // GstVulkanBarrierFlags
1347    //=========================================================================
1348    pub fn gst_vulkan_barrier_flags_get_type() -> GType;
1349
1350    //=========================================================================
1351    // GstVulkanBarrierType
1352    //=========================================================================
1353    pub fn gst_vulkan_barrier_type_get_type() -> GType;
1354
1355    //=========================================================================
1356    // GstVulkanError
1357    //=========================================================================
1358    pub fn gst_vulkan_error_get_type() -> GType;
1359    pub fn gst_vulkan_error_quark() -> glib::GQuark;
1360    pub fn gst_vulkan_error_to_g_error(
1361        result: vulkan::VkResult,
1362        error: *mut *mut glib::GError,
1363        format: *const c_char,
1364        ...
1365    ) -> vulkan::VkResult;
1366
1367    //=========================================================================
1368    // GstVulkanFormatScaling
1369    //=========================================================================
1370    pub fn gst_vulkan_format_scaling_get_type() -> GType;
1371
1372    //=========================================================================
1373    // GstVulkanHandleType
1374    //=========================================================================
1375    pub fn gst_vulkan_handle_type_get_type() -> GType;
1376
1377    //=========================================================================
1378    // GstVulkanWindowError
1379    //=========================================================================
1380    pub fn gst_vulkan_window_error_get_type() -> GType;
1381    pub fn gst_vulkan_window_error_quark() -> glib::GQuark;
1382
1383    //=========================================================================
1384    // GstVulkanDisplayType
1385    //=========================================================================
1386    pub fn gst_vulkan_display_type_get_type() -> GType;
1387    pub fn gst_vulkan_display_type_to_extension_string(
1388        type_: GstVulkanDisplayType,
1389    ) -> *const c_char;
1390
1391    //=========================================================================
1392    // GstVulkanFormatFlags
1393    //=========================================================================
1394    pub fn gst_vulkan_format_flags_get_type() -> GType;
1395
1396    //=========================================================================
1397    // GstVulkanBufferMemory
1398    //=========================================================================
1399    pub fn gst_vulkan_buffer_memory_alloc(
1400        device: *mut GstVulkanDevice,
1401        size: size_t,
1402        usage: vulkan::VkBufferUsageFlags,
1403        mem_prop_flags: vulkan::VkMemoryPropertyFlags,
1404    ) -> *mut gst::GstMemory;
1405    #[cfg(feature = "v1_24")]
1406    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
1407    pub fn gst_vulkan_buffer_memory_alloc_with_buffer_info(
1408        device: *mut GstVulkanDevice,
1409        buffer_info: *const vulkan::VkBufferCreateInfo,
1410        mem_prop_flags: vulkan::VkMemoryPropertyFlags,
1411    ) -> *mut gst::GstMemory;
1412    pub fn gst_vulkan_buffer_memory_init_once();
1413    pub fn gst_vulkan_buffer_memory_wrapped(
1414        device: *mut GstVulkanDevice,
1415        buffer: vulkan::VkBuffer,
1416        usage: vulkan::VkBufferUsageFlags,
1417        user_data: gpointer,
1418        notify: glib::GDestroyNotify,
1419    ) -> *mut gst::GstMemory;
1420
1421    //=========================================================================
1422    // GstVulkanCommandBuffer
1423    //=========================================================================
1424    pub fn gst_vulkan_command_buffer_get_type() -> GType;
1425    pub fn gst_vulkan_command_buffer_new_wrapped(
1426        cmd: vulkan::VkCommandBuffer,
1427        level: vulkan::VkCommandBufferLevel,
1428    ) -> *mut GstVulkanCommandBuffer;
1429    pub fn gst_vulkan_command_buffer_ref(
1430        cmd: *mut GstVulkanCommandBuffer,
1431    ) -> *mut GstVulkanCommandBuffer;
1432
1433    //=========================================================================
1434    // GstVulkanDescriptorSet
1435    //=========================================================================
1436    pub fn gst_vulkan_descriptor_set_get_type() -> GType;
1437    pub fn gst_vulkan_descriptor_set_new_wrapped(
1438        pool: *mut GstVulkanDescriptorPool,
1439        set: vulkan::VkDescriptorSet,
1440        n_layouts: c_uint,
1441        layouts: *mut *mut GstVulkanHandle,
1442    ) -> *mut GstVulkanDescriptorSet;
1443    pub fn gst_vulkan_descriptor_set_ref(
1444        set: *mut GstVulkanDescriptorSet,
1445    ) -> *mut GstVulkanDescriptorSet;
1446
1447    //=========================================================================
1448    // GstVulkanFence
1449    //=========================================================================
1450    pub fn gst_vulkan_fence_get_type() -> GType;
1451    pub fn gst_vulkan_fence_new(
1452        device: *mut GstVulkanDevice,
1453        error: *mut *mut glib::GError,
1454    ) -> *mut GstVulkanFence;
1455    pub fn gst_vulkan_fence_new_always_signalled(
1456        device: *mut GstVulkanDevice,
1457    ) -> *mut GstVulkanFence;
1458    pub fn gst_vulkan_fence_is_signaled(fence: *mut GstVulkanFence) -> gboolean;
1459    pub fn gst_vulkan_fence_reset(fence: *mut GstVulkanFence);
1460
1461    //=========================================================================
1462    // GstVulkanHandle
1463    //=========================================================================
1464    pub fn gst_vulkan_handle_get_type() -> GType;
1465    pub fn gst_vulkan_handle_new_wrapped(
1466        device: *mut GstVulkanDevice,
1467        type_: GstVulkanHandleType,
1468        handle: GstVulkanHandleTypedef,
1469        notify: GstVulkanHandleDestroyNotify,
1470        user_data: gpointer,
1471    ) -> *mut GstVulkanHandle;
1472    pub fn gst_vulkan_handle_free_descriptor_set_layout(
1473        handle: *mut GstVulkanHandle,
1474        user_data: gpointer,
1475    );
1476    pub fn gst_vulkan_handle_free_framebuffer(handle: *mut GstVulkanHandle, user_data: gpointer);
1477    pub fn gst_vulkan_handle_free_pipeline(handle: *mut GstVulkanHandle, user_data: gpointer);
1478    pub fn gst_vulkan_handle_free_pipeline_layout(
1479        handle: *mut GstVulkanHandle,
1480        user_data: gpointer,
1481    );
1482    pub fn gst_vulkan_handle_free_render_pass(handle: *mut GstVulkanHandle, user_data: gpointer);
1483    pub fn gst_vulkan_handle_free_sampler(handle: *mut GstVulkanHandle, user_data: gpointer);
1484    #[cfg(feature = "v1_30")]
1485    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
1486    pub fn gst_vulkan_handle_free_sampler_ycbcr_conversion(
1487        handle: *mut GstVulkanHandle,
1488        user_data: gpointer,
1489    );
1490    pub fn gst_vulkan_handle_free_shader(handle: *mut GstVulkanHandle, user_data: gpointer);
1491    pub fn gst_vulkan_handle_ref(handle: *mut GstVulkanHandle) -> *mut GstVulkanHandle;
1492    pub fn gst_vulkan_handle_context_query(
1493        element: *mut gst::GstElement,
1494        query: *mut gst::GstQuery,
1495        display: *mut GstVulkanDisplay,
1496        instance: *mut GstVulkanInstance,
1497        device: *mut GstVulkanDevice,
1498    ) -> gboolean;
1499    pub fn gst_vulkan_handle_set_context(
1500        element: *mut gst::GstElement,
1501        context: *mut gst::GstContext,
1502        display: *mut *mut GstVulkanDisplay,
1503        instance: *mut *mut GstVulkanInstance,
1504    ) -> gboolean;
1505
1506    //=========================================================================
1507    // GstVulkanImageMemory
1508    //=========================================================================
1509    pub fn gst_vulkan_image_memory_add_view(
1510        image: *mut GstVulkanImageMemory,
1511        view: *mut GstVulkanImageView,
1512    );
1513    pub fn gst_vulkan_image_memory_find_view(
1514        image: *mut GstVulkanImageMemory,
1515        find_func: GstVulkanImageMemoryFindViewFunc,
1516        user_data: gpointer,
1517    ) -> *mut GstVulkanImageView;
1518    pub fn gst_vulkan_image_memory_get_height(image: *mut GstVulkanImageMemory) -> u32;
1519    pub fn gst_vulkan_image_memory_get_width(image: *mut GstVulkanImageMemory) -> u32;
1520    pub fn gst_vulkan_image_memory_init(
1521        mem: *mut GstVulkanImageMemory,
1522        allocator: *mut gst::GstAllocator,
1523        parent: *mut gst::GstMemory,
1524        device: *mut GstVulkanDevice,
1525        format: vulkan::VkFormat,
1526        usage: vulkan::VkImageUsageFlags,
1527        initial_layout: vulkan::VkImageLayout,
1528        params: *mut gst::GstAllocationParams,
1529        size: size_t,
1530        user_data: gpointer,
1531        notify: glib::GDestroyNotify,
1532    ) -> gboolean;
1533    pub fn gst_vulkan_image_memory_alloc(
1534        device: *mut GstVulkanDevice,
1535        format: vulkan::VkFormat,
1536        width: size_t,
1537        height: size_t,
1538        tiling: vulkan::VkImageTiling,
1539        usage: vulkan::VkImageUsageFlags,
1540        mem_prop_flags: vulkan::VkMemoryPropertyFlags,
1541    ) -> *mut gst::GstMemory;
1542    #[cfg(feature = "v1_24")]
1543    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
1544    pub fn gst_vulkan_image_memory_alloc_with_image_info(
1545        device: *mut GstVulkanDevice,
1546        image_info: *mut vulkan::VkImageCreateInfo,
1547        mem_prop_flags: vulkan::VkMemoryPropertyFlags,
1548    ) -> *mut gst::GstMemory;
1549    pub fn gst_vulkan_image_memory_init_once();
1550    pub fn gst_vulkan_image_memory_wrapped(
1551        device: *mut GstVulkanDevice,
1552        image: vulkan::VkImage,
1553        format: vulkan::VkFormat,
1554        width: size_t,
1555        height: size_t,
1556        tiling: vulkan::VkImageTiling,
1557        usage: vulkan::VkImageUsageFlags,
1558        user_data: gpointer,
1559        notify: glib::GDestroyNotify,
1560    ) -> *mut gst::GstMemory;
1561    #[cfg(feature = "v1_30")]
1562    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
1563    pub fn gst_vulkan_image_memory_wrapped_with_image_info(
1564        device: *mut GstVulkanDevice,
1565        image: vulkan::VkImage,
1566        image_info: *const vulkan::VkImageCreateInfo,
1567        user_data: gpointer,
1568        notify: glib::GDestroyNotify,
1569    ) -> *mut gst::GstMemory;
1570
1571    //=========================================================================
1572    // GstVulkanImageView
1573    //=========================================================================
1574    pub fn gst_vulkan_image_view_get_type() -> GType;
1575    pub fn gst_vulkan_image_view_new(
1576        image: *mut GstVulkanImageMemory,
1577        create_info: *const vulkan::VkImageViewCreateInfo,
1578    ) -> *mut GstVulkanImageView;
1579    pub fn gst_vulkan_image_view_ref(trash: *mut GstVulkanImageView) -> *mut GstVulkanImageView;
1580
1581    //=========================================================================
1582    // GstVulkanMemory
1583    //=========================================================================
1584    pub fn gst_vulkan_memory_alloc(
1585        device: *mut GstVulkanDevice,
1586        memory_type_index: u32,
1587        params: *mut gst::GstAllocationParams,
1588        size: size_t,
1589        mem_prop_flags: vulkan::VkMemoryPropertyFlags,
1590    ) -> *mut gst::GstMemory;
1591    #[cfg(feature = "v1_24")]
1592    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
1593    pub fn gst_vulkan_memory_find_memory_type_index_with_requirements(
1594        device: *mut GstVulkanDevice,
1595        req: *const vulkan::VkMemoryRequirements,
1596        properties: vulkan::VkMemoryPropertyFlags,
1597        type_index: *mut u32,
1598    ) -> gboolean;
1599    pub fn gst_vulkan_memory_heap_flags_to_string(
1600        prop_bits: vulkan::VkMemoryHeapFlags,
1601    ) -> *mut c_char;
1602    pub fn gst_vulkan_memory_init_once();
1603    pub fn gst_vulkan_memory_property_flags_to_string(
1604        prop_bits: vulkan::VkMemoryPropertyFlags,
1605    ) -> *mut c_char;
1606
1607    //=========================================================================
1608    // GstVulkanTrash
1609    //=========================================================================
1610    pub fn gst_vulkan_trash_get_type() -> GType;
1611    pub fn gst_vulkan_trash_new(
1612        fence: *mut GstVulkanFence,
1613        notify: GstVulkanTrashNotify,
1614        user_data: gpointer,
1615    ) -> *mut GstVulkanTrash;
1616    pub fn gst_vulkan_trash_new_free_semaphore(
1617        fence: *mut GstVulkanFence,
1618        semaphore: vulkan::VkSemaphore,
1619    ) -> *mut GstVulkanTrash;
1620    pub fn gst_vulkan_trash_ref(trash: *mut GstVulkanTrash) -> *mut GstVulkanTrash;
1621    pub fn gst_vulkan_trash_mini_object_unref(device: *mut GstVulkanDevice, user_data: gpointer);
1622    pub fn gst_vulkan_trash_object_unref(device: *mut GstVulkanDevice, user_data: gpointer);
1623
1624    //=========================================================================
1625    // GstVulkanBufferMemoryAllocator
1626    //=========================================================================
1627    pub fn gst_vulkan_buffer_memory_allocator_get_type() -> GType;
1628
1629    //=========================================================================
1630    // GstVulkanBufferPool
1631    //=========================================================================
1632    pub fn gst_vulkan_buffer_pool_get_type() -> GType;
1633    pub fn gst_vulkan_buffer_pool_new(device: *mut GstVulkanDevice) -> *mut gst::GstBufferPool;
1634    #[cfg(feature = "v1_24")]
1635    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
1636    pub fn gst_vulkan_buffer_pool_config_set_allocation_params(
1637        config: *mut gst::GstStructure,
1638        usage: vulkan::VkBufferUsageFlags,
1639        mem_properties: vulkan::VkMemoryPropertyFlags,
1640    );
1641
1642    //=========================================================================
1643    // GstVulkanCommandPool
1644    //=========================================================================
1645    pub fn gst_vulkan_command_pool_get_type() -> GType;
1646    pub fn gst_vulkan_command_pool_create(
1647        pool: *mut GstVulkanCommandPool,
1648        error: *mut *mut glib::GError,
1649    ) -> *mut GstVulkanCommandBuffer;
1650    pub fn gst_vulkan_command_pool_get_queue(
1651        pool: *mut GstVulkanCommandPool,
1652    ) -> *mut GstVulkanQueue;
1653    pub fn gst_vulkan_command_pool_lock(pool: *mut GstVulkanCommandPool);
1654    pub fn gst_vulkan_command_pool_unlock(pool: *mut GstVulkanCommandPool);
1655
1656    //=========================================================================
1657    // GstVulkanDescriptorCache
1658    //=========================================================================
1659    pub fn gst_vulkan_descriptor_cache_get_type() -> GType;
1660    pub fn gst_vulkan_descriptor_cache_new(
1661        pool: *mut GstVulkanDescriptorPool,
1662        n_layouts: c_uint,
1663        layouts: *mut *mut GstVulkanHandle,
1664    ) -> *mut GstVulkanDescriptorCache;
1665    pub fn gst_vulkan_descriptor_cache_acquire(
1666        cache: *mut GstVulkanDescriptorCache,
1667        error: *mut *mut glib::GError,
1668    ) -> *mut GstVulkanDescriptorSet;
1669
1670    //=========================================================================
1671    // GstVulkanDescriptorPool
1672    //=========================================================================
1673    pub fn gst_vulkan_descriptor_pool_get_type() -> GType;
1674    pub fn gst_vulkan_descriptor_pool_new_wrapped(
1675        device: *mut GstVulkanDevice,
1676        pool: vulkan::VkDescriptorPool,
1677        max_sets: size_t,
1678    ) -> *mut GstVulkanDescriptorPool;
1679    pub fn gst_vulkan_descriptor_pool_create(
1680        pool: *mut GstVulkanDescriptorPool,
1681        n_layouts: c_uint,
1682        layouts: *mut *mut GstVulkanHandle,
1683        error: *mut *mut glib::GError,
1684    ) -> *mut GstVulkanDescriptorSet;
1685    pub fn gst_vulkan_descriptor_pool_get_device(
1686        pool: *mut GstVulkanDescriptorPool,
1687    ) -> *mut GstVulkanDevice;
1688    pub fn gst_vulkan_descriptor_pool_get_max_sets(pool: *mut GstVulkanDescriptorPool) -> size_t;
1689
1690    //=========================================================================
1691    // GstVulkanDevice
1692    //=========================================================================
1693    pub fn gst_vulkan_device_get_type() -> GType;
1694    pub fn gst_vulkan_device_new(
1695        physical_device: *mut GstVulkanPhysicalDevice,
1696    ) -> *mut GstVulkanDevice;
1697    pub fn gst_vulkan_device_new_with_index(
1698        instance: *mut GstVulkanInstance,
1699        device_index: c_uint,
1700    ) -> *mut GstVulkanDevice;
1701    pub fn gst_vulkan_device_handle_context_query(
1702        element: *mut gst::GstElement,
1703        query: *mut gst::GstQuery,
1704        device: *mut GstVulkanDevice,
1705    ) -> gboolean;
1706    pub fn gst_vulkan_device_run_context_query(
1707        element: *mut gst::GstElement,
1708        device: *mut *mut GstVulkanDevice,
1709    ) -> gboolean;
1710    pub fn gst_vulkan_device_create_fence(
1711        device: *mut GstVulkanDevice,
1712        error: *mut *mut glib::GError,
1713    ) -> *mut GstVulkanFence;
1714    pub fn gst_vulkan_device_disable_extension(
1715        device: *mut GstVulkanDevice,
1716        name: *const c_char,
1717    ) -> gboolean;
1718    pub fn gst_vulkan_device_enable_extension(
1719        device: *mut GstVulkanDevice,
1720        name: *const c_char,
1721    ) -> gboolean;
1722    pub fn gst_vulkan_device_enable_layer(
1723        device: *mut GstVulkanDevice,
1724        name: *const c_char,
1725    ) -> gboolean;
1726    pub fn gst_vulkan_device_foreach_queue(
1727        device: *mut GstVulkanDevice,
1728        func: GstVulkanDeviceForEachQueueFunc,
1729        user_data: gpointer,
1730    );
1731    pub fn gst_vulkan_device_get_instance(device: *mut GstVulkanDevice) -> *mut GstVulkanInstance;
1732    pub fn gst_vulkan_device_get_physical_device(
1733        device: *mut GstVulkanDevice,
1734    ) -> vulkan::VkPhysicalDevice;
1735    pub fn gst_vulkan_device_get_proc_address(
1736        device: *mut GstVulkanDevice,
1737        name: *const c_char,
1738    ) -> gpointer;
1739    pub fn gst_vulkan_device_get_queue(
1740        device: *mut GstVulkanDevice,
1741        queue_family: u32,
1742        queue_i: u32,
1743    ) -> *mut GstVulkanQueue;
1744    pub fn gst_vulkan_device_is_extension_enabled(
1745        device: *mut GstVulkanDevice,
1746        name: *const c_char,
1747    ) -> gboolean;
1748    pub fn gst_vulkan_device_is_layer_enabled(
1749        device: *mut GstVulkanDevice,
1750        name: *const c_char,
1751    ) -> gboolean;
1752    pub fn gst_vulkan_device_open(
1753        device: *mut GstVulkanDevice,
1754        error: *mut *mut glib::GError,
1755    ) -> gboolean;
1756    #[cfg(feature = "v1_24")]
1757    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
1758    pub fn gst_vulkan_device_queue_family_indices(
1759        device: *mut GstVulkanDevice,
1760    ) -> *mut glib::GArray;
1761    #[cfg(feature = "v1_24")]
1762    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
1763    pub fn gst_vulkan_device_select_queue(
1764        device: *mut GstVulkanDevice,
1765        expected_flags: vulkan::VkQueueFlagBits,
1766    ) -> *mut GstVulkanQueue;
1767
1768    //=========================================================================
1769    // GstVulkanDisplay
1770    //=========================================================================
1771    pub fn gst_vulkan_display_get_type() -> GType;
1772    pub fn gst_vulkan_display_new(instance: *mut GstVulkanInstance) -> *mut GstVulkanDisplay;
1773    pub fn gst_vulkan_display_new_with_type(
1774        instance: *mut GstVulkanInstance,
1775        type_: GstVulkanDisplayType,
1776    ) -> *mut GstVulkanDisplay;
1777    pub fn gst_vulkan_display_choose_type(instance: *mut GstVulkanInstance)
1778    -> GstVulkanDisplayType;
1779    pub fn gst_vulkan_display_handle_context_query(
1780        element: *mut gst::GstElement,
1781        query: *mut gst::GstQuery,
1782        display: *mut GstVulkanDisplay,
1783    ) -> gboolean;
1784    pub fn gst_vulkan_display_run_context_query(
1785        element: *mut gst::GstElement,
1786        display: *mut *mut GstVulkanDisplay,
1787    ) -> gboolean;
1788    pub fn gst_vulkan_display_create_window(display: *mut GstVulkanDisplay)
1789    -> *mut GstVulkanWindow;
1790    pub fn gst_vulkan_display_find_window(
1791        display: *mut GstVulkanDisplay,
1792        data: gpointer,
1793        compare_func: glib::GCompareFunc,
1794    ) -> *mut GstVulkanWindow;
1795    pub fn gst_vulkan_display_get_handle(display: *mut GstVulkanDisplay) -> gpointer;
1796    pub fn gst_vulkan_display_get_handle_type(
1797        display: *mut GstVulkanDisplay,
1798    ) -> GstVulkanDisplayType;
1799    pub fn gst_vulkan_display_remove_window(
1800        display: *mut GstVulkanDisplay,
1801        window: *mut GstVulkanWindow,
1802    ) -> gboolean;
1803
1804    //=========================================================================
1805    // GstVulkanFenceCache
1806    //=========================================================================
1807    pub fn gst_vulkan_fence_cache_get_type() -> GType;
1808    pub fn gst_vulkan_fence_cache_new(device: *mut GstVulkanDevice) -> *mut GstVulkanFenceCache;
1809
1810    //=========================================================================
1811    // GstVulkanFullScreenQuad
1812    //=========================================================================
1813    pub fn gst_vulkan_full_screen_quad_get_type() -> GType;
1814    pub fn gst_vulkan_full_screen_quad_new(
1815        queue: *mut GstVulkanQueue,
1816    ) -> *mut GstVulkanFullScreenQuad;
1817    pub fn gst_vulkan_full_screen_quad_draw(
1818        self_: *mut GstVulkanFullScreenQuad,
1819        error: *mut *mut glib::GError,
1820    ) -> gboolean;
1821    #[cfg(feature = "v1_22")]
1822    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
1823    pub fn gst_vulkan_full_screen_quad_enable_blend(
1824        self_: *mut GstVulkanFullScreenQuad,
1825        enable_blend: gboolean,
1826    );
1827    #[cfg(feature = "v1_22")]
1828    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
1829    pub fn gst_vulkan_full_screen_quad_enable_clear(
1830        self_: *mut GstVulkanFullScreenQuad,
1831        enable_clear: gboolean,
1832    );
1833    pub fn gst_vulkan_full_screen_quad_fill_command_buffer(
1834        self_: *mut GstVulkanFullScreenQuad,
1835        cmd: *mut GstVulkanCommandBuffer,
1836        fence: *mut GstVulkanFence,
1837        error: *mut *mut glib::GError,
1838    ) -> gboolean;
1839    pub fn gst_vulkan_full_screen_quad_get_last_fence(
1840        self_: *mut GstVulkanFullScreenQuad,
1841    ) -> *mut GstVulkanFence;
1842    #[cfg(feature = "v1_26")]
1843    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
1844    pub fn gst_vulkan_full_screen_quad_get_queue(
1845        self_: *mut GstVulkanFullScreenQuad,
1846    ) -> *mut GstVulkanQueue;
1847    pub fn gst_vulkan_full_screen_quad_prepare_draw(
1848        self_: *mut GstVulkanFullScreenQuad,
1849        fence: *mut GstVulkanFence,
1850        error: *mut *mut glib::GError,
1851    ) -> gboolean;
1852    #[cfg(feature = "v1_22")]
1853    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
1854    pub fn gst_vulkan_full_screen_quad_set_blend_factors(
1855        self_: *mut GstVulkanFullScreenQuad,
1856        src_blend_factor: vulkan::VkBlendFactor,
1857        dst_blend_factor: vulkan::VkBlendFactor,
1858        src_alpha_blend_factor: vulkan::VkBlendFactor,
1859        dst_alpha_blend_factor: vulkan::VkBlendFactor,
1860    );
1861    #[cfg(feature = "v1_22")]
1862    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
1863    pub fn gst_vulkan_full_screen_quad_set_blend_operation(
1864        self_: *mut GstVulkanFullScreenQuad,
1865        colour_blend_op: vulkan::VkBlendOp,
1866        alpha_blend_op: vulkan::VkBlendOp,
1867    );
1868    #[cfg(feature = "v1_30")]
1869    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
1870    pub fn gst_vulkan_full_screen_quad_set_immutable_sampler(
1871        self_: *mut GstVulkanFullScreenQuad,
1872        sampler: *mut GstVulkanHandle,
1873    ) -> gboolean;
1874    pub fn gst_vulkan_full_screen_quad_set_index_buffer(
1875        self_: *mut GstVulkanFullScreenQuad,
1876        indices: *mut gst::GstMemory,
1877        n_indices: size_t,
1878        error: *mut *mut glib::GError,
1879    ) -> gboolean;
1880    pub fn gst_vulkan_full_screen_quad_set_info(
1881        self_: *mut GstVulkanFullScreenQuad,
1882        in_info: *const gst_video::GstVideoInfo,
1883        out_info: *const gst_video::GstVideoInfo,
1884    ) -> gboolean;
1885    pub fn gst_vulkan_full_screen_quad_set_input_buffer(
1886        self_: *mut GstVulkanFullScreenQuad,
1887        buffer: *mut gst::GstBuffer,
1888        error: *mut *mut glib::GError,
1889    ) -> gboolean;
1890    pub fn gst_vulkan_full_screen_quad_set_output_buffer(
1891        self_: *mut GstVulkanFullScreenQuad,
1892        buffer: *mut gst::GstBuffer,
1893        error: *mut *mut glib::GError,
1894    ) -> gboolean;
1895    #[cfg(feature = "v1_30")]
1896    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
1897    pub fn gst_vulkan_full_screen_quad_set_sampler(
1898        self_: *mut GstVulkanFullScreenQuad,
1899        sampler: *mut GstVulkanHandle,
1900    ) -> gboolean;
1901    pub fn gst_vulkan_full_screen_quad_set_shaders(
1902        self_: *mut GstVulkanFullScreenQuad,
1903        vert: *mut GstVulkanHandle,
1904        frag: *mut GstVulkanHandle,
1905    ) -> gboolean;
1906    pub fn gst_vulkan_full_screen_quad_set_uniform_buffer(
1907        self_: *mut GstVulkanFullScreenQuad,
1908        uniforms: *mut gst::GstMemory,
1909        error: *mut *mut glib::GError,
1910    ) -> gboolean;
1911    pub fn gst_vulkan_full_screen_quad_set_vertex_buffer(
1912        self_: *mut GstVulkanFullScreenQuad,
1913        vertices: *mut gst::GstMemory,
1914        error: *mut *mut glib::GError,
1915    ) -> gboolean;
1916    pub fn gst_vulkan_full_screen_quad_submit(
1917        self_: *mut GstVulkanFullScreenQuad,
1918        cmd: *mut GstVulkanCommandBuffer,
1919        fence: *mut GstVulkanFence,
1920        error: *mut *mut glib::GError,
1921    ) -> gboolean;
1922
1923    //=========================================================================
1924    // GstVulkanHandlePool
1925    //=========================================================================
1926    pub fn gst_vulkan_handle_pool_get_type() -> GType;
1927    pub fn gst_vulkan_handle_pool_acquire(
1928        pool: *mut GstVulkanHandlePool,
1929        error: *mut *mut glib::GError,
1930    ) -> gpointer;
1931    pub fn gst_vulkan_handle_pool_alloc(
1932        pool: *mut GstVulkanHandlePool,
1933        error: *mut *mut glib::GError,
1934    ) -> gpointer;
1935    pub fn gst_vulkan_handle_pool_release(pool: *mut GstVulkanHandlePool, handle: gpointer);
1936
1937    //=========================================================================
1938    // GstVulkanImageBufferPool
1939    //=========================================================================
1940    pub fn gst_vulkan_image_buffer_pool_get_type() -> GType;
1941    pub fn gst_vulkan_image_buffer_pool_new(
1942        device: *mut GstVulkanDevice,
1943    ) -> *mut gst::GstBufferPool;
1944    #[cfg(feature = "v1_26")]
1945    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
1946    pub fn gst_vulkan_image_buffer_pool_config_get_allocation_params(
1947        config: *mut gst::GstStructure,
1948        usage: *mut vulkan::VkImageUsageFlags,
1949        mem_props: *mut vulkan::VkMemoryPropertyFlags,
1950        initial_layout: *mut vulkan::VkImageLayout,
1951        initial_access: *mut u64,
1952    );
1953    #[cfg(feature = "v1_24")]
1954    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
1955    pub fn gst_vulkan_image_buffer_pool_config_set_allocation_params(
1956        config: *mut gst::GstStructure,
1957        usage: vulkan::VkImageUsageFlags,
1958        mem_properties: vulkan::VkMemoryPropertyFlags,
1959        initial_layout: vulkan::VkImageLayout,
1960        initial_access: u64,
1961    );
1962    #[cfg(feature = "v1_24")]
1963    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
1964    pub fn gst_vulkan_image_buffer_pool_config_set_decode_caps(
1965        config: *mut gst::GstStructure,
1966        caps: *mut gst::GstCaps,
1967    );
1968    #[cfg(feature = "v1_26")]
1969    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
1970    pub fn gst_vulkan_image_buffer_pool_config_set_encode_caps(
1971        config: *mut gst::GstStructure,
1972        caps: *mut gst::GstCaps,
1973    );
1974
1975    //=========================================================================
1976    // GstVulkanImageMemoryAllocator
1977    //=========================================================================
1978    pub fn gst_vulkan_image_memory_allocator_get_type() -> GType;
1979
1980    //=========================================================================
1981    // GstVulkanInstance
1982    //=========================================================================
1983    pub fn gst_vulkan_instance_get_type() -> GType;
1984    pub fn gst_vulkan_instance_new() -> *mut GstVulkanInstance;
1985    pub fn gst_vulkan_instance_handle_context_query(
1986        element: *mut gst::GstElement,
1987        query: *mut gst::GstQuery,
1988        instance: *mut GstVulkanInstance,
1989    ) -> gboolean;
1990    pub fn gst_vulkan_instance_run_context_query(
1991        element: *mut gst::GstElement,
1992        instance: *mut *mut GstVulkanInstance,
1993    ) -> gboolean;
1994    #[cfg(feature = "v1_26")]
1995    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
1996    pub fn gst_vulkan_instance_check_api_version(
1997        instance: *mut GstVulkanInstance,
1998        major: c_uint,
1999        minor: c_uint,
2000        patch: c_uint,
2001    ) -> gboolean;
2002    pub fn gst_vulkan_instance_check_version(
2003        instance: *mut GstVulkanInstance,
2004        major: c_uint,
2005        minor: c_uint,
2006        patch: c_uint,
2007    ) -> gboolean;
2008    pub fn gst_vulkan_instance_create_device(
2009        instance: *mut GstVulkanInstance,
2010        error: *mut *mut glib::GError,
2011    ) -> *mut GstVulkanDevice;
2012    #[cfg(feature = "v1_26")]
2013    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2014    pub fn gst_vulkan_instance_create_device_with_index(
2015        instance: *mut GstVulkanInstance,
2016        device_index: c_uint,
2017        error: *mut *mut glib::GError,
2018    ) -> *mut GstVulkanDevice;
2019    pub fn gst_vulkan_instance_disable_extension(
2020        instance: *mut GstVulkanInstance,
2021        name: *const c_char,
2022    ) -> gboolean;
2023    pub fn gst_vulkan_instance_enable_extension(
2024        instance: *mut GstVulkanInstance,
2025        name: *const c_char,
2026    ) -> gboolean;
2027    pub fn gst_vulkan_instance_enable_layer(
2028        instance: *mut GstVulkanInstance,
2029        name: *const c_char,
2030    ) -> gboolean;
2031    pub fn gst_vulkan_instance_fill_info(
2032        instance: *mut GstVulkanInstance,
2033        error: *mut *mut glib::GError,
2034    ) -> gboolean;
2035    #[cfg(feature = "v1_26")]
2036    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2037    pub fn gst_vulkan_instance_get_api_version(
2038        instance: *mut GstVulkanInstance,
2039        major: *mut c_uint,
2040        minor: *mut c_uint,
2041        patch: *mut c_uint,
2042    );
2043    pub fn gst_vulkan_instance_get_extension_info(
2044        instance: *mut GstVulkanInstance,
2045        name: *const c_char,
2046        spec_version: *mut u32,
2047    ) -> gboolean;
2048    pub fn gst_vulkan_instance_get_layer_info(
2049        instance: *mut GstVulkanInstance,
2050        name: *const c_char,
2051        description: *mut *mut c_char,
2052        spec_version: *mut u32,
2053        implementation_version: *mut u32,
2054    ) -> gboolean;
2055    pub fn gst_vulkan_instance_get_proc_address(
2056        instance: *mut GstVulkanInstance,
2057        name: *const c_char,
2058    ) -> gpointer;
2059    pub fn gst_vulkan_instance_get_version(
2060        instance: *mut GstVulkanInstance,
2061        major: *mut c_uint,
2062        minor: *mut c_uint,
2063        patch: *mut c_uint,
2064    );
2065    pub fn gst_vulkan_instance_is_extension_enabled(
2066        instance: *mut GstVulkanInstance,
2067        name: *const c_char,
2068    ) -> gboolean;
2069    pub fn gst_vulkan_instance_is_layer_enabled(
2070        instance: *mut GstVulkanInstance,
2071        name: *const c_char,
2072    ) -> gboolean;
2073    pub fn gst_vulkan_instance_open(
2074        instance: *mut GstVulkanInstance,
2075        error: *mut *mut glib::GError,
2076    ) -> gboolean;
2077
2078    //=========================================================================
2079    // GstVulkanMemoryAllocator
2080    //=========================================================================
2081    pub fn gst_vulkan_memory_allocator_get_type() -> GType;
2082
2083    //=========================================================================
2084    // GstVulkanOperation
2085    //=========================================================================
2086    #[cfg(feature = "v1_24")]
2087    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2088    pub fn gst_vulkan_operation_get_type() -> GType;
2089    #[cfg(feature = "v1_24")]
2090    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2091    pub fn gst_vulkan_operation_new(cmd_pool: *mut GstVulkanCommandPool)
2092    -> *mut GstVulkanOperation;
2093    #[cfg(feature = "v1_24")]
2094    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2095    pub fn gst_vulkan_operation_add_dependency_frame(
2096        self_: *mut GstVulkanOperation,
2097        frame: *mut gst::GstBuffer,
2098        wait_stage: u64,
2099        signal_stage: u64,
2100    ) -> gboolean;
2101    #[cfg(feature = "v1_24")]
2102    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2103    pub fn gst_vulkan_operation_add_extra_image_barriers(
2104        self_: *mut GstVulkanOperation,
2105        extra_barriers: *mut glib::GArray,
2106    );
2107    #[cfg(feature = "v1_24")]
2108    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2109    pub fn gst_vulkan_operation_add_frame_barrier(
2110        self_: *mut GstVulkanOperation,
2111        frame: *mut gst::GstBuffer,
2112        src_stage: u64,
2113        dst_stage: u64,
2114        new_access: u64,
2115        new_layout: vulkan::VkImageLayout,
2116        new_queue: *mut GstVulkanQueue,
2117    ) -> gboolean;
2118    #[cfg(feature = "v1_24")]
2119    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2120    pub fn gst_vulkan_operation_begin(
2121        self_: *mut GstVulkanOperation,
2122        error: *mut *mut glib::GError,
2123    ) -> gboolean;
2124    #[cfg(feature = "v1_26")]
2125    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2126    pub fn gst_vulkan_operation_begin_query(
2127        self_: *mut GstVulkanOperation,
2128        base: *mut vulkan::VkBaseInStructure,
2129        id: u32,
2130    ) -> gboolean;
2131    #[cfg(feature = "v1_24")]
2132    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2133    pub fn gst_vulkan_operation_discard_dependencies(self_: *mut GstVulkanOperation);
2134    #[cfg(feature = "v1_24")]
2135    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2136    pub fn gst_vulkan_operation_enable_query(
2137        self_: *mut GstVulkanOperation,
2138        query_type: u32,
2139        n_queries: c_uint,
2140        pnext: gpointer,
2141        error: *mut *mut glib::GError,
2142    ) -> gboolean;
2143    #[cfg(feature = "v1_24")]
2144    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2145    pub fn gst_vulkan_operation_end(
2146        self_: *mut GstVulkanOperation,
2147        error: *mut *mut glib::GError,
2148    ) -> gboolean;
2149    #[cfg(feature = "v1_24")]
2150    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2151    pub fn gst_vulkan_operation_end_query(self_: *mut GstVulkanOperation, id: u32) -> gboolean;
2152    #[cfg(feature = "v1_24")]
2153    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2154    pub fn gst_vulkan_operation_get_query(
2155        self_: *mut GstVulkanOperation,
2156        data: *mut gpointer,
2157        error: *mut *mut glib::GError,
2158    ) -> gboolean;
2159    #[cfg(feature = "v1_24")]
2160    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2161    pub fn gst_vulkan_operation_new_extra_image_barriers(
2162        self_: *mut GstVulkanOperation,
2163    ) -> *mut glib::GArray;
2164    #[cfg(feature = "v1_24")]
2165    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2166    pub fn gst_vulkan_operation_pipeline_barrier2(
2167        self_: *mut GstVulkanOperation,
2168        dependency_info: gpointer,
2169    ) -> gboolean;
2170    #[cfg(feature = "v1_24")]
2171    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2172    pub fn gst_vulkan_operation_reset(self_: *mut GstVulkanOperation);
2173    #[cfg(feature = "v1_24")]
2174    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2175    pub fn gst_vulkan_operation_retrieve_image_barriers(
2176        self_: *mut GstVulkanOperation,
2177    ) -> *mut glib::GArray;
2178    #[cfg(feature = "v1_24")]
2179    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2180    pub fn gst_vulkan_operation_update_frame(
2181        self_: *mut GstVulkanOperation,
2182        frame: *mut gst::GstBuffer,
2183        dst_stage: u64,
2184        new_access: u64,
2185        new_layout: vulkan::VkImageLayout,
2186        new_queue: *mut GstVulkanQueue,
2187    );
2188    #[cfg(feature = "v1_24")]
2189    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2190    pub fn gst_vulkan_operation_use_sync2(self_: *mut GstVulkanOperation) -> gboolean;
2191    #[cfg(feature = "v1_24")]
2192    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2193    pub fn gst_vulkan_operation_wait(self_: *mut GstVulkanOperation) -> gboolean;
2194
2195    //=========================================================================
2196    // GstVulkanPhysicalDevice
2197    //=========================================================================
2198    pub fn gst_vulkan_physical_device_get_type() -> GType;
2199    pub fn gst_vulkan_physical_device_new(
2200        instance: *mut GstVulkanInstance,
2201        device_index: c_uint,
2202    ) -> *mut GstVulkanPhysicalDevice;
2203    pub fn gst_vulkan_physical_device_type_to_string(
2204        type_: vulkan::VkPhysicalDeviceType,
2205    ) -> *const c_char;
2206    #[cfg(feature = "v1_26")]
2207    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2208    pub fn gst_vulkan_physical_device_check_api_version(
2209        device: *mut GstVulkanPhysicalDevice,
2210        major: c_uint,
2211        minor: c_uint,
2212        patch: c_uint,
2213    ) -> gboolean;
2214    #[cfg(feature = "v1_26")]
2215    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2216    pub fn gst_vulkan_physical_device_get_api_version(
2217        device: *mut GstVulkanPhysicalDevice,
2218        major: *mut c_uint,
2219        minor: *mut c_uint,
2220        patch: *mut c_uint,
2221    );
2222    pub fn gst_vulkan_physical_device_get_extension_info(
2223        device: *mut GstVulkanPhysicalDevice,
2224        name: *const c_char,
2225        spec_version: *mut u32,
2226    ) -> gboolean;
2227    #[cfg(feature = "v1_30")]
2228    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2229    pub fn gst_vulkan_physical_device_get_features(
2230        device: *mut GstVulkanPhysicalDevice,
2231    ) -> *const vulkan::VkPhysicalDeviceFeatures2;
2232    pub fn gst_vulkan_physical_device_get_handle(
2233        device: *mut GstVulkanPhysicalDevice,
2234    ) -> vulkan::VkPhysicalDevice;
2235    pub fn gst_vulkan_physical_device_get_instance(
2236        device: *mut GstVulkanPhysicalDevice,
2237    ) -> *mut GstVulkanInstance;
2238    pub fn gst_vulkan_physical_device_get_layer_info(
2239        device: *mut GstVulkanPhysicalDevice,
2240        name: *const c_char,
2241        description: *mut *mut c_char,
2242        spec_version: *mut u32,
2243        implementation_version: *mut u32,
2244    ) -> gboolean;
2245    #[cfg(feature = "v1_30")]
2246    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2247    pub fn gst_vulkan_physical_device_get_properties(
2248        device: *mut GstVulkanPhysicalDevice,
2249    ) -> *const vulkan::VkPhysicalDeviceProperties2;
2250
2251    //=========================================================================
2252    // GstVulkanQueue
2253    //=========================================================================
2254    pub fn gst_vulkan_queue_get_type() -> GType;
2255    pub fn gst_vulkan_queue_flags_to_string(queue_bits: vulkan::VkQueueFlags) -> *mut c_char;
2256    pub fn gst_vulkan_queue_handle_context_query(
2257        element: *mut gst::GstElement,
2258        query: *mut gst::GstQuery,
2259        queue: *mut GstVulkanQueue,
2260    ) -> gboolean;
2261    pub fn gst_vulkan_queue_run_context_query(
2262        element: *mut gst::GstElement,
2263        queue: *mut *mut GstVulkanQueue,
2264    ) -> gboolean;
2265    pub fn gst_vulkan_queue_create_command_pool(
2266        queue: *mut GstVulkanQueue,
2267        error: *mut *mut glib::GError,
2268    ) -> *mut GstVulkanCommandPool;
2269    pub fn gst_vulkan_queue_get_device(queue: *mut GstVulkanQueue) -> *mut GstVulkanDevice;
2270    pub fn gst_vulkan_queue_submit_lock(queue: *mut GstVulkanQueue);
2271    pub fn gst_vulkan_queue_submit_unlock(queue: *mut GstVulkanQueue);
2272
2273    //=========================================================================
2274    // GstVulkanSwapper
2275    //=========================================================================
2276    pub fn gst_vulkan_swapper_get_type() -> GType;
2277    pub fn gst_vulkan_swapper_new(
2278        device: *mut GstVulkanDevice,
2279        window: *mut GstVulkanWindow,
2280    ) -> *mut GstVulkanSwapper;
2281    pub fn gst_vulkan_swapper_choose_queue(
2282        swapper: *mut GstVulkanSwapper,
2283        available_queue: *mut GstVulkanQueue,
2284        error: *mut *mut glib::GError,
2285    ) -> gboolean;
2286    pub fn gst_vulkan_swapper_get_supported_caps(
2287        swapper: *mut GstVulkanSwapper,
2288        error: *mut *mut glib::GError,
2289    ) -> *mut gst::GstCaps;
2290    pub fn gst_vulkan_swapper_get_surface_rectangles(
2291        swapper: *mut GstVulkanSwapper,
2292        input_image: *mut gst_video::GstVideoRectangle,
2293        surface_location: *mut gst_video::GstVideoRectangle,
2294        display_rect: *mut gst_video::GstVideoRectangle,
2295    );
2296    pub fn gst_vulkan_swapper_render_buffer(
2297        swapper: *mut GstVulkanSwapper,
2298        buffer: *mut gst::GstBuffer,
2299        error: *mut *mut glib::GError,
2300    ) -> gboolean;
2301    pub fn gst_vulkan_swapper_set_caps(
2302        swapper: *mut GstVulkanSwapper,
2303        caps: *mut gst::GstCaps,
2304        error: *mut *mut glib::GError,
2305    ) -> gboolean;
2306
2307    //=========================================================================
2308    // GstVulkanTrashFenceList
2309    //=========================================================================
2310    pub fn gst_vulkan_trash_fence_list_get_type() -> GType;
2311    pub fn gst_vulkan_trash_fence_list_new() -> *mut GstVulkanTrashList;
2312
2313    //=========================================================================
2314    // GstVulkanTrashList
2315    //=========================================================================
2316    pub fn gst_vulkan_trash_list_get_type() -> GType;
2317    pub fn gst_vulkan_trash_list_acquire(
2318        trash_list: *mut GstVulkanTrashList,
2319        fence: *mut GstVulkanFence,
2320        notify: GstVulkanTrashNotify,
2321        user_data: gpointer,
2322    ) -> *mut GstVulkanTrash;
2323    pub fn gst_vulkan_trash_list_add(
2324        trash_list: *mut GstVulkanTrashList,
2325        trash: *mut GstVulkanTrash,
2326    ) -> gboolean;
2327    pub fn gst_vulkan_trash_list_gc(trash_list: *mut GstVulkanTrashList);
2328    pub fn gst_vulkan_trash_list_wait(
2329        trash_list: *mut GstVulkanTrashList,
2330        timeout: u64,
2331    ) -> gboolean;
2332
2333    //=========================================================================
2334    // GstVulkanVideoFilter
2335    //=========================================================================
2336    pub fn gst_vulkan_video_filter_get_type() -> GType;
2337    #[cfg(feature = "v1_26")]
2338    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2339    pub fn gst_vulkan_video_filter_get_device(
2340        filter: *mut GstVulkanVideoFilter,
2341    ) -> *mut GstVulkanDevice;
2342    #[cfg(feature = "v1_26")]
2343    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2344    pub fn gst_vulkan_video_filter_get_instance(
2345        filter: *mut GstVulkanVideoFilter,
2346    ) -> *mut GstVulkanInstance;
2347    #[cfg(feature = "v1_26")]
2348    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2349    pub fn gst_vulkan_video_filter_get_queue(
2350        filter: *mut GstVulkanVideoFilter,
2351    ) -> *mut GstVulkanQueue;
2352
2353    //=========================================================================
2354    // GstVulkanWindow
2355    //=========================================================================
2356    pub fn gst_vulkan_window_get_type() -> GType;
2357    pub fn gst_vulkan_window_new(display: *mut GstVulkanDisplay) -> *mut GstVulkanWindow;
2358    pub fn gst_vulkan_window_close(window: *mut GstVulkanWindow);
2359    pub fn gst_vulkan_window_get_display(window: *mut GstVulkanWindow) -> *mut GstVulkanDisplay;
2360    pub fn gst_vulkan_window_get_presentation_support(
2361        window: *mut GstVulkanWindow,
2362        device: *mut GstVulkanDevice,
2363        queue_family_idx: u32,
2364    ) -> gboolean;
2365    pub fn gst_vulkan_window_get_surface(
2366        window: *mut GstVulkanWindow,
2367        error: *mut *mut glib::GError,
2368    ) -> vulkan::VkSurfaceKHR;
2369    pub fn gst_vulkan_window_get_surface_dimensions(
2370        window: *mut GstVulkanWindow,
2371        width: *mut c_uint,
2372        height: *mut c_uint,
2373    );
2374    pub fn gst_vulkan_window_handle_events(window: *mut GstVulkanWindow, handle_events: gboolean);
2375    pub fn gst_vulkan_window_open(
2376        window: *mut GstVulkanWindow,
2377        error: *mut *mut glib::GError,
2378    ) -> gboolean;
2379    pub fn gst_vulkan_window_redraw(window: *mut GstVulkanWindow);
2380    pub fn gst_vulkan_window_resize(window: *mut GstVulkanWindow, width: c_int, height: c_int);
2381    pub fn gst_vulkan_window_send_key_event(
2382        window: *mut GstVulkanWindow,
2383        event_type: *const c_char,
2384        key_str: *const c_char,
2385    );
2386    pub fn gst_vulkan_window_send_mouse_event(
2387        window: *mut GstVulkanWindow,
2388        event_type: *const c_char,
2389        button: c_int,
2390        posx: c_double,
2391        posy: c_double,
2392    );
2393    pub fn gst_vulkan_window_set_window_handle(window: *mut GstVulkanWindow, handle: uintptr_t);
2394
2395    //=========================================================================
2396    // Other functions
2397    //=========================================================================
2398    pub fn gst_context_get_vulkan_device(
2399        context: *mut gst::GstContext,
2400        device: *mut *mut GstVulkanDevice,
2401    ) -> gboolean;
2402    pub fn gst_context_get_vulkan_display(
2403        context: *mut gst::GstContext,
2404        display: *mut *mut GstVulkanDisplay,
2405    ) -> gboolean;
2406    pub fn gst_context_get_vulkan_instance(
2407        context: *mut gst::GstContext,
2408        instance: *mut *mut GstVulkanInstance,
2409    ) -> gboolean;
2410    pub fn gst_context_get_vulkan_queue(
2411        context: *mut gst::GstContext,
2412        queue: *mut *mut GstVulkanQueue,
2413    ) -> gboolean;
2414    pub fn gst_context_set_vulkan_device(
2415        context: *mut gst::GstContext,
2416        device: *mut GstVulkanDevice,
2417    );
2418    pub fn gst_context_set_vulkan_display(
2419        context: *mut gst::GstContext,
2420        display: *mut GstVulkanDisplay,
2421    );
2422    pub fn gst_context_set_vulkan_instance(
2423        context: *mut gst::GstContext,
2424        instance: *mut GstVulkanInstance,
2425    );
2426    pub fn gst_context_set_vulkan_queue(context: *mut gst::GstContext, queue: *mut GstVulkanQueue);
2427    pub fn gst_is_vulkan_buffer_memory(mem: *mut gst::GstMemory) -> gboolean;
2428    pub fn gst_is_vulkan_image_memory(mem: *mut gst::GstMemory) -> gboolean;
2429    pub fn gst_is_vulkan_memory(mem: *mut gst::GstMemory) -> gboolean;
2430    pub fn gst_vulkan_create_shader(
2431        device: *mut GstVulkanDevice,
2432        code: *const c_char,
2433        size: size_t,
2434        error: *mut *mut glib::GError,
2435    ) -> *mut GstVulkanHandle;
2436    #[cfg(feature = "v1_30")]
2437    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2438    pub fn gst_vulkan_element_get_merged_requested_device_extensions_context(
2439        element: *mut gst::GstElement,
2440    ) -> *mut gst::GstContext;
2441    #[cfg(feature = "v1_30")]
2442    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2443    pub fn gst_vulkan_element_get_merged_requested_instance_extensions_context(
2444        element: *mut gst::GstElement,
2445    ) -> *mut gst::GstContext;
2446    pub fn gst_vulkan_ensure_element_data(
2447        element: *mut gst::GstElement,
2448        display_ptr: *mut *mut GstVulkanDisplay,
2449        instance_ptr: *mut *mut GstVulkanInstance,
2450    ) -> gboolean;
2451    #[cfg(feature = "v1_26")]
2452    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2453    pub fn gst_vulkan_ensure_element_device(
2454        element: *mut gst::GstElement,
2455        instance: *mut GstVulkanInstance,
2456        device_ptr: *mut *mut GstVulkanDevice,
2457        device_id: c_uint,
2458    ) -> gboolean;
2459    pub fn gst_vulkan_format_from_video_info(
2460        v_info: *mut gst_video::GstVideoInfo,
2461        plane: c_uint,
2462    ) -> vulkan::VkFormat;
2463    #[cfg(feature = "v1_24")]
2464    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2465    pub fn gst_vulkan_format_from_video_info_2(
2466        device: *mut GstVulkanDevice,
2467        info: *mut gst_video::GstVideoInfo,
2468        tiling: vulkan::VkImageTiling,
2469        no_multiplane: gboolean,
2470        requested_usage: vulkan::VkImageUsageFlags,
2471        fmts: *mut [vulkan::VkFormat; 4],
2472        n_imgs: *mut c_int,
2473        usage: *mut vulkan::VkImageUsageFlags,
2474    ) -> gboolean;
2475    #[cfg(feature = "v1_24")]
2476    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2477    pub fn gst_vulkan_format_get_aspect(format: vulkan::VkFormat) -> c_uint;
2478    pub fn gst_vulkan_format_get_info(format: vulkan::VkFormat) -> *const GstVulkanFormatInfo;
2479    #[cfg(feature = "v1_26")]
2480    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2481    pub fn gst_vulkan_format_get_map(
2482        format: gst_video::GstVideoFormat,
2483    ) -> *const GstVulkanFormatMap;
2484    #[cfg(feature = "v1_24")]
2485    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2486    pub fn gst_vulkan_format_to_video_format(
2487        vk_format: vulkan::VkFormat,
2488    ) -> gst_video::GstVideoFormat;
2489    pub fn gst_vulkan_get_or_create_image_view(
2490        image: *mut GstVulkanImageMemory,
2491    ) -> *mut GstVulkanImageView;
2492    #[cfg(feature = "v1_24")]
2493    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2494    pub fn gst_vulkan_get_or_create_image_view_with_info(
2495        image: *mut GstVulkanImageMemory,
2496        create_info: *const vulkan::VkImageViewCreateInfo,
2497    ) -> *mut GstVulkanImageView;
2498    pub fn gst_vulkan_global_context_query(
2499        element: *mut gst::GstElement,
2500        context_type: *const c_char,
2501    );
2502    pub fn gst_vulkan_local_context_query(
2503        element: *mut gst::GstElement,
2504        context_type: *const c_char,
2505    ) -> *mut gst::GstQuery;
2506    #[cfg(feature = "v1_20")]
2507    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2508    pub fn gst_vulkan_present_mode_to_string(
2509        present_mode: vulkan::VkPresentModeKHR,
2510    ) -> *const c_char;
2511    #[cfg(feature = "v1_30")]
2512    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2513    pub fn gst_vulkan_requested_device_extensions_context_new() -> *mut gst::GstContext;
2514    #[cfg(feature = "v1_30")]
2515    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2516    pub fn gst_vulkan_requested_extensions_context_add(
2517        context: *mut gst::GstContext,
2518        extension_name: *const c_char,
2519    );
2520    #[cfg(feature = "v1_30")]
2521    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2522    pub fn gst_vulkan_requested_extensions_context_dup_extensions(
2523        context: *mut gst::GstContext,
2524    ) -> *mut *mut c_char;
2525    #[cfg(feature = "v1_30")]
2526    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2527    pub fn gst_vulkan_requested_extensions_context_get_vulkan_instance(
2528        context: *mut gst::GstContext,
2529        instance: *mut *mut GstVulkanInstance,
2530    ) -> gboolean;
2531    #[cfg(feature = "v1_30")]
2532    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2533    pub fn gst_vulkan_requested_extensions_context_set_vulkan_instance(
2534        context: *mut gst::GstContext,
2535        instance: *mut GstVulkanInstance,
2536    );
2537    #[cfg(feature = "v1_30")]
2538    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2539    pub fn gst_vulkan_requested_extensions_global_context_query(
2540        element: *mut gst::GstElement,
2541        context_type: *const c_char,
2542    );
2543    #[cfg(feature = "v1_30")]
2544    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2545    pub fn gst_vulkan_requested_extensions_handle_context_query(
2546        element: *mut gst::GstElement,
2547        query: *mut gst::GstQuery,
2548        continue_direction: gst::GstPadDirection,
2549        instance: *mut GstVulkanInstance,
2550    ) -> gboolean;
2551    #[cfg(feature = "v1_30")]
2552    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2553    pub fn gst_vulkan_requested_extensions_local_context_query(
2554        element: *mut gst::GstElement,
2555        context_type: *const c_char,
2556        instance: *mut GstVulkanInstance,
2557    ) -> *mut gst::GstQuery;
2558    #[cfg(feature = "v1_30")]
2559    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2560    pub fn gst_vulkan_requested_extensions_merge_from_element(
2561        element: *mut gst::GstElement,
2562        dst: *mut gst::GstContext,
2563    );
2564    #[cfg(feature = "v1_30")]
2565    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2566    pub fn gst_vulkan_requested_instance_extensions_context_new() -> *mut gst::GstContext;
2567    #[cfg(feature = "v1_30")]
2568    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2569    pub fn gst_vulkan_resolve_mode_flags_to_string(
2570        resolve_mode: vulkan::VkResolveModeFlags,
2571    ) -> *mut c_char;
2572    #[cfg(feature = "v1_22")]
2573    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2574    pub fn gst_vulkan_result_to_string(result: vulkan::VkResult) -> *const c_char;
2575    pub fn gst_vulkan_run_query(
2576        element: *mut gst::GstElement,
2577        query: *mut gst::GstQuery,
2578        direction: gst::GstPadDirection,
2579    ) -> gboolean;
2580    pub fn gst_vulkan_sample_count_flags_to_string(
2581        sample_count_bits: vulkan::VkSampleCountFlags,
2582    ) -> *mut c_char;
2583    #[cfg(feature = "v1_30")]
2584    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2585    pub fn gst_vulkan_shader_stage_flags_to_string(
2586        shader_flags: vulkan::VkShaderStageFlags,
2587    ) -> *mut c_char;
2588    #[cfg(feature = "v1_30")]
2589    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
2590    pub fn gst_vulkan_subgroup_feature_flags_to_string(
2591        subgroup_feature: vulkan::VkSubgroupFeatureFlags,
2592    ) -> *mut c_char;
2593
2594}