Remove AF and AWB for testing

pull/580/head
Mattia Iavarone 6 years ago
parent daaf664e66
commit e1e3e12564
  1. 38
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java
  2. 19
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Locker.java
  3. 23
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Meter.java
  4. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/locking/AutoExposure.java
  5. 29
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoExposure.java
  6. 17
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoFocus.java
  7. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/AutoWhiteBalance.java
  8. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/Parameter.java
  9. 23
      cameraview/src/main/java/com/otaliastudios/cameraview/picture/Snapshot2PictureRecorder.java

@ -204,6 +204,17 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
} }
} }
private void applyRepeatingRequestBuilderAsSingle() {
if (getPreviewState() == STATE_STARTED) {
try {
mSession.capture(mRepeatingRequestBuilder.build(),
mRepeatingRequestCallback, null);
} catch (CameraAccessException e) {
throw createCameraException(e);
}
}
}
/** /**
* Applies the repeating request builder to the preview, assuming we actually have a preview * Applies the repeating request builder to the preview, assuming we actually have a preview
* running. Can be called after changing parameters to the builder. * running. Can be called after changing parameters to the builder.
@ -266,7 +277,7 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
Boolean aeLock = result.get(CaptureResult.CONTROL_AE_LOCK); Boolean aeLock = result.get(CaptureResult.CONTROL_AE_LOCK);
Integer aeTriggerState = result.get(CaptureResult.CONTROL_AE_PRECAPTURE_TRIGGER); Integer aeTriggerState = result.get(CaptureResult.CONTROL_AE_PRECAPTURE_TRIGGER);
Integer afTriggerState = result.get(CaptureResult.CONTROL_AF_TRIGGER); Integer afTriggerState = result.get(CaptureResult.CONTROL_AF_TRIGGER);
String log = "metering: aeMode: " + aeMode + " aeLock: " + aeLock + String log = "aeMode: " + aeMode + " aeLock: " + aeLock +
" aeState: " + aeState + " aeTriggerState: " + aeTriggerState + " aeState: " + aeState + " aeTriggerState: " + aeTriggerState +
" afState: " + afState + " afTriggerState: " + afTriggerState; " afState: " + afState + " afTriggerState: " + afTriggerState;
if (!log.equals(mLastLog)) { if (!log.equals(mLastLog)) {
@ -274,6 +285,9 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
LOG.w(log); LOG.w(log);
} }
// START
// aeMode: 3 aeLock: false aeState: 4 aeTriggerState: 0 afState: 2 afTriggerState: 0
//
// DURING metering (focus skips) // DURING metering (focus skips)
// aeMode: 3 aeLock: false aeState: 4 aeTriggerState: 0 afState: 0 afTriggerState: 0 // aeMode: 3 aeLock: false aeState: 4 aeTriggerState: 0 afState: 0 afTriggerState: 0
// aeMode: 3 aeLock: false aeState: 5 aeTriggerState: 1 afState: 0 afTriggerState: 0 // aeMode: 3 aeLock: false aeState: 5 aeTriggerState: 1 afState: 0 afTriggerState: 0
@ -290,8 +304,8 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
// aeMode: 1 aeLock: true aeState: 3 aeTriggerState: 1 afState: 0 afTriggerState: 0 // aeMode: 1 aeLock: true aeState: 3 aeTriggerState: 1 afState: 0 afTriggerState: 0
// //
// Reverting flash changes + reset lock + reset metering // Reverting flash changes + reset lock + reset metering
// aeMode: 3 aeLock: false aeState: 4 aeTriggerState: 2 afState: 2 afTriggerState: 0 // aeMode: 3 aeLock: false aeState: 4 aeTriggerState: 2(1 now) afState: 2 afTriggerState: 0
// aeMode: 3 aeLock: false aeState: 1 aeTriggerState: 2 afState: 2 afTriggerState: 0 // aeMode: 3 aeLock: false aeState: 1 aeTriggerState: 2(1 now) afState: 2 afTriggerState: 0
} }
}; };
@ -1260,8 +1274,8 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
// - AF should be on CONTROL_AF_MODE_AUTO or others // - AF should be on CONTROL_AF_MODE_AUTO or others
// The last one is under our control because the library has no focus API. // The last one is under our control because the library has no focus API.
// So let's set a good af mode here. This operation is reverted during onMeteringReset(). // So let's set a good af mode here. This operation is reverted during onMeteringReset().
applyFocusForMetering(mRepeatingRequestBuilder); // TODO applyFocusForMetering(mRepeatingRequestBuilder);
applyRepeatingRequestBuilder(); // TODO applyRepeatingRequestBuilder();
// Create the meter and start. // Create the meter and start.
mMeteringGesture = gesture; mMeteringGesture = gesture;
@ -1335,8 +1349,8 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
@Override @Override
public void onMeteringReset(@Nullable PointF point) { public void onMeteringReset(@Nullable PointF point) {
if (getEngineState() == STATE_STARTED) { if (getEngineState() == STATE_STARTED) {
applyDefaultFocus(mRepeatingRequestBuilder); // TODO applyDefaultFocus(mRepeatingRequestBuilder);
applyRepeatingRequestBuilder(); // only if preview started already // TODO applyRepeatingRequestBuilder(); // only if preview started already
} }
} }
@ -1347,9 +1361,13 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
} }
@Override @Override
public void onMeteringChange() { public void onMeteringChange(boolean single) {
LOG.i("onMeteringChange:", "applying the builder."); LOG.i("onMeteringChange:", "applying the builder.");
applyRepeatingRequestBuilder(); if (single) {
applyRepeatingRequestBuilderAsSingle();
} else {
applyRepeatingRequestBuilder();
}
} }
//endregion //endregion
@ -1361,7 +1379,7 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
if (getEngineState() == STATE_STARTED) { if (getEngineState() == STATE_STARTED) {
mRepeatingRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, false); mRepeatingRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, false);
mRepeatingRequestBuilder.set(CaptureRequest.CONTROL_AWB_LOCK, false); mRepeatingRequestBuilder.set(CaptureRequest.CONTROL_AWB_LOCK, false);
applyDefaultFocus(mRepeatingRequestBuilder); // TODO applyDefaultFocus(mRepeatingRequestBuilder);
applyRepeatingRequestBuilder(); // only if preview started applyRepeatingRequestBuilder(); // only if preview started
} }
} }

@ -83,8 +83,8 @@ public class Locker {
public void lock(@NonNull CaptureResult lastResult) { public void lock(@NonNull CaptureResult lastResult) {
mIsLocking = true; mIsLocking = true;
mLockingStartTime = System.currentTimeMillis(); mLockingStartTime = System.currentTimeMillis();
mAutoFocus.lock(mCharacteristics, mCallback.getLockingBuilder(), lastResult); // TODO mAutoFocus.lock(mCharacteristics, mCallback.getLockingBuilder(), lastResult);
mAutoWhiteBalance.lock(mCharacteristics, mCallback.getLockingBuilder(), lastResult); // TODO mAutoWhiteBalance.lock(mCharacteristics, mCallback.getLockingBuilder(), lastResult);
mAutoExposure.lock(mCharacteristics, mCallback.getLockingBuilder(), lastResult); mAutoExposure.lock(mCharacteristics, mCallback.getLockingBuilder(), lastResult);
} }
@ -103,23 +103,22 @@ public class Locker {
* but only while {@link #isLocking()} returns true. * but only while {@link #isLocking()} returns true.
* @param result result * @param result result
*/ */
@SuppressWarnings("WeakerAccess")
public void onCapture(@NonNull CaptureResult result) { public void onCapture(@NonNull CaptureResult result) {
if (!mIsLocking) return; // We're not interested in results anymore if (!mIsLocking) return; // We're not interested in results anymore
if (!(result instanceof TotalCaptureResult)) return; // Let's ignore these, contents are missing/wrong if (!(result instanceof TotalCaptureResult)) return; // Let's ignore these, contents are missing/wrong
if (!mAutoFocus.isLocked()) mAutoFocus.onCapture(mCallback.getLockingBuilder(), result); // TODO if (!mAutoFocus.isLocked()) mAutoFocus.onCapture(mCallback.getLockingBuilder(), result);
if (!mAutoExposure.isLocked()) mAutoExposure.onCapture(mCallback.getLockingBuilder(), result); if (!mAutoExposure.isLocked()) mAutoExposure.onCapture(mCallback.getLockingBuilder(), result);
if (!mAutoWhiteBalance.isLocked()) mAutoWhiteBalance.onCapture(mCallback.getLockingBuilder(), result); // TODO if (!mAutoWhiteBalance.isLocked()) mAutoWhiteBalance.onCapture(mCallback.getLockingBuilder(), result);
if (mAutoFocus.isLocked() && mAutoExposure.isLocked() && mAutoWhiteBalance.isLocked()) { if (/* TODO mAutoFocus.isLocked() && */ mAutoExposure.isLocked() /* && mAutoWhiteBalance.isLocked() */) {
LOG.i("onCapture:", "all Parameters have converged. Dispatching onMeteringEnd"); LOG.i("onCapture:", "all Parameters have converged. Dispatching onMeteringEnd");
boolean success = mAutoFocus.isSuccessful() boolean success = /* TODO mAutoFocus.isSuccessful()
&& mAutoExposure.isSuccessful() && */ mAutoExposure.isSuccessful()
&& mAutoWhiteBalance.isSuccessful(); /* TODO && mAutoWhiteBalance.isSuccessful() */;
mCallback.onLocked(success); mCallback.onLocked(success);
mIsLocking = false; mIsLocking = false;
} else if (System.currentTimeMillis() - mLockingStartTime >= FORCED_END_DELAY) { } else if (System.currentTimeMillis() - mLockingStartTime >= FORCED_END_DELAY) {
LOG.i("onCapture:", "FORCED_END_DELAY was reached. Some Parameter is stuck. Forcing end."); LOG.e("onCapture:", "FORCED_END_DELAY was reached. Some Parameter is stuck. Forcing end.");
mCallback.onLocked(false); mCallback.onLocked(false);
mIsLocking = false; mIsLocking = false;
} }

@ -167,8 +167,8 @@ public class Meter {
} }
// 7. And finally dispatch everything // 7. And finally dispatch everything
mAutoFocus.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible); // TODO mAutoFocus.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible);
mAutoWhiteBalance.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible); // TODO mAutoWhiteBalance.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible);
mAutoExposure.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible); mAutoExposure.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible);
// Dispatch to callback // Dispatch to callback
@ -324,22 +324,21 @@ public class Meter {
* but only while {@link #isMetering()} returns true. * but only while {@link #isMetering()} returns true.
* @param result result * @param result result
*/ */
@SuppressWarnings("WeakerAccess")
public void onCapture(@NonNull CaptureResult result) { public void onCapture(@NonNull CaptureResult result) {
if (!mIsMetering) return; // We're not interested in results anymore if (!mIsMetering) return; // We're not interested in results anymore
if (!(result instanceof TotalCaptureResult)) return; // Let's ignore these, contents are missing/wrong if (!(result instanceof TotalCaptureResult)) return; // Let's ignore these, contents are missing/wrong
if (!mAutoFocus.isMetered()) mAutoFocus.onCapture(mCallback.getMeteringBuilder(), result); // TODO if (!mAutoFocus.isMetered()) mAutoFocus.onCapture(mCallback.getMeteringBuilder(), result);
if (!mAutoExposure.isMetered()) mAutoExposure.onCapture(mCallback.getMeteringBuilder(), result); if (!mAutoExposure.isMetered()) mAutoExposure.onCapture(mCallback.getMeteringBuilder(), result);
if (!mAutoWhiteBalance.isMetered()) mAutoWhiteBalance.onCapture(mCallback.getMeteringBuilder(), result); // TODO if (!mAutoWhiteBalance.isMetered()) mAutoWhiteBalance.onCapture(mCallback.getMeteringBuilder(), result);
if (mAutoFocus.isMetered() && mAutoExposure.isMetered() && mAutoWhiteBalance.isMetered()) { if (/* TODO mAutoFocus.isMetered() && */ mAutoExposure.isMetered() /* && mAutoWhiteBalance.isMetered() */) {
LOG.i("onCapture:", "all Parameters have converged. Dispatching onMeteringEnd"); LOG.i("onCapture:", "all Parameters have converged. Dispatching onMeteringEnd");
boolean success = mAutoFocus.isSuccessful() boolean success = /* TODO mAutoFocus.isSuccessful()
&& mAutoExposure.isSuccessful() && */ mAutoExposure.isSuccessful()
&& mAutoWhiteBalance.isSuccessful(); /* TODO && mAutoWhiteBalance.isSuccessful() */;
onMeteringEnd(success); onMeteringEnd(success);
} else if (System.currentTimeMillis() - mMeteringStartTime >= FORCED_END_DELAY) { } else if (System.currentTimeMillis() - mMeteringStartTime >= FORCED_END_DELAY) {
LOG.i("onCapture:", "FORCED_END_DELAY was reached. Some Parameter is stuck. Forcing end."); LOG.e("onCapture:", "FORCED_END_DELAY was reached. Some Parameter is stuck. Forcing end.");
onMeteringEnd(false); onMeteringEnd(false);
} }
} }
@ -362,8 +361,8 @@ public class Meter {
if (wholeRect == null) wholeRect = new Rect(); if (wholeRect == null) wholeRect = new Rect();
whole = new MeteringRectangle(wholeRect, MeteringRectangle.METERING_WEIGHT_DONT_CARE); whole = new MeteringRectangle(wholeRect, MeteringRectangle.METERING_WEIGHT_DONT_CARE);
} }
mAutoFocus.resetMetering(mCharacteristics, mCallback.getMeteringBuilder(), whole); // TODO mAutoFocus.resetMetering(mCharacteristics, mCallback.getMeteringBuilder(), whole);
mAutoWhiteBalance.resetMetering(mCharacteristics, mCallback.getMeteringBuilder(), whole); // TODO mAutoWhiteBalance.resetMetering(mCharacteristics, mCallback.getMeteringBuilder(), whole);
mAutoExposure.resetMetering(mCharacteristics, mCallback.getMeteringBuilder(), whole); mAutoExposure.resetMetering(mCharacteristics, mCallback.getMeteringBuilder(), whole);
mCallback.onMeteringReset(mPoint); mCallback.onMeteringReset(mPoint);
} }

