Add OneParameterFilter and TwoParameterFilter

pull/535/head
Mattia Iavarone 6 years ago
parent fce6597364
commit a837f4e928
  1. 7
      cameraview/src/main/java/com/otaliastudios/cameraview/filter/BaseFilter.java
  2. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/filter/OneParameterFilter.java
  3. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/filter/TwoParameterFilter.java
  4. 22
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/AutoFixFilter.java

@ -160,7 +160,6 @@ public abstract class BaseFilter implements Filter {
onPostDraw(); onPostDraw();
} }
@SuppressWarnings("WeakerAccess")
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(float[] transformMatrix) {
// Copy the model / view / projection matrix over. // Copy the model / view / projection matrix over.
GLES20.glUniformMatrix4fv(vertexModelViewProjectionMatrixLocation, 1, false, GlUtils.IDENTITY_MATRIX, 0); GLES20.glUniformMatrix4fv(vertexModelViewProjectionMatrixLocation, 1, false, GlUtils.IDENTITY_MATRIX, 0);
@ -202,6 +201,12 @@ public abstract class BaseFilter implements Filter {
public final BaseFilter copy() { public final BaseFilter copy() {
BaseFilter copy = onCopy(); BaseFilter copy = onCopy();
copy.setSize(outputSize.getWidth(), outputSize.getHeight()); 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; return copy;
} }

@ -0,0 +1,8 @@
package com.otaliastudios.cameraview.filter;
public interface OneParameterFilter extends Filter {
void setParameter1(float value);
float getParameter1();
}

@ -0,0 +1,8 @@
package com.otaliastudios.cameraview.filter;
public interface TwoParameterFilter extends OneParameterFilter {
void setParameter2(float value);
float getParameter2();
}

@ -5,12 +5,13 @@ import android.opengl.GLES20;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.otaliastudios.cameraview.filter.BaseFilter; import com.otaliastudios.cameraview.filter.BaseFilter;
import com.otaliastudios.cameraview.filter.OneParameterFilter;
import com.otaliastudios.cameraview.internal.GlUtils; import com.otaliastudios.cameraview.internal.GlUtils;
/** /**
* Attempts to auto-fix the frames based on histogram equalization. * 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" private final static String FRAGMENT_SHADER = "#extension GL_OES_EGL_image_external : require\n"
+ "precision mediump float;\n" + "precision mediump float;\n"
@ -61,7 +62,6 @@ public class AutoFixFilter extends BaseFilter {
private float scale = 1.0f; private float scale = 1.0f;
private int scaleLocation = -1; private int scaleLocation = -1;
@SuppressWarnings("WeakerAccess")
public AutoFixFilter() { } public AutoFixFilter() { }
/** /**
@ -86,6 +86,16 @@ public class AutoFixFilter extends BaseFilter {
return scale; return scale;
} }
@Override
public void setParameter1(float value) {
setScale(value);
}
@Override
public float getParameter1() {
return getScale();
}
@NonNull @NonNull
@Override @Override
public String getFragmentShader() { public String getFragmentShader() {
@ -111,12 +121,4 @@ public class AutoFixFilter extends BaseFilter {
GLES20.glUniform1f(scaleLocation, scale); GLES20.glUniform1f(scaleLocation, scale);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");
} }
@Override
protected BaseFilter onCopy() {
AutoFixFilter filter = new AutoFixFilter();
filter.setScale(getScale());
return filter;
}
} }

Loading…
Cancel
Save