summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2020-06-05 20:47:42 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-06-05 20:47:42 +0000
commit4f20d68fa5afb8e200ed1ba96c1e23055de32681 (patch)
tree18f894a15c955380466e7f2b989d7213433d9c02
parent1c67d942b134cdcab63111c981a335117757e140 (diff)
parent1a463d744403d2cef36eeaf072aabeff46602d48 (diff)
downloadCamera2-4f20d68fa5afb8e200ed1ba96c1e23055de32681.tar.gz
Merge "Camera: Avoid enabling unsupported CAF modes during image capture" into rvc-dev am: 1a463d7444android-mainline-12.0.0_r112android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12aml_tz2_305400500aml_tz2_305400300aml_tz2_305400100aml_tz2_304500300aml_tz2_303900110aml_tz2_303900102aml_tz2_303800002aml_tz2_303800001aml_tz2_303200001android12-mainline-tzdata2-releaseandroid11-mainline-tethering-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-releaseaml_tz2_305400100
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Camera2/+/11707502 Change-Id: I76ca318b9f42f87b4dbf220271a18eccdc2d0d76
-rw-r--r--src/com/android/camera/one/v2/SimpleOneCameraFactory.java3
-rw-r--r--src/com/android/camera/one/v2/photo/ConvergedImageCaptureCommand.java54
-rw-r--r--src/com/android/camera/one/v2/photo/PictureTakerFactory.java35
3 files changed, 72 insertions, 20 deletions
diff --git a/src/com/android/camera/one/v2/SimpleOneCameraFactory.java b/src/com/android/camera/one/v2/SimpleOneCameraFactory.java
index 59d94cf54..38bd5eeb6 100644
--- a/src/com/android/camera/one/v2/SimpleOneCameraFactory.java
+++ b/src/com/android/camera/one/v2/SimpleOneCameraFactory.java
@@ -214,7 +214,8 @@ public class SimpleOneCameraFactory implements OneCameraFactory {
pictureTaker = PictureTakerFactory.create(Loggers.tagFactory(), mainExecutor,
cameraCommandExecutor, imageSaverBuilder,
frameServerComponent.provideFrameServer(),
- meteredZoomedRequestBuilder, managedImageReader, flashSetting)
+ meteredZoomedRequestBuilder, managedImageReader, flashSetting,
+ characteristics.isContinuousPictureAutoFocusSupported())
.providePictureTaker();
}
diff --git a/src/com/android/camera/one/v2/photo/ConvergedImageCaptureCommand.java b/src/com/android/camera/one/v2/photo/ConvergedImageCaptureCommand.java
index 38a1303d8..a9cf4204a 100644
--- a/src/com/android/camera/one/v2/photo/ConvergedImageCaptureCommand.java
+++ b/src/com/android/camera/one/v2/photo/ConvergedImageCaptureCommand.java
@@ -64,16 +64,21 @@ class ConvergedImageCaptureCommand implements ImageCaptureCommand {
private final boolean mWaitForAEConvergence;
private final boolean mWaitForAFConvergence;
+ private final boolean mCAFSupport;
+
/**
* Transforms a request template by resetting focus and exposure modes.
*/
- private static RequestBuilder.Factory resetFocusExposureModes(RequestBuilder.Factory template) {
+ private static RequestBuilder.Factory resetFocusExposureModes(RequestBuilder.Factory template,
+ boolean cafSupport) {
RequestTemplate result = new RequestTemplate(template);
result.setParam(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
- result.setParam(CaptureRequest.CONTROL_AF_MODE,
- CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
- result.setParam(CaptureRequest.CONTROL_AF_TRIGGER,
- CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
+ if (cafSupport) {
+ result.setParam(CaptureRequest.CONTROL_AF_MODE,
+ CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+ result.setParam(CaptureRequest.CONTROL_AF_TRIGGER,
+ CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
+ }
result.setParam(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_IDLE);
return result;
@@ -90,6 +95,35 @@ class ConvergedImageCaptureCommand implements ImageCaptureCommand {
* requests.
* @param burst Creates request builders to use for each image captured from
* @param waitForAEConvergence
+ */
+ public ConvergedImageCaptureCommand(ManagedImageReader imageReader, FrameServer frameServer,
+ RequestBuilder.Factory repeatingRequestBuilder,
+ int repeatingRequestTemplate, int stillCaptureRequestTemplate,
+ List<RequestBuilder.Factory> burst, boolean waitForAEConvergence) {
+ mImageReader = imageReader;
+ mFrameServer = frameServer;
+ mRepeatingRequestBuilder = repeatingRequestBuilder;
+ mRepeatingRequestTemplate = repeatingRequestTemplate;
+ mStillCaptureRequestTemplate = stillCaptureRequestTemplate;
+ mBurst = burst;
+ mWaitForAEConvergence = waitForAEConvergence;
+ mWaitForAFConvergence = false;
+ mCAFSupport = false;
+
+ mScanRequestTemplate = resetFocusExposureModes(repeatingRequestBuilder, mCAFSupport);
+ }
+
+ /**
+ * @param imageReader Creates the {@link ImageStream} used for capturing
+ * images to be saved.
+ * @param frameServer Used for interacting with the camera device.
+ * @param repeatingRequestBuilder Creates request builders to use for
+ * repeating requests sent during the scanning phase and after
+ * capture is complete.
+ * @param repeatingRequestTemplate The template type to use for repeating
+ * requests.
+ * @param burst Creates request builders to use for each image captured from
+ * @param waitForAEConvergence
* @param waitForAFConvergence
*/
public ConvergedImageCaptureCommand(ManagedImageReader imageReader, FrameServer frameServer,
@@ -105,10 +139,10 @@ class ConvergedImageCaptureCommand implements ImageCaptureCommand {
mBurst = burst;
mWaitForAEConvergence = waitForAEConvergence;
mWaitForAFConvergence = waitForAFConvergence;
+ mCAFSupport = true;
- mScanRequestTemplate = resetFocusExposureModes(repeatingRequestBuilder);
+ mScanRequestTemplate = resetFocusExposureModes(repeatingRequestBuilder, mCAFSupport);
}
-
/**
* Sends a request to take a picture and blocks until it completes.
*/
@@ -193,8 +227,10 @@ class ConvergedImageCaptureCommand implements ImageCaptureCommand {
for (RequestBuilder.Factory builderTemplate : mBurst) {
RequestBuilder builder = builderTemplate.create(mStillCaptureRequestTemplate);
- builder.setParam(CaptureRequest.CONTROL_AF_MODE, CaptureRequest
- .CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+ if (mCAFSupport) {
+ builder.setParam(CaptureRequest.CONTROL_AF_MODE, CaptureRequest
+ .CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+ }
builder.setParam(CaptureRequest.CONTROL_CAPTURE_INTENT,
CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
diff --git a/src/com/android/camera/one/v2/photo/PictureTakerFactory.java b/src/com/android/camera/one/v2/photo/PictureTakerFactory.java
index 97dd60482..8126d3ebc 100644
--- a/src/com/android/camera/one/v2/photo/PictureTakerFactory.java
+++ b/src/com/android/camera/one/v2/photo/PictureTakerFactory.java
@@ -43,31 +43,46 @@ public final class PictureTakerFactory {
FrameServer frameServer,
RequestBuilder.Factory rootRequestBuilder,
ManagedImageReader sharedImageReader,
- Supplier<OneCamera.PhotoCaptureParameters.Flash> flashMode) {
+ Supplier<OneCamera.PhotoCaptureParameters.Flash> flashMode, boolean cafSupport) {
// When flash is ON, always use the ConvergedImageCaptureCommand which
- // performs the AF & AE precapture sequence.
- ImageCaptureCommand flashOnCommand = new ConvergedImageCaptureCommand(
+ // performs the AE precapture sequence and AF precapture if supported.
+ ImageCaptureCommand flashOnCommand = cafSupport ? new ConvergedImageCaptureCommand(
sharedImageReader, frameServer, rootRequestBuilder,
CameraDevice.TEMPLATE_PREVIEW /* repeatingRequestTemplate */,
CameraDevice.TEMPLATE_STILL_CAPTURE /* stillCaptureRequestTemplate */,
- Arrays.asList(rootRequestBuilder), true /* ae */, true /* af */);
+ Arrays.asList(rootRequestBuilder), true /* ae */, true /* af */) :
+ new ConvergedImageCaptureCommand(
+ sharedImageReader, frameServer, rootRequestBuilder,
+ CameraDevice.TEMPLATE_PREVIEW /* repeatingRequestTemplate */,
+ CameraDevice.TEMPLATE_STILL_CAPTURE /* stillCaptureRequestTemplate */,
+ Arrays.asList(rootRequestBuilder), true /* ae */);
- // When flash is OFF, wait for AF convergence, but not AE convergence
+ // When flash is OFF, wait for AF convergence if AF is supported, but not AE convergence
// (which can be very slow).
- ImageCaptureCommand flashOffCommand = new ConvergedImageCaptureCommand(
+ ImageCaptureCommand flashOffCommand = cafSupport ? new ConvergedImageCaptureCommand(
sharedImageReader, frameServer, rootRequestBuilder,
CameraDevice.TEMPLATE_PREVIEW /* repeatingRequestTemplate */,
CameraDevice.TEMPLATE_STILL_CAPTURE /* stillCaptureRequestTemplate */,
- Arrays.asList(rootRequestBuilder), false /* ae */, true /* af */);
+ Arrays.asList(rootRequestBuilder), false /* ae */, true /* af */) :
+ new ConvergedImageCaptureCommand(
+ sharedImageReader, frameServer, rootRequestBuilder,
+ CameraDevice.TEMPLATE_PREVIEW /* repeatingRequestTemplate */,
+ CameraDevice.TEMPLATE_STILL_CAPTURE /* stillCaptureRequestTemplate */,
+ Arrays.asList(rootRequestBuilder), false /* ae */);
- // When flash is AUTO, wait for AF & AE.
+ // When flash is AUTO, wait for AE and AF if supported.
// TODO OPTIMIZE If the last converged-AE state indicates that flash is
// not necessary, then this could skip waiting for AE convergence.
- ImageCaptureCommand flashAutoCommand = new ConvergedImageCaptureCommand(
+ ImageCaptureCommand flashAutoCommand = cafSupport ? new ConvergedImageCaptureCommand(
sharedImageReader, frameServer, rootRequestBuilder,
CameraDevice.TEMPLATE_PREVIEW /* repeatingRequestTemplate */,
CameraDevice.TEMPLATE_STILL_CAPTURE /* stillCaptureRequestTemplate */,
- Arrays.asList(rootRequestBuilder), true /* ae */, true /* af */);
+ Arrays.asList(rootRequestBuilder), true /* ae */, true /* af */) :
+ new ConvergedImageCaptureCommand(
+ sharedImageReader, frameServer, rootRequestBuilder,
+ CameraDevice.TEMPLATE_PREVIEW /* repeatingRequestTemplate */,
+ CameraDevice.TEMPLATE_STILL_CAPTURE /* stillCaptureRequestTemplate */,
+ Arrays.asList(rootRequestBuilder), true /* ae */);
ImageCaptureCommand flashBasedCommand = new FlashBasedPhotoCommand(logFactory, flashMode,
flashOnCommand, flashAutoCommand, flashOffCommand);