diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/filter/BaseFilter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/filter/BaseFilter.java index d4236249..89682b80 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/filter/BaseFilter.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/filter/BaseFilter.java @@ -160,7 +160,6 @@ public abstract class BaseFilter implements Filter { onPostDraw(); } - @SuppressWarnings("WeakerAccess") protected void onPreDraw(float[] transformMatrix) { // Copy the model / view / projection matrix over. GLES20.glUniformMatrix4fv(vertexModelViewProjectionMatrixLocation, 1, false, GlUtils.IDENTITY_MATRIX, 0); @@ -202,6 +201,12 @@ public abstract class BaseFilter implements Filter { public final BaseFilter copy() { BaseFilter copy = onCopy(); copy.setSize(outputSize.getWidth(), outputSize.getHeight()); + if (this instanceof OneParameterFilter) { + ((OneParameterFilter) copy).setParameter1(((OneParameterFilter) this).getParameter1()); + } + if (this instanceof TwoParameterFilter) { + ((TwoParameterFilter) copy).setParameter2(((TwoParameterFilter) this).getParameter2()); + } return copy; } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/filter/OneParameterFilter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/filter/OneParameterFilter.java new file mode 100644 index 00000000..0eead556 --- /dev/null +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/filter/OneParameterFilter.java @@ -0,0 +1,8 @@ +package com.otaliastudios.cameraview.filter; + +public interface OneParameterFilter extends Filter { + + void setParameter1(float value); + + float getParameter1(); +} diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/filter/TwoParameterFilter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/filter/TwoParameterFilter.java new file mode 100644 index 00000000..a0a38bfc --- /dev/null +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/filter/TwoParameterFilter.java @@ -0,0 +1,8 @@ +package com.otaliastudios.cameraview.filter; + +public interface TwoParameterFilter extends OneParameterFilter { + + void setParameter2(float value); + + float getParameter2(); +} diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/filters/AutoFixFilter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/filters/AutoFixFilter.java index c5b92b39..a05669cb 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/filters/AutoFixFilter.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/filters/AutoFixFilter.java @@ -5,12 +5,13 @@ import android.opengl.GLES20; import androidx.annotation.NonNull; import com.otaliastudios.cameraview.filter.BaseFilter; +import com.otaliastudios.cameraview.filter.OneParameterFilter; import com.otaliastudios.cameraview.internal.GlUtils; /** * Attempts to auto-fix the frames based on histogram equalization. */ -public class AutoFixFilter extends BaseFilter { +public class AutoFixFilter extends BaseFilter implements OneParameterFilter { private final static String FRAGMENT_SHADER = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" @@ -61,7 +62,6 @@ public class AutoFixFilter extends BaseFilter { private float scale = 1.0f; private int scaleLocation = -1; - @SuppressWarnings("WeakerAccess") public AutoFixFilter() { } /** @@ -86,6 +86,16 @@ public class AutoFixFilter extends BaseFilter { return scale; } + @Override + public void setParameter1(float value) { + setScale(value); + } + + @Override + public float getParameter1() { + return getScale(); + } + @NonNull @Override public String getFragmentShader() { @@ -111,12 +121,4 @@ public class AutoFixFilter extends BaseFilter { GLES20.glUniform1f(scaleLocation, scale); GlUtils.checkError("glUniform1f"); } - - - @Override - protected BaseFilter onCopy() { - AutoFixFilter filter = new AutoFixFilter(); - filter.setScale(getScale()); - return filter; - } }