1#![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_sys as gst;
17
18mod manual;
19
20pub use manual::*;
21
22#[cfg(unix)]
23#[allow(unused_imports)]
24use libc::{dev_t, gid_t, pid_t, socklen_t, uid_t};
25#[allow(unused_imports)]
26use libc::{intptr_t, off_t, size_t, ssize_t, time_t, uintptr_t, FILE};
27#[allow(unused_imports)]
28use std::ffi::{
29 c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort, c_void,
30};
31
32#[allow(unused_imports)]
33use glib::{gboolean, gconstpointer, gpointer, GType};
34
35pub type GstAnalyticsMtdType = uintptr_t;
37
38pub type GstSegmentationType = c_int;
40pub const GST_SEGMENTATION_TYPE_SEMANTIC: GstSegmentationType = 0;
41pub const GST_SEGMENTATION_TYPE_INSTANCE: GstSegmentationType = 1;
42
43pub type GstTensorDataType = c_int;
44pub const GST_TENSOR_DATA_TYPE_INT4: GstTensorDataType = 0;
45pub const GST_TENSOR_DATA_TYPE_INT8: GstTensorDataType = 1;
46pub const GST_TENSOR_DATA_TYPE_INT16: GstTensorDataType = 2;
47pub const GST_TENSOR_DATA_TYPE_INT32: GstTensorDataType = 3;
48pub const GST_TENSOR_DATA_TYPE_INT64: GstTensorDataType = 4;
49pub const GST_TENSOR_DATA_TYPE_UINT4: GstTensorDataType = 5;
50pub const GST_TENSOR_DATA_TYPE_UINT8: GstTensorDataType = 6;
51pub const GST_TENSOR_DATA_TYPE_UINT16: GstTensorDataType = 7;
52pub const GST_TENSOR_DATA_TYPE_UINT32: GstTensorDataType = 8;
53pub const GST_TENSOR_DATA_TYPE_UINT64: GstTensorDataType = 9;
54pub const GST_TENSOR_DATA_TYPE_FLOAT16: GstTensorDataType = 10;
55pub const GST_TENSOR_DATA_TYPE_FLOAT32: GstTensorDataType = 11;
56pub const GST_TENSOR_DATA_TYPE_FLOAT64: GstTensorDataType = 12;
57pub const GST_TENSOR_DATA_TYPE_BFLOAT16: GstTensorDataType = 13;
58
59pub type GstTensorDimOrder = c_int;
60pub const GST_TENSOR_DIM_ORDER_ROW_MAJOR: GstTensorDimOrder = 0;
61pub const GST_TENSOR_DIM_ORDER_COL_MAJOR: GstTensorDimOrder = 1;
62
63pub type GstTensorLayout = c_int;
64pub const GST_TENSOR_LAYOUT_CONTIGUOUS: GstTensorLayout = 0;
65
66pub const GST_INF_RELATION_SPAN: c_int = -1;
68pub const GST_ANALYTICS_MTD_TYPE_ANY: c_int = 0;
69
70pub type GstAnalyticsRelTypes = c_uint;
72pub const GST_ANALYTICS_REL_TYPE_NONE: GstAnalyticsRelTypes = 0;
73pub const GST_ANALYTICS_REL_TYPE_IS_PART_OF: GstAnalyticsRelTypes = 2;
74pub const GST_ANALYTICS_REL_TYPE_CONTAIN: GstAnalyticsRelTypes = 4;
75pub const GST_ANALYTICS_REL_TYPE_RELATE_TO: GstAnalyticsRelTypes = 8;
76#[cfg(feature = "v1_26")]
77#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
78pub const GST_ANALYTICS_REL_TYPE_N_TO_N: GstAnalyticsRelTypes = 16;
79pub const GST_ANALYTICS_REL_TYPE_ANY: GstAnalyticsRelTypes = 2147483647;
80
81#[derive(Copy, Clone)]
83#[repr(C)]
84pub struct GstAnalyticsClsMtd {
85 pub id: c_uint,
86 pub meta: *mut GstAnalyticsRelationMeta,
87}
88
89impl ::std::fmt::Debug for GstAnalyticsClsMtd {
90 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
91 f.debug_struct(&format!("GstAnalyticsClsMtd @ {self:p}"))
92 .field("id", &self.id)
93 .field("meta", &self.meta)
94 .finish()
95 }
96}
97
98#[derive(Copy, Clone)]
99#[repr(C)]
100pub struct GstAnalyticsMtd {
101 pub id: c_uint,
102 pub meta: *mut GstAnalyticsRelationMeta,
103}
104
105impl ::std::fmt::Debug for GstAnalyticsMtd {
106 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
107 f.debug_struct(&format!("GstAnalyticsMtd @ {self:p}"))
108 .field("id", &self.id)
109 .field("meta", &self.meta)
110 .finish()
111 }
112}
113
114#[derive(Copy, Clone)]
115#[repr(C)]
116pub struct GstAnalyticsMtdImpl {
117 pub name: *const c_char,
118 pub mtd_meta_transform: Option<
119 unsafe extern "C" fn(
120 *mut gst::GstBuffer,
121 *mut GstAnalyticsMtd,
122 *mut gst::GstBuffer,
123 glib::GQuark,
124 gpointer,
125 ) -> gboolean,
126 >,
127 pub mtd_meta_clear: Option<unsafe extern "C" fn(*mut gst::GstBuffer, *mut GstAnalyticsMtd)>,
128 pub _reserved: [gpointer; 19],
129}
130
131impl ::std::fmt::Debug for GstAnalyticsMtdImpl {
132 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
133 f.debug_struct(&format!("GstAnalyticsMtdImpl @ {self:p}"))
134 .field("name", &self.name)
135 .field("mtd_meta_transform", &self.mtd_meta_transform)
136 .field("mtd_meta_clear", &self.mtd_meta_clear)
137 .finish()
138 }
139}
140
141#[derive(Copy, Clone)]
142#[repr(C)]
143pub struct GstAnalyticsODMtd {
144 pub id: c_uint,
145 pub meta: *mut GstAnalyticsRelationMeta,
146}
147
148impl ::std::fmt::Debug for GstAnalyticsODMtd {
149 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
150 f.debug_struct(&format!("GstAnalyticsODMtd @ {self:p}"))
151 .field("id", &self.id)
152 .field("meta", &self.meta)
153 .finish()
154 }
155}
156
157#[repr(C)]
158#[allow(dead_code)]
159pub struct _GstAnalyticsRelationMeta {
160 _data: [u8; 0],
161 _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
162}
163
164pub type GstAnalyticsRelationMeta = _GstAnalyticsRelationMeta;
165
166#[derive(Copy, Clone)]
167#[repr(C)]
168pub struct GstAnalyticsRelationMetaInitParams {
169 pub initial_relation_order: size_t,
170 pub initial_buf_size: size_t,
171}
172
173impl ::std::fmt::Debug for GstAnalyticsRelationMetaInitParams {
174 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
175 f.debug_struct(&format!("GstAnalyticsRelationMetaInitParams @ {self:p}"))
176 .field("initial_relation_order", &self.initial_relation_order)
177 .field("initial_buf_size", &self.initial_buf_size)
178 .finish()
179 }
180}
181
182#[derive(Copy, Clone)]
183#[repr(C)]
184pub struct GstAnalyticsSegmentationMtd {
185 pub id: c_uint,
186 pub meta: *mut GstAnalyticsRelationMeta,
187}
188
189impl ::std::fmt::Debug for GstAnalyticsSegmentationMtd {
190 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
191 f.debug_struct(&format!("GstAnalyticsSegmentationMtd @ {self:p}"))
192 .field("id", &self.id)
193 .field("meta", &self.meta)
194 .finish()
195 }
196}
197
198#[derive(Copy, Clone)]
199#[repr(C)]
200pub struct GstAnalyticsTrackingMtd {
201 pub id: c_uint,
202 pub meta: *mut GstAnalyticsRelationMeta,
203}
204
205impl ::std::fmt::Debug for GstAnalyticsTrackingMtd {
206 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
207 f.debug_struct(&format!("GstAnalyticsTrackingMtd @ {self:p}"))
208 .field("id", &self.id)
209 .field("meta", &self.meta)
210 .finish()
211 }
212}
213
214#[derive(Copy, Clone)]
215#[repr(C)]
216pub struct GstTensorMeta {
217 pub meta: gst::GstMeta,
218 pub num_tensors: size_t,
219 pub tensors: *mut *mut GstTensor,
220}
221
222impl ::std::fmt::Debug for GstTensorMeta {
223 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
224 f.debug_struct(&format!("GstTensorMeta @ {self:p}"))
225 .field("meta", &self.meta)
226 .field("num_tensors", &self.num_tensors)
227 .field("tensors", &self.tensors)
228 .finish()
229 }
230}
231
232extern "C" {
233
234 pub fn gst_analytics_cls_mtd_get_index_by_quark(
238 handle: *const GstAnalyticsClsMtd,
239 quark: glib::GQuark,
240 ) -> c_int;
241 pub fn gst_analytics_cls_mtd_get_length(handle: *const GstAnalyticsClsMtd) -> size_t;
242 pub fn gst_analytics_cls_mtd_get_level(
243 handle: *const GstAnalyticsClsMtd,
244 index: size_t,
245 ) -> c_float;
246 pub fn gst_analytics_cls_mtd_get_quark(
247 handle: *const GstAnalyticsClsMtd,
248 index: size_t,
249 ) -> glib::GQuark;
250 pub fn gst_analytics_cls_mtd_get_mtd_type() -> GstAnalyticsMtdType;
251
252 pub fn gst_analytics_mtd_get_id(instance: *const GstAnalyticsMtd) -> c_uint;
256 pub fn gst_analytics_mtd_get_mtd_type(instance: *const GstAnalyticsMtd) -> GstAnalyticsMtdType;
257 pub fn gst_analytics_mtd_get_size(instance: *const GstAnalyticsMtd) -> size_t;
258 pub fn gst_analytics_mtd_type_get_name(type_: GstAnalyticsMtdType) -> *const c_char;
259
260 pub fn gst_analytics_od_mtd_get_confidence_lvl(
264 instance: *const GstAnalyticsODMtd,
265 loc_conf_lvl: *mut c_float,
266 ) -> gboolean;
267 pub fn gst_analytics_od_mtd_get_location(
268 instance: *const GstAnalyticsODMtd,
269 x: *mut c_int,
270 y: *mut c_int,
271 w: *mut c_int,
272 h: *mut c_int,
273 loc_conf_lvl: *mut c_float,
274 ) -> gboolean;
275 pub fn gst_analytics_od_mtd_get_obj_type(handle: *const GstAnalyticsODMtd) -> glib::GQuark;
276 #[cfg(feature = "v1_26")]
277 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
278 pub fn gst_analytics_od_mtd_get_oriented_location(
279 instance: *const GstAnalyticsODMtd,
280 x: *mut c_int,
281 y: *mut c_int,
282 w: *mut c_int,
283 h: *mut c_int,
284 r: *mut c_float,
285 loc_conf_lvl: *mut c_float,
286 ) -> gboolean;
287 pub fn gst_analytics_od_mtd_get_mtd_type() -> GstAnalyticsMtdType;
288
289 pub fn gst_analytics_relation_meta_add_cls_mtd(
293 instance: *mut GstAnalyticsRelationMeta,
294 length: size_t,
295 confidence_levels: *mut c_float,
296 class_quarks: *mut glib::GQuark,
297 cls_mtd: *mut GstAnalyticsClsMtd,
298 ) -> gboolean;
299 pub fn gst_analytics_relation_meta_add_mtd(
300 meta: *mut GstAnalyticsRelationMeta,
301 impl_: *const GstAnalyticsMtdImpl,
302 size: size_t,
303 rlt_mtd: *mut GstAnalyticsMtd,
304 ) -> gpointer;
305 pub fn gst_analytics_relation_meta_add_od_mtd(
306 instance: *mut GstAnalyticsRelationMeta,
307 type_: glib::GQuark,
308 x: c_int,
309 y: c_int,
310 w: c_int,
311 h: c_int,
312 loc_conf_lvl: c_float,
313 od_mtd: *mut GstAnalyticsODMtd,
314 ) -> gboolean;
315 pub fn gst_analytics_relation_meta_add_one_cls_mtd(
316 instance: *mut GstAnalyticsRelationMeta,
317 confidence_level: c_float,
318 class_quark: glib::GQuark,
319 cls_mtd: *mut GstAnalyticsClsMtd,
320 ) -> gboolean;
321 #[cfg(feature = "v1_26")]
322 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
323 pub fn gst_analytics_relation_meta_add_oriented_od_mtd(
324 instance: *mut GstAnalyticsRelationMeta,
325 type_: glib::GQuark,
326 x: c_int,
327 y: c_int,
328 w: c_int,
329 h: c_int,
330 r: c_float,
331 loc_conf_lvl: c_float,
332 od_mtd: *mut GstAnalyticsODMtd,
333 ) -> gboolean;
334 #[cfg(feature = "v1_26")]
335 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
336 pub fn gst_analytics_relation_meta_add_segmentation_mtd(
337 instance: *mut GstAnalyticsRelationMeta,
338 buffer: *mut gst::GstBuffer,
339 segmentation_type: GstSegmentationType,
340 region_count: size_t,
341 region_ids: *mut c_uint,
342 masks_loc_x: c_int,
343 masks_loc_y: c_int,
344 masks_loc_w: c_uint,
345 masks_loc_h: c_uint,
346 segmentation_mtd: *mut GstAnalyticsSegmentationMtd,
347 ) -> gboolean;
348 pub fn gst_analytics_relation_meta_add_tracking_mtd(
349 instance: *mut GstAnalyticsRelationMeta,
350 tracking_id: u64,
351 tracking_first_seen: gst::GstClockTime,
352 trk_mtd: *mut GstAnalyticsTrackingMtd,
353 ) -> gboolean;
354 pub fn gst_analytics_relation_meta_exist(
355 rmeta: *const GstAnalyticsRelationMeta,
356 an_meta_first_id: c_uint,
357 an_meta_second_id: c_uint,
358 max_relation_span: c_int,
359 cond_types: GstAnalyticsRelTypes,
360 relations_path: *mut *mut glib::GArray,
361 ) -> gboolean;
362 pub fn gst_analytics_relation_meta_get_cls_mtd(
363 meta: *mut GstAnalyticsRelationMeta,
364 an_meta_id: c_uint,
365 rlt: *mut GstAnalyticsClsMtd,
366 ) -> gboolean;
367 pub fn gst_analytics_relation_meta_get_direct_related(
368 meta: *mut GstAnalyticsRelationMeta,
369 an_meta_id: c_uint,
370 relation_type: GstAnalyticsRelTypes,
371 type_: GstAnalyticsMtdType,
372 state: *mut gpointer,
373 rlt_mtd: *mut GstAnalyticsMtd,
374 ) -> gboolean;
375 pub fn gst_analytics_relation_meta_get_mtd(
376 meta: *mut GstAnalyticsRelationMeta,
377 an_meta_id: c_uint,
378 type_: GstAnalyticsMtdType,
379 rlt: *mut GstAnalyticsMtd,
380 ) -> gboolean;
381 pub fn gst_analytics_relation_meta_get_mtd_data(
382 meta: *const GstAnalyticsRelationMeta,
383 an_meta_id: c_uint,
384 ) -> gpointer;
385 pub fn gst_analytics_relation_meta_get_od_mtd(
386 meta: *mut GstAnalyticsRelationMeta,
387 an_meta_id: c_uint,
388 rlt: *mut GstAnalyticsODMtd,
389 ) -> gboolean;
390 pub fn gst_analytics_relation_meta_get_relation(
391 meta: *const GstAnalyticsRelationMeta,
392 an_meta_first_id: c_uint,
393 an_meta_second_id: c_uint,
394 ) -> GstAnalyticsRelTypes;
395 #[cfg(feature = "v1_26")]
396 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
397 pub fn gst_analytics_relation_meta_get_segmentation_mtd(
398 meta: *mut GstAnalyticsRelationMeta,
399 an_meta_id: c_uint,
400 rlt: *mut GstAnalyticsSegmentationMtd,
401 ) -> gboolean;
402 pub fn gst_analytics_relation_meta_get_tracking_mtd(
403 meta: *mut GstAnalyticsRelationMeta,
404 an_meta_id: c_uint,
405 rlt: *mut GstAnalyticsTrackingMtd,
406 ) -> gboolean;
407 pub fn gst_analytics_relation_meta_iterate(
408 meta: *mut GstAnalyticsRelationMeta,
409 state: *mut gpointer,
410 type_: GstAnalyticsMtdType,
411 rlt_mtd: *mut GstAnalyticsMtd,
412 ) -> gboolean;
413 pub fn gst_analytics_relation_meta_set_relation(
414 meta: *mut GstAnalyticsRelationMeta,
415 type_: GstAnalyticsRelTypes,
416 an_meta_first_id: c_uint,
417 an_meta_second_id: c_uint,
418 ) -> gboolean;
419 pub fn gst_analytics_relation_meta_get_info() -> *const gst::GstMetaInfo;
420
421 #[cfg(feature = "v1_26")]
425 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
426 pub fn gst_analytics_segmentation_mtd_get_mask(
427 handle: *const GstAnalyticsSegmentationMtd,
428 masks_loc_x: *mut c_int,
429 masks_loc_y: *mut c_int,
430 masks_loc_w: *mut c_uint,
431 masks_loc_h: *mut c_uint,
432 ) -> *mut gst::GstBuffer;
433 #[cfg(feature = "v1_26")]
434 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
435 pub fn gst_analytics_segmentation_mtd_get_region_count(
436 handle: *const GstAnalyticsSegmentationMtd,
437 ) -> size_t;
438 #[cfg(feature = "v1_26")]
439 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
440 pub fn gst_analytics_segmentation_mtd_get_region_id(
441 handle: *const GstAnalyticsSegmentationMtd,
442 index: size_t,
443 ) -> c_uint;
444 #[cfg(feature = "v1_26")]
445 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
446 pub fn gst_analytics_segmentation_mtd_get_region_index(
447 handle: *const GstAnalyticsSegmentationMtd,
448 index: *mut size_t,
449 id: c_uint,
450 ) -> gboolean;
451 #[cfg(feature = "v1_26")]
452 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
453 pub fn gst_analytics_segmentation_mtd_get_mtd_type() -> GstAnalyticsMtdType;
454
455 pub fn gst_analytics_tracking_mtd_get_info(
459 instance: *const GstAnalyticsTrackingMtd,
460 tracking_id: *mut u64,
461 tracking_first_seen: *mut gst::GstClockTime,
462 tracking_last_seen: *mut gst::GstClockTime,
463 tracking_lost: *mut gboolean,
464 ) -> gboolean;
465 pub fn gst_analytics_tracking_mtd_set_lost(instance: *mut GstAnalyticsTrackingMtd) -> gboolean;
466 pub fn gst_analytics_tracking_mtd_update_last_seen(
467 instance: *mut GstAnalyticsTrackingMtd,
468 last_seen: gst::GstClockTime,
469 ) -> gboolean;
470 pub fn gst_analytics_tracking_mtd_get_mtd_type() -> GstAnalyticsMtdType;
471
472 #[cfg(feature = "v1_26")]
476 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
477 pub fn gst_tensor_get_type() -> GType;
478 #[cfg(feature = "v1_26")]
479 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
480 pub fn gst_tensor_alloc(num_dims: size_t) -> *mut GstTensor;
481 #[cfg(feature = "v1_26")]
482 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
483 pub fn gst_tensor_new_simple(
484 id: glib::GQuark,
485 data_type: GstTensorDataType,
486 data: *mut gst::GstBuffer,
487 dims_order: GstTensorDimOrder,
488 num_dims: size_t,
489 dims: *mut size_t,
490 ) -> *mut GstTensor;
491 #[cfg(feature = "v1_26")]
492 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
493 pub fn gst_tensor_copy(tensor: *const GstTensor) -> *mut GstTensor;
494 #[cfg(feature = "v1_26")]
495 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
496 pub fn gst_tensor_free(tensor: *mut GstTensor);
497 #[cfg(feature = "v1_26")]
498 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
499 pub fn gst_tensor_get_dims(tensor: *mut GstTensor, num_dims: *mut size_t) -> *mut size_t;
500
501 #[cfg(feature = "v1_26")]
505 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
506 pub fn gst_tensor_meta_get(tmeta: *mut GstTensorMeta, index: size_t) -> *const GstTensor;
507 #[cfg(feature = "v1_26")]
508 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
509 pub fn gst_tensor_meta_get_index_from_id(meta: *mut GstTensorMeta, id: glib::GQuark) -> c_int;
510 #[cfg(feature = "v1_26")]
511 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
512 pub fn gst_tensor_meta_set(
513 tmeta: *mut GstTensorMeta,
514 num_tensors: c_uint,
515 tensors: *mut *mut GstTensor,
516 );
517 #[cfg(feature = "v1_26")]
518 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
519 pub fn gst_tensor_meta_get_info() -> *const gst::GstMetaInfo;
520
521 pub fn gst_buffer_add_analytics_relation_meta(
525 buffer: *mut gst::GstBuffer,
526 ) -> *mut GstAnalyticsRelationMeta;
527 pub fn gst_buffer_add_analytics_relation_meta_full(
528 buffer: *mut gst::GstBuffer,
529 init_params: *mut GstAnalyticsRelationMetaInitParams,
530 ) -> *mut GstAnalyticsRelationMeta;
531 #[cfg(feature = "v1_26")]
532 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
533 pub fn gst_buffer_add_tensor_meta(buffer: *mut gst::GstBuffer) -> *mut GstTensorMeta;
534 pub fn gst_buffer_get_analytics_relation_meta(
535 buffer: *mut gst::GstBuffer,
536 ) -> *mut GstAnalyticsRelationMeta;
537 #[cfg(feature = "v1_26")]
538 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
539 pub fn gst_buffer_get_tensor_meta(buffer: *mut gst::GstBuffer) -> *mut GstTensorMeta;
540 pub fn gst_analytics_relation_get_length(instance: *const GstAnalyticsRelationMeta) -> size_t;
541 pub fn gst_analytics_relation_meta_api_get_type() -> GType;
542 #[cfg(feature = "v1_26")]
543 #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
544 pub fn gst_tensor_meta_api_get_type() -> GType;
545
546}