From 9771aed88abcd175f21c8d0a988194c7a088504b Mon Sep 17 00:00:00 2001 From: Jayant Chowdhary Date: Fri, 15 Feb 2019 10:31:54 -0800 Subject: BasicCameraFactory: check if continuous picture af is available before requesting it. Bug: 119284303 Test: Click a picture on a device without AF on front camera. Change-Id: I5133d56d69f7a1f6e01d6682fff91202aaa9be17 Signed-off-by: Jayant Chowdhary --- src/com/android/camera/one/OneCameraCharacteristics.java | 5 +++++ .../camera/one/v1/OneCameraCharacteristicsImpl.java | 5 +++++ .../camera/one/v2/OneCameraCharacteristicsImpl.java | 14 ++++++++++++++ .../android/camera/one/v2/common/BasicCameraFactory.java | 8 ++++++-- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/com/android/camera/one/OneCameraCharacteristics.java b/src/com/android/camera/one/OneCameraCharacteristics.java index 24584da45..27504a243 100644 --- a/src/com/android/camera/one/OneCameraCharacteristics.java +++ b/src/com/android/camera/one/OneCameraCharacteristics.java @@ -134,6 +134,11 @@ public interface OneCameraCharacteristics { */ public boolean isAutoFocusSupported(); + /** + * @return true if this camera supports continuous picture autofocus. + */ + public boolean isContinuousPictureAutoFocusSupported(); + /** * @return true if this camera supports custom AutoExposure regions. */ diff --git a/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java b/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java index b14e66ec1..c525b572d 100644 --- a/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java +++ b/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java @@ -175,6 +175,11 @@ public class OneCameraCharacteristicsImpl implements OneCameraCharacteristics { return getCameraDirection() == Facing.BACK; } + @Override + public boolean isContinuousPictureAutoFocusSupported() { + return getCameraDirection() == Facing.BACK; + } + @Override public boolean isAutoExposureSupported() { // Custom AE is only supported on the back camera for legacy devices. diff --git a/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java b/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java index f7a2b7e17..77e9a8173 100644 --- a/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java +++ b/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java @@ -243,6 +243,20 @@ public class OneCameraCharacteristicsImpl implements OneCameraCharacteristics { return maxAfRegions != null && maxAfRegions > 0; } + @Override + public boolean isContinuousPictureAutoFocusSupported() { + int[] availableAfModes = + mCameraCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES); + boolean continuousPictureAfModeAvailable = false; + for (int i = 0; i < availableAfModes.length; i++) { + if (availableAfModes[i] == CameraCharacteristics.CONTROL_AF_MODE_CONTINUOUS_PICTURE) { + continuousPictureAfModeAvailable = true; + break; + } + } + return isAutoFocusSupported() && continuousPictureAfModeAvailable; + } + @Override public boolean isAutoExposureSupported() { Integer maxAeRegions = mCameraCharacteristics.get( diff --git a/src/com/android/camera/one/v2/common/BasicCameraFactory.java b/src/com/android/camera/one/v2/common/BasicCameraFactory.java index 2cd40984f..c9ed57f12 100644 --- a/src/com/android/camera/one/v2/common/BasicCameraFactory.java +++ b/src/com/android/camera/one/v2/common/BasicCameraFactory.java @@ -87,8 +87,12 @@ public class BasicCameraFactory { Observable hdrSceneSetting, int templateType) { RequestTemplate requestTemplate = new RequestTemplate(rootTemplate); - requestTemplate.setParam( - CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); + if (cameraCharacteristics.isContinuousPictureAutoFocusSupported()) { + requestTemplate.setParam( + CaptureRequest.CONTROL_AF_MODE, + CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); + } + requestTemplate.setParam( CaptureRequest.CONTROL_AE_MODE, new FlashBasedAEMode(flash, hdrSceneSetting)); requestTemplate.setParam( -- cgit v1.2.3