diff options
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; |