use crate::{api, arc, av, define_obj_type, ns, objc};
#[doc(alias = "AVCapturePhotoQualityPrioritization")]
#[repr(isize)]
pub enum PhotoQualityPrioritization {
#[doc(alias = "AVCapturePhotoQualityPrioritizationSpeed")]
Speed = 1,
#[doc(alias = "AVCapturePhotoQualityPrioritizationBalanced")]
Balanced = 2,
#[doc(alias = "AVCapturePhotoQualityPrioritizationQuality")]
Quality = 3,
}
define_obj_type!(
#[doc(alias = "AVCapturePhotoOutput")]
pub PhotoOutput(av::CaptureOutput),
AV_CAPTURE_PHOTO_OUTPUT,
#[api::available(macos = 10.15, ios = 10.0, maccatalyst = 14.0, tvos = 17.0)]
);
impl PhotoOutput {
#[objc::msg_send(maxPhotoQualityPrioritization)]
pub fn max_photo_quality_prioritization(&self) -> PhotoQualityPrioritization;
#[objc::msg_send(setMaxPhotoQualityPrioritization:)]
pub fn set_max_photo_quality_prioritization(&mut self, val: PhotoQualityPrioritization);
#[objc::msg_send(isFastCapturePrioritizationSupported)]
pub fn is_fast_capture_prioritization_supported(&self) -> bool;
}
define_obj_type!(
#[doc(alias = "AVCapturePhotoSettings")]
pub PhotoSettings(ns::Id),
AV_CAPTURE_PHOTO_SETTINGS,
#[api::available(macos = 10.15, ios = 10.0, maccatalyst = 14.0, tvos = 17.0)]
);
impl PhotoSettings {
#[objc::msg_send(uniqueID)]
pub fn unique_id(&self) -> i64;
#[objc::msg_send(format)]
pub fn format(&self) -> Option<arc::R<ns::Dictionary<ns::String, ns::Id>>>;
#[objc::msg_send(rawFileFormat)]
#[api::available(ios = 18.0, maccatalyst = 18.0, tvos = 18.0)]
pub fn raw_file_format(&self) -> Option<arc::R<ns::Dictionary<ns::String, ns::Id>>>;
#[objc::msg_send(processedFileType)]
pub fn processed_file_type(&self) -> Option<arc::R<av::FileType>>;
#[objc::msg_send(flashMode)]
pub fn flash_mode(&self) -> av::CaptureFlashMode;
#[objc::msg_send(setFlashMode:)]
pub fn set_flash_mode(&mut self, val: av::CaptureFlashMode);
#[objc::msg_send(isAutoRedEyeReductionEnabled)]
pub fn is_auto_red_eye_reduction_enabled(&self) -> bool;
#[objc::msg_send(setAutoRedEyeReductionEnabled:)]
pub fn set_auto_red_eye_reduction_enabled(&mut self, val: bool);
}
#[link(name = "av", kind = "static")]
unsafe extern "C" {
static AV_CAPTURE_PHOTO_OUTPUT: &'static objc::Class<PhotoOutput>;
static AV_CAPTURE_PHOTO_SETTINGS: &'static objc::Class<PhotoSettings>;
}
#[cfg(test)]
mod tests {
use crate::av::{self, capture};
#[test]
fn basics() {
let mut a = capture::PhotoSettings::new();
let b = capture::PhotoSettings::new();
assert_ne!(a.unique_id(), b.unique_id());
a.format().unwrap();
let file_type = a.processed_file_type().unwrap();
assert_eq!(&file_type, av::FileType::jpeg());
assert_eq!(a.flash_mode(), av::CaptureFlashMode::Off);
a.set_flash_mode(av::CaptureFlashMode::Auto);
assert_eq!(a.flash_mode(), av::CaptureFlashMode::Auto);
assert_eq!(a.is_auto_red_eye_reduction_enabled(), false);
}
}