From 3d18104a28e445bfbe267dccc1a19dab9f524980 Mon Sep 17 00:00:00 2001 From: BK | Mobile Apps Date: Wed, 8 Mar 2023 15:24:14 +0100 Subject: [PATCH 1/2] [#89] Use the Ultra WIde Camera per default if available Autofocus on devices that are equipped with an Ultra Wide Camera seems to be off using the default Camera. This is why we select the Ultra Wide Camera per default now. --- Sources/CodeScanner/CodeScanner.swift | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Sources/CodeScanner/CodeScanner.swift b/Sources/CodeScanner/CodeScanner.swift index c89721f..fc588ea 100644 --- a/Sources/CodeScanner/CodeScanner.swift +++ b/Sources/CodeScanner/CodeScanner.swift @@ -83,7 +83,7 @@ public struct CodeScannerView: UIViewControllerRepresentable { shouldVibrateOnSuccess: Bool = true, isTorchOn: Bool = false, isGalleryPresented: Binding = .constant(false), - videoCaptureDevice: AVCaptureDevice? = AVCaptureDevice.default(for: .video), + videoCaptureDevice: AVCaptureDevice? = AVCaptureDevice.bestForVideo, completion: @escaping (Result) -> Void ) { self.codeTypes = codeTypes @@ -115,6 +115,16 @@ public struct CodeScannerView: UIViewControllerRepresentable { } +public extension AVCaptureDevice { + + /// This returns the Ultra Wide Camera on capable devices and the default Camera for Video otherwise. + static var bestForVideo: AVCaptureDevice? { + let deviceHasUltraWideCamera = !AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInUltraWideCamera], mediaType: .video, position: .back).devices.isEmpty + return deviceHasUltraWideCamera ? AVCaptureDevice.default(.builtInUltraWideCamera, for: .video, position: .back) : AVCaptureDevice.default(for: .video) + } + +} + @available(macCatalyst 14.0, *) struct CodeScannerView_Previews: PreviewProvider { static var previews: some View { From 6e3114415fed3500aa4b003676fc82568f623fec Mon Sep 17 00:00:00 2001 From: NathanFallet Date: Thu, 9 Mar 2023 14:00:09 +0100 Subject: [PATCH 2/2] Moving extension and fixing missing available annotation --- Sources/CodeScanner/CodeScanner.swift | 10 ---------- Sources/CodeScanner/ScannerViewController.swift | 11 +++++++++++ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Sources/CodeScanner/CodeScanner.swift b/Sources/CodeScanner/CodeScanner.swift index fc588ea..827069e 100644 --- a/Sources/CodeScanner/CodeScanner.swift +++ b/Sources/CodeScanner/CodeScanner.swift @@ -115,16 +115,6 @@ public struct CodeScannerView: UIViewControllerRepresentable { } -public extension AVCaptureDevice { - - /// This returns the Ultra Wide Camera on capable devices and the default Camera for Video otherwise. - static var bestForVideo: AVCaptureDevice? { - let deviceHasUltraWideCamera = !AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInUltraWideCamera], mediaType: .video, position: .back).devices.isEmpty - return deviceHasUltraWideCamera ? AVCaptureDevice.default(.builtInUltraWideCamera, for: .video, position: .back) : AVCaptureDevice.default(for: .video) - } - -} - @available(macCatalyst 14.0, *) struct CodeScannerView_Previews: PreviewProvider { static var previews: some View { diff --git a/Sources/CodeScanner/ScannerViewController.swift b/Sources/CodeScanner/ScannerViewController.swift index 3d5011f..b21ed44 100644 --- a/Sources/CodeScanner/ScannerViewController.swift +++ b/Sources/CodeScanner/ScannerViewController.swift @@ -524,3 +524,14 @@ extension CodeScannerView.ScannerViewController: AVCapturePhotoCaptureDelegate { } } + +@available(macCatalyst 14.0, *) +public extension AVCaptureDevice { + + /// This returns the Ultra Wide Camera on capable devices and the default Camera for Video otherwise. + static var bestForVideo: AVCaptureDevice? { + let deviceHasUltraWideCamera = !AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInUltraWideCamera], mediaType: .video, position: .back).devices.isEmpty + return deviceHasUltraWideCamera ? AVCaptureDevice.default(.builtInUltraWideCamera, for: .video, position: .back) : AVCaptureDevice.default(for: .video) + } + +}