@ -51,6 +51,10 @@ public class AutoExposure extends Parameter {
@Override @Override
protected void onLock(@NonNull CameraCharacteristics characteristics, protected void onLock(@NonNull CameraCharacteristics characteristics,
@NonNull CaptureRequest.Builder builder) { @NonNull CaptureRequest.Builder builder) {
int cancelTrigger = Build.VERSION.SDK_INT >= 23
? CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
: CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;
builder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, cancelTrigger);
builder.set(CaptureRequest.CONTROL_AE_LOCK, true); builder.set(CaptureRequest.CONTROL_AE_LOCK, true);
notifyBuilderChanged(); notifyBuilderChanged();
} }

@ -79,7 +79,7 @@ public class AutoExposure extends Parameter {
} }
if (changed) { if (changed) {
notifyBuilderChanged(); notifyBuilderChanged(false);
// Remove any problematic control for future requests // Remove any problematic control for future requests
// NOTE: activating this invalidates the logic for early exit in processCapture // NOTE: activating this invalidates the logic for early exit in processCapture
/* builder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, /* builder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
@ -147,7 +147,13 @@ public class AutoExposure extends Parameter {
@Override @Override
protected void onMetered(@NonNull CaptureRequest.Builder builder, boolean success) { protected void onMetered(@NonNull CaptureRequest.Builder builder, boolean success) {
// Do nothing // Undo the trigger.
/* TODO thinking about it. int newTrigger = Build.VERSION.SDK_INT >= 23
? CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
: CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_IDLE; */
builder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, null);
// builder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_IDLE);
// notifyBuilderChanged();
} }
@Override @Override
@ -163,15 +169,24 @@ public class AutoExposure extends Parameter {
changed = true; changed = true;
} }
if (supportsProcessing) { if (supportsProcessing) {
// Cleanup any precapture sequence. Integer trigger = builder.get(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER);
if (Build.VERSION.SDK_INT >= 23) { LOG.w("onResetMetering:", "current precapture trigger is", trigger);
builder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, if (trigger == null || trigger == CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START) {
CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL); // Undo the trigger. This might happen if we can't meter in time / reset called before.
LOG.w("onResetMetering:", "canceling precapture.");
int newTrigger = Build.VERSION.SDK_INT >= 23
? CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
: CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;
builder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, newTrigger);
builder.set(CaptureRequest.CONTROL_AE_LOCK, true);
notifyBuilderChanged(true);
builder.set(CaptureRequest.CONTROL_AE_LOCK, false);
changed = true; changed = true;
} }
} }
if (changed) { if (changed) {
notifyBuilderChanged(); notifyBuilderChanged(false);
} }
} }
} }

