// // Types.swift // ReactNativeCameraKit // import AVFoundation import Foundation // Dummy class used for RCTConvert @objc(CKType) class Types: NSObject {} @objc(CKCameraType) public enum CameraType: Int, CustomStringConvertible { case back case front var avPosition: AVCaptureDevice.Position { switch self { case .back: return .back case .front: return .front } } public var description: String { switch self { case .back: return "back" case .front: return "front" } } } @objc(CKFlashMode) public enum FlashMode: Int, CustomStringConvertible { case on case off case auto var avFlashMode: AVCaptureDevice.FlashMode { switch self { case .on: return .on case .off: return .off case .auto: return .auto } } public var description: String { switch self { case .on: return "on" case .off: return "off" case .auto: return "auto" } } } @objc(CKMaxPhotoQualityPrioritization) public enum MaxPhotoQualityPrioritization: Int, CustomStringConvertible { case speed case balanced case quality var avQualityPrioritization: AVCapturePhotoOutput.QualityPrioritization { switch self { case .speed: return .speed case .balanced: return .balanced case .quality: return .quality } } public var description: String { switch self { case .speed: return "speed" case .balanced: return "balanced" case .quality: return "quality" } } } @objc(CKTorchMode) public enum TorchMode: Int, CustomStringConvertible { case on case off init(from string: String) { switch string { case "on": self = .on default: self = .off } } var avTorchMode: AVCaptureDevice.TorchMode { switch self { case .on: return .on case .off: return .off } } public var description: String { switch self { case .on: return "on" case .off: return "off" } } } @objc(CKFocusMode) public enum FocusMode: Int, CustomStringConvertible { case on case off public var description: String { switch self { case .on: return "on" case .off: return "off" } } } @objc(CKZoomMode) public enum ZoomMode: Int, CustomStringConvertible { case on case off public var description: String { switch self { case .on: return "on" case .off: return "off" } } } @objc(CKResizeMode) public enum ResizeMode: Int, CustomStringConvertible { case cover case contain public var description: String { switch self { case .cover: return "cover" case .contain: return "contain" } } } @objc(CKSetupResult) enum SetupResult: Int { case notStarted case success case cameraNotAuthorized case sessionConfigurationFailed } enum Orientation: Int { case portrait = 0 // ⬆️ case landscapeLeft = 1 // ⬅️ case portraitUpsideDown = 2 // ⬇️ case landscapeRight = 3 // ➡️ init?(from orientation: UIDeviceOrientation) { switch orientation { case .portrait: self = .portrait case .landscapeLeft: self = .landscapeLeft case .portraitUpsideDown: self = .portraitUpsideDown case .landscapeRight: self = .landscapeRight default: return nil } } init?(from orientation: UIInterfaceOrientation) { switch orientation { case .portrait: self = .portrait case .landscapeLeft: self = .landscapeLeft case .portraitUpsideDown: self = .portraitUpsideDown case .landscapeRight: self = .landscapeRight default: return nil } } var videoOrientation: AVCaptureVideoOrientation { switch self { case .portrait: return .portrait case .landscapeLeft: return .landscapeLeft case .portraitUpsideDown: return .portraitUpsideDown case .landscapeRight: return .landscapeRight } } } extension AVCaptureDevice.FocusMode: CustomStringConvertible { public var description: String { switch self { case .autoFocus: return "autofocus" case .continuousAutoFocus: return "continuousAutoFocus" case .locked: return "locked" @unknown default: return "unknown" } } }