Add timestampUs in BaseFilter.onPreDraw, onDraw, onPostDraw

pull/588/head
Mattia Iavarone 6 years ago
parent b063d592f5
commit ccae43cc15
  1. 12
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/filter/BaseFilterTest.java
  2. 24
      cameraview/src/main/java/com/otaliastudios/cameraview/filter/BaseFilter.java
  3. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/AutoFixFilter.java
  4. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/BrightnessFilter.java
  5. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/ContrastFilter.java
  6. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/DocumentaryFilter.java
  7. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/DuotoneFilter.java
  8. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/FillLightFilter.java
  9. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/GammaFilter.java
  10. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/GrainFilter.java
  11. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/HueFilter.java
  12. 5
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/LomoishFilter.java
  13. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/SaturationFilter.java
  14. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/SharpnessFilter.java
  15. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/TemperatureFilter.java
  16. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/TintFilter.java
  17. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/VignetteFilter.java

@ -104,9 +104,9 @@ public class BaseFilterTest extends BaseEglTest {
filter = spy(new TestFilter()); filter = spy(new TestFilter());
float[] matrix = new float[16]; float[] matrix = new float[16];
filter.draw(0L, matrix); filter.draw(0L, matrix);
verify(filter, never()).onPreDraw(matrix); verify(filter, never()).onPreDraw(0L, matrix);
verify(filter, never()).onDraw(); verify(filter, never()).onDraw(0L);
verify(filter, never()).onPostDraw(); verify(filter, never()).onPostDraw(0L);
} }
@Test @Test
@ -118,9 +118,9 @@ public class BaseFilterTest extends BaseEglTest {
float[] matrix = new float[16]; float[] matrix = new float[16];
viewport.drawFrame(0L, texture, matrix); viewport.drawFrame(0L, texture, matrix);
verify(filter, times(1)).onPreDraw(matrix); verify(filter, times(1)).onPreDraw(0L, matrix);
verify(filter, times(1)).onDraw(); verify(filter, times(1)).onDraw(0L);
verify(filter, times(1)).onPostDraw(); verify(filter, times(1)).onPostDraw(0L);
viewport.release(); viewport.release();
} }

