From 7b7d925492b9f6b09bb616acfea998ce2e236a94 Mon Sep 17 00:00:00 2001 From: Adithya R Date: Tue, 26 Sep 2023 20:28:45 +0530 Subject: [PATCH] Camera: Allow setting fallback physical ID for logical camera [2/2] On Redmi Note 8 (ginkgo): * miui camera uses logical id 61 as depth sensor on portrait mode but oss libcam maps it to physical id 2 which is wrong, our physical id of depth sensor is 20 so we must hack it this way Set appropriate system property, for example: persist.sys.camera.fallback_id_2=20 Change-Id: I0c42813d8529b0d769ee8abd0307da97fbfecf5d Signed-off-by: Edwiin Kusuma Jaya --- .../android/hardware/camera2/CameraManager.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 4a2c484b5c22..d434d43c54ca 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -718,7 +718,20 @@ private Map getPhysicalIdToCharsMap( new HashMap(); Set physicalCameraIds = chars.getPhysicalCameraIds(); for (String physicalCameraId : physicalCameraIds) { - CameraCharacteristics physicalChars = getCameraCharacteristics(physicalCameraId); + CameraCharacteristics physicalChars; + try { + physicalChars = getCameraCharacteristics(physicalCameraId); + } catch (Exception e) { + final String fallbackId = SystemProperties.get( + "persist.sys.camera.fallback_id_" + physicalCameraId); + if (fallbackId.isEmpty()) { + throw e; + } + Log.w(TAG, "Could not retrieve camera " + physicalCameraId + " characteristics", e); + Log.i(TAG, "Trying fallback camera " + fallbackId); + // if this also fails, exception will be thrown + physicalChars = getCameraCharacteristics(fallbackId); + } physicalIdsToChars.put(physicalCameraId, physicalChars); } return physicalIdsToChars;