From f52e9fd831014d7c96f4452427b390d2a5f0f105 Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Sat, 12 Jun 2021 11:21:26 +0200 Subject: [PATCH] fix: Correctly catch unsupported `colorSpace` errors --- ios/CameraError.swift | 5 +++++ ios/CameraView+AVCaptureSession.swift | 7 ++++++- src/CameraError.ts | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ios/CameraError.swift b/ios/CameraError.swift index 3d85576..98b4b32 100644 --- a/ios/CameraError.swift +++ b/ios/CameraError.swift @@ -112,6 +112,7 @@ enum FormatError { case invalidFps(fps: Int) case invalidHdr case invalidFormat + case invalidColorSpace(colorSpace: String) case invalidPreset(preset: String) var code: String { @@ -124,6 +125,8 @@ enum FormatError { return "invalid-hdr" case .invalidPreset: return "invalid-preset" + case .invalidColorSpace: + return "invalid-color-space" } } @@ -135,6 +138,8 @@ enum FormatError { return "The given FPS were not valid for the currently selected format. Make sure you select a format which `frameRateRanges` includes \(fps) FPS!" case .invalidHdr: return "The currently selected format does not support HDR capture! Make sure you select a format which `frameRateRanges` includes `supportsPhotoHDR`!" + case let .invalidColorSpace(colorSpace): + return "The currently selected format does not support the colorSpace \"\(colorSpace)\"! Make sure you select a format which `colorSpaces` includes \"\(colorSpace)\"!" case let .invalidPreset(preset): return "The preset \"\(preset)\" is not available for the current camera device." } diff --git a/ios/CameraView+AVCaptureSession.swift b/ios/CameraView+AVCaptureSession.swift index 3ebc490..8b89b3a 100644 --- a/ios/CameraView+AVCaptureSession.swift +++ b/ios/CameraView+AVCaptureSession.swift @@ -186,7 +186,12 @@ extension CameraView { device.automaticallyEnablesLowLightBoostWhenAvailable = lowLightBoost!.boolValue } } - if colorSpace != nil, let avColorSpace = try? AVCaptureColorSpace(string: String(colorSpace!)) { + if let colorSpace = self.colorSpace as String? { + guard let avColorSpace = try? AVCaptureColorSpace(string: colorSpace), + device.activeFormat.supportedColorSpaces.contains(avColorSpace) else { + invokeOnError(.format(.invalidColorSpace(colorSpace: colorSpace))) + return + } device.activeColorSpace = avColorSpace } diff --git a/src/CameraError.ts b/src/CameraError.ts index 3349c52..527ce59 100644 --- a/src/CameraError.ts +++ b/src/CameraError.ts @@ -19,6 +19,7 @@ export type FormatError = | 'format/invalid-hdr' | 'format/invalid-low-light-boost' | 'format/invalid-format' + | 'format/invalid-color-space' | 'format/invalid-preset'; export type SessionError = | 'session/camera-not-ready'