changed folder structure

pull/527/head
Suneet Agrawal 6 years ago
parent 42ab7d3c30
commit 77464875be
  1. 31
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
  2. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/AutoFixEffect.java
  3. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/BlackAndWhiteEffect.java
  4. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/BrightnessEffect.java
  5. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/ContrastEffect.java
  6. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/CrossProcessEffect.java
  7. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/CustomEffect.java
  8. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/DocumentaryEffect.java
  9. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/DuotoneEffect.java
  10. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/FillLightEffect.java
  11. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/Filter.java
  12. 124
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/Filters.java
  13. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/GammaEffect.java
  14. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/GrainEffect.java
  15. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/GreyScaleEffect.java
  16. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/HueEffect.java
  17. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/InvertColorsEffect.java
  18. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/LamoishEffect.java
  19. 11
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/NoFilterEffect.java
  20. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/PosterizeEffect.java
  21. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/SaturationEffect.java
  22. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/SepiaEffect.java
  23. 7
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/SharpnessEffect.java
  24. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/TemperatureEffect.java
  25. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/TintEffect.java
  26. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/filters/VignetteEffect.java
  27. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java
  28. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/picture/SnapshotGlPictureRecorder.java
  29. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java
  30. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/RendererFrameCallback.java
  31. 152
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/ShaderEffectFactory.java
  32. 11
      cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/NoFilterEffect.java
  33. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java
  34. 58
      demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java