@ -101,7 +101,7 @@ public abstract class BaseFilter implements Filter {
}); });
private int vertexModelViewProjectionMatrixLocation = -1; private int vertexModelViewProjectionMatrixLocation = -1;
private int vertexTranformMatrixLocation = -1; private int vertexTransformMatrixLocation = -1;
private int vertexPositionLocation = -1; private int vertexPositionLocation = -1;
private int vertexTextureCoordinateLocation = -1; private int vertexTextureCoordinateLocation = -1;
@VisibleForTesting int programHandle = -1; @VisibleForTesting int programHandle = -1;
@ -143,8 +143,8 @@ public abstract class BaseFilter implements Filter {
GlUtils.checkLocation(vertexTextureCoordinateLocation, vertexTextureCoordinateName); GlUtils.checkLocation(vertexTextureCoordinateLocation, vertexTextureCoordinateName);
vertexModelViewProjectionMatrixLocation = GLES20.glGetUniformLocation(programHandle, vertexModelViewProjectionMatrixName); vertexModelViewProjectionMatrixLocation = GLES20.glGetUniformLocation(programHandle, vertexModelViewProjectionMatrixName);
GlUtils.checkLocation(vertexModelViewProjectionMatrixLocation, vertexModelViewProjectionMatrixName); GlUtils.checkLocation(vertexModelViewProjectionMatrixLocation, vertexModelViewProjectionMatrixName);
vertexTranformMatrixLocation = GLES20.glGetUniformLocation(programHandle, vertexTransformMatrixName); vertexTransformMatrixLocation = GLES20.glGetUniformLocation(programHandle, vertexTransformMatrixName);
GlUtils.checkLocation(vertexTranformMatrixLocation, vertexTransformMatrixName); GlUtils.checkLocation(vertexTransformMatrixLocation, vertexTransformMatrixName);
} }
@Override @Override
@ -153,7 +153,7 @@ public abstract class BaseFilter implements Filter {
vertexPositionLocation = -1; vertexPositionLocation = -1;
vertexTextureCoordinateLocation = -1; vertexTextureCoordinateLocation = -1;
vertexModelViewProjectionMatrixLocation = -1; vertexModelViewProjectionMatrixLocation = -1;
vertexTranformMatrixLocation = -1; vertexTransformMatrixLocation = -1;
} }
@NonNull @NonNull
@ -173,21 +173,21 @@ public abstract class BaseFilter implements Filter {
LOG.w("Filter.draw() called after destroying the filter. " + LOG.w("Filter.draw() called after destroying the filter. " +
"This can happen rarely because of threading."); "This can happen rarely because of threading.");
} else { } else {
onPreDraw(transformMatrix); onPreDraw(timestampUs, transformMatrix);
onDraw(); onDraw(timestampUs);
onPostDraw(); onPostDraw(timestampUs);
} }
} }
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
// Copy the model / view / projection matrix over. // Copy the model / view / projection matrix over.
GLES20.glUniformMatrix4fv(vertexModelViewProjectionMatrixLocation, 1, GLES20.glUniformMatrix4fv(vertexModelViewProjectionMatrixLocation, 1,
false, GlUtils.IDENTITY_MATRIX, 0); false, GlUtils.IDENTITY_MATRIX, 0);
GlUtils.checkError("glUniformMatrix4fv"); GlUtils.checkError("glUniformMatrix4fv");
// Copy the texture transformation matrix over. // Copy the texture transformation matrix over.
GLES20.glUniformMatrix4fv(vertexTranformMatrixLocation, 1, false, GLES20.glUniformMatrix4fv(vertexTransformMatrixLocation, 1,
transformMatrix, 0); false, transformMatrix, 0);
GlUtils.checkError("glUniformMatrix4fv"); GlUtils.checkError("glUniformMatrix4fv");
// Enable the "aPosition" vertex attribute. // Enable the "aPosition" vertex attribute.
@ -208,13 +208,13 @@ public abstract class BaseFilter implements Filter {
} }
@SuppressWarnings("WeakerAccess") @SuppressWarnings("WeakerAccess")
protected void onDraw() { protected void onDraw(long timestampUs) {
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
GlUtils.checkError("glDrawArrays"); GlUtils.checkError("glDrawArrays");
} }
@SuppressWarnings("WeakerAccess") @SuppressWarnings("WeakerAccess")
protected void onPostDraw() { protected void onPostDraw(long timestampUs) {
GLES20.glDisableVertexAttribArray(vertexPositionLocation); GLES20.glDisableVertexAttribArray(vertexPositionLocation);
GLES20.glDisableVertexAttribArray(vertexTextureCoordinateLocation); GLES20.glDisableVertexAttribArray(vertexTextureCoordinateLocation);
} }

@ -116,8 +116,8 @@ public class AutoFixFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
GLES20.glUniform1f(scaleLocation, scale); GLES20.glUniform1f(scaleLocation, scale);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");
} }

@ -86,8 +86,8 @@ public class BrightnessFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
GLES20.glUniform1f(brightnessLocation, brightness); GLES20.glUniform1f(brightnessLocation, brightness);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");
} }

@ -88,8 +88,8 @@ public class ContrastFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
GLES20.glUniform1f(contrastLocation, contrast); GLES20.glUniform1f(contrastLocation, contrast);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");
} }

