Skip to main content

cidre/vn/
generate_person_segmentation_request.rs

1use crate::{api, arc, define_obj_type, ns, objc, os, vn};
2
3/// Person segmentation level options to favor speed over recognition accuracy.
4/// Accurate is the default option.
5#[derive(Debug, Eq, PartialEq)]
6#[repr(usize)]
7pub enum QualityLevel {
8    Accurate = 0,
9    Balanced,
10    Fast,
11}
12
13define_obj_type!(
14    #[doc(alias = "VNGeneratePersonSegmentationRequest")]
15    pub GenPersonSegmentationRequest(vn::StatefulRequest),
16    VN_GENERATE_PERSON_SEGMENTAION_REQUEST
17);
18
19impl GenPersonSegmentationRequest {
20    pub const REVISION_1: usize = 1;
21
22    #[objc::msg_send(qualityLevel)]
23    pub fn quality_level(&self) -> QualityLevel;
24
25    #[objc::msg_send(setQualityLevel:)]
26    pub fn set_quality_level(&mut self, value: QualityLevel);
27
28    #[objc::msg_send(outputPixelFormat)]
29    pub fn output_pixel_format(&self) -> os::Type;
30
31    #[objc::msg_send(setOutputPixelFormat:)]
32    pub fn set_output_pixel_format(&mut self, value: os::Type);
33
34    #[objc::msg_send(results)]
35    pub fn results(&self) -> Option<arc::R<ns::Array<vn::PixelBufObservation>>>;
36
37    #[objc::msg_send(supportedOutputPixelFormatsAndReturnError:)]
38    #[api::available(
39        macos = 15.0,
40        ios = 18.0,
41        maccatalyst = 18.0,
42        tvos = 18.0,
43        visionos = 2.0
44    )]
45    pub unsafe fn supported_output_pixel_formats_err<'ear>(
46        err: *mut Option<&'ear ns::Error>,
47    ) -> Option<arc::R<ns::Array<ns::Number>>>;
48
49    #[api::available(
50        macos = 15.0,
51        ios = 18.0,
52        maccatalyst = 18.0,
53        tvos = 18.0,
54        visionos = 2.0
55    )]
56    pub fn supported_output_pixel_formats<'ear>() -> ns::Result<'ear, arc::R<ns::Array<ns::Number>>>
57    {
58        ns::if_none(|err| unsafe { Self::supported_output_pixel_formats_err(err) })
59    }
60}
61
62unsafe extern "C" {
63    static VN_GENERATE_PERSON_SEGMENTAION_REQUEST:
64        &'static objc::Class<GenPersonSegmentationRequest>;
65}
66
67#[cfg(test)]
68mod tests {
69    use crate::{
70        cv::PixelFormat, vn::GenPersonSegmentationRequest,
71        vn::generate_person_segmentation_request::QualityLevel,
72    };
73
74    #[test]
75    fn basics() {
76        let request = GenPersonSegmentationRequest::new();
77
78        assert_eq!(request.quality_level(), QualityLevel::Accurate);
79
80        assert_eq!(
81            request.output_pixel_format(),
82            PixelFormat::ONE_COMPONENT_8.0
83        );
84
85        assert!(request.results().is_none());
86    }
87}