Skip to main content

gstreamer_analytics/
model_info.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use 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}