modified shaders and removed the glsurfaceview dependency

pull/527/head
Suneet Agrawal 6 years ago
parent 0dd4756b57
commit 42ab7d3c30
  1. 10
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java
  2. 11
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/BaseShaderEffect.java
  3. 10
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/ShaderEffectFactory.java
  4. 20
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DocumentaryEffect.java
  5. 23
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GrainEffect.java
  6. 26
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/LamoishEffect.java
  7. 21
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SharpnessEffect.java
  8. 25
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/VignetteEffect.java

@ -70,7 +70,7 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
@VisibleForTesting float mCropScaleY = 1F; @VisibleForTesting float mCropScaleY = 1F;
private View mRootView; private View mRootView;
private BaseShaderEffect mCurrectShaderEffect; private BaseShaderEffect mCurrentShaderEffect;
public GlCameraPreview(@NonNull Context context, @NonNull ViewGroup parent) { public GlCameraPreview(@NonNull Context context, @NonNull ViewGroup parent) {
super(context, parent); super(context, parent);
@ -167,7 +167,7 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
}); });
//init the default shader effect //init the default shader effect
mCurrectShaderEffect = new NoFilterEffect(); mCurrentShaderEffect = new NoFilterEffect();
} }
@RendererThread @RendererThread
@ -216,7 +216,7 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
synchronized (mRendererFrameCallbacks) { synchronized (mRendererFrameCallbacks) {
// Need to synchronize when iterating the Collections.synchronizedSet // Need to synchronize when iterating the Collections.synchronizedSet
for (RendererFrameCallback callback : mRendererFrameCallbacks) { for (RendererFrameCallback callback : mRendererFrameCallbacks) {
callback.onRendererFrame(mInputSurfaceTexture, mCropScaleX, mCropScaleY, mCurrectShaderEffect); callback.onRendererFrame(mInputSurfaceTexture, mCropScaleX, mCropScaleY, mCurrentShaderEffect);
} }
} }
} }
@ -317,7 +317,9 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
} }
public void setShaderEffect(BaseShaderEffect shaderEffect){ public void setShaderEffect(BaseShaderEffect shaderEffect){
mCurrectShaderEffect = shaderEffect; mCurrentShaderEffect = shaderEffect;
shaderEffect.setPreviewingViewWidthAndHeight(getView().getWidth(), getView().getHeight());
mOutputViewport.changeShaderEffect(shaderEffect); mOutputViewport.changeShaderEffect(shaderEffect);
} }
} }

