summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java
diff options
context:
space:
mode:
authorByunghun Jeon <bjeon@codeaurora.org>2015-08-03 16:50:11 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2015-10-13 04:31:27 -0700
commit8ea62fb010059f600f0e26ad468ceab6bf0c8232 (patch)
treed622960b2312d56b98b99d5747064f8a54682e90 /src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java
parent8c969c5cf077a33082ea113f7421797ec1f89eb0 (diff)
downloadandroid_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.java138
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;
+ }
+}