From 7378ec7d7f56511e709c19b37c956633bb2afab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mihai=20=C8=98eremet?= Date: Sun, 11 Aug 2024 13:20:11 +0100 Subject: [PATCH 1/4] Allow overriding video gravity --- Sources/Camera-SwiftUI/View/CameraPreview.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Sources/Camera-SwiftUI/View/CameraPreview.swift b/Sources/Camera-SwiftUI/View/CameraPreview.swift index e9c0d55..f0c1588 100644 --- a/Sources/Camera-SwiftUI/View/CameraPreview.swift +++ b/Sources/Camera-SwiftUI/View/CameraPreview.swift @@ -64,9 +64,11 @@ public struct CameraPreview: UIViewRepresentable { } public let session: AVCaptureSession - - public init(session: AVCaptureSession) { + public let videoGravity: AVLayerVideoGravity + + public init(session: AVCaptureSession, videoGravity: AVLayerVideoGravity = .resizeAspect) { self.session = session + self.videoGravity = videoGravity } public func makeUIView(context: Context) -> VideoPreviewView { @@ -75,6 +77,7 @@ public struct CameraPreview: UIViewRepresentable { viewFinder.videoPreviewLayer.cornerRadius = 0 viewFinder.videoPreviewLayer.session = session viewFinder.videoPreviewLayer.connection?.videoOrientation = .portrait + viewFinder.videoPreviewLayer.videoGravity = videoGravity return viewFinder } From e7e9375a0d13e3c6ff61ed766a073e077a4150d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mihai=20=C8=98eremet?= Date: Sun, 11 Aug 2024 13:28:58 +0100 Subject: [PATCH 2/4] Add privacy manifest --- Package.swift | 3 ++- Sources/Camera-SwiftUI/Resources/PrivacyInfo.xcprivacy | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 Sources/Camera-SwiftUI/Resources/PrivacyInfo.xcprivacy diff --git a/Package.swift b/Package.swift index 736e4bd..f799181 100644 --- a/Package.swift +++ b/Package.swift @@ -24,7 +24,8 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "Camera-SwiftUI", - dependencies: []), + dependencies: [], + resources: [.copy("Resources/PrivacyInfo.xcprivacy")]), .testTarget( name: "Camera-SwiftUITests", dependencies: ["Camera-SwiftUI"]), diff --git a/Sources/Camera-SwiftUI/Resources/PrivacyInfo.xcprivacy b/Sources/Camera-SwiftUI/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..2fcb82f --- /dev/null +++ b/Sources/Camera-SwiftUI/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,6 @@ + + + + NSPrivacyCollectedDataTypes + + From 648a9e6cb933fbf1ff7e38203c105a9592bfa147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mihai=20=C8=98eremet?= Date: Sun, 11 Aug 2024 14:40:53 +0100 Subject: [PATCH 3/4] Add min and max available zoom --- Sources/Camera-SwiftUI/Service/CameraService.swift | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Sources/Camera-SwiftUI/Service/CameraService.swift b/Sources/Camera-SwiftUI/Service/CameraService.swift index 3dca2eb..b41b7ed 100644 --- a/Sources/Camera-SwiftUI/Service/CameraService.swift +++ b/Sources/Camera-SwiftUI/Service/CameraService.swift @@ -462,7 +462,15 @@ public class CameraService: NSObject, Identifiable { } } } - + + public var minAvailableVideoZoomFactor: CGFloat { + videoDeviceInput.device.minAvailableVideoZoomFactor + } + + public var maxAvailableVideoZoomFactor: CGFloat { + videoDeviceInput.device.maxAvailableVideoZoomFactor + } + public func set(zoom: CGFloat){ let factor = zoom < 1 ? 1 : zoom let device = self.videoDeviceInput.device From e14d2059f0d73c9abbccb47763d6d3b011c53e0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mihai=20=C8=98eremet?= Date: Sun, 11 Aug 2024 14:48:57 +0100 Subject: [PATCH 4/4] Add zoom ramping --- .../Camera-SwiftUI/Service/CameraService.swift | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Sources/Camera-SwiftUI/Service/CameraService.swift b/Sources/Camera-SwiftUI/Service/CameraService.swift index b41b7ed..02a9f9c 100644 --- a/Sources/Camera-SwiftUI/Service/CameraService.swift +++ b/Sources/Camera-SwiftUI/Service/CameraService.swift @@ -484,7 +484,21 @@ public class CameraService: NSObject, Identifiable { print(error.localizedDescription) } } - + + public func ramp(toZoom zoom: CGFloat, withRate rate: Float) { + let factor = zoom < 1 ? 1 : zoom + let device = self.videoDeviceInput.device + + do { + try device.lockForConfiguration() + device.ramp(toVideoZoomFactor: factor, withRate: rate) + device.unlockForConfiguration() + } + catch { + print(error.localizedDescription) + } + } + // MARK: Capture Photo /// - Tag: CapturePhoto