@ -52,15 +52,16 @@ public abstract class BaseShaderEffect {
+ " gl_FragColor = texture2D(sTexture, vTextureCoord);\n" + " gl_FragColor = texture2D(sTexture, vTextureCoord);\n"
+ "}\n"; + "}\n";
/** /**
* Previewing GlSurfaceview. * Width and height of previewing GlSurfaceview.
* This will be used by a few effects. * This will be used by a few effects.
*/ */
protected GLSurfaceView mGlSurfaceView; protected int mPreviewingViewWidth = 0;
protected int mPreviewingViewHeight = 0;
public void setGlSurfaceView(GLSurfaceView glSurfaceView) { public void setPreviewingViewWidthAndHeight(int width, int height){
this.mGlSurfaceView = glSurfaceView; mPreviewingViewWidth = width;
mPreviewingViewHeight = height;
} }
/** /**

@ -78,7 +78,7 @@ public class ShaderEffectFactory {
break; break;
case DOCUMENTARY_EFFECT: case DOCUMENTARY_EFFECT:
shaderEffect = new DocumentaryEffect(glSurfaceView); shaderEffect = new DocumentaryEffect();
break; break;
case DUO_TONE_COLOR_EFFECT: case DUO_TONE_COLOR_EFFECT:
@ -94,7 +94,7 @@ public class ShaderEffectFactory {
break; break;
case GRAIN_EFFECT: case GRAIN_EFFECT:
shaderEffect = new GrainEffect(glSurfaceView); shaderEffect = new GrainEffect();
break; break;
case GREY_SCALE_EFFECT: case GREY_SCALE_EFFECT:
@ -110,7 +110,7 @@ public class ShaderEffectFactory {
break; break;
case LAMOISH_EFFECT: case LAMOISH_EFFECT:
shaderEffect = new LamoishEffect(glSurfaceView); shaderEffect = new LamoishEffect();
break; break;
case POSTERIZE_EFFECT: case POSTERIZE_EFFECT:
@ -126,7 +126,7 @@ public class ShaderEffectFactory {
break; break;
case SHARPNESS_EFFECT: case SHARPNESS_EFFECT:
shaderEffect = new SharpnessEffect(glSurfaceView); shaderEffect = new SharpnessEffect();
break; break;
case TEMPERATURE_EFFECT: case TEMPERATURE_EFFECT:
@ -138,7 +138,7 @@ public class ShaderEffectFactory {
break; break;
case VIGNETTE_EFFECT: case VIGNETTE_EFFECT:
shaderEffect = new VignetteEffect(glSurfaceView); shaderEffect = new VignetteEffect();
break; break;

@ -11,32 +11,20 @@ import java.util.Random;
* Applies black and white documentary style effect on preview. * Applies black and white documentary style effect on preview.
*/ */
public class DocumentaryEffect extends BaseShaderEffect { public class DocumentaryEffect extends BaseShaderEffect {
private int mWidth;
private int mHeight;
private Random mRandom; private Random mRandom;
public DocumentaryEffect(GLSurfaceView glSurfaceView) { public DocumentaryEffect() {
this.mGlSurfaceView = glSurfaceView;
}
/**
* Init all values that will be used by this shader.
*/
private void initValues(GLSurfaceView mGlSurfaceView) {
mWidth = mGlSurfaceView.getWidth();
mHeight = mGlSurfaceView.getHeight();
mRandom = new Random(new Date().getTime()); mRandom = new Random(new Date().getTime());
} }
@Override @Override
public String getFragmentShader() { public String getFragmentShader() {
initValues(mGlSurfaceView);
float scale[] = new float[2]; float scale[] = new float[2];
if (mWidth > mHeight) { if (mPreviewingViewWidth > mPreviewingViewHeight) {
scale[0] = 1f; scale[0] = 1f;
scale[1] = ((float) mHeight) / mWidth; scale[1] = ((float) mPreviewingViewHeight) / mPreviewingViewWidth;
} else { } else {
scale[0] = ((float) mWidth) / mHeight; scale[0] = ((float) mPreviewingViewWidth) / mPreviewingViewHeight;
scale[1] = 1f; scale[1] = 1f;
} }
float max_dist = ((float) Math.sqrt(scale[0] * scale[0] + scale[1] float max_dist = ((float) Math.sqrt(scale[0] * scale[0] + scale[1]

@ -11,16 +11,14 @@ import java.util.Random;
* Applies film grain effect to preview. * Applies film grain effect to preview.
*/ */
public class GrainEffect extends BaseShaderEffect { public class GrainEffect extends BaseShaderEffect {
private int mWidth;
private int mHeight;
private float strength = 0.5f; private float strength = 0.5f;
private Random mRandom; private Random mRandom;
/** /**
* Initialize Effect * Initialize Effect
*/ */
public GrainEffect(GLSurfaceView glSurfaceView) { public GrainEffect() {
this.mGlSurfaceView = glSurfaceView; mRandom = new Random(new Date().getTime());
} }
/** /**
@ -41,28 +39,15 @@ public class GrainEffect extends BaseShaderEffect {
return strength; return strength;
} }
/**
* Init all values that will be used by this shader.
*
* @param mGlSurfaceView which is responsible for displaying your video
*/
private void initValues(GLSurfaceView mGlSurfaceView) {
mWidth = mGlSurfaceView.getWidth();
mHeight = mGlSurfaceView.getHeight();
mRandom = new Random(new Date().getTime());
}
@Override @Override
public String getFragmentShader() { public String getFragmentShader() {
initValues(mGlSurfaceView);
float seed[] = {mRandom.nextFloat(), mRandom.nextFloat()}; float seed[] = {mRandom.nextFloat(), mRandom.nextFloat()};
String scaleString = "scale = " + strength + ";\n"; String scaleString = "scale = " + strength + ";\n";
String seedString[] = new String[2]; String seedString[] = new String[2];
seedString[0] = "seed[0] = " + seed[0] + ";\n"; seedString[0] = "seed[0] = " + seed[0] + ";\n";
seedString[1] = "seed[1] = " + seed[1] + ";\n"; seedString[1] = "seed[1] = " + seed[1] + ";\n";
String stepX = "stepX = " + 0.5f / mWidth + ";\n"; String stepX = "stepX = " + 0.5f / mPreviewingViewWidth + ";\n";
String stepY = "stepY = " + 0.5f / mHeight + ";\n"; String stepY = "stepY = " + 0.5f / mPreviewingViewHeight + ";\n";
// locString[1] = "loc[1] = loc[1]+" + seedString[1] + ";\n"; // locString[1] = "loc[1] = loc[1]+" + seedString[1] + ";\n";

@ -11,8 +11,6 @@ import java.util.Random;
* Applies lomo-camera style effect to preview. * Applies lomo-camera style effect to preview.
*/ */
public class LamoishEffect extends BaseShaderEffect { public class LamoishEffect extends BaseShaderEffect {
private int mWidth;
private int mHeight;
private Random mRandom; private Random mRandom;
/** /**
@ -20,30 +18,18 @@ public class LamoishEffect extends BaseShaderEffect {
* *
* @param glSurfaceView GLSurfaceView * @param glSurfaceView GLSurfaceView
*/ */
public LamoishEffect(GLSurfaceView glSurfaceView) { public LamoishEffect() {
this.mGlSurfaceView = glSurfaceView;
}
/**
* Init all values that will be used by this shader.
*
* @param mGlSurfaceView which is responsible for displaying your video
*/
private void initValues(GLSurfaceView mGlSurfaceView) {
mWidth = mGlSurfaceView.getWidth();
mHeight = mGlSurfaceView.getHeight();
mRandom = new Random(new Date().getTime()); mRandom = new Random(new Date().getTime());
} }
@Override @Override
public String getFragmentShader() { public String getFragmentShader() {
initValues(mGlSurfaceView);
float scale[] = new float[2]; float scale[] = new float[2];
if (mWidth > mHeight) { if (mPreviewingViewWidth > mPreviewingViewHeight) {
scale[0] = 1f; scale[0] = 1f;
scale[1] = ((float) mHeight) / mWidth; scale[1] = ((float) mPreviewingViewHeight) / mPreviewingViewWidth;
} else { } else {
scale[0] = ((float) mWidth) / mHeight; scale[0] = ((float) mPreviewingViewWidth) / mPreviewingViewHeight;
scale[1] = 1f; scale[1] = 1f;
} }
float max_dist = ((float) Math.sqrt(scale[0] * scale[0] + scale[1] float max_dist = ((float) Math.sqrt(scale[0] * scale[0] + scale[1]
@ -62,8 +48,8 @@ public class LamoishEffect extends BaseShaderEffect {
String inv_max_distString = "inv_max_dist = " + 1.0f / max_dist + ";\n"; String inv_max_distString = "inv_max_dist = " + 1.0f / max_dist + ";\n";
String stepsizeString = "stepsize = " + 1.0f / 255.0f + ";\n"; String stepsizeString = "stepsize = " + 1.0f / 255.0f + ";\n";
String stepsizeXString = "stepsizeX = " + 1.0f / mWidth + ";\n"; String stepsizeXString = "stepsizeX = " + 1.0f / mPreviewingViewWidth + ";\n";
String stepsizeYString = "stepsizeY = " + 1.0f / mHeight + ";\n"; String stepsizeYString = "stepsizeY = " + 1.0f / mPreviewingViewHeight + ";\n";
String shader = "#extension GL_OES_EGL_image_external : require\n" String shader = "#extension GL_OES_EGL_image_external : require\n"
+ "precision mediump float;\n" + "precision mediump float;\n"

@ -7,16 +7,12 @@ import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
* Sharpens the preview. * Sharpens the preview.
*/ */
public class SharpnessEffect extends BaseShaderEffect { public class SharpnessEffect extends BaseShaderEffect {
private int mWidth;
private int mHeight;
private float scale = 0.5f; private float scale = 0.5f;
/** /**
* Initialize Effect * Initialize Effect
*/ */
public SharpnessEffect(GLSurfaceView glSurfaceView) { public SharpnessEffect() { }
this.mGlSurfaceView = glSurfaceView;
}
/** /**
* @param value Float, between 0 and 1. 0 means no change. * @param value Float, between 0 and 1. 0 means no change.
@ -34,22 +30,11 @@ public class SharpnessEffect extends BaseShaderEffect {
return scale; return scale;
} }
/**
* Init all values that will be used by this shader.
*
* @param mGlSurfaceView which is responsible for displaying your video
*/
private void initValues(GLSurfaceView mGlSurfaceView) {
mWidth = mGlSurfaceView.getWidth();
mHeight = mGlSurfaceView.getHeight();
}
@Override @Override
public String getFragmentShader() { public String getFragmentShader() {
initValues(mGlSurfaceView);
String stepsizeXString = "stepsizeX = " + 1.0f / mWidth + ";\n"; String stepsizeXString = "stepsizeX = " + 1.0f / mPreviewingViewWidth + ";\n";
String stepsizeYString = "stepsizeY = " + 1.0f / mHeight + ";\n"; String stepsizeYString = "stepsizeY = " + 1.0f / mPreviewingViewHeight + ";\n";
String scaleString = "scale = " + scale + ";\n"; String scaleString = "scale = " + scale + ";\n";
String shader = "#extension GL_OES_EGL_image_external : require\n" String shader = "#extension GL_OES_EGL_image_external : require\n"

@ -9,19 +9,13 @@ import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
* Applies lomo-camera style effect to your preview. * Applies lomo-camera style effect to your preview.
*/ */
public class VignetteEffect extends BaseShaderEffect { public class VignetteEffect extends BaseShaderEffect {
private int mWidth = 0;
private int mHeight = 0;
private float mScale = 0.85f; private float mScale = 0.85f;
private float mShade = 0.5f; private float mShade = 0.5f;
/** /**
* Initialize Effect * Initialize Effect
*
* @param glSurfaceView GLSurfaceView
*/ */
public VignetteEffect(GLSurfaceView glSurfaceView) { public VignetteEffect() {
this.mGlSurfaceView = glSurfaceView;
} }
/** /**
@ -48,25 +42,14 @@ public class VignetteEffect extends BaseShaderEffect {
this.mShade = shade; this.mShade = shade;
} }
/**
* Init all values that will be used by this shader.
*
* @param mGlSurfaceView which is responsible for displaying your preview
*/
private void initValues(GLSurfaceView mGlSurfaceView) {
mWidth = mGlSurfaceView.getWidth();
mHeight = mGlSurfaceView.getHeight();
}
@Override @Override
public String getFragmentShader() { public String getFragmentShader() {
initValues(mGlSurfaceView);
float scale[] = new float[2]; float scale[] = new float[2];
if (mWidth > mHeight) { if (mPreviewingViewWidth > mPreviewingViewHeight) {
scale[0] = 1f; scale[0] = 1f;
scale[1] = ((float) mHeight) / mWidth; scale[1] = ((float) mPreviewingViewHeight) / mPreviewingViewWidth;
} else { } else {
scale[0] = ((float) mWidth) / mHeight; scale[0] = ((float) mPreviewingViewWidth) / mPreviewingViewHeight;
scale[1] = 1f; scale[1] = 1f;
} }
float max_dist = ((float) Math.sqrt(scale[0] * scale[0] + scale[1] float max_dist = ((float) Math.sqrt(scale[0] * scale[0] + scale[1]

Loading…
Cancel
Save