From e21a1c2110e34a86ce3499c1cafddcceb0b2226f Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Thu, 18 Jan 2024 10:40:15 +0100 Subject: [PATCH] fix: Throw `not-compatible-with-outputs` error when adding both CodeScannerPipeline and VideoPipeline (#2411) * fix: Throw `not-compatible-with-outputs` error when adding CodeScanner and Video * Format --- .../src/main/java/com/mrousavy/camera/core/CameraError.kt | 7 +++++++ .../main/java/com/mrousavy/camera/core/CameraSession.kt | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/package/android/src/main/java/com/mrousavy/camera/core/CameraError.kt b/package/android/src/main/java/com/mrousavy/camera/core/CameraError.kt index 86f2eee..9936ec3 100644 --- a/package/android/src/main/java/com/mrousavy/camera/core/CameraError.kt +++ b/package/android/src/main/java/com/mrousavy/camera/core/CameraError.kt @@ -119,6 +119,13 @@ class CodeTypeNotSupportedError(codeType: String) : "code-type-not-supported", "The codeType \"$codeType\" is not supported by the Code Scanner!" ) +class CodeScannerTooManyOutputsError : + CameraError( + "code-scanner", + "not-compatible-with-outputs", + "CodeScanner can only be enabled when both video and frameProcessor are disabled! " + + "Use a Frame Processor Plugin for code scanning instead." + ) class ViewNotFoundError(viewId: Int) : CameraError("system", "view-not-found", "The given view (ID $viewId) was not found in the view manager.") diff --git a/package/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt b/package/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt index a067939..2991b71 100644 --- a/package/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt +++ b/package/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt @@ -414,6 +414,12 @@ class CameraSession(private val context: Context, private val cameraManager: Cam // CodeScanner Output val codeScanner = configuration.codeScanner as? CameraConfiguration.Output.Enabled if (codeScanner != null) { + if (video != null) { + // CodeScanner and VideoPipeline are two repeating streams - they cannot be both added. + // In this case, the user should use a Frame Processor Plugin for code scanning instead. + throw CodeScannerTooManyOutputsError() + } + val imageFormat = ImageFormat.YUV_420_888 val sizes = characteristics.getVideoSizes(cameraDevice.id, imageFormat) val size = sizes.closestToOrMax(Size(1280, 720))