@ -70,7 +70,7 @@ public class AutoFocus extends Parameter {
} }
if (changed) { if (changed) {
notifyBuilderChanged(); notifyBuilderChanged(false);
// Remove any problematic control for future requests // Remove any problematic control for future requests
/* builder.set(CaptureRequest.CONTROL_AF_TRIGGER, /* builder.set(CaptureRequest.CONTROL_AF_TRIGGER,
CaptureRequest.CONTROL_AF_TRIGGER_IDLE); */ CaptureRequest.CONTROL_AF_TRIGGER_IDLE); */
@ -99,7 +99,10 @@ public class AutoFocus extends Parameter {
@Override @Override
protected void onMetered(@NonNull CaptureRequest.Builder builder, boolean success) { protected void onMetered(@NonNull CaptureRequest.Builder builder, boolean success) {
// Do nothing. // TODO thinking about this
builder.set(CaptureRequest.CONTROL_AF_TRIGGER, null);
// builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);
// notifyBuilderChanged();
} }
@Override @Override
@ -116,11 +119,15 @@ public class AutoFocus extends Parameter {
} }
if (supportsProcessing) { // Cleanup any trigger. if (supportsProcessing) { // Cleanup any trigger.
builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_CANCEL); Integer trigger = builder.get(CaptureRequest.CONTROL_AF_TRIGGER);
changed = true; LOG.w("onResetMetering:", "current focus trigger is", trigger);
if (trigger == null || trigger == CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START) {
builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);
changed = true;
}
} }
if (changed) { if (changed) {
notifyBuilderChanged(); notifyBuilderChanged(false);
} }
} }
} }