@ -93,8 +93,8 @@ public class DocumentaryFilter extends BaseFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
float[] scale = new float[2]; float[] scale = new float[2];
if (mWidth > mHeight) { if (mWidth > mHeight) {
scale[0] = 1f; scale[0] = 1f;

@ -137,8 +137,8 @@ public class DuotoneFilter extends BaseFilter implements TwoParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
float[] first = new float[]{ float[] first = new float[]{
Color.red(mFirstColor) / 255f, Color.red(mFirstColor) / 255f,
Color.green(mFirstColor) / 255f, Color.green(mFirstColor) / 255f,

@ -95,8 +95,8 @@ public class FillLightFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
float amount = 1.0f - strength; float amount = 1.0f - strength;
float multiplier = 1.0f / (amount * 0.7f + 0.3f); float multiplier = 1.0f / (amount * 0.7f + 0.3f);
GLES20.glUniform1f(multiplierLocation, multiplier); GLES20.glUniform1f(multiplierLocation, multiplier);

@ -82,8 +82,8 @@ public class GammaFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
GLES20.glUniform1f(gammaLocation, gamma); GLES20.glUniform1f(gammaLocation, gamma);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");
} }

@ -132,8 +132,8 @@ public class GrainFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
GLES20.glUniform1f(strengthLocation, strength); GLES20.glUniform1f(strengthLocation, strength);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");
GLES20.glUniform1f(stepXLocation, 0.5f / width); GLES20.glUniform1f(stepXLocation, 0.5f / width);

@ -96,8 +96,8 @@ public class HueFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
// map it on 360 degree circle // map it on 360 degree circle
float shaderHue = ((hue - 45) / 45f + 0.5f) * -1; float shaderHue = ((hue - 45) / 45f + 0.5f) * -1;
GLES20.glUniform1f(hueLocation, shaderHue); GLES20.glUniform1f(hueLocation, shaderHue);

@ -7,7 +7,6 @@ import androidx.annotation.NonNull;
import com.otaliastudios.cameraview.filter.BaseFilter; import com.otaliastudios.cameraview.filter.BaseFilter;
import com.otaliastudios.cameraview.internal.GlUtils; import com.otaliastudios.cameraview.internal.GlUtils;
import java.util.Date;
import java.util.Random; import java.util.Random;
/** /**
@ -142,8 +141,8 @@ public class LomoishFilter extends BaseFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
float[] scale = new float[2]; float[] scale = new float[2];
if (width > height) { if (width > height) {
scale[0] = 1f; scale[0] = 1f;

@ -103,8 +103,8 @@ public class SaturationFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
if (scale > 0.0f) { if (scale > 0.0f) {
GLES20.glUniform1f(scaleLocation, 0F); GLES20.glUniform1f(scaleLocation, 0F);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");

@ -116,8 +116,8 @@ public class SharpnessFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
GLES20.glUniform1f(scaleLocation, scale); GLES20.glUniform1f(scaleLocation, scale);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");
GLES20.glUniform1f(stepSizeXLocation, 1.0F / width); GLES20.glUniform1f(stepSizeXLocation, 1.0F / width);

@ -94,8 +94,8 @@ public class TemperatureFilter extends BaseFilter implements OneParameterFilter
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
GLES20.glUniform1f(scaleLocation, scale); GLES20.glUniform1f(scaleLocation, scale);
GlUtils.checkError("glUniform1f"); GlUtils.checkError("glUniform1f");
} }

@ -91,8 +91,8 @@ public class TintFilter extends BaseFilter implements OneParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
float[] channels = new float[]{ float[] channels = new float[]{
Color.red(tint) / 255f, Color.red(tint) / 255f,
Color.green(tint) / 255f, Color.green(tint) / 255f,

@ -144,8 +144,8 @@ public class VignetteFilter extends BaseFilter implements TwoParameterFilter {
} }
@Override @Override
protected void onPreDraw(float[] transformMatrix) { protected void onPreDraw(long timestampUs, float[] transformMatrix) {
super.onPreDraw(transformMatrix); super.onPreDraw(timestampUs, transformMatrix);
float[] scale = new float[2]; float[] scale = new float[2];
if (mWidth > mHeight) { if (mWidth > mHeight) {
scale[0] = 1f; scale[0] = 1f;

Loading…
Cancel
Save