From 40180462ab7af9bb06494ecf895d8eca26424835 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Mon, 2 Sep 2019 18:49:30 +0200 Subject: [PATCH] Fix TORCH bug --- .../otaliastudios/cameraview/engine/Camera2Engine.java | 9 ++++++++- .../cameraview/engine/locking/AutoExposure.java | 2 +- .../cameraview/engine/locking/AutoFocus.java | 2 +- .../cameraview/engine/locking/AutoWhiteBalance.java | 2 +- .../cameraview/engine/metering/AutoExposure.java | 2 +- .../cameraview/engine/metering/AutoFocus.java | 2 +- .../cameraview/engine/metering/AutoWhiteBalance.java | 2 +- .../cameraview/picture/Snapshot2PictureRecorder.java | 7 +++++-- .../cameraview/preview/GlCameraPreview.java | 2 +- .../otaliastudios/cameraview/demo/CameraActivity.java | 2 +- demo/src/main/res/layout/activity_camera.xml | 3 ++- 11 files changed, 23 insertions(+), 12 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java index 4d6d52a2..2471f420 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java @@ -260,9 +260,16 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv if (mLocker != null && mLocker.isLocking()) { mLocker.onCapture(result); } + Integer aeMode = result.get(CaptureResult.CONTROL_AE_MODE); Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE); + Integer afState = result.get(CaptureResult.CONTROL_AF_STATE); + Boolean aeLock = result.get(CaptureResult.CONTROL_AE_LOCK); Integer aeTriggerState = result.get(CaptureResult.CONTROL_AE_PRECAPTURE_TRIGGER); - LOG.v("metering:", "aeState:", aeState, "aeTriggerState:", aeTriggerState); + Integer afTriggerState = result.get(CaptureResult.CONTROL_AF_TRIGGER); + LOG.v("metering:", + "aeMode:", aeMode, "aeLock:", aeLock, + "aeState:", aeState, "aeTriggerState:", aeTriggerState, + "afState:", afState, "afTriggerState:", afTriggerState); } }; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoExposure.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoExposure.java index c0b6bae5..749f84c3 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoExposure.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoExposure.java @@ -14,7 +14,7 @@ import com.otaliastudios.cameraview.CameraLogger; public class AutoExposure extends Parameter { private static final String TAG = AutoExposure.class.getSimpleName(); - private static final CameraLogger LOG = CameraLogger.create(TAG); + private static final CameraLogger LOG = CameraLogger.create(TAG + "Locking"); public AutoExposure(@NonNull LockingChangeCallback callback) { super(callback); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoFocus.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoFocus.java index 1e4bda45..5390b0d6 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoFocus.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoFocus.java @@ -14,7 +14,7 @@ import com.otaliastudios.cameraview.CameraLogger; public class AutoFocus extends Parameter { private static final String TAG = AutoFocus.class.getSimpleName(); - private static final CameraLogger LOG = CameraLogger.create(TAG); + private static final CameraLogger LOG = CameraLogger.create(TAG + "Locking"); public AutoFocus(@NonNull LockingChangeCallback callback) { super(callback); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoWhiteBalance.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoWhiteBalance.java index 8d4e5e85..b7bbf175 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoWhiteBalance.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoWhiteBalance.java @@ -14,7 +14,7 @@ import com.otaliastudios.cameraview.CameraLogger; public class AutoWhiteBalance extends Parameter { private static final String TAG = AutoWhiteBalance.class.getSimpleName(); - private static final CameraLogger LOG = CameraLogger.create(TAG); + private static final CameraLogger LOG = CameraLogger.create(TAG + "Locking"); public AutoWhiteBalance(@NonNull LockingChangeCallback callback) { super(callback); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoExposure.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoExposure.java index 2d40faff..878fa9e3 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoExposure.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoExposure.java @@ -18,7 +18,7 @@ import java.util.List; public class AutoExposure extends Parameter { private static final String TAG = AutoExposure.class.getSimpleName(); - private static final CameraLogger LOG = CameraLogger.create(TAG); + private static final CameraLogger LOG = CameraLogger.create(TAG + "Metering"); public AutoExposure(@NonNull MeteringChangeCallback callback) { super(callback); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoFocus.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoFocus.java index 739e7722..e646f720 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoFocus.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoFocus.java @@ -18,7 +18,7 @@ import java.util.List; public class AutoFocus extends Parameter { private static final String TAG = AutoFocus.class.getSimpleName(); - private static final CameraLogger LOG = CameraLogger.create(TAG); + private static final CameraLogger LOG = CameraLogger.create(TAG + "Metering"); public AutoFocus(@NonNull MeteringChangeCallback callback) { super(callback); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoWhiteBalance.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoWhiteBalance.java index 75428615..5c253f35 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoWhiteBalance.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoWhiteBalance.java @@ -18,7 +18,7 @@ import java.util.List; public class AutoWhiteBalance extends Parameter { private static final String TAG = AutoWhiteBalance.class.getSimpleName(); - private static final CameraLogger LOG = CameraLogger.create(TAG); + private static final CameraLogger LOG = CameraLogger.create(TAG + "Metering"); public AutoWhiteBalance(@NonNull MeteringChangeCallback callback) { super(callback); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/picture/Snapshot2PictureRecorder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/picture/Snapshot2PictureRecorder.java index fcedc7ca..31753397 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/picture/Snapshot2PictureRecorder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/picture/Snapshot2PictureRecorder.java @@ -155,9 +155,12 @@ public class Snapshot2PictureRecorder extends SnapshotGlPictureRecorder implemen // Revert our changes. LOG.i("dispatchResult:", "Reverting the capture intent changes."); try { - // See Camera2Engine.setFlash(). It's better to change these one by one. + // See Camera2Engine.setFlash() comments: turning TORCH off has bugs and we must do + // as follows. + mBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); + mBuilder.set(CaptureRequest.FLASH_MODE, CaptureResult.FLASH_MODE_OFF); + mSession.capture(mBuilder.build(), null, null); mBuilder.set(CaptureRequest.CONTROL_AE_MODE, mOriginalAeMode); - mSession.capture(mBuilder.build(), mCallback, null); mBuilder.set(CaptureRequest.FLASH_MODE, mOriginalFlashMode); mSession.setRepeatingRequest(mBuilder.build(), mCallback, null); } catch (CameraAccessException ignore) {} diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java index 10754fa3..9afc1f92 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java @@ -196,7 +196,7 @@ public class GlCameraPreview extends FilterCameraPreview