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;
private View mRootView;
private BaseShaderEffect mCurrectShaderEffect;
private BaseShaderEffect mCurrentShaderEffect;
public GlCameraPreview(@NonNull Context context, @NonNull ViewGroup parent) {
super(context, parent);
@ -167,7 +167,7 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
});
//init the default shader effect
mCurrectShaderEffect = new NoFilterEffect();
mCurrentShaderEffect = new NoFilterEffect();
}
@RendererThread
@ -216,7 +216,7 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
synchronized (mRendererFrameCallbacks) {
// Need to synchronize when iterating the Collections.synchronizedSet
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){
mCurrectShaderEffect = shaderEffect;
mCurrentShaderEffect = shaderEffect;
shaderEffect.setPreviewingViewWidthAndHeight(getView().getWidth(), getView().getHeight());
mOutputViewport.changeShaderEffect(shaderEffect);
}
}

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

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

@ -11,32 +11,20 @@ import java.util.Random;
* Applies black and white documentary style effect on preview.
*/
public class DocumentaryEffect extends BaseShaderEffect {
private int mWidth;
private int mHeight;
private Random mRandom;
public DocumentaryEffect(GLSurfaceView glSurfaceView) {
this.mGlSurfaceView = glSurfaceView;
}
/**
* Init all values that will be used by this shader.
*/
private void initValues(GLSurfaceView mGlSurfaceView) {
mWidth = mGlSurfaceView.getWidth();
mHeight = mGlSurfaceView.getHeight();
public DocumentaryEffect() {
mRandom = new Random(new Date().getTime());
}
@Override
public String getFragmentShader() {
initValues(mGlSurfaceView);
float scale[] = new float[2];
if (mWidth > mHeight) {
if (mPreviewingViewWidth > mPreviewingViewHeight) {
scale[0] = 1f;
scale[1] = ((float) mHeight) / mWidth;
scale[1] = ((float) mPreviewingViewHeight) / mPreviewingViewWidth;
} else {
scale[0] = ((float) mWidth) / mHeight;
scale[0] = ((float) mPreviewingViewWidth) / mPreviewingViewHeight;
scale[1] = 1f;
}
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.
*/
public class GrainEffect extends BaseShaderEffect {
private int mWidth;
private int mHeight;
private float strength = 0.5f;
private Random mRandom;
/**
* Initialize Effect
*/
public GrainEffect(GLSurfaceView glSurfaceView) {
this.mGlSurfaceView = glSurfaceView;
public GrainEffect() {
mRandom = new Random(new Date().getTime());
}
/**
@ -41,28 +39,15 @@ public class GrainEffect extends BaseShaderEffect {
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
public String getFragmentShader() {
initValues(mGlSurfaceView);
float seed[] = {mRandom.nextFloat(), mRandom.nextFloat()};
String scaleString = "scale = " + strength + ";\n";
String seedString[] = new String[2];
seedString[0] = "seed[0] = " + seed[0] + ";\n";
seedString[1] = "seed[1] = " + seed[1] + ";\n";
String stepX = "stepX = " + 0.5f / mWidth + ";\n";
String stepY = "stepY = " + 0.5f / mHeight + ";\n";
String stepX = "stepX = " + 0.5f / mPreviewingViewWidth + ";\n";
String stepY = "stepY = " + 0.5f / mPreviewingViewHeight + ";\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.
*/
public class LamoishEffect extends BaseShaderEffect {
private int mWidth;
private int mHeight;
private Random mRandom;
/**
@ -20,30 +18,18 @@ public class LamoishEffect extends BaseShaderEffect {
*
* @param glSurfaceView GLSurfaceView
*/
public LamoishEffect(GLSurfaceView glSurfaceView) {
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();
public LamoishEffect() {
mRandom = new Random(new Date().getTime());
}
@Override
public String getFragmentShader() {
initValues(mGlSurfaceView);
float scale[] = new float[2];
if (mWidth > mHeight) {
if (mPreviewingViewWidth > mPreviewingViewHeight) {
scale[0] = 1f;
scale[1] = ((float) mHeight) / mWidth;
scale[1] = ((float) mPreviewingViewHeight) / mPreviewingViewWidth;
} else {
scale[0] = ((float) mWidth) / mHeight;
scale[0] = ((float) mPreviewingViewWidth) / mPreviewingViewHeight;
scale[1] = 1f;
}
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 stepsizeString = "stepsize = " + 1.0f / 255.0f + ";\n";
String stepsizeXString = "stepsizeX = " + 1.0f / mWidth + ";\n";
String stepsizeYString = "stepsizeY = " + 1.0f / mHeight + ";\n";
String stepsizeXString = "stepsizeX = " + 1.0f / mPreviewingViewWidth + ";\n";
String stepsizeYString = "stepsizeY = " + 1.0f / mPreviewingViewHeight + ";\n";
String shader = "#extension GL_OES_EGL_image_external : require\n"
+ "precision mediump float;\n"

@ -7,16 +7,12 @@ import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
* Sharpens the preview.
*/
public class SharpnessEffect extends BaseShaderEffect {
private int mWidth;
private int mHeight;
private float scale = 0.5f;
/**
* Initialize Effect
*/
public SharpnessEffect(GLSurfaceView glSurfaceView) {
this.mGlSurfaceView = glSurfaceView;
}
public SharpnessEffect() { }
/**
* @param value Float, between 0 and 1. 0 means no change.
@ -34,22 +30,11 @@ public class SharpnessEffect extends BaseShaderEffect {
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
public String getFragmentShader() {
initValues(mGlSurfaceView);
String stepsizeXString = "stepsizeX = " + 1.0f / mWidth + ";\n";
String stepsizeYString = "stepsizeY = " + 1.0f / mHeight + ";\n";
String stepsizeXString = "stepsizeX = " + 1.0f / mPreviewingViewWidth + ";\n";
String stepsizeYString = "stepsizeY = " + 1.0f / mPreviewingViewHeight + ";\n";
String scaleString = "scale = " + scale + ";\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.
*/
public class VignetteEffect extends BaseShaderEffect {
private int mWidth = 0;
private int mHeight = 0;
private float mScale = 0.85f;
private float mShade = 0.5f;
/**
* Initialize Effect
*
* @param glSurfaceView GLSurfaceView
*/
public VignetteEffect(GLSurfaceView glSurfaceView) {
this.mGlSurfaceView = glSurfaceView;
public VignetteEffect() {
}
/**
@ -48,25 +42,14 @@ public class VignetteEffect extends BaseShaderEffect {
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
public String getFragmentShader() {
initValues(mGlSurfaceView);
float scale[] = new float[2];
if (mWidth > mHeight) {
if (mPreviewingViewWidth > mPreviewingViewHeight) {
scale[0] = 1f;
scale[1] = ((float) mHeight) / mWidth;
scale[1] = ((float) mPreviewingViewHeight) / mPreviewingViewWidth;
} else {
scale[0] = ((float) mWidth) / mHeight;
scale[0] = ((float) mPreviewingViewWidth) / mPreviewingViewHeight;
scale[1] = 1f;
}
float max_dist = ((float) Math.sqrt(scale[0] * scale[0] + scale[1]

Loading…
Cancel
Save