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;