diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2015-03-19 14:21:17 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-03-19 14:21:17 -0700 |
commit | 670d9b82ab300786cf24c6893f83b406e875ed5a (patch) | |
tree | c2e299e8e7aadf45728eaf4b886c039864f5c02c /src/com | |
parent | 7e7035eaf5d8d8a72f5f61f05beb79b842e4f358 (diff) | |
parent | 692eabb9f888c384bb8520dfb9f5b3fe3ba02e24 (diff) | |
download | android_packages_apps_Gallery2-670d9b82ab300786cf24c6893f83b406e875ed5a.tar.gz android_packages_apps_Gallery2-670d9b82ab300786cf24c6893f83b406e875ed5a.tar.bz2 android_packages_apps_Gallery2-670d9b82ab300786cf24c6893f83b406e875ed5a.zip |
Merge "Gallery2: Move files to the correct location"
Diffstat (limited to 'src/com')
9 files changed, 545 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java b/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java new file mode 100644 index 000000000..331d31b57 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java @@ -0,0 +1,44 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.editors; + +import android.view.View; +import android.widget.SeekBar; + +import com.android.gallery3d.R; + +public class EditorMakeup extends BasicEditor { + public static int ID = R.id.editorMakeup; + private final String LOGTAG = "EditorMakeup"; + + public EditorMakeup() { + super(ID, R.layout.filtershow_default_editor, R.id.basicEditor); + } + + @Override + public void setUtilityPanelUI(View actionButton, View editControl) { + super.setUtilityPanelUI(actionButton, editControl); + mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar); + if (mSeekBar != null) { + mSeekBar.setVisibility(View.INVISIBLE); + } + } + + + +} diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java new file mode 100644 index 000000000..64067881e --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java @@ -0,0 +1,54 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.R; + +import com.thundersoft.hz.selfportrait.detect.FaceInfo; +import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; + +public class ImageFilterMakeupBigeye extends SimpleMakeupImageFilter { + private static final String SERIALIZATION_NAME = "BIGEYE"; + + public ImageFilterMakeupBigeye() { + mName = "Bigeye"; + } + + public FilterRepresentation getDefaultRepresentation() { + FilterBasicRepresentation representation = + (FilterBasicRepresentation) super.getDefaultRepresentation(); + representation.setName("Bigeye"); + representation.setSerializationName(SERIALIZATION_NAME); + representation.setFilterClass(ImageFilterMakeupBigeye.class); + representation.setTextId(R.string.text_makeup_bigeye); + representation.setOverlayOnly(true); + representation.setOverlayId(R.drawable.ic_ts_makeup_bigeye); + representation.setMinimum(0); + representation.setMaximum(100); + representation.setSupportsPartialRendering(true); + return representation; + } + + protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, + int value) { + MakeupEngine.doWarpFace(bitmap, bitmap, width, height, faceInfo.eye1, faceInfo.eye2, + faceInfo.mouth, value, 0); + } +} diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java new file mode 100644 index 000000000..8587158c3 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java @@ -0,0 +1,52 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.R; + +import com.thundersoft.hz.selfportrait.detect.FaceInfo; +import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; + +public class ImageFilterMakeupSoften extends SimpleMakeupImageFilter { + private static final String SERIALIZATION_NAME = "SOFTEN"; + + public ImageFilterMakeupSoften() { + mName = "Soften"; + } + + public FilterRepresentation getDefaultRepresentation() { + FilterBasicRepresentation representation = + (FilterBasicRepresentation) super.getDefaultRepresentation(); + representation.setName("Soften"); + representation.setSerializationName(SERIALIZATION_NAME); + representation.setFilterClass(ImageFilterMakeupSoften.class); + representation.setTextId(R.string.text_makeup_Soften); + representation.setOverlayOnly(true); + representation.setOverlayId(R.drawable.ic_ts_makeup_soften); + representation.setMinimum(0); + representation.setMaximum(100); + representation.setSupportsPartialRendering(true); + return representation; + } + + protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, int value) { + MakeupEngine.doProcessBeautify(bitmap, bitmap, width, height, faceInfo.face, value, 0); + } +} diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java new file mode 100644 index 000000000..4b0499036 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java @@ -0,0 +1,55 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.R; + +import com.thundersoft.hz.selfportrait.detect.FaceInfo; +import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; + +public class ImageFilterMakeupTrimface extends SimpleMakeupImageFilter { + private static final String SERIALIZATION_NAME = "TRIMFACE"; + + public ImageFilterMakeupTrimface() { + mName = "Trimface"; + } + + public FilterRepresentation getDefaultRepresentation() { + FilterBasicRepresentation representation = + (FilterBasicRepresentation) super.getDefaultRepresentation(); + representation.setName("Trimface"); + representation.setSerializationName(SERIALIZATION_NAME); + representation.setFilterClass(ImageFilterMakeupTrimface.class); + representation.setTextId(R.string.text_makeup_trimface); + representation.setOverlayOnly(true); + representation.setOverlayId(R.drawable.ic_ts_makeup_trimface); + representation.setMinimum(0); + representation.setMaximum(100); + representation.setSupportsPartialRendering(true); + return representation; + } + + protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, + int value) { + MakeupEngine.doWarpFace(bitmap, bitmap, width, height, faceInfo.eye1, faceInfo.eye2, + faceInfo.mouth, 0, value); + } + +} diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java new file mode 100644 index 000000000..e60be84d7 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java @@ -0,0 +1,53 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.R; + +import com.thundersoft.hz.selfportrait.detect.FaceInfo; +import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; + +public class ImageFilterMakeupWhiten extends SimpleMakeupImageFilter { + private static final String SERIALIZATION_NAME = "WHITEN"; + + public ImageFilterMakeupWhiten() { + mName = "Whiten"; + } + + public FilterRepresentation getDefaultRepresentation() { + FilterBasicRepresentation representation = + (FilterBasicRepresentation) super.getDefaultRepresentation(); + representation.setName("Whiten"); + representation.setSerializationName(SERIALIZATION_NAME); + representation.setFilterClass(ImageFilterMakeupWhiten.class); + representation.setTextId(R.string.text_makeup_whiten); + representation.setOverlayOnly(true); + representation.setOverlayId(R.drawable.ic_ts_makeup_whiten); + representation.setMinimum(0); + representation.setMaximum(100); + representation.setSupportsPartialRendering(true); + return representation; + } + + protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, int value) { + MakeupEngine.doProcessBeautify(bitmap, bitmap, width, height, faceInfo.face, 0, value); + } + +} diff --git a/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java b/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java new file mode 100644 index 000000000..584074c02 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java @@ -0,0 +1,82 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; +import android.util.Log; + +import com.thundersoft.hz.selfportrait.detect.FaceDetect; +import com.thundersoft.hz.selfportrait.detect.FaceInfo; + +public abstract class SimpleMakeupImageFilter extends SimpleImageFilter { + private static final String LOGTAG = "SimpleMakeupImageFilter"; + protected static final int MAKEUP_INTENSITY = 50; + + public static final boolean HAS_TS_MAKEUP = android.os.SystemProperties.getBoolean("persist.ts.postmakeup", false); + + public SimpleMakeupImageFilter() { + } + + public FilterRepresentation getDefaultRepresentation() { + FilterRepresentation representation = new FilterBasicRepresentation("Default", 0, + MAKEUP_INTENSITY, 100); + representation.setShowParameterValue(true); + return representation; + } + + protected FaceInfo detectFaceInfo(Bitmap bitmap) { + FaceDetect faceDetect = new FaceDetect(); + faceDetect.initialize(); + FaceInfo[] faceInfos = faceDetect.dectectFeatures(bitmap); + faceDetect.uninitialize(); + + Log.v(LOGTAG, "SimpleMakeupImageFilter.detectFaceInfo(): detect faceNum is " + + (faceInfos != null ? faceInfos.length : "NULL")); + if (faceInfos == null || faceInfos.length <= 0) { + return null; + } + + return faceInfos[0]; + } + + @Override + public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) { + if (getParameters() == null) { + return bitmap; + } + int w = bitmap.getWidth(); + int h = bitmap.getHeight(); + if(w % 2 != 0 || h % 2 != 0) { + return bitmap; + } + int value = getParameters().getValue(); + applyHelper(bitmap, w, h, value); + return bitmap; + } + + private void applyHelper(Bitmap bitmap, int w, int h, int value) { + FaceInfo faceInfo = detectFaceInfo(bitmap); + if(faceInfo != null) { + doMakeupEffect(bitmap, faceInfo, w, h, value); + } + } + + abstract void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, + int value); + +} diff --git a/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java b/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java new file mode 100644 index 000000000..a5c7fb043 --- /dev/null +++ b/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java @@ -0,0 +1,79 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.thundersoft.hz.selfportrait.detect; + +import android.graphics.Bitmap; +import android.graphics.Rect; +import android.util.Log; + +public class FaceDetect { + private static final String TAG = "FaceDetect"; + + private int mHandle = 0; + + static { + try { + System.loadLibrary("ts_detected_face_jni"); + } catch (UnsatisfiedLinkError e) { + e.printStackTrace(); + Log.e(TAG, "ts_detected_face_jni library not found!"); + } + } + + /** + * initialize method,MUST called at first time. + */ + public void initialize() { + mHandle = native_create(); + } + + /** + * uninitialize method,MUST called at last time. + */ + + public void uninitialize() { + native_destroy(mHandle); + } + + /** + * dectectFeatures method,MUST called after initialize method and before + * uninitialize method. + * + * @param bmp, Android Bitmap instance,MUST not null. + * @return FaceInfo array if success, otherwise return null. + */ + public FaceInfo[] dectectFeatures(Bitmap bmp) { + int count = native_detect(mHandle, bmp); + if (count < 1) { + return null; + } + FaceInfo[] res = new FaceInfo[count]; + for (int i = 0; i < count; i++) { + FaceInfo face = new FaceInfo(); + native_face_info(mHandle, i, face.face, face.eye1, face.eye2, face.mouth); + res[i] = face; + } + return res; + } + + private static native int native_create(); + private static native void native_destroy(int handle); + private static native int native_detect(int handle, Bitmap bmp); + private static native int native_face_info(int handle, int index, Rect face, Rect eye1, + Rect eye2, Rect mouth); +} diff --git a/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java b/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java new file mode 100644 index 000000000..eee51f71b --- /dev/null +++ b/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java @@ -0,0 +1,39 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.thundersoft.hz.selfportrait.detect; + +import android.graphics.Rect; + +public class FaceInfo { + /** + * face rectangle + */ + public Rect face = new Rect(); + /** + * left eye rectangle + */ + public Rect eye1 = new Rect(); + /** + * right eye rectangle + */ + public Rect eye2 = new Rect(); + /** + * mount rectangle + */ + public Rect mouth = new Rect(); +} diff --git a/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java b/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java new file mode 100644 index 000000000..8d58bcfef --- /dev/null +++ b/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java @@ -0,0 +1,87 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.thundersoft.hz.selfportrait.makeup.engine; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Rect; +import android.util.Log; + +public class MakeupEngine { + static { + try { + System.loadLibrary("ts_face_beautify_jni"); + } catch (UnsatisfiedLinkError e) { + e.printStackTrace(); + Log.e(MakeupEngine.class.getName(), "ts_face_beautify_jni library not found!"); + } + } + + private static MakeupEngine mInstance; + + private MakeupEngine() { + + } + + public static MakeupEngine getMakeupObj() { + if(mInstance == null) { + mInstance = new MakeupEngine(); + } + + return mInstance; + } + + private Context mContext; + + public void setContext(Context context) { + mContext = context; + } + + public Context getContext() { + return mContext; + } + + /** + * FUNCTION: doProcessBeautify + * Do process face region clean and whiten. + * @param inBitmap, the Bitmap instance which have face region, MUST not null. + * @param outBitmap, the result of process, MUST not null. + * @param frameWidth,frameHeight, the size of inBitmap. + * @param faceRect, the face region in inBitmap. + * @param cleanLevel, the level of clean.(0-100) + * @param whiteLevel, the level of white.(0-100) + */ + public static native boolean doProcessBeautify(Bitmap inBitmap, Bitmap outBitmap, int frameWidth, int frameHeight, + Rect faceRect, int cleanLevel, int beautyLevel); + + /** + * FUNCTION: doWarpFace + * Do process face region warp and big eye. + * @param inBitmap, the Bitmap instance which have face region, MUST not null. + * @param outBitmap, the result of process, MUST not null. + * @param frameWidth, the size of inBitmap. + * @param frameHeight, the size of inBitmap. + * @param leftEye, the left eye rectangle + * @param rightEye, the right eye rectangle + * @param mouth, the mouth rectangle + * @param bigEyeLevel, the level of big eye.(0-100) + * @param trimFaceLevel, the level of trim face.(0-100) + */ + public static native boolean doWarpFace(Bitmap inBitmap, Bitmap outBitmap, int frameWidth, int frameHeight, + Rect leftEye, Rect rightEye, Rect mouth, int bigEyeLevel, int trimFaceLevel); +} |