diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2020-06-05 20:47:42 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-06-05 20:47:42 +0000 |
commit | 4f20d68fa5afb8e200ed1ba96c1e23055de32681 (patch) | |
tree | 18f894a15c955380466e7f2b989d7213433d9c02 | |
parent | 1c67d942b134cdcab63111c981a335117757e140 (diff) | |
parent | 1a463d744403d2cef36eeaf072aabeff46602d48 (diff) | |
download | Camera2-aml_tz2_305400500.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
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); |