gstreamer_analytics/
model_info.rs1use crate::ffi;
4use crate::*;
5use glib::translate::*;
6use std::ptr;
7
8use crate::{ModelInfo, ModelInfoTensorDirection, TensorDataType};
9
10impl ModelInfo {
11 #[doc(alias = "gst_analytics_modelinfo_find_tensor_name")]
12 pub fn find_tensor_name(
13 &self,
14 dir: ModelInfoTensorDirection,
15 index: usize,
16 in_tensor_name: Option<&str>,
17 data_type: TensorDataType,
18 dims: &[usize],
19 ) -> Option<glib::GString> {
20 unsafe {
21 from_glib_full(ffi::gst_analytics_modelinfo_find_tensor_name(
22 self.to_glib_none().0,
23 dir.into_glib(),
24 index,
25 in_tensor_name.to_glib_none().0,
26 data_type.into_glib(),
27 dims.len(),
28 dims.as_ptr(),
29 ))
30 }
31 }
32
33 #[doc(alias = "gst_analytics_modelinfo_get_input_scales_offsets")]
34 #[doc(alias = "get_input_scales_offsets")]
35 pub fn input_scales_offsets(
36 &self,
37 tensor_name: &str,
38 input_mins: &[f64],
39 input_maxs: &[f64],
40 ) -> Option<(glib::Slice<f64>, glib::Slice<f64>)> {
41 unsafe {
42 assert_eq!(input_mins.len(), input_maxs.len());
43
44 let mut num_output_ranges = 0;
45 let mut output_scales = ptr::null_mut();
46 let mut output_offsets = ptr::null_mut();
47 let res = from_glib(ffi::gst_analytics_modelinfo_get_input_scales_offsets(
48 self.to_glib_none().0,
49 tensor_name.to_glib_none().0,
50 input_mins.len(),
51 input_mins.as_ptr(),
52 input_maxs.as_ptr(),
53 &mut num_output_ranges,
54 &mut output_scales,
55 &mut output_offsets,
56 ));
57 if res {
58 Some((
59 glib::Slice::from_glib_full_num(output_scales, num_output_ranges),
60 glib::Slice::from_glib_full_num(output_offsets, num_output_ranges),
61 ))
62 } else {
63 None
64 }
65 }
66 }
67
68 #[doc(alias = "gst_analytics_modelinfo_get_target_ranges")]
69 #[doc(alias = "get_target_ranges")]
70 pub fn target_ranges(&self, tensor_name: &str) -> Option<(glib::Slice<f64>, glib::Slice<f64>)> {
71 unsafe {
72 let mut num_ranges = 0;
73 let mut mins = ptr::null_mut();
74 let mut maxs = ptr::null_mut();
75 let res = from_glib(ffi::gst_analytics_modelinfo_get_target_ranges(
76 mut_override(self.to_glib_none().0),
77 tensor_name.to_glib_none().0,
78 &mut num_ranges,
79 &mut mins,
80 &mut maxs,
81 ));
82 if res {
83 Some((
84 glib::Slice::from_glib_full_num(mins, num_ranges),
85 glib::Slice::from_glib_full_num(maxs, num_ranges),
86 ))
87 } else {
88 None
89 }
90 }
91 }
92}