diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-06-07 07:13:55 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-06-07 07:13:55 +0000 |
commit | 678f3028174476cb9a837a00627d5cdde36c1303 (patch) | |
tree | 18f894a15c955380466e7f2b989d7213433d9c02 | |
parent | bbd55bb0be13331b9c143e13f5ddad6547867a69 (diff) | |
parent | 4f20d68fa5afb8e200ed1ba96c1e23055de32681 (diff) | |
download | Camera2-android11-mainline-release.tar.gz |
Snap for 6566263 from 4f20d68fa5afb8e200ed1ba96c1e23055de32681 to mainline-releaser_aml_301500702android-mainline-12.0.0_r55android-mainline-11.0.0_r9android-mainline-11.0.0_r8android-mainline-11.0.0_r7android-mainline-11.0.0_r6android-mainline-11.0.0_r5android-mainline-11.0.0_r45android-mainline-11.0.0_r4android-mainline-11.0.0_r33android-mainline-11.0.0_r3android-mainline-11.0.0_r29android-mainline-11.0.0_r2android-mainline-11.0.0_r19android-mainline-11.0.0_r10android-mainline-11.0.0_r1android11-mainline-sparse-2021-jan-releaseandroid11-mainline-sparse-2020-dec-releaseandroid11-mainline-release
Change-Id: Ide2084ef786c07550bf3373dbb396c526916996e
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); |