From e8dd1e0b2e321a1c75ad148a6f44076fdb61eead Mon Sep 17 00:00:00 2001 From: Guoting Lei <141813170+BrainLei@users.noreply.github.com> Date: Thu, 29 Feb 2024 21:53:36 +0800 Subject: [PATCH] fix: Use `0x0` as a fallback Size if `SENSOR_INFO_PHYSICAL_SIZE` is null (e.g. on USB cameras) (#2608) 2602:There is a NullPointerException here because CameraCharacteristics cannot get the SENSOR_INFO_PHYSICAL_SIZE value of the camera device --- .../java/com/mrousavy/camera/core/CameraDeviceDetails.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package/android/src/main/java/com/mrousavy/camera/core/CameraDeviceDetails.kt b/package/android/src/main/java/com/mrousavy/camera/core/CameraDeviceDetails.kt index a589c26..028cbf6 100644 --- a/package/android/src/main/java/com/mrousavy/camera/core/CameraDeviceDetails.kt +++ b/package/android/src/main/java/com/mrousavy/camera/core/CameraDeviceDetails.kt @@ -10,6 +10,7 @@ import android.os.Build import android.util.Log import android.util.Range import android.util.Size +import android.util.SizeF import android.view.SurfaceHolder import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.ReadableArray @@ -68,7 +69,7 @@ class CameraDeviceDetails(private val cameraManager: CameraManager, val cameraId // 35mm is the film standard sensor size characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS) ?: floatArrayOf(35f) } - val sensorSize by lazy { characteristics.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE)!! } + val sensorSize by lazy { characteristics.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE) ?: SizeF(0f, 0f) } val activeSize get() = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE)!! val sensorOrientation by lazy { @@ -230,6 +231,9 @@ class CameraDeviceDetails(private val cameraManager: CameraManager, val cameraId } private fun getFieldOfView(focalLength: Float): Double { + if ((sensorSize.width == 0f) || (sensorSize.height == 0f)) { + return 0.0 + } val sensorDiagonal = sqrt((sensorSize.width * sensorSize.width + sensorSize.height * sensorSize.height).toDouble()) val fovRadians = 2.0 * atan2(sensorDiagonal, (2.0 * focalLength)) return Math.toDegrees(fovRadians)