diff options
author | Byunghun Jeon <bjeon@codeaurora.org> | 2015-08-03 16:50:11 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-10-13 04:31:27 -0700 |
commit | 8ea62fb010059f600f0e26ad468ceab6bf0c8232 (patch) | |
tree | d622960b2312d56b98b99d5747064f8a54682e90 /src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java | |
parent | 8c969c5cf077a33082ea113f7421797ec1f89eb0 (diff) | |
download | android_packages_apps_Gallery2-8ea62fb010059f600f0e26ad468ceab6bf0c8232.tar.gz android_packages_apps_Gallery2-8ea62fb010059f600f0e26ad468ceab6bf0c8232.tar.bz2 android_packages_apps_Gallery2-8ea62fb010059f600f0e26ad468ceab6bf0c8232.zip |
Gallery2: Add dual camera filters
Add dual camera based filters.
CRs-Fixed: 892007
Change-Id: Ide26135ef8e83137f86abb96ca7ce29e94801bba
Diffstat (limited to 'src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java new file mode 100644 index 000000000..bc181e33d --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Point; +import android.graphics.PorterDuff; +import android.graphics.Rect; +import android.util.Log; + +import com.android.gallery3d.filtershow.imageshow.MasterImage; +import com.android.gallery3d.filtershow.pipeline.FilterEnvironment; +import com.android.gallery3d.filtershow.tools.DualCameraNativeEngine; + +public class ImageFilterDualCamFusion extends ImageFilter { + private static final String TAG = ImageFilterDualCamFusion.class.getSimpleName(); + + private FilterDualCamFusionRepresentation mParameters; + private Paint mPaint = new Paint(); + private Bitmap mFilteredBitmap = null; + private Point mPoint = null; + + public ImageFilterDualCamFusion() { + mName = "Fusion"; + } + + public void useRepresentation(FilterRepresentation representation) { + FilterDualCamFusionRepresentation parameters = (FilterDualCamFusionRepresentation) representation; + mParameters = parameters; + } + + public FilterDualCamFusionRepresentation getParameters() { + return mParameters; + } + + public FilterRepresentation getDefaultRepresentation() { + return new FilterDualCamFusionRepresentation(); + } + + @Override + public void freeResources() { + if (mFilteredBitmap != null) + mFilteredBitmap.recycle(); + mFilteredBitmap = null; + mPoint = null; + } + + @Override + public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) { + if (getParameters() == null) { + return bitmap; + } + + Point point = getParameters().getPoint(); + + if(!point.equals(-1,-1)) { + long startTime = System.currentTimeMillis(); + Log.e(TAG, "dual cam fusion - start processing: " + startTime); + + if(!point.equals(mPoint)) { + mPoint = point; + + if(mFilteredBitmap == null) { + Rect originalBounds = MasterImage.getImage().getOriginalBounds(); + int origW = originalBounds.width(); + int origH = originalBounds.height(); + + mFilteredBitmap = Bitmap.createBitmap(origW, origH, Bitmap.Config.ARGB_8888); + mFilteredBitmap.setHasAlpha(true); + } + + + boolean result = DualCameraNativeEngine.getInstance().getForegroundImg(mPoint.x, mPoint.y, + mFilteredBitmap); + + if(result == false) { + Log.e(TAG, "Imagelib API failed"); + return bitmap; + } + } + + mPaint.reset(); + if(quality == FilterEnvironment.QUALITY_FINAL) { + mPaint.setAntiAlias(true); + mPaint.setFilterBitmap(true); + mPaint.setDither(true); + } + + bitmap.setHasAlpha(true); + + Canvas canvas = new Canvas(bitmap); + int w = bitmap.getWidth(); + int h = bitmap.getHeight(); + + canvas.drawColor(0, PorterDuff.Mode.CLEAR); + if(getEnvironment().getImagePreset().getDoApplyGeometry()) { + Matrix originalToScreen = getOriginalToScreenMatrix(w, h); + canvas.drawBitmap(mFilteredBitmap, originalToScreen, null); + } else { + canvas.drawBitmap(mFilteredBitmap, null, new Rect(0,0,w,h), null); + } + + Log.e(TAG, "dual cam fusion - finish processing: " + (System.currentTimeMillis()-startTime)); + } + + return bitmap; + } +} |