From e31c3179b5457c4a4d545e201f686117cf2c94f3 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Sat, 31 Aug 2019 23:11:01 +0200 Subject: [PATCH] Small changes --- .../cameraview/engine/Camera2Engine.java | 6 ++-- .../cameraview/engine/Meter.java | 24 ++++++++-------- .../engine/metering/AutoExposure.java | 2 +- .../cameraview/engine/metering/AutoFocus.java | 2 +- .../engine/metering/AutoWhiteBalance.java | 2 +- ...{MeteringParameter.java => Parameter.java} | 28 +++++++++---------- 6 files changed, 32 insertions(+), 32 deletions(-) rename cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/{MeteringParameter.java => Parameter.java} (98%) 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 1aee747f..acc2011a 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java @@ -53,7 +53,6 @@ import com.otaliastudios.cameraview.internal.utils.ImageHelper; import com.otaliastudios.cameraview.internal.utils.WorkerHandler; import com.otaliastudios.cameraview.picture.Full2PictureRecorder; import com.otaliastudios.cameraview.picture.Snapshot2PictureRecorder; -import com.otaliastudios.cameraview.picture.SnapshotGlPictureRecorder; import com.otaliastudios.cameraview.preview.GlCameraPreview; import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.Size; @@ -813,7 +812,7 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv if (oldBuilder != null) { // We might be in a metering operation, or the old builder might have some special // metering parameters. Copy these special keys over to the new builder. - // These are the keys changed by MeteringParameters, or by us in applyFocusForMetering. + // These are the keys changed by metering.Parameters, or by us in applyFocusForMetering. builder.set(CaptureRequest.CONTROL_AF_REGIONS, oldBuilder.get(CaptureRequest.CONTROL_AF_REGIONS)); builder.set(CaptureRequest.CONTROL_AE_REGIONS, oldBuilder.get(CaptureRequest.CONTROL_AE_REGIONS)); builder.set(CaptureRequest.CONTROL_AWB_REGIONS, oldBuilder.get(CaptureRequest.CONTROL_AWB_REGIONS)); @@ -1225,7 +1224,7 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv mMeter = new Meter(Camera2Engine.this, mCameraCharacteristics, Camera2Engine.this); - mMeter.startMetering(mLastRepeatingResult, point); + mMeter.startMetering(mLastRepeatingResult, point, point == null); } }); } @@ -1234,7 +1233,6 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv * Called by {@link Meter} when the metering process has started. * We are currently exposing an auto focus API so that's what we dispatch. * @param point point - * */ @Override public void onMeteringStarted(@Nullable PointF point) { diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Meter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Meter.java index 5fd78c8b..ccb34574 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Meter.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Meter.java @@ -17,7 +17,7 @@ import com.otaliastudios.cameraview.CameraLogger; import com.otaliastudios.cameraview.engine.metering.AutoExposure; import com.otaliastudios.cameraview.engine.metering.AutoFocus; import com.otaliastudios.cameraview.engine.metering.AutoWhiteBalance; -import com.otaliastudios.cameraview.engine.metering.MeteringParameter; +import com.otaliastudios.cameraview.engine.metering.Parameter; import com.otaliastudios.cameraview.engine.offset.Axis; import com.otaliastudios.cameraview.engine.offset.Reference; import com.otaliastudios.cameraview.size.AspectRatio; @@ -30,7 +30,7 @@ import java.util.List; * Helps Camera2-based engines to perform 3A (auto focus, auto exposure and auto white balance) * metering. Users are required to: * - * - Call {@link #startMetering(CaptureResult, PointF)} to start + * - Call {@link #startMetering(CaptureResult, PointF, boolean)} to start * - Call {@link #onCapture(CaptureResult)} when they have partial or total results, as long as the * meter is still in a metering operation, which can be checked through {@link #isMetering()} * - Call {@link #resetMetering()} to reset the metering parameters if needed. This is done automatically @@ -65,7 +65,7 @@ public class Meter { /** * Notifies that metering has been reset. From now on, this meter instance * is done, although in theory it could be reused by calling - * {@link #startMetering(CaptureResult, PointF)} again. + * {@link #startMetering(CaptureResult, PointF, boolean)} again. * @param point point * */ @@ -93,9 +93,9 @@ public class Meter { private boolean mIsMetering; private long mMeteringStartTime; - private MeteringParameter mAutoFocus = new AutoFocus(); - private MeteringParameter mAutoWhiteBalance = new AutoWhiteBalance(); - private MeteringParameter mAutoExposure = new AutoExposure(); + private Parameter mAutoFocus = new AutoFocus(); + private Parameter mAutoWhiteBalance = new AutoWhiteBalance(); + private Parameter mAutoExposure = new AutoExposure(); /** * Creates a new meter. @@ -116,9 +116,12 @@ public class Meter { * Starts a metering sequence. * @param lastResult the last result * @param point point + * @param skipIfPossible try skip */ @SuppressWarnings("WeakerAccess") - public void startMetering(@NonNull CaptureResult lastResult, @Nullable PointF point) { + public void startMetering(@NonNull CaptureResult lastResult, + @Nullable PointF point, + boolean skipIfPossible) { mPoint = point; mIsMetering = true; @@ -163,7 +166,6 @@ public class Meter { } // 7. And finally dispatch everything - boolean skipIfPossible = mPoint == null; mAutoFocus.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible); mAutoWhiteBalance.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible); mAutoExposure.startMetering(mCharacteristics, mCallback.getMeteringBuilder(), areas, lastResult, skipIfPossible); @@ -309,7 +311,7 @@ public class Meter { /** * True if we're metering. False if we're not, for example if we're waiting for - * a reset call, or if {@link #startMetering(CaptureResult, PointF)} was never called. + * a reset call, or if {@link #startMetering(CaptureResult, PointF, boolean)} was never called. * @return true if metering */ public boolean isMetering() { @@ -330,13 +332,13 @@ public class Meter { if (!mAutoExposure.isMetered()) mAutoExposure.onCapture(mCallback.getMeteringBuilder(), result); if (!mAutoWhiteBalance.isMetered()) mAutoWhiteBalance.onCapture(mCallback.getMeteringBuilder(), result); if (mAutoFocus.isMetered() && mAutoExposure.isMetered() && mAutoWhiteBalance.isMetered()) { - LOG.i("onCapture:", "all MeteringParameters have converged. Dispatching onMeteringEnd"); + LOG.i("onCapture:", "all Parameters have converged. Dispatching onMeteringEnd"); boolean success = mAutoFocus.isSuccessful() && mAutoExposure.isSuccessful() && mAutoWhiteBalance.isSuccessful(); onMeteringEnd(success); } else if (System.currentTimeMillis() - mMeteringStartTime >= FORCED_END_DELAY) { - LOG.i("onCapture:", "FORCED_END_DELAY was reached. Some MeteringParameter is stuck. Forcing end."); + LOG.i("onCapture:", "FORCED_END_DELAY was reached. Some Parameter is stuck. Forcing end."); onMeteringEnd(false); } } 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 690c7ec3..1ff25756 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 @@ -15,7 +15,7 @@ import com.otaliastudios.cameraview.CameraLogger; import java.util.List; @RequiresApi(Build.VERSION_CODES.LOLLIPOP) -public class AutoExposure extends MeteringParameter { +public class AutoExposure extends Parameter { private static final String TAG = AutoExposure.class.getSimpleName(); private static final CameraLogger LOG = CameraLogger.create(TAG); 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 c3485ce1..c6189f08 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 @@ -15,7 +15,7 @@ import com.otaliastudios.cameraview.CameraLogger; import java.util.List; @RequiresApi(Build.VERSION_CODES.LOLLIPOP) -public class AutoFocus extends MeteringParameter { +public class AutoFocus extends Parameter { private static final String TAG = AutoFocus.class.getSimpleName(); private static final CameraLogger LOG = CameraLogger.create(TAG); 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 6b4726d6..58b34b87 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 @@ -15,7 +15,7 @@ import com.otaliastudios.cameraview.CameraLogger; import java.util.List; @RequiresApi(Build.VERSION_CODES.LOLLIPOP) -public class AutoWhiteBalance extends MeteringParameter { +public class AutoWhiteBalance extends Parameter { private static final String TAG = AutoWhiteBalance.class.getSimpleName(); private static final CameraLogger LOG = CameraLogger.create(TAG); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/MeteringParameter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/Parameter.java similarity index 98% rename from cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/MeteringParameter.java rename to cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/Parameter.java index e2c9cc76..b8f957f1 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/MeteringParameter.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/metering/Parameter.java @@ -13,7 +13,7 @@ import androidx.annotation.RequiresApi; import java.util.List; @RequiresApi(Build.VERSION_CODES.LOLLIPOP) -public abstract class MeteringParameter { +public abstract class Parameter { @SuppressWarnings("WeakerAccess") protected boolean isSuccessful; @@ -57,6 +57,19 @@ public abstract class MeteringParameter { } } + public final void onCapture(@NonNull CaptureRequest.Builder builder, + @NonNull CaptureResult result) { + if (isMetered()) return; + processCapture(result); + if (isMetered()) onMetered(builder); + } + + public final void resetMetering(@NonNull CameraCharacteristics characteristics, + @NonNull CaptureRequest.Builder builder, + @Nullable MeteringRectangle area) { + onResetMetering(characteristics, builder, area, supportsProcessing); + } + protected abstract boolean checkSupportsProcessing(@NonNull CameraCharacteristics characteristics, @NonNull CaptureRequest.Builder builder); @@ -67,23 +80,10 @@ public abstract class MeteringParameter { @NonNull List areas, boolean supportsProcessing); - public final void onCapture(@NonNull CaptureRequest.Builder builder, - @NonNull CaptureResult result) { - if (isMetered()) return; - processCapture(result); - if (isMetered()) onMetered(builder); - } - protected abstract void processCapture(@NonNull CaptureResult result); protected abstract void onMetered(@NonNull CaptureRequest.Builder builder); - public final void resetMetering(@NonNull CameraCharacteristics characteristics, - @NonNull CaptureRequest.Builder builder, - @Nullable MeteringRectangle area) { - onResetMetering(characteristics, builder, area, supportsProcessing); - } - protected abstract void onResetMetering(@NonNull CameraCharacteristics characteristics, @NonNull CaptureRequest.Builder builder, @Nullable MeteringRectangle area,