summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/filtershow')
-rwxr-xr-xsrc/com/android/gallery3d/filtershow/FilterShowActivity.java36
-rwxr-xr-xsrc/com/android/gallery3d/filtershow/category/MainPanel.java18
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/filtershow/editors/EditorDualCamFusion.java189
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java57
-rwxr-xr-xsrc/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java31
-rwxr-xr-xsrc/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java29
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/filtershow/imageshow/ImageDualCamera.java4
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/filtershow/imageshow/MasterImage.java13
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/filtershow/tools/DualCameraNativeEngine.java62
9 files changed, 355 insertions, 84 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index 8ada5af9b..f769b5ecd 100755
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -39,6 +39,7 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Color;
+import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
@@ -105,6 +106,9 @@ import com.android.gallery3d.filtershow.editors.HazeBusterEditor;
import com.android.gallery3d.filtershow.editors.ImageOnlyEditor;
import com.android.gallery3d.filtershow.editors.SeeStraightEditor;
import com.android.gallery3d.filtershow.editors.TrueScannerEditor;
+import com.android.gallery3d.filtershow.filters.FilterDualCamBasicRepresentation;
+import com.android.gallery3d.filtershow.filters.FilterDualCamFusionRepresentation;
+import com.android.gallery3d.filtershow.filters.FilterDualCamSketchRepresentation;
import com.android.gallery3d.filtershow.filters.FilterMirrorRepresentation;
import com.android.gallery3d.filtershow.filters.FilterRepresentation;
import com.android.gallery3d.filtershow.filters.FilterRotateRepresentation;
@@ -1156,6 +1160,23 @@ DialogInterface.OnDismissListener, PopupMenu.OnDismissListener{
return;
}
}
+ if (representation.getFilterType() == FilterRepresentation.TYPE_DUALCAM) {
+ DisplayMetrics dm = getResources().getDisplayMetrics();
+ float[] mTmpPoint = new float[2];
+ mTmpPoint[0] = dm.widthPixels/2;
+ mTmpPoint[1] = dm.heightPixels/2;
+ Matrix m = MasterImage.getImage().getScreenToImageMatrix(true);
+ m.mapPoints(mTmpPoint);
+ if (representation instanceof FilterDualCamBasicRepresentation) {
+ ((FilterDualCamBasicRepresentation)representation).setPoint((int)mTmpPoint[0],(int)mTmpPoint[1]);
+ }
+ if (representation instanceof FilterDualCamFusionRepresentation) {
+ ((FilterDualCamFusionRepresentation)representation).setPoint((int)mTmpPoint[0],(int)mTmpPoint[1]);
+ }
+ if (representation instanceof FilterDualCamSketchRepresentation) {
+ ((FilterDualCamSketchRepresentation)representation).setPoint((int)mTmpPoint[0],(int)mTmpPoint[1]);
+ }
+ }
useFilterRepresentation(representation);
loadEditorPanel(representation);
@@ -1290,23 +1311,20 @@ DialogInterface.OnDismissListener, PopupMenu.OnDismissListener{
mAuxImgData == null) {
// parse failed
MasterImage.getImage().setDepthMapLoadingStatus(DdmStatus.DDM_FAILED);
- Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG);
- if (currentPanel instanceof MainPanel) {
- MainPanel mainPanel = (MainPanel) currentPanel;
- mainPanel.updateDualCameraButton();
- }
} else {
+ MasterImage.getImage().setDepthMapLoadingStatus(DdmStatus.DDM_LOADING);
mLoadMpoTask = new LoadMpoDataTask();
mLoadMpoTask.execute(mPrimaryImgData, mAuxImgData);
}
+ Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG);
+ if (currentPanel instanceof MainPanel) {
+ MainPanel mainPanel = (MainPanel) currentPanel;
+ mainPanel.updateDualCameraButton();
+ }
}
}
private class LoadMpoDataTask extends AsyncTask<byte[], Void, Boolean> {
- @Override
- protected void onPreExecute() {
- MasterImage.getImage().setDepthMapLoadingStatus(DdmStatus.DDM_LOADING);
- }
@Override
protected Boolean doInBackground(byte[]... params) {
diff --git a/src/com/android/gallery3d/filtershow/category/MainPanel.java b/src/com/android/gallery3d/filtershow/category/MainPanel.java
index ea84934c3..055d7a430 100755
--- a/src/com/android/gallery3d/filtershow/category/MainPanel.java
+++ b/src/com/android/gallery3d/filtershow/category/MainPanel.java
@@ -247,7 +247,23 @@ public class MainPanel extends Fragment implements BottomPanel.BottomPanelDelega
dualCamButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- showPanel(DUALCAM);
+ Context context = getActivity();
+ boolean skipIntro = GalleryUtils.getBooleanPref(context,
+ context.getString(R.string.pref_dualcam_intro_show_key), false);
+ if (skipIntro) {
+ showPanel(DUALCAM);
+ } else {
+ DoNotShowAgainDialog dialog = new DoNotShowAgainDialog(
+ R.string.dual_camera_effects, R.string.dual_camera_effects_intro,
+ R.string.pref_dualcam_intro_show_key) {
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ super.onDismiss(dialog);
+ showPanel(DUALCAM);
+ }
+ };
+ dialog.show(getFragmentManager(), "dualcam_intro");
+ }
}
});
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorDualCamFusion.java b/src/com/android/gallery3d/filtershow/editors/EditorDualCamFusion.java
index 2371ccb15..f4490b330 100644..100755
--- a/src/com/android/gallery3d/filtershow/editors/EditorDualCamFusion.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorDualCamFusion.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2016, 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
@@ -30,37 +30,58 @@
package com.android.gallery3d.filtershow.editors;
import android.content.Context;
+import android.content.DialogInterface;
import android.net.Uri;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
+import android.view.LayoutInflater;
+import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
-import android.widget.Button;
+import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
-import org.codeaurora.gallery.R;
import com.android.gallery3d.filtershow.FilterShowActivity;
import com.android.gallery3d.filtershow.filters.FilterDualCamFusionRepresentation;
import com.android.gallery3d.filtershow.filters.FilterRepresentation;
import com.android.gallery3d.filtershow.imageshow.ImageFusion;
import com.android.gallery3d.filtershow.imageshow.MasterImage;
+import com.android.gallery3d.filtershow.ui.DoNotShowAgainDialog;
+import com.android.gallery3d.util.GalleryUtils;
+
+import org.codeaurora.gallery.R;
-public class EditorDualCamFusion extends ImageOnlyEditor {
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class EditorDualCamFusion extends Editor {
public static final String TAG = EditorDualCamFusion.class.getSimpleName();
public static final int ID = R.id.editorDualCamFusion;
protected ImageFusion mImageFusion;
- private Button mPickUnderlayBtn;
- private OnClickListener mPickBtnClickListener = new OnClickListener() {
- @Override
- public void onClick(View arg0) {
- MasterImage.getImage().getActivity().pickImage(FilterShowActivity.SELECT_FUSION_UNDERLAY);
- }
- };
+ private Uri mUnderlayUri = Uri.EMPTY;
public EditorDualCamFusion() {
super(ID);
}
+ @Override
+ public boolean showsActionBar() {
+ return true;
+ }
+
+ @Override
+ public boolean showsActionBarControls() {
+ return false;
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ menu.clear();
+ }
+
public boolean useUtilityPanel() {
return true;
}
@@ -77,48 +98,123 @@ public class EditorDualCamFusion extends ImageOnlyEditor {
@Override
public void setEditPanelUI(View editControl) {
- editControl.setVisibility(View.GONE);
+ ViewGroup controlContainer = (ViewGroup) editControl;
+ controlContainer.removeAllViews();
+
+ LayoutInflater inflater = (LayoutInflater) mContext.getSystemService
+ (Context.LAYOUT_INFLATER_SERVICE);
+ View controls = inflater.inflate(R.layout.filtershow_seekbar, controlContainer);
+ View seekbar = controls.findViewById(R.id.primarySeekBar);
+ seekbar.setVisibility(View.GONE);
+ View saveButton = controls.findViewById(R.id.slider_save);
+ if (saveButton != null) {
+ saveButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ FilterShowActivity activity = (FilterShowActivity) mContext;
+ finalApplyCalled();
+ activity.leaveSeekBarPanel();
+ }
+ });
+ }
+ View cancelButton = controls.findViewById(R.id.slider_cancel);
+ if (cancelButton != null) {
+ cancelButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ FilterShowActivity activity = (FilterShowActivity) mContext;
+ activity.cancelCurrentFilter();
+ activity.leaveSeekBarPanel();
+ }
+ });
+ }
}
@Override
public void openUtilityPanel(final LinearLayout accessoryViewList) {
- super.openUtilityPanel(accessoryViewList);
- mPickUnderlayBtn = (Button) accessoryViewList.findViewById(R.id.applyEffect);
- updateText();
- }
-
- public void setUnderlayImageUri(Uri uri) {
- FilterRepresentation filter = getLocalRepresentation();
- if(filter instanceof FilterDualCamFusionRepresentation) {
- mImageFusion.setUnderlay(uri);
- commitLocalRepresentation();
+ accessoryViewList.removeAllViews();
+
+ LayoutInflater inflater = (LayoutInflater) mContext.getSystemService
+ (Context.LAYOUT_INFLATER_SERVICE);
+ inflater.inflate(R.layout.filtershow_actionbar_dualcam_fusion, accessoryViewList);
+
+ View pickUnderlayBtn = accessoryViewList.findViewById(R.id.pick_underlay);
+ pickUnderlayBtn.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ MasterImage.getImage().getActivity().pickImage(FilterShowActivity.SELECT_FUSION_UNDERLAY);
+ }
+ });
+
+ // Look for previous underlay
+ String fusionUnderlay = GalleryUtils.getStringPref(mContext,
+ mContext.getString(R.string.pref_dualcam_fusion_underlay_key), null);
+ Uri fusionUri = Uri.EMPTY;
+
+ if (fusionUnderlay != null) {
+ fusionUri = Uri.parse(fusionUnderlay);
+ if (!uriExists(mContext, fusionUri))
+ fusionUri = Uri.EMPTY;
}
- }
- private void updateEffectButton(boolean enabled) {
- mPickUnderlayBtn.setEnabled(enabled);
- if(enabled) {
- mPickUnderlayBtn.setOnClickListener(mPickBtnClickListener);
- mPickUnderlayBtn.setText(R.string.fusion_pick_underlay);
- } else {
- mPickUnderlayBtn.setOnClickListener(null);
- mPickUnderlayBtn.setText(R.string.fusion_pick_point);
- }
+ setUnderlayImageUri(fusionUri);
}
-
- protected void updateText() {
- if(mPickUnderlayBtn != null) {
- updateEffectButton(hasSegment());
+ @Override
+ public void resume() {
+ if (mUnderlayUri.equals(Uri.EMPTY)) {
+ // No underlay set.
+ boolean skipIntro = GalleryUtils.getBooleanPref(mContext,
+ mContext.getString(R.string.pref_dualcam_fusion_intro_show_key), false);
+ if (!skipIntro) {
+ FragmentManager fm = ((FilterShowActivity) mContext).getSupportFragmentManager();
+ DoNotShowAgainDialog dialog =
+ (DoNotShowAgainDialog) fm.findFragmentByTag("dualcam_fusion_intro");
+ if (dialog == null) {
+ dialog = new DoNotShowAgainDialog(
+ R.string.fusion_pick_background, R.string.dualcam_fusion_intro,
+ R.string.pref_dualcam_fusion_intro_show_key) {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
+ FilterShowActivity activity = (FilterShowActivity) mContext;
+ activity.cancelCurrentFilter();
+ activity.leaveSeekBarPanel();
+ }
+ };
+ dialog.setOnOkButtonClickListener(new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ MasterImage.getImage().getActivity().pickImage(FilterShowActivity.SELECT_FUSION_UNDERLAY);
+ }
+ });
+ dialog.setCancelable(true);
+ dialog.show(fm, "dualcam_fusion_intro");
+ } else if (dialog.isDetached()) {
+ FragmentTransaction ft = fm.beginTransaction();
+ ft.attach(dialog);
+ ft.commit();
+ } else if (dialog.isHidden()) {
+ FragmentTransaction ft = fm.beginTransaction();
+ ft.show(dialog);
+ ft.commit();
+ }
+ }
}
}
- private boolean hasSegment() {
+ public void setUnderlayImageUri(Uri uri) {
+ mUnderlayUri = uri;
FilterRepresentation filter = getLocalRepresentation();
- if(filter instanceof FilterDualCamFusionRepresentation) {
- return !((FilterDualCamFusionRepresentation) filter).getPoint().equals(-1,-1);
+ if (filter instanceof FilterDualCamFusionRepresentation) {
+ mImageFusion.setUnderlay(uri);
+ commitLocalRepresentation();
+
+ // save fusion underlay uri
+ GalleryUtils.setStringPref(mContext,
+ mContext.getString(R.string.pref_dualcam_fusion_underlay_key),
+ (uri != null) ? uri.toString() : null);
}
- return false;
}
@Override
@@ -130,4 +226,17 @@ public class EditorDualCamFusion extends ImageOnlyEditor {
mImageFusion.setRepresentation(dualRep);
}
}
+
+ private boolean uriExists(Context context, Uri uri) {
+ try {
+ InputStream stream = context.getContentResolver().openInputStream(uri);
+ stream.close();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ return false;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return true;
+ }
}
diff --git a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
index b9c24fc27..0d98c7b0e 100644..100755
--- a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
+++ b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
@@ -423,22 +423,30 @@ public abstract class BaseFiltersManager implements FiltersManagerInterface {
public void addDualCam(Context context) {
int[] textId = {
R.string.focus,
- R.string.halo
+ R.string.halo,
+ R.string.motion,
+ R.string.posterize
};
int[] overlayId = {
R.drawable.focus,
- R.drawable.halo
+ R.drawable.halo,
+ R.drawable.motion,
+ R.drawable.posterize
};
String[] serializationNames = {
"DUAL_CAM_FOCUS",
- "DUAL_CAM_HALO"
+ "DUAL_CAM_HALO",
+ "DUAL_CAM_MOTION",
+ "DUAL_CAM_POSTERIZE"
};
// intensity range as defined by ddm lib
int[][] minMaxValues = {
{0,5,10},
+ {0,5,10},
+ {0,5,10},
{0,5,10}
};
@@ -460,13 +468,42 @@ public abstract class BaseFiltersManager implements FiltersManagerInterface {
addRepresentation(dualCam);
}
- FilterDualCamSketchRepresentation sketch = new FilterDualCamSketchRepresentation(
- context.getString(R.string.sketch), R.string.sketch);
- sketch.setOverlayId(R.drawable.sketch);
- sketch.setOverlayOnly(true);
- sketch.setSerializationName("DUAL_CAM_SKETCH");
- mDualCam.add(sketch);
- addRepresentation(sketch);
+ int[] textId2 = {
+ R.string.sketch,
+ R.string.zoom,
+ R.string.bw,
+ R.string.blackboard,
+ R.string.whiteboard,
+ R.string.dc_negative
+ };
+
+ int[] overlayId2 = {
+ R.drawable.sketch,
+ R.drawable.zoom,
+ R.drawable.bw,
+ R.drawable.blackboard,
+ R.drawable.whiteboard,
+ R.drawable.negative
+ };
+
+ String[] serializationNames2 = {
+ "DUAL_CAM_SKETCH",
+ "DUAL_CAM_ZOOM",
+ "DUAL_CAM_BW",
+ "DUAL_CAM_BLACKBOARD",
+ "DUAL_CAM_WHITEBOARD",
+ "DUAL_CAM_NEGATIVE"
+ };
+
+ for (int i = 0; i < textId2.length; i++) {
+ FilterDualCamSketchRepresentation dualCam = new FilterDualCamSketchRepresentation(
+ context.getString(textId2[i]), textId2[i]);
+ dualCam.setOverlayId(overlayId2[i]);
+ dualCam.setOverlayOnly(true);
+ dualCam.setSerializationName(serializationNames2[i]);
+ mDualCam.add(dualCam);
+ addRepresentation(dualCam);
+ }
mDualCam.add(getRepresentation(ImageFilterDualCamFusion.class));
}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java
index 0eb49ab8a..21906540b 100755
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2016, 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
@@ -116,8 +116,33 @@ public class ImageFilterDualCamSketch extends ImageFilter {
}
filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(filteredW, filteredH, BitmapCache.FILTERS);
- result = DualCameraNativeEngine.getInstance().applySketch(point.x, point.y,
- roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+
+ switch (mParameters.getTextId()) {
+ case R.string.sketch:
+ result = DualCameraNativeEngine.getInstance().applySketch(point.x, point.y,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ case R.string.zoom:
+ result = DualCameraNativeEngine.getInstance().applyZoom(point.x, point.y,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ case R.string.bw:
+ result = DualCameraNativeEngine.getInstance().applyBlackAndWhite(point.x, point.y,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ case R.string.blackboard:
+ result = DualCameraNativeEngine.getInstance().applyBlackBoard(point.x, point.y,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ case R.string.whiteboard:
+ result = DualCameraNativeEngine.getInstance().applyWhiteBoard(point.x, point.y,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ case R.string.dc_negative:
+ result = DualCameraNativeEngine.getInstance().applyNegative(point.x, point.y,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ }
if(result == false) {
Log.e(TAG, "Imagelib API failed");
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java
index ba6bff691..7bcba5162 100755
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2016, 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
@@ -121,15 +121,24 @@ public class ImageFilterDualCamera extends ImageFilter {
filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(filteredW, filteredH, BitmapCache.FILTERS);
- switch(mParameters.getTextId()) {
- case R.string.focus:
- result = DualCameraNativeEngine.getInstance().applyFocus(point.x, point.y, intensity,
- roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
- break;
- case R.string.halo:
- result = DualCameraNativeEngine.getInstance().applyHalo(point.x, point.y, intensity,
- roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
- break;
+ switch (mParameters.getTextId()) {
+ case R.string.focus:
+ result = DualCameraNativeEngine.getInstance().applyFocus(point.x, point.y, intensity,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ case R.string.halo:
+ result = DualCameraNativeEngine.getInstance().applyHalo(point.x, point.y, intensity,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ case R.string.motion:
+ result = DualCameraNativeEngine.getInstance().applyMotion(point.x, point.y, intensity,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+ case R.string.posterize:
+ result = DualCameraNativeEngine.getInstance().applyPosterize(point.x, point.y, intensity,
+ roiRect, quality != FilterEnvironment.QUALITY_FINAL, filteredBitmap);
+ break;
+
}
if(result == false) {
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageDualCamera.java b/src/com/android/gallery3d/filtershow/imageshow/ImageDualCamera.java
index 962519373..cb864aa2d 100644..100755
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageDualCamera.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageDualCamera.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2016, 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
@@ -75,6 +75,6 @@ public class ImageDualCamera extends ImageShow {
}
private void calcScreenMapping() {
- mToOrig = getScreenToImageMatrix(true);
+ mToOrig = MasterImage.getImage().getScreenToImageMatrix(true);
}
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
index 0a13da737..09950262e 100644..100755
--- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -21,6 +21,7 @@ import java.util.Vector;
import android.animation.Animator;
import android.animation.ValueAnimator;
+import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
@@ -767,7 +768,7 @@ public class MasterImage implements RenderingRequestCaller {
return m;
}
- private Matrix getScreenToImageMatrix(boolean reflectRotation) {
+ public Matrix getScreenToImageMatrix(boolean reflectRotation) {
Matrix m = getImageToScreenMatrix(reflectRotation);
Matrix invert = new Matrix();
m.invert(invert);
@@ -960,7 +961,7 @@ public class MasterImage implements RenderingRequestCaller {
return mPreset.contains(FilterRepresentation.TYPE_TINYPLANET);
}
- public boolean loadMpo(byte[] primaryMpoData, byte[] auxiliaryMpoData) {
+ public boolean loadMpo(Context context, byte[] primaryMpoData, byte[] auxiliaryMpoData, Uri uri){
boolean loaded = false;
if(auxiliaryMpoData != null) {
@@ -971,7 +972,7 @@ public class MasterImage implements RenderingRequestCaller {
}
// check for pre-generated dm file
- String mpoFilepath = ImageLoader.getLocalPathFromUri(getActivity(), getUri());
+ String mpoFilepath = ImageLoader.getLocalPathFromUri(context, uri);
// read auxiliary image and generate depth map.
Bitmap auxiliaryBm = BitmapFactory.decodeByteArray(auxiliaryMpoData, 0, auxiliaryMpoData.length);
@@ -983,7 +984,7 @@ public class MasterImage implements RenderingRequestCaller {
DualCameraNativeEngine.getInstance().initDepthMap(
primaryBm, auxiliaryBm, mpoFilepath,
- DualCameraNativeEngine.getInstance().getCalibFilepath(mActivity));
+ DualCameraNativeEngine.getInstance().getCalibFilepath(context),1.0f);
primaryBm.recycle();
primaryBm = null;
@@ -1017,6 +1018,10 @@ public class MasterImage implements RenderingRequestCaller {
return loaded;
}
+ public boolean loadMpo(byte[] primaryMpoData, byte[] auxiliaryMpoData) {
+ return loadMpo(getActivity(), primaryMpoData, auxiliaryMpoData, getUri());
+ }
+
public void setFusionUnderlay(Bitmap underlay) {
mFusionUnderlay = underlay;
}
diff --git a/src/com/android/gallery3d/filtershow/tools/DualCameraNativeEngine.java b/src/com/android/gallery3d/filtershow/tools/DualCameraNativeEngine.java
index f44f4d6d1..56b349677 100644..100755
--- a/src/com/android/gallery3d/filtershow/tools/DualCameraNativeEngine.java
+++ b/src/com/android/gallery3d/filtershow/tools/DualCameraNativeEngine.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2016, 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
@@ -38,6 +38,9 @@ import android.util.Log;
public class DualCameraNativeEngine {
private static final String TAG = "DualCameraNativeEngine";
+
+ public static final float DEFAULT_BRIGHTNESS_INTENSITY = 1.0f;
+
static {
try {
System.loadLibrary("jni_dualcamera");
@@ -56,7 +59,7 @@ public class DualCameraNativeEngine {
DDM_LOADING,
DDM_LOADED,
DDM_FAILED
- };
+ }
public static final String DEPTH_MAP_EXT = "dm";
private static final String CALIBRATION_FILENAME = "ddm_calib_file.dat";
@@ -64,10 +67,11 @@ public class DualCameraNativeEngine {
private static DualCameraNativeEngine mInstance;
- private DualCameraNativeEngine() {}
+ private DualCameraNativeEngine() {
+ }
public static void createInstance() {
- if(mInstance == null) {
+ if (mInstance == null) {
mInstance = new DualCameraNativeEngine();
}
}
@@ -86,7 +90,7 @@ public class DualCameraNativeEngine {
return calibFile.getAbsolutePath();
}
- native public boolean initDepthMap(Bitmap primaryRGBA, Bitmap auxiliaryRGBA, String mpoFilepath, String calibFilepath);
+ native public boolean initDepthMap(Bitmap primaryRGBA, Bitmap auxiliaryRGBA, String mpoFilepath, String calibFilepath, float brIntensity);
native public void releaseDepthMap();
@@ -94,11 +98,59 @@ public class DualCameraNativeEngine {
native public boolean getDepthMap(Bitmap dataBuffer);
+ native private boolean get3DEffectImages(Bitmap bitmap, Bitmap depthMap);
+
native public boolean applyFocus(int focusPointX, int focusPointY, float intensity, int[] roiRect, boolean isPreview, Bitmap outBm);
+ native public boolean applyFocusStar(int focusPointX, int focusPointY, float intensity, int[] roiRect, boolean isPreview, Bitmap outBm);
+
+ native public boolean applyFocusHexagon(int focusPointX, int focusPointY, float intensity, int[] roiRect, boolean isPreview, Bitmap outBm);
+
native public boolean applyHalo(int focusPointX, int focusPointY, float intensity, int[] roiRect, boolean isPreview, Bitmap outBm);
+ native public boolean applyMotion(int focusPointX, int focusPointY, float intensity, int[] roiRect, boolean isPreview, Bitmap outBm);
+
native public boolean applySketch(int focusPointX, int focusPointY, int[] roiRect, boolean isPreview, Bitmap outBm);
+ native public boolean applyZoom(int focusPointX, int focusPointY, int[] roiRect, boolean isPreview, Bitmap outBm);
+
+ native public boolean applyBlackAndWhite(int focusPointX, int focusPointY, int[] roiRect, boolean isPreview, Bitmap outBm);
+
+ native public boolean applyBlackBoard(int focusPointX, int focusPointY, int[] roiRect, boolean isPreview, Bitmap outBm);
+
+ native public boolean applyWhiteBoard(int focusPointX, int focusPointY, int[] roiRect, boolean isPreview, Bitmap outBm);
+
+ native public boolean applyPosterize(int focusPointX, int focusPointY, float intensity, int[] roiRect, boolean isPreview, Bitmap outBm);
+
+ native public boolean applyNegative(int focusPointX, int focusPointY, int[] roiRect, boolean isPreview, Bitmap outBm);
+
native public boolean getForegroundImg(int focusPointX, int focusPointY, int[] roiRect, boolean isPreview, Bitmap outBm);
+
+ native public boolean getPrimaryImg(int focusPointX, int focusPointY, int[] roiRect, boolean isPreview, Bitmap outBm);
+
+ public static class DepthMap3D {
+ public char[] pixels;
+ public int width;
+ public int height;
+ }
+
+ public DepthMap3D getDepthMap3D(Bitmap bitmap) {
+ int width = bitmap.getWidth(), height = bitmap.getHeight();
+ Bitmap depthMap = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
+ boolean ok = get3DEffectImages(bitmap, depthMap);
+ if (!ok) return null;
+
+ DepthMap3D map = new DepthMap3D();
+ map.width = width;
+ map.height = height;
+ map.pixels = new char[width * height];
+
+ int[] pixels = new int[width * height];
+ depthMap.getPixels(pixels, 0, width, 0, 0, width, height);
+ for (int i = width * height - 1; i >= 0; --i) {
+ map.pixels[i] = (char) (pixels[i] & 0xff);
+ }
+ depthMap.recycle();
+ return map;
+ }
}