summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mca/effect/java/android/media/effect/EffectFactory.java247
-rw-r--r--mca/effect/java/android/media/effect/SingleFilterEffect.java1
-rw-r--r--mca/effect/java/android/media/effect/effects/BitmapOverlayEffect.java (renamed from mca/effect/java/android/media/effect/effects/DoodleEffect.java)8
-rw-r--r--mca/filterpacks/imageproc/java/BitmapOverlayFilter.java (renamed from mca/filterpacks/imageproc/java/DoodleFilter.java)47
-rw-r--r--mca/filterpacks/imageproc/java/BlackWhiteFilter.java8
-rw-r--r--mca/filterpacks/imageproc/java/ColorTemperatureFilter.java4
-rw-r--r--mca/filterpacks/imageproc/java/DuotoneFilter.java23
-rw-r--r--mca/filterpacks/imageproc/java/FillLightFilter.java4
-rw-r--r--mca/filterpacks/imageproc/java/FisheyeFilter.java4
-rw-r--r--mca/filterpacks/imageproc/java/FixedRotationFilter.java13
-rw-r--r--mca/filterpacks/imageproc/java/FlipFilter.java8
-rw-r--r--mca/filterpacks/imageproc/java/GrainFilter.java4
-rw-r--r--mca/filterpacks/imageproc/java/RotateFilter.java6
-rw-r--r--mca/filterpacks/imageproc/java/SaturateFilter.java4
-rw-r--r--mca/filterpacks/imageproc/java/SharpenFilter.java4
-rw-r--r--mca/filterpacks/imageproc/java/StraightenFilter.java8
-rw-r--r--mca/filterpacks/imageproc/java/TintFilter.java13
-rw-r--r--mca/filterpacks/imageproc/java/VignetteFilter.java4
18 files changed, 279 insertions, 131 deletions
diff --git a/mca/effect/java/android/media/effect/EffectFactory.java b/mca/effect/java/android/media/effect/EffectFactory.java
index 1cc69e35..4330279d 100644
--- a/mca/effect/java/android/media/effect/EffectFactory.java
+++ b/mca/effect/java/android/media/effect/EffectFactory.java
@@ -38,6 +38,7 @@ public class EffectFactory {
/** List of Effects */
/**
* <p>Copies the input texture to the output.</p>
+ * <p>Available parameters: None</p>
* @hide
*/
public final static String EFFECT_IDENTITY = "IdentityEffect";
@@ -113,163 +114,311 @@ public class EffectFactory {
"android.media.effect.effects.BackDropperEffect";
/**
- * Applies histogram equalization on the image.<br/>
- * Parameters: scale (float): the scale of histogram equalization.
+ * <p>Attempts to auto-fix the image based on histogram equalization.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>scale</code></td>
+ * <td>The scale of the adjustment.</td>
+ * <td>Float, between 0 and 1. Zero means no adjustment, while 1 indicates the maximum
+ * amount of adjustment.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_AUTOFIX =
"android.media.effect.effects.AutoFixEffect";
/**
- * Adjusts the range of minimal and maximal values of color pixels.<br/>
- * Parameters: black (float): the value of the minimal pixel.
- * Parameters: white (float): the value of the maximal pixel.
+ * <p>Adjusts the range of minimal and maximal color pixel intensities.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>black</code></td>
+ * <td>The value of the minimal pixel.</td>
+ * <td>Float, between 0 and 1.</td>
+ * </tr>
+ * <tr><td><code>white</code></td>
+ * <td>The value of the maximal pixel.</td>
+ * <td>Float, between 0 and 1.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_BLACKWHITE =
"android.media.effect.effects.BlackWhiteEffect";
/**
- * Crops an upright rectangular area from the image.<br/>
- * Parameters: xorigin (int): xorigin.
- * yorigin (int): yorigin.
- * width (int): rectangle width.
- * height (int): rectangle height.
+ * <p>Crops an upright rectangular area from the image. If the crop region falls outside of
+ * the image bounds, the results are undefined.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>xorigin</code></td>
+ * <td>The origin's x-value.</td>
+ * <td>Integer, between 0 and width of the image.</td>
+ * </tr>
+ * <tr><td><code>yorigin</code></td>
+ * <td>The origin's y-value.</td>
+ * <td>Integer, between 0 and height of the image.</td>
+ * </tr>
+ * <tr><td><code>width</code></td>
+ * <td>The width of the cropped image.</td>
+ * <td>Integer, between 1 and the width of the image minus xorigin.</td>
+ * </tr>
+ * <tr><td><code>height</code></td>
+ * <td>The height of the cropped image.</td>
+ * <td>Integer, between 1 and the height of the image minus yorigin.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_CROP =
"android.media.effect.effects.CropEffect";
/**
- * Applies cross process effect on image.<br/>
- * Parameters: contrast (float): The strength of the color contrast.
+ * <p>Applies a cross process effect on image, in which the red and green channels are
+ * enhanced while the blue channel is restricted.</p>
+ * <p>Available parameters: None</p>
*/
public final static String EFFECT_CROSSPROCESS =
"android.media.effect.effects.CrossProcessEffect";
/**
- * Applies documentary effect on image.<br/>
- * Parameters: contrast (float): The strength of the color contrast.
+ * <p>Applies black and white documentary style effect on image..</p>
+ * <p>Available parameters: None</p>
*/
public final static String EFFECT_DOCUMENTARY =
"android.media.effect.effects.DocumentaryEffect";
+
/**
- * Attaches doodles to image.<br/>
- * Parameters: contrast (float): The strength of the color contrast.
+ * <p>Overlays a bitmap (with premultiplied alpha channel) onto the input image. The bitmap
+ * is stretched to fit the input image.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>bitmap</code></td>
+ * <td>The overlay bitmap.</td>
+ * <td>A non-null Bitmap instance.</td>
+ * </tr>
+ * </table>
*/
- public final static String EFFECT_DOODLE =
- "android.media.effect.effects.DoodleEffect";
+ public final static String EFFECT_BITMAPOVERLAY =
+ "android.media.effect.effects.BitmapOverlayEffect";
/**
- * Applies duotone effect on image.<br/>
- * Parameters: first_color (int): first color in duotone.
- * Parameters: second_color (int): second color in duotone.
+ * <p>Representation of photo using only two color tones.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>first_color</code></td>
+ * <td>The first color tone.</td>
+ * <td>Integer, representing an ARGB color with 8 bits per channel. May be created using
+ * {@link android.graphics.Color Color} class.</td>
+ * </tr>
+ * <tr><td><code>second_color</code></td>
+ * <td>The second color tone.</td>
+ * <td>Integer, representing an ARGB color with 8 bits per channel. May be created using
+ * {@link android.graphics.Color Color} class.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_DUOTONE =
"android.media.effect.effects.DuotoneEffect";
/**
- * Adds backlight to the image.<br/>
- * Parameters: backlight (float): The scale of the distortion.
+ * <p>Applies back-light filling to the image.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>strength</code></td>
+ * <td>The strength of the backlight.</td>
+ * <td>Float, between 0 and 1. Zero means no change.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_FILLLIGHT =
"android.media.effect.effects.FillLightEffect";
/**
- * Flips image vertically and/or horizontally.<br/>
- * Parameters: vertical (boolean): flip image vertically.
- * Parameters: horizontal (boolean): flip image horizontally.
+ * <p>Flips image vertically and/or horizontally.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>vertical</code></td>
+ * <td>Whether to flip image vertically.</td>
+ * <td>Boolean</td>
+ * </tr>
+ * <tr><td><code>horizontal</code></td>
+ * <td>Whether to flip image horizontally.</td>
+ * <td>Boolean</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_FLIP =
"android.media.effect.effects.FlipEffect";
/**
- * Applies film grain effect on image.<br/>
+ * <p>Applies film grain effect to image.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>strength</code></td>
+ * <td>The strength of the grain effect.</td>
+ * <td>Float, between 0 and 1. Zero means no change.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_GRAIN =
"android.media.effect.effects.GrainEffect";
/**
- * Converts image to grayscale.<br/>
+ * <p>Converts image to grayscale.</p>
+ * <p>Available parameters: None</p>
*/
public final static String EFFECT_GRAYSCALE =
"android.media.effect.effects.GrayscaleEffect";
/**
- * Applies lomoish effect on image.<br/>
+ * <p>Applies lomo-camera style effect to image.</p>
+ * <p>Available parameters: None</p>
*/
public final static String EFFECT_LOMOISH =
"android.media.effect.effects.LomoishEffect";
/**
- * Applies negative film effect on image.<br/>
- * Parameters: scale (float): the degree of film grain.
+ * <p>Inverts the image colors.</p>
+ * <p>Available parameters: None</p>
*/
public final static String EFFECT_NEGATIVE =
"android.media.effect.effects.NegativeEffect";
/**
- * Applied posterized effect on image.<br/>
+ * <p>Applies posterization effect to image.</p>
+ * <p>Available parameters: None</p>
*/
public final static String EFFECT_POSTERIZE =
"android.media.effect.effects.PosterizeEffect";
/**
- * Removes red eyes on specified region.<br/>
- * Parameters: intensity (float): threshold used to indentify red eyes.
- * redeye (Bitmap): bitmap specifies red eye regions.
+ * <p>Removes red eyes on specified region.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>centers</code></td>
+ * <td>Multiple center points (x, y) of the red eye regions.</td>
+ * <td>An array of floats, where (f[2*i], f[2*i+1]) specifies the center of the i'th eye.
+ * Coordinate values are expected to be normalized between 0 and 1.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_REDEYE =
"android.media.effect.effects.RedEyeEffect";
/**
- * Rotates the image.<br/>
- * Parameters: degree (float): the degree of rotation. shoule be a multiple of 90.
+ * <p>Rotates the image. The output frame size must be able to fit the rotated version of
+ * the input image. Note that the rotation snaps to a the closest multiple of 90 degrees.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>angle</code></td>
+ * <td>The angle of rotation in degrees.</td>
+ * <td>Integer value. This will be rounded to the nearest multiple of 90.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_ROTATE =
"android.media.effect.effects.RotateEffect";
/**
- * Adjusts color saturation on image.<br/>
- * Parameters: scale (float): The scale of color saturation.
+ * <p>Adjusts color saturation of image.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>scale</code></td>
+ * <td>The scale of color saturation.</td>
+ * <td>Float, between -1 and 1. 0 means no change, while -1 indicates full desaturation,
+ * i.e. grayscale.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_SATURATE =
"android.media.effect.effects.SaturateEffect";
/**
- * Converts image to sepia tone.<br/>
+ * <p>Converts image to sepia tone.</p>
+ * <p>Available parameters: None</p>
*/
public final static String EFFECT_SEPIA =
"android.media.effect.effects.SepiaEffect";
/**
- * Sharpens the image.<br/>
- * Parameters: scale (float): The degree of sharpening.
+ * <p>Sharpens the image.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>scale</code></td>
+ * <td>The degree of sharpening.</td>
+ * <td>Float, between 0 and 1. 0 means no change.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_SHARPEN =
"android.media.effect.effects.SharpenEffect";
/**
- * Rotates and resizes the image accroding to specified angle.<br/>
- * Parameters: scale (angle): the angle of rotation.
+ * <p>Rotates the image according to the specified angle, and crops the image so that no
+ * non-image portions are visible.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>angle</code></td>
+ * <td>The angle of rotation.</td>
+ * <td>Float, between -45 and +45.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_STRAIGHTEN =
"android.media.effect.effects.StraightenEffect";
/**
- * Adjusts color temperature in the image.<br/>
- * Parameters: scale (float): the value of color temperature.
+ * <p>Adjusts color temperature of the image.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>scale</code></td>
+ * <td>The value of color temperature.</td>
+ * <td>Float, between 0 and 1, with 0 indicating cool, and 1 indicating warm. A value of
+ * of 0.5 indicates no change.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_TEMPERATURE =
"android.media.effect.effects.ColorTemperatureEffect";
/**
- * Applies tine effect on image.<br/>
+ * <p>Tints the photo with specified color.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>tint</code></td>
+ * <td>The color of the tint.</td>
+ * <td>Integer, representing an ARGB color with 8 bits per channel. May be created using
+ * {@link android.graphics.Color Color} class.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_TINT =
"android.media.effect.effects.TintEffect";
/**
- * Appliies vignette effect on image.<br/>
- * Parameters: range (float): The range of vignetting.
+ * <p>Adds a vignette effect to image, i.e. fades away the outer image edges.</p>
+ * <p>Available parameters:</p>
+ * <table>
+ * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
+ * <tr><td><code>scale</code></td>
+ * <td>The scale of vignetting.</td>
+ * <td>Float, between 0 and 1. 0 means no change.</td>
+ * </tr>
+ * </table>
*/
public final static String EFFECT_VIGNETTE =
"android.media.effect.effects.VignetteEffect";
diff --git a/mca/effect/java/android/media/effect/SingleFilterEffect.java b/mca/effect/java/android/media/effect/SingleFilterEffect.java
index ca8f03f1..6f858610 100644
--- a/mca/effect/java/android/media/effect/SingleFilterEffect.java
+++ b/mca/effect/java/android/media/effect/SingleFilterEffect.java
@@ -63,7 +63,6 @@ public class SingleFilterEffect extends FilterEffect {
Filter filter = factory.createFilterByClass(filterClass, filterName);
filter.initWithAssignmentList(finalParameters);
- // TODO: Context needs to be moved out of constructor!!!
mFunction = new FilterFunction(getFilterContext(), filter);
}
diff --git a/mca/effect/java/android/media/effect/effects/DoodleEffect.java b/mca/effect/java/android/media/effect/effects/BitmapOverlayEffect.java
index 53cf6232..43f461c8 100644
--- a/mca/effect/java/android/media/effect/effects/DoodleEffect.java
+++ b/mca/effect/java/android/media/effect/effects/BitmapOverlayEffect.java
@@ -20,13 +20,13 @@ package android.media.effect.effects;
import android.media.effect.EffectContext;
import android.media.effect.SingleFilterEffect;
-import android.filterpacks.imageproc.DoodleFilter;
+import android.filterpacks.imageproc.BitmapOverlayFilter;
/**
* @hide
*/
-public class DoodleEffect extends SingleFilterEffect {
- public DoodleEffect(EffectContext context, String name) {
- super(context, name, DoodleFilter.class, "image", "image");
+public class BitmapOverlayEffect extends SingleFilterEffect {
+ public BitmapOverlayEffect(EffectContext context, String name) {
+ super(context, name, BitmapOverlayFilter.class, "image", "image");
}
}
diff --git a/mca/filterpacks/imageproc/java/DoodleFilter.java b/mca/filterpacks/imageproc/java/BitmapOverlayFilter.java
index 5284bcae..d4c901fe 100644
--- a/mca/filterpacks/imageproc/java/DoodleFilter.java
+++ b/mca/filterpacks/imageproc/java/BitmapOverlayFilter.java
@@ -35,22 +35,22 @@ import android.util.Log;
/**
* @hide
*/
-public class DoodleFilter extends Filter {
+public class BitmapOverlayFilter extends Filter {
- @GenerateFieldPort(name = "doodle")
- private Bitmap mDoodleBitmap;
+ @GenerateFieldPort(name = "bitmap")
+ private Bitmap mBitmap;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
private Program mProgram;
- private Frame mDoodleFrame;
+ private Frame mFrame;
private int mWidth = 0;
private int mHeight = 0;
private int mTarget = FrameFormat.TARGET_UNSPECIFIED;
- private final String mDoodleShader =
+ private final String mOverlayShader =
"precision mediump float;\n" +
"uniform sampler2D tex_sampler_0;\n" +
"uniform sampler2D tex_sampler_1;\n" +
@@ -61,7 +61,7 @@ public class DoodleFilter extends Filter {
" gl_FragColor = vec4(original.rgb * (1.0 - mask.a) + mask.rgb, 1.0);\n" +
"}\n";
- public DoodleFilter(String name) {
+ public BitmapOverlayFilter(String name) {
super(name);
}
@@ -79,7 +79,7 @@ public class DoodleFilter extends Filter {
public void initProgram(FilterContext context, int target) {
switch (target) {
case FrameFormat.TARGET_GPU:
- ShaderProgram shaderProgram = new ShaderProgram(context, mDoodleShader);
+ ShaderProgram shaderProgram = new ShaderProgram(context, mOverlayShader);
shaderProgram.setMaximumTileSize(mTileSize);
mProgram = shaderProgram;
break;
@@ -93,9 +93,9 @@ public class DoodleFilter extends Filter {
@Override
public void tearDown(FilterContext context) {
- if (mDoodleFrame != null) {
- mDoodleFrame.release();
- mDoodleFrame = null;
+ if (mFrame != null) {
+ mFrame.release();
+ mFrame = null;
}
}
@@ -118,11 +118,11 @@ public class DoodleFilter extends Filter {
mWidth = inputFormat.getWidth();
mHeight = inputFormat.getHeight();
- createDoodleFrame(context);
+ createBitmapFrame(context);
}
// Process
- Frame[] inputs = {input, mDoodleFrame};
+ Frame[] inputs = {input, mFrame};
mProgram.process(inputs, output);
// Push output
@@ -132,25 +132,22 @@ public class DoodleFilter extends Filter {
output.release();
}
- private void createDoodleFrame(FilterContext context) {
- if (mDoodleBitmap != null) {
- Log.e("DoodleFilter", "create doodle frame " +
- mDoodleBitmap.getWidth() + " " + mDoodleBitmap.getHeight());
-
- FrameFormat format = ImageFormat.create(mDoodleBitmap.getWidth(),
- mDoodleBitmap.getHeight(),
+ private void createBitmapFrame(FilterContext context) {
+ if (mBitmap != null) {
+ FrameFormat format = ImageFormat.create(mBitmap.getWidth(),
+ mBitmap.getHeight(),
ImageFormat.COLORSPACE_RGBA,
FrameFormat.TARGET_GPU);
- if (mDoodleFrame != null) {
- mDoodleFrame.release();
+ if (mFrame != null) {
+ mFrame.release();
}
- mDoodleFrame = context.getFrameManager().newFrame(format);
- mDoodleFrame.setBitmap(mDoodleBitmap);
+ mFrame = context.getFrameManager().newFrame(format);
+ mFrame.setBitmap(mBitmap);
- mDoodleBitmap.recycle();
- mDoodleBitmap = null;
+ mBitmap.recycle();
+ mBitmap = null;
}
}
}
diff --git a/mca/filterpacks/imageproc/java/BlackWhiteFilter.java b/mca/filterpacks/imageproc/java/BlackWhiteFilter.java
index 6a64262e..a1cec01b 100644
--- a/mca/filterpacks/imageproc/java/BlackWhiteFilter.java
+++ b/mca/filterpacks/imageproc/java/BlackWhiteFilter.java
@@ -32,11 +32,11 @@ import java.util.Random;
public class BlackWhiteFilter extends Filter {
- @GenerateFieldPort(name = "black")
- private float mBlack;
+ @GenerateFieldPort(name = "black", hasDefault = true)
+ private float mBlack = 0f;
- @GenerateFieldPort(name = "white")
- private float mWhite;
+ @GenerateFieldPort(name = "white", hasDefault = true)
+ private float mWhite = 1f;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
diff --git a/mca/filterpacks/imageproc/java/ColorTemperatureFilter.java b/mca/filterpacks/imageproc/java/ColorTemperatureFilter.java
index 5447d242..19da006a 100644
--- a/mca/filterpacks/imageproc/java/ColorTemperatureFilter.java
+++ b/mca/filterpacks/imageproc/java/ColorTemperatureFilter.java
@@ -31,8 +31,8 @@ import android.util.Log;
public class ColorTemperatureFilter extends Filter {
- @GenerateFieldPort(name = "scale")
- private float mScale;
+ @GenerateFieldPort(name = "scale", hasDefault = true)
+ private float mScale = 0.5f;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
diff --git a/mca/filterpacks/imageproc/java/DuotoneFilter.java b/mca/filterpacks/imageproc/java/DuotoneFilter.java
index 65821f45..d8c88ee8 100644
--- a/mca/filterpacks/imageproc/java/DuotoneFilter.java
+++ b/mca/filterpacks/imageproc/java/DuotoneFilter.java
@@ -27,16 +27,15 @@ import android.filterfw.core.NativeFrame;
import android.filterfw.core.Program;
import android.filterfw.core.ShaderProgram;
import android.filterfw.format.ImageFormat;
-
+import android.graphics.Color;
public class DuotoneFilter extends Filter {
- // TODO(rslin): extract rgb values from 4 byte integer
- @GenerateFieldPort(name = "first_color")
- private int mFirstColor;
+ @GenerateFieldPort(name = "first_color", hasDefault = true)
+ private int mFirstColor = 0xFFFF0000;
- @GenerateFieldPort(name = "second_color")
- private int mSecondColor;
+ @GenerateFieldPort(name = "second_color", hasDefault = true)
+ private int mSecondColor = 0xFFFFFF00;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
@@ -99,8 +98,8 @@ public class DuotoneFilter extends Filter {
// Create program if not created already
if (mProgram == null || inputFormat.getTarget() != mTarget) {
initProgram(context, inputFormat.getTarget());
- initParameters();
}
+ updateParameters();
// Process
mProgram.process(input, output);
@@ -112,9 +111,13 @@ public class DuotoneFilter extends Filter {
output.release();
}
- private void initParameters() {
- float first[] = { 0f / 255f, 68f / 255f, 136f / 255f};
- float second[] = { 1.0f, 1.0f, 0.0f};
+ private void updateParameters() {
+ float first[] = { Color.red(mFirstColor)/255f,
+ Color.green(mFirstColor)/255f,
+ Color.blue(mFirstColor)/255f };
+ float second[] = { Color.red(mSecondColor)/255f,
+ Color.green(mSecondColor)/255f,
+ Color.blue(mSecondColor)/255f };
mProgram.setHostValue("first", first);
mProgram.setHostValue("second", second);
diff --git a/mca/filterpacks/imageproc/java/FillLightFilter.java b/mca/filterpacks/imageproc/java/FillLightFilter.java
index 5d9c8623..fc917a1a 100644
--- a/mca/filterpacks/imageproc/java/FillLightFilter.java
+++ b/mca/filterpacks/imageproc/java/FillLightFilter.java
@@ -36,8 +36,8 @@ public class FillLightFilter extends Filter {
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
- @GenerateFieldPort(name = "backlight")
- private float mBacklight;
+ @GenerateFieldPort(name = "strength", hasDefault = true)
+ private float mBacklight = 0f;
private Program mProgram;
diff --git a/mca/filterpacks/imageproc/java/FisheyeFilter.java b/mca/filterpacks/imageproc/java/FisheyeFilter.java
index 7ad7a54f..8d38f985 100644
--- a/mca/filterpacks/imageproc/java/FisheyeFilter.java
+++ b/mca/filterpacks/imageproc/java/FisheyeFilter.java
@@ -43,8 +43,8 @@ public class FisheyeFilter extends Filter {
// This parameter has range between 0 and 1. It controls the effect of radial distortion.
// The larger the value, the more prominent the distortion effect becomes (a straight line
// becomes a curve).
- @GenerateFieldPort(name = "scale")
- private float mScale;
+ @GenerateFieldPort(name = "scale", hasDefault = true)
+ private float mScale = 0f;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
diff --git a/mca/filterpacks/imageproc/java/FixedRotationFilter.java b/mca/filterpacks/imageproc/java/FixedRotationFilter.java
index 73b733d4..3d319eac 100644
--- a/mca/filterpacks/imageproc/java/FixedRotationFilter.java
+++ b/mca/filterpacks/imageproc/java/FixedRotationFilter.java
@@ -35,7 +35,7 @@ import android.filterfw.geometry.Quad;
*/
public class FixedRotationFilter extends Filter {
- @GenerateFieldPort(name = "rotation")
+ @GenerateFieldPort(name = "rotation", hasDefault = true)
private int mRotation = 0;
private ShaderProgram mProgram = null;
@@ -77,19 +77,20 @@ public class FixedRotationFilter extends Filter {
Point p3 = new Point(0.0f, 1.0f);
Point p4 = new Point(1.0f, 1.0f);
Quad sourceRegion;
- switch (mRotation) {
- case 90:
+ switch (((int)Math.round(mRotation / 90f)) % 4) {
+ case 1:
sourceRegion = new Quad(p3,p1,p4,p2);
outputFormat.setDimensions(height, width);
break;
- case 180:
+ case 2:
sourceRegion = new Quad(p4,p3,p2,p1);
break;
- case 270:
+ case 3:
sourceRegion = new Quad(p2,p4,p1,p3);
outputFormat.setDimensions(height, width);
break;
- default: // no rotation
+ case 0:
+ default:
sourceRegion = new Quad(p1,p2,p3,p4);
break;
}
diff --git a/mca/filterpacks/imageproc/java/FlipFilter.java b/mca/filterpacks/imageproc/java/FlipFilter.java
index fc0db138..f8b857b2 100644
--- a/mca/filterpacks/imageproc/java/FlipFilter.java
+++ b/mca/filterpacks/imageproc/java/FlipFilter.java
@@ -34,11 +34,11 @@ import android.filterfw.format.ImageFormat;
*/
public class FlipFilter extends Filter {
- @GenerateFieldPort(name = "vertical")
- private boolean mVertical;
+ @GenerateFieldPort(name = "vertical", hasDefault = true)
+ private boolean mVertical = false;
- @GenerateFieldPort(name = "horizontal")
- private boolean mHorizontal;
+ @GenerateFieldPort(name = "horizontal", hasDefault = true)
+ private boolean mHorizontal = false;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
diff --git a/mca/filterpacks/imageproc/java/GrainFilter.java b/mca/filterpacks/imageproc/java/GrainFilter.java
index 2c82f80c..168a9c67 100644
--- a/mca/filterpacks/imageproc/java/GrainFilter.java
+++ b/mca/filterpacks/imageproc/java/GrainFilter.java
@@ -36,8 +36,8 @@ public class GrainFilter extends Filter {
private static final int RAND_THRESHOLD = 128;
- @GenerateFieldPort(name = "scale")
- private float mScale;
+ @GenerateFieldPort(name = "strength", hasDefault = true)
+ private float mScale = 0f;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
diff --git a/mca/filterpacks/imageproc/java/RotateFilter.java b/mca/filterpacks/imageproc/java/RotateFilter.java
index df1b558b..3da79394 100644
--- a/mca/filterpacks/imageproc/java/RotateFilter.java
+++ b/mca/filterpacks/imageproc/java/RotateFilter.java
@@ -38,8 +38,8 @@ import android.util.Log;
*/
public class RotateFilter extends Filter {
- @GenerateFieldPort(name = "degree")
- private float mAngle;
+ @GenerateFieldPort(name = "angle")
+ private int mAngle;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
@@ -133,7 +133,7 @@ public class RotateFilter extends Filter {
cosTheta = (mAngle % 360 == 0) ? 1f:-1f;
} else {
cosTheta = 0f;
- sinTheta = ((mAngle + 90f) % 360 == 0) ? -1f:1f;
+ sinTheta = ((mAngle + 90) % 360 == 0) ? -1f:1f;
mOutputWidth = mHeight;
mOutputHeight = mWidth;
diff --git a/mca/filterpacks/imageproc/java/SaturateFilter.java b/mca/filterpacks/imageproc/java/SaturateFilter.java
index 5b924c08..b83af392 100644
--- a/mca/filterpacks/imageproc/java/SaturateFilter.java
+++ b/mca/filterpacks/imageproc/java/SaturateFilter.java
@@ -30,8 +30,8 @@ import android.filterfw.format.ImageFormat;
public class SaturateFilter extends Filter {
- @GenerateFieldPort(name = "scale")
- private float mScale;
+ @GenerateFieldPort(name = "scale", hasDefault = true)
+ private float mScale = 0f;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
diff --git a/mca/filterpacks/imageproc/java/SharpenFilter.java b/mca/filterpacks/imageproc/java/SharpenFilter.java
index 86a9bc1f..256b769e 100644
--- a/mca/filterpacks/imageproc/java/SharpenFilter.java
+++ b/mca/filterpacks/imageproc/java/SharpenFilter.java
@@ -32,8 +32,8 @@ import java.util.Set;
public class SharpenFilter extends Filter {
- @GenerateFieldPort(name = "scale")
- private float mScale;
+ @GenerateFieldPort(name = "scale", hasDefault = true)
+ private float mScale = 0f;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
diff --git a/mca/filterpacks/imageproc/java/StraightenFilter.java b/mca/filterpacks/imageproc/java/StraightenFilter.java
index f1548acb..c9f097d3 100644
--- a/mca/filterpacks/imageproc/java/StraightenFilter.java
+++ b/mca/filterpacks/imageproc/java/StraightenFilter.java
@@ -38,11 +38,11 @@ import android.util.Log;
*/
public class StraightenFilter extends Filter {
- @GenerateFieldPort(name = "angle")
- private float mAngle;
+ @GenerateFieldPort(name = "angle", hasDefault = true)
+ private float mAngle = 0f;
- @GenerateFieldPort(name = "maxAngle")
- private float mMaxAngle;
+ @GenerateFieldPort(name = "maxAngle", hasDefault = true)
+ private float mMaxAngle = 45f;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
diff --git a/mca/filterpacks/imageproc/java/TintFilter.java b/mca/filterpacks/imageproc/java/TintFilter.java
index a946b0ca..0da54a51 100644
--- a/mca/filterpacks/imageproc/java/TintFilter.java
+++ b/mca/filterpacks/imageproc/java/TintFilter.java
@@ -27,13 +27,12 @@ import android.filterfw.core.NativeFrame;
import android.filterfw.core.Program;
import android.filterfw.core.ShaderProgram;
import android.filterfw.format.ImageFormat;
-
+import android.graphics.Color;
public class TintFilter extends Filter {
- // TODO(rslin): extract rgb values from 4 byte integer
- @GenerateFieldPort(name = "tint")
- private int mTint;
+ @GenerateFieldPort(name = "tint", hasDefault = true)
+ private int mTint = 0xFF0000FF;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
@@ -124,9 +123,9 @@ public class TintFilter extends Filter {
}
private void updateParameters() {
- float tint_color[] = {(float) ((mTint >> 16) & 0xff) / 256f,
- (float) ((mTint >> 8) & 0xff) / 256f,
- (float) (mTint & 0xff) / 256f };
+ float tint_color[] = {Color.red(mTint) / 255f,
+ Color.green(mTint) / 255f,
+ Color.blue(mTint) / 255f };
mProgram.setHostValue("tint", tint_color);
}
diff --git a/mca/filterpacks/imageproc/java/VignetteFilter.java b/mca/filterpacks/imageproc/java/VignetteFilter.java
index 855ffd8d..cc84ab5e 100644
--- a/mca/filterpacks/imageproc/java/VignetteFilter.java
+++ b/mca/filterpacks/imageproc/java/VignetteFilter.java
@@ -30,8 +30,8 @@ import android.filterfw.format.ImageFormat;
public class VignetteFilter extends Filter {
- @GenerateFieldPort(name = "range")
- private float mRange;
+ @GenerateFieldPort(name = "scale", hasDefault = true)
+ private float mRange = 0f;
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;