@ -13,12 +13,10 @@ import android.graphics.PointF;
import android.graphics.Rect;
import android.location.Location;
import android.media.MediaActionSound;
import android.opengl.GLSurfaceView;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
@ -49,6 +47,8 @@ import com.otaliastudios.cameraview.engine.Camera1Engine;
import com.otaliastudios.cameraview.engine.Camera2Engine;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.engine.offset.Reference;
import com.otaliastudios.cameraview.filters.Filter;
import com.otaliastudios.cameraview.filters.Filters;
import com.otaliastudios.cameraview.frame.Frame;
import com.otaliastudios.cameraview.frame.FrameProcessor;
import com.otaliastudios.cameraview.gesture.Gesture;
@ -71,8 +71,6 @@ import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.preview.SurfaceCameraPreview;
import com.otaliastudios.cameraview.preview.TextureCameraPreview;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.shadereffects.ShaderEffectFactory;
import com.otaliastudios.cameraview.size.AspectRatio;
import com.otaliastudios.cameraview.size.Size;
import com.otaliastudios.cameraview.size.SizeSelector;
@ -2136,33 +2134,20 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
//region Effects
public GLSurfaceView getCurrentPreviewingGlSurfaceView() {
public void setFilter(Filters filter) {
if (mCameraPreview instanceof GlCameraPreview) {
return ((GlCameraPreview) mCameraPreview).getView();
}
LOG.w("getCurrentPreviewingGlSurfaceView", "current preview is not GLSurfaceView");
return null;
}
public void changeEffect(ShaderEffectFactory.ShaderEffects effect) {
if (mCameraPreview instanceof GlCameraPreview) {
GLSurfaceView previewingSurfaceView = getCurrentPreviewingGlSurfaceView();
if (previewingSurfaceView != null) {
BaseShaderEffect shaderEffect = ShaderEffectFactory.getShaderFromFactory(effect, previewingSurfaceView);
((GlCameraPreview) mCameraPreview).setShaderEffect(shaderEffect);
}
Filter shaderEffect = filter.newInstance();
((GlCameraPreview) mCameraPreview).setShaderEffect(shaderEffect);
} else {
LOG.w("changeEffect", "changeEffect is supported only for GLSurfaceView");
LOG.w("setFilter", "setFilter is supported only for GLSurfaceView");
}
}
public void changeEffect(BaseShaderEffect shaderEffect) {
public void setFilter(Filter shaderEffect) {
if (mCameraPreview instanceof GlCameraPreview) {
((GlCameraPreview) mCameraPreview).setShaderEffect(shaderEffect);
} else {
LOG.w("changeEffect", "changeEffect is supported only for GLSurfaceView");
LOG.w("setFilter", "setFilter is supported only for GLSurfaceView");
}
}

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Attempts to auto-fix the preview based on histogram equalization.
*/
public class AutoFixEffect extends BaseShaderEffect {
public class AutoFixEffect extends Filter {
private float scale = 1.0f;

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Converts the preview into black and white colors
*/
public class BlackAndWhiteEffect extends BaseShaderEffect {
public class BlackAndWhiteEffect extends Filter {
/**

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Adjusts the brightness of the preview.
*/
public class BrightnessEffect extends BaseShaderEffect {
public class BrightnessEffect extends Filter {
private float brightnessValue = 2.0f;
/**

@ -1,10 +1,10 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Adjusts the contrast of the preview.
*/
public class ContrastEffect extends BaseShaderEffect {
public class ContrastEffect extends Filter {
private float contrast = 2.0f;
/**

@ -1,12 +1,12 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Applies a cross process effect on preview, in which the red and green channels
* are enhanced while the blue channel is restricted.
*/
public class CrossProcessEffect extends BaseShaderEffect {
public class CrossProcessEffect extends Filter {
/**
* Initialize Effect

@ -1,12 +1,12 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* This class is to implement any custom effect.
*/
public class CustomEffect extends BaseShaderEffect {
public class CustomEffect extends Filter {
/**
* Parameterized constructor with vertex and fragment shader as parameter

@ -1,8 +1,6 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import android.opengl.GLSurfaceView;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
import java.util.Date;
import java.util.Random;
@ -10,7 +8,7 @@ import java.util.Random;
/**
* Applies black and white documentary style effect on preview.
*/
public class DocumentaryEffect extends BaseShaderEffect {
public class DocumentaryEffect extends Filter {
private Random mRandom;
public DocumentaryEffect() {

@ -1,13 +1,13 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import android.graphics.Color;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Representation of preview using only two color tones.
*/
public class DuotoneEffect extends BaseShaderEffect {
public class DuotoneEffect extends Filter {
// Default values
private int mFirstColor = Color.MAGENTA;
private int mSecondColor = Color.YELLOW;

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Applies back-light filling to the preview.
*/
public class FillLightEffect extends BaseShaderEffect {
public class FillLightEffect extends Filter {
private float strength = 0.5f;
/**

@ -1,6 +1,4 @@
package com.otaliastudios.cameraview.shadereffects;
import android.opengl.GLSurfaceView;
package com.otaliastudios.cameraview.filters;
/**
* A Base abstract class that every effect must extend so that there is a common getShader method.
@ -20,7 +18,7 @@ import android.opengl.GLSurfaceView;
* <p>
* The default implementation of this class is NoEffect.
*/
public abstract class BaseShaderEffect {
public abstract class Filter {
/**
* Vertex shader code written in Shader Language (C) and stored as String.

@ -0,0 +1,124 @@
package com.otaliastudios.cameraview.filters;
public enum Filters {
NO_EFFECT,
AUTO_FIX_EFFECT,
BLACK_AND_WHITE_EFFECT,
BRIGHTNESS_EFFECT,
CONTRAST_EFFECT,
CROSS_PROCESS_EFFECT,
DOCUMENTARY_EFFECT,
DUO_TONE_COLOR_EFFECT,
FILL_LIGHT_EFFECT,
GAMMA_EFFECT,
GRAIN_EFFECT,
GREY_SCALE_EFFECT,
HUE_EFFECT,
INVERT_COLOR_EFFECT,
LAMOISH_EFFECT,
POSTERIZE_EFFECT,
SATURATION_EFFECT,
SEPIA_EFFECT,
SHARPNESS_EFFECT,
TEMPERATURE_EFFECT,
TINT_EFFECT,
VIGNETTE_EFFECT;
public Filter newInstance(){
Filter shaderEffect;
switch (this) {
case AUTO_FIX_EFFECT:
shaderEffect = new AutoFixEffect();
break;
case BLACK_AND_WHITE_EFFECT:
shaderEffect = new BlackAndWhiteEffect();
break;
case BRIGHTNESS_EFFECT:
shaderEffect = new BrightnessEffect();
break;
case CONTRAST_EFFECT:
shaderEffect = new ContrastEffect();
break;
case CROSS_PROCESS_EFFECT:
shaderEffect = new CrossProcessEffect();
break;
case DOCUMENTARY_EFFECT:
shaderEffect = new DocumentaryEffect();
break;
case DUO_TONE_COLOR_EFFECT:
shaderEffect = new DuotoneEffect();
break;
case FILL_LIGHT_EFFECT:
shaderEffect = new FillLightEffect();
break;
case GAMMA_EFFECT:
shaderEffect = new GammaEffect();
break;
case GRAIN_EFFECT:
shaderEffect = new GrainEffect();
break;
case GREY_SCALE_EFFECT:
shaderEffect = new GreyScaleEffect();
break;
case HUE_EFFECT:
shaderEffect = new HueEffect();
break;
case INVERT_COLOR_EFFECT:
shaderEffect = new InvertColorsEffect();
break;
case LAMOISH_EFFECT:
shaderEffect = new LamoishEffect();
break;
case POSTERIZE_EFFECT:
shaderEffect = new PosterizeEffect();
break;
case SATURATION_EFFECT:
shaderEffect = new SaturationEffect();
break;
case SEPIA_EFFECT:
shaderEffect = new SepiaEffect();
break;
case SHARPNESS_EFFECT:
shaderEffect = new SharpnessEffect();
break;
case TEMPERATURE_EFFECT:
shaderEffect = new TemperatureEffect();
break;
case TINT_EFFECT:
shaderEffect = new TintEffect();
break;
case VIGNETTE_EFFECT:
shaderEffect = new VignetteEffect();
break;
case NO_EFFECT:
default:
shaderEffect = new NoFilterEffect();
}
return shaderEffect;
}
}

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Apply Gamma Effect on preview being played
*/
public class GammaEffect extends BaseShaderEffect {
public class GammaEffect extends Filter {
private float gammaValue = 2.0f;
/**

@ -1,8 +1,6 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import android.opengl.GLSurfaceView;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
import java.util.Date;
import java.util.Random;
@ -10,7 +8,7 @@ import java.util.Random;
/**
* Applies film grain effect to preview.
*/
public class GrainEffect extends BaseShaderEffect {
public class GrainEffect extends Filter {
private float strength = 0.5f;
private Random mRandom;

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Converts preview to GreyScale.
*/
public class GreyScaleEffect extends BaseShaderEffect {
public class GreyScaleEffect extends Filter {
/**
* Initialize Effect
*/

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Apply Hue effect on the preview
*/
public class HueEffect extends BaseShaderEffect {
public class HueEffect extends Filter {
float hueValue = 0.0f;
/**

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Inverts the preview colors. This can also be known as negative Effect.
*/
public class InvertColorsEffect extends BaseShaderEffect {
public class InvertColorsEffect extends Filter {
/**
* Initialize Effect
*/

@ -1,8 +1,6 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import android.opengl.GLSurfaceView;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
import java.util.Date;
import java.util.Random;
@ -10,7 +8,7 @@ import java.util.Random;
/**
* Applies lomo-camera style effect to preview.
*/
public class LamoishEffect extends BaseShaderEffect {
public class LamoishEffect extends Filter {
private Random mRandom;
/**

@ -0,0 +1,11 @@
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.filters.Filter;
public class NoFilterEffect extends Filter {
@Override
public String getFragmentShader() {
return mFragmentShader;
}
}

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Applies Posterization effect to Preview.
*/
public class PosterizeEffect extends BaseShaderEffect {
public class PosterizeEffect extends Filter {
/**
* Initialize Effect
*/

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Adjusts color saturation of preview.
*/
public class SaturationEffect extends BaseShaderEffect {
public class SaturationEffect extends Filter {
private float scale = 1.0f;
/**

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Converts preview to Sepia tone.
*/
public class SepiaEffect extends BaseShaderEffect {
public class SepiaEffect extends Filter {
/**
* Initialize Effect
*/

@ -1,12 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import android.opengl.GLSurfaceView;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Sharpens the preview.
*/
public class SharpnessEffect extends BaseShaderEffect {
public class SharpnessEffect extends Filter {
private float scale = 0.5f;
/**

@ -1,11 +1,11 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Adjusts color temperature of the preview.
*/
public class TemperatureEffect extends BaseShaderEffect {
public class TemperatureEffect extends Filter {
private float scale = 0f;
/**

@ -1,14 +1,14 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import android.graphics.Color;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Tints the preview with specified color..
*/
public class TintEffect extends BaseShaderEffect {
public class TintEffect extends Filter {
private int mTint = 0xFFFF0000;
/**

@ -1,14 +1,12 @@
package com.otaliastudios.cameraview.shadereffects.effects;
package com.otaliastudios.cameraview.filters;
import android.opengl.GLSurfaceView;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Applies lomo-camera style effect to your preview.
*/
public class VignetteEffect extends BaseShaderEffect {
public class VignetteEffect extends Filter {
private float mScale = 0.85f;
private float mShade = 0.5f;

@ -5,8 +5,8 @@ import android.opengl.GLES11Ext;
import android.opengl.GLES20;
import com.otaliastudios.cameraview.CameraLogger;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.shadereffects.effects.NoFilterEffect;
import com.otaliastudios.cameraview.filters.Filter;
import com.otaliastudios.cameraview.filters.NoFilterEffect;
import java.nio.FloatBuffer;
@ -54,7 +54,7 @@ public class EglViewport extends EglElement {
// private int muTexOffsetLoc; // Used for filtering
// private int muColorAdjustLoc; // Used for filtering
private BaseShaderEffect mShaderEffect;
private Filter mShaderEffect;
private boolean mIsShaderChanged = false;
@ -111,7 +111,7 @@ public class EglViewport extends EglElement {
return texId;
}
public void changeShaderEffect(BaseShaderEffect shaderEffect){
public void changeShaderEffect(Filter shaderEffect){
this.mShaderEffect = shaderEffect;
mIsShaderChanged = true;
}

@ -27,7 +27,7 @@ import com.otaliastudios.cameraview.internal.utils.WorkerHandler;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.preview.RendererFrameCallback;
import com.otaliastudios.cameraview.preview.RendererThread;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
import com.otaliastudios.cameraview.size.AspectRatio;
import com.otaliastudios.cameraview.size.Size;
@ -100,7 +100,7 @@ public class SnapshotGlPictureRecorder extends PictureRecorder {
@RendererThread
@Override
public void onRendererFrame(@NonNull SurfaceTexture surfaceTexture, final float scaleX, final float scaleY, BaseShaderEffect shaderEffect) {
public void onRendererFrame(@NonNull SurfaceTexture surfaceTexture, final float scaleX, final float scaleY, Filter shaderEffect) {
mPreview.removeRendererFrameCallback(this);
// This kinda work but has drawbacks:

@ -15,8 +15,8 @@ import android.view.ViewGroup;
import com.otaliastudios.cameraview.R;
import com.otaliastudios.cameraview.internal.egl.EglViewport;
import com.otaliastudios.cameraview.internal.utils.Op;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.shadereffects.effects.NoFilterEffect;
import com.otaliastudios.cameraview.filters.Filter;
import com.otaliastudios.cameraview.filters.NoFilterEffect;
import com.otaliastudios.cameraview.size.AspectRatio;
import java.util.Collections;
@ -70,7 +70,7 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
@VisibleForTesting float mCropScaleY = 1F;
private View mRootView;
private BaseShaderEffect mCurrentShaderEffect;
private Filter mCurrentShaderEffect;
public GlCameraPreview(@NonNull Context context, @NonNull ViewGroup parent) {
super(context, parent);
@ -316,7 +316,7 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
return new Renderer();
}
public void setShaderEffect(BaseShaderEffect shaderEffect){
public void setShaderEffect(Filter shaderEffect){
mCurrentShaderEffect = shaderEffect;
shaderEffect.setPreviewingViewWidthAndHeight(getView().getWidth(), getView().getHeight());

@ -4,7 +4,7 @@ import android.graphics.SurfaceTexture;
import androidx.annotation.NonNull;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
/**
* Callback for renderer frames.
@ -30,5 +30,5 @@ public interface RendererFrameCallback {
* @param scaleY the scaleY (in REF_VIEW) value
*/
@RendererThread
void onRendererFrame(@NonNull SurfaceTexture surfaceTexture, float scaleX, float scaleY, BaseShaderEffect shaderEffect);
void onRendererFrame(@NonNull SurfaceTexture surfaceTexture, float scaleX, float scaleY, Filter shaderEffect);
}

@ -1,152 +0,0 @@
package com.otaliastudios.cameraview.shadereffects;
import android.opengl.GLSurfaceView;
import com.otaliastudios.cameraview.shadereffects.effects.AutoFixEffect;
import com.otaliastudios.cameraview.shadereffects.effects.BlackAndWhiteEffect;
import com.otaliastudios.cameraview.shadereffects.effects.BrightnessEffect;
import com.otaliastudios.cameraview.shadereffects.effects.ContrastEffect;
import com.otaliastudios.cameraview.shadereffects.effects.CrossProcessEffect;
import com.otaliastudios.cameraview.shadereffects.effects.DocumentaryEffect;
import com.otaliastudios.cameraview.shadereffects.effects.DuotoneEffect;
import com.otaliastudios.cameraview.shadereffects.effects.FillLightEffect;
import com.otaliastudios.cameraview.shadereffects.effects.GammaEffect;
import com.otaliastudios.cameraview.shadereffects.effects.GrainEffect;
import com.otaliastudios.cameraview.shadereffects.effects.GreyScaleEffect;
import com.otaliastudios.cameraview.shadereffects.effects.HueEffect;
import com.otaliastudios.cameraview.shadereffects.effects.InvertColorsEffect;
import com.otaliastudios.cameraview.shadereffects.effects.LamoishEffect;
import com.otaliastudios.cameraview.shadereffects.effects.NoFilterEffect;
import com.otaliastudios.cameraview.shadereffects.effects.PosterizeEffect;
import com.otaliastudios.cameraview.shadereffects.effects.SaturationEffect;
import com.otaliastudios.cameraview.shadereffects.effects.SepiaEffect;
import com.otaliastudios.cameraview.shadereffects.effects.SharpnessEffect;
import com.otaliastudios.cameraview.shadereffects.effects.TemperatureEffect;
import com.otaliastudios.cameraview.shadereffects.effects.TintEffect;
import com.otaliastudios.cameraview.shadereffects.effects.VignetteEffect;
public class ShaderEffectFactory {
public enum ShaderEffects {
NO_EFFECT,
AUTO_FIX_EFFECT,
BLACK_AND_WHITE_EFFECT,
BRIGHTNESS_EFFECT,
CONTRAST_EFFECT,
CROSS_PROCESS_EFFECT,
DOCUMENTARY_EFFECT,
DUO_TONE_COLOR_EFFECT,
FILL_LIGHT_EFFECT,
GAMMA_EFFECT,
GRAIN_EFFECT,
GREY_SCALE_EFFECT,
HUE_EFFECT,
INVERT_COLOR_EFFECT,
LAMOISH_EFFECT,
POSTERIZE_EFFECT,
SATURATION_EFFECT,
SEPIA_EFFECT,
SHARPNESS_EFFECT,
TEMPERATURE_EFFECT,
TINT_EFFECT,
VIGNETTE_EFFECT
}
public static BaseShaderEffect getShaderFromFactory(ShaderEffects effect, GLSurfaceView glSurfaceView) {
BaseShaderEffect shaderEffect;
switch (effect) {
case AUTO_FIX_EFFECT:
shaderEffect = new AutoFixEffect();
break;
case BLACK_AND_WHITE_EFFECT:
shaderEffect = new BlackAndWhiteEffect();
break;
case BRIGHTNESS_EFFECT:
shaderEffect = new BrightnessEffect();
break;
case CONTRAST_EFFECT:
shaderEffect = new ContrastEffect();
break;
case CROSS_PROCESS_EFFECT:
shaderEffect = new CrossProcessEffect();
break;
case DOCUMENTARY_EFFECT:
shaderEffect = new DocumentaryEffect();
break;
case DUO_TONE_COLOR_EFFECT:
shaderEffect = new DuotoneEffect();
break;
case FILL_LIGHT_EFFECT:
shaderEffect = new FillLightEffect();
break;
case GAMMA_EFFECT:
shaderEffect = new GammaEffect();
break;
case GRAIN_EFFECT:
shaderEffect = new GrainEffect();
break;
case GREY_SCALE_EFFECT:
shaderEffect = new GreyScaleEffect();
break;
case HUE_EFFECT:
shaderEffect = new HueEffect();
break;
case INVERT_COLOR_EFFECT:
shaderEffect = new InvertColorsEffect();
break;
case LAMOISH_EFFECT:
shaderEffect = new LamoishEffect();
break;
case POSTERIZE_EFFECT:
shaderEffect = new PosterizeEffect();
break;
case SATURATION_EFFECT:
shaderEffect = new SaturationEffect();
break;
case SEPIA_EFFECT:
shaderEffect = new SepiaEffect();
break;
case SHARPNESS_EFFECT:
shaderEffect = new SharpnessEffect();
break;
case TEMPERATURE_EFFECT:
shaderEffect = new TemperatureEffect();
break;
case TINT_EFFECT:
shaderEffect = new TintEffect();
break;
case VIGNETTE_EFFECT:
shaderEffect = new VignetteEffect();
break;
case NO_EFFECT:
default:
shaderEffect = new NoFilterEffect();
}
return shaderEffect;
}
}

@ -1,11 +0,0 @@
package com.otaliastudios.cameraview.shadereffects.effects;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
public class NoFilterEffect extends BaseShaderEffect {
@Override
public String getFragmentShader() {
return mFragmentShader;
}
}

@ -17,7 +17,7 @@ import com.otaliastudios.cameraview.internal.egl.EglViewport;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.preview.RendererFrameCallback;
import com.otaliastudios.cameraview.preview.RendererThread;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.filters.Filter;
import com.otaliastudios.cameraview.size.Size;
import com.otaliastudios.cameraview.video.encoding.AudioConfig;
import com.otaliastudios.cameraview.video.encoding.AudioMediaEncoder;
@ -106,7 +106,7 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram
@RendererThread
@Override
public void onRendererFrame(@NonNull SurfaceTexture surfaceTexture, float scaleX, float scaleY, BaseShaderEffect shaderEffect) {
public void onRendererFrame(@NonNull SurfaceTexture surfaceTexture, float scaleX, float scaleY, Filter shaderEffect) {
if (mCurrentState == STATE_NOT_RECORDING && mDesiredState == STATE_RECORDING) {
LOG.i("Starting the encoder engine.");

@ -1,8 +1,6 @@
package com.otaliastudios.cameraview.demo;
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
@ -14,13 +12,10 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import androidx.appcompat.app.AppCompatActivity;
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.TextView;
import android.widget.Toast;
import com.otaliastudios.cameraview.CameraException;
@ -32,16 +27,17 @@ import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.controls.Mode;
import com.otaliastudios.cameraview.VideoResult;
import com.otaliastudios.cameraview.controls.Preview;
import com.otaliastudios.cameraview.filters.Filters;
import com.otaliastudios.cameraview.frame.Frame;
import com.otaliastudios.cameraview.frame.FrameProcessor;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.shadereffects.ShaderEffectFactory;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import static com.otaliastudios.cameraview.filters.Filters.*;
public class CameraActivity extends AppCompatActivity implements View.OnClickListener, OptionView.Callback {
@ -53,7 +49,7 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
private ViewGroup controlPanel;
private long mCaptureTime;
private ShaderEffectFactory.ShaderEffects mCurrentEffect = ShaderEffectFactory.ShaderEffects.NO_EFFECT;
private Filters mCurrentEffect = NO_EFFECT;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -321,76 +317,76 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
private void changeCurrentFilter(){
switch (mCurrentEffect){
case NO_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.AUTO_FIX_EFFECT;
mCurrentEffect = AUTO_FIX_EFFECT;
break;
case AUTO_FIX_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.BLACK_AND_WHITE_EFFECT;
mCurrentEffect = BLACK_AND_WHITE_EFFECT;
break;
case BLACK_AND_WHITE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.BRIGHTNESS_EFFECT;
mCurrentEffect = BRIGHTNESS_EFFECT;
break;
case BRIGHTNESS_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.CONTRAST_EFFECT;
mCurrentEffect = CONTRAST_EFFECT;
break;
case CONTRAST_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.CROSS_PROCESS_EFFECT;
mCurrentEffect = CROSS_PROCESS_EFFECT;
break;
case CROSS_PROCESS_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.DOCUMENTARY_EFFECT;
mCurrentEffect = DOCUMENTARY_EFFECT;
break;
case DOCUMENTARY_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.DUO_TONE_COLOR_EFFECT;
mCurrentEffect = DUO_TONE_COLOR_EFFECT;
break;
case DUO_TONE_COLOR_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.FILL_LIGHT_EFFECT;
mCurrentEffect = FILL_LIGHT_EFFECT;
break;
case FILL_LIGHT_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.GAMMA_EFFECT;
mCurrentEffect = GAMMA_EFFECT;
break;
case GAMMA_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.GRAIN_EFFECT;
mCurrentEffect = GRAIN_EFFECT;
break;
case GRAIN_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.GREY_SCALE_EFFECT;
mCurrentEffect = GREY_SCALE_EFFECT;
break;
case GREY_SCALE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.HUE_EFFECT;
mCurrentEffect = HUE_EFFECT;
break;
case HUE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.INVERT_COLOR_EFFECT;
mCurrentEffect = INVERT_COLOR_EFFECT;
break;
case INVERT_COLOR_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.LAMOISH_EFFECT;
mCurrentEffect = LAMOISH_EFFECT;
break;
case LAMOISH_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.POSTERIZE_EFFECT;
mCurrentEffect = POSTERIZE_EFFECT;
break;
case POSTERIZE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.SATURATION_EFFECT;
mCurrentEffect = SATURATION_EFFECT;
break;
case SATURATION_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.SEPIA_EFFECT;
mCurrentEffect = SEPIA_EFFECT;
break;
case SEPIA_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.SHARPNESS_EFFECT;
mCurrentEffect = SHARPNESS_EFFECT;
break;
case SHARPNESS_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.TEMPERATURE_EFFECT;
mCurrentEffect = TEMPERATURE_EFFECT;
break;
case TEMPERATURE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.TINT_EFFECT;
mCurrentEffect = TINT_EFFECT;
break;
case TINT_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.VIGNETTE_EFFECT;
mCurrentEffect = VIGNETTE_EFFECT;
break;
case VIGNETTE_EFFECT:
default:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.NO_EFFECT;
mCurrentEffect = NO_EFFECT;
break;
}
camera.changeEffect(mCurrentEffect);
camera.setFilter(mCurrentEffect);
}
@Override

Loading…
Cancel
Save