summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-06-07 07:13:55 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-06-07 07:13:55 +0000
commit678f3028174476cb9a837a00627d5cdde36c1303 (patch)
tree18f894a15c955380466e7f2b989d7213433d9c02
parentbbd55bb0be13331b9c143e13f5ddad6547867a69 (diff)
parent4f20d68fa5afb8e200ed1ba96c1e23055de32681 (diff)
downloadCamera2-android11-mainline-release.tar.gz
Change-Id: Ide2084ef786c07550bf3373dbb396c526916996e
-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);