@ -55,7 +55,7 @@ public class AutoWhiteBalance extends Parameter {
int max = Math.min(maxRegions, areas.size()); int max = Math.min(maxRegions, areas.size());
builder.set(CaptureRequest.CONTROL_AWB_REGIONS, builder.set(CaptureRequest.CONTROL_AWB_REGIONS,
areas.subList(0, max).toArray(new MeteringRectangle[]{})); areas.subList(0, max).toArray(new MeteringRectangle[]{}));
notifyBuilderChanged(); notifyBuilderChanged(false);
} }
} }
@ -97,7 +97,7 @@ public class AutoWhiteBalance extends Parameter {
CameraCharacteristics.CONTROL_MAX_REGIONS_AWB, 0); CameraCharacteristics.CONTROL_MAX_REGIONS_AWB, 0);
if (area != null && maxRegions > 0) { if (area != null && maxRegions > 0) {
builder.set(CaptureRequest.CONTROL_AWB_REGIONS, new MeteringRectangle[]{area}); builder.set(CaptureRequest.CONTROL_AWB_REGIONS, new MeteringRectangle[]{area});
notifyBuilderChanged(); notifyBuilderChanged(false);
} }
} }
} }

@ -16,7 +16,7 @@ import java.util.List;
public abstract class Parameter { public abstract class Parameter {
public interface MeteringChangeCallback { public interface MeteringChangeCallback {
void onMeteringChange(); void onMeteringChange(boolean single);
} }
private boolean isSuccessful; private boolean isSuccessful;
@ -39,8 +39,8 @@ public abstract class Parameter {
} }
@SuppressWarnings("WeakerAccess") @SuppressWarnings("WeakerAccess")
protected void notifyBuilderChanged() { protected void notifyBuilderChanged(boolean single) {
callback.onMeteringChange(); callback.onMeteringChange(single);
} }
@SuppressWarnings("WeakerAccess") @SuppressWarnings("WeakerAccess")

@ -83,7 +83,8 @@ public class Snapshot2PictureRecorder extends SnapshotGlPictureRecorder implemen
@Override @Override
public void take() { public void take() {
if (!mActionNeeded) { // TODO
if (true || !mActionNeeded) {
LOG.i("take:", "Engine does no metering or needs no flash, taking fast snapshot."); LOG.i("take:", "Engine does no metering or needs no flash, taking fast snapshot.");
super.take(); super.take();
} else { } else {
@ -120,10 +121,17 @@ public class Snapshot2PictureRecorder extends SnapshotGlPictureRecorder implemen
@Override @Override
public void onLocked(boolean success) { public void onLocked(boolean success) {
LOG.i("onLocked:", "Parameters locked, opening torch."); LOG.i("onLocked:", "Parameters locked, opening torch.");
mState = STATE_WAITING_TORCH; if (false) {
mBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH); mState = STATE_WAITING_TORCH;
mBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); mBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
applyBuilder(); mBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
applyBuilder();
} else {
// TODO
LOG.e("Early taking image.");
mState = STATE_WAITING_IMAGE;
super.take();
}
} }
public void onCaptureCompleted(@NonNull TotalCaptureResult result) { public void onCaptureCompleted(@NonNull TotalCaptureResult result) {
@ -151,9 +159,10 @@ public class Snapshot2PictureRecorder extends SnapshotGlPictureRecorder implemen
@Override @Override
protected void dispatchResult() { protected void dispatchResult() {
if (mState == STATE_WAITING_IMAGE) { // TODO
if (false && mState == STATE_WAITING_IMAGE) {
// Revert our changes. // Revert our changes.
LOG.i("dispatchResult:", "Reverting the capture intent changes."); LOG.i("dispatchResult:", "Reverting the flash changes.");
try { try {
// See Camera2Engine.setFlash() comments: turning TORCH off has bugs and we must do // See Camera2Engine.setFlash() comments: turning TORCH off has bugs and we must do
// as follows. // as follows.

Loading…
Cancel
Save