From dfca66a10fc7b7937c466229017e8e636a2fa696 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Tue, 10 Nov 2020 11:26:06 +0100 Subject: [PATCH] Prepare PR --- cameraview/build.gradle.kts | 2 +- .../cameraview/engine/Camera1Engine.java | 6 ++---- .../cameraview/engine/Camera2Engine.java | 6 ++---- .../cameraview/engine/CameraBaseEngine.java | 4 ++-- .../engine/orchestrator/CameraOrchestrator.java | 16 +++++++++------- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/cameraview/build.gradle.kts b/cameraview/build.gradle.kts index b279f7e9..3f24f095 100644 --- a/cameraview/build.gradle.kts +++ b/cameraview/build.gradle.kts @@ -14,7 +14,7 @@ android { setMinSdkVersion(property("minSdkVersion") as Int) setTargetSdkVersion(property("targetSdkVersion") as Int) versionCode = 1 - versionName = "2.6.4-zoom3" + versionName = "2.6.4" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArgument("filter", "" + "com.otaliastudios.cameraview.tools.SdkExcludeFilter," + diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java index 8542bcfd..d8b498cf 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java @@ -623,8 +623,7 @@ public class Camera1Engine extends CameraBaseEngine implements public void setZoom(final float zoom, @Nullable final PointF[] points, final boolean notify) { final float old = mZoomValue; mZoomValue = zoom; - // Zoom requests can be high frequency (e.g. linked to touch events), so - // we remove the task before scheduling to avoid stack overflows in orchestrator. + // Zoom requests can be high frequency (e.g. linked to touch events), let's trim the oldest. getOrchestrator().trim("zoom", ALLOWED_ZOOM_OPS); mZoomTask = getOrchestrator().scheduleStateful("zoom", CameraState.ENGINE, @@ -658,8 +657,7 @@ public class Camera1Engine extends CameraBaseEngine implements @Nullable final PointF[] points, final boolean notify) { final float old = mExposureCorrectionValue; mExposureCorrectionValue = EVvalue; - // EV requests can be high frequency (e.g. linked to touch events), so - // we remove the task before scheduling to avoid stack overflows in orchestrator. + // EV requests can be high frequency (e.g. linked to touch events), let's trim the oldest. getOrchestrator().trim("exposure correction", ALLOWED_EV_OPS); mExposureCorrectionTask = getOrchestrator().scheduleStateful( "exposure correction", 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 3e07dbc8..505d690f 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java @@ -1246,8 +1246,7 @@ public class Camera2Engine extends CameraBaseEngine implements public void setZoom(final float zoom, final @Nullable PointF[] points, final boolean notify) { final float old = mZoomValue; mZoomValue = zoom; - // Zoom requests can be high frequency (e.g. linked to touch events), so - // we remove the task before scheduling to avoid stack overflows in orchestrator. + // Zoom requests can be high frequency (e.g. linked to touch events), let's trim the oldest. getOrchestrator().trim("zoom", ALLOWED_ZOOM_OPS); mZoomTask = getOrchestrator().scheduleStateful( "zoom", @@ -1305,8 +1304,7 @@ public class Camera2Engine extends CameraBaseEngine implements final boolean notify) { final float old = mExposureCorrectionValue; mExposureCorrectionValue = EVvalue; - // EV requests can be high frequency (e.g. linked to touch events), so - // we remove the task before scheduling to avoid stack overflows in orchestrator. + // EV requests can be high frequency (e.g. linked to touch events), let's trim the oldest. getOrchestrator().trim("exposure correction", ALLOWED_EV_OPS); mExposureCorrectionTask = getOrchestrator().scheduleStateful( "exposure correction", diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraBaseEngine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraBaseEngine.java index 0af4b3c8..07e3c231 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraBaseEngine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraBaseEngine.java @@ -50,8 +50,8 @@ import java.util.List; */ public abstract class CameraBaseEngine extends CameraEngine { - protected final static int ALLOWED_ZOOM_OPS = Integer.MAX_VALUE; - protected final static int ALLOWED_EV_OPS = Integer.MAX_VALUE; + protected final static int ALLOWED_ZOOM_OPS = 20; + protected final static int ALLOWED_EV_OPS = 20; @SuppressWarnings("WeakerAccess") protected CameraPreview mPreview; @SuppressWarnings("WeakerAccess") protected CameraOptions mCameraOptions; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/orchestrator/CameraOrchestrator.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/orchestrator/CameraOrchestrator.java index 02434466..3339dccc 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/orchestrator/CameraOrchestrator.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/orchestrator/CameraOrchestrator.java @@ -206,13 +206,15 @@ public class CameraOrchestrator { } LOG.v("trim: name=", name, "scheduled=", scheduled.size(), "allowed=", allowed); int existing = Math.max(scheduled.size() - allowed, 0); - // To remove the oldest ones first, we must reverse the list. - // Note that we will potentially remove a job that is being executed: we don't - // have a mechanism to cancel the ongoing execution, but it shouldn't be a problem. - Collections.reverse(scheduled); - scheduled = scheduled.subList(0, existing); - for (Job job : scheduled) { - mJobs.remove(job); + if (existing > 0) { + // To remove the oldest ones first, we must reverse the list. + // Note that we will potentially remove a job that is being executed: we don't + // have a mechanism to cancel the ongoing execution, but it shouldn't be a problem. + Collections.reverse(scheduled); + scheduled = scheduled.subList(0, existing); + for (Job job : scheduled) { + mJobs.remove(job); + } } } }