cidre/vn/
generate_person_segmentation_request.rs1use crate::{api, arc, define_obj_type, ns, objc, os, vn};
2
3#[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}