Skip to content

Commit ace24ae

Browse files
authored
Merge pull request #24 from doggycoder/master
pull request
2 parents 2bfa3ad + e921dc6 commit ace24ae

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1600
-1954
lines changed

AiyaEffectsSDK/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ android {
88
buildToolsVersion "25.0.1"
99

1010
defaultConfig {
11-
minSdkVersion 18
11+
minSdkVersion 16
1212
targetSdkVersion 25
1313
versionCode rootProject.ext.vCode
1414
versionName rootProject.ext.vName
Binary file not shown.
-1.12 MB
Binary file not shown.
-848 KB
Binary file not shown.
-787 KB
Binary file not shown.
Binary file not shown.
-836 KB
Binary file not shown.
-672 KB
Binary file not shown.
-694 KB
Binary file not shown.
-2.71 MB
Binary file not shown.

AiyaEffectsSDK/libs/x86/libaftk.so

-976 KB
Binary file not shown.

AiyaEffectsSDK/libs/x86/libassimp.so

-820 KB
Binary file not shown.
-1.08 MB
Binary file not shown.

AiyaEffectsSDK/src/main/java/com/aiyaapp/camera/sdk/AiyaCameraJni.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ private native int nTrack(byte[] rgbabuffer, int width, int height, float[] outf
6363
System.loadLibrary("simd");
6464
System.loadLibrary("aftk");
6565
System.loadLibrary("assimp");
66+
System.loadLibrary("gameplay");
6667
System.loadLibrary("ayeffects");
6768
System.loadLibrary("AiyaJniWrapper");
6869
}

AiyaEffectsSDK/src/main/java/com/aiyaapp/camera/sdk/AiyaEffects.java

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package com.aiyaapp.camera.sdk;
99

1010
import android.annotation.SuppressLint;
11+
import com.aiyaapp.camera.sdk.etest.EData;
1112
import java.io.File;
1213
import java.util.concurrent.ExecutorService;
1314
import java.util.concurrent.Executors;
@@ -67,8 +68,13 @@ public class AiyaEffects implements ISdkManager {
6768

6869
private int mMode=0;
6970

71+
private int oxEye=0;
72+
private int thinFace=0;
73+
private int beautyLevel=0;
74+
7075
private boolean isResourceReady=false;
7176
private Semaphore mSemaphore;
77+
private boolean isBeautyNeedTrack=false;
7278

7379
private Object assetManager;
7480

@@ -244,12 +250,32 @@ public void set(String key, int value) {
244250
case SET_TRACK_HEIGHT:
245251
mTrackHeight=value;
246252
break;
253+
case SET_BEAUTY_LEVEL:
254+
beautyLevel=value;
255+
mAiyaCameraJni.set(key,value);
256+
break;
247257
case SET_MODE:
248258
this.mMode=value;
249259
break;
250260
case SET_TRACK_FORCE_CLOSE:
251261
this.forceCloseTrack=value;
252262
break;
263+
case SET_OXEYE:
264+
oxEye=value;
265+
isBeautyNeedTrack=oxEye>0||thinFace>0;
266+
if (isBeautyNeedTrack&&beautyLevel==0){
267+
mAiyaCameraJni.set(SET_BEAUTY_LEVEL,1);
268+
}
269+
mAiyaCameraJni.set(key, value);
270+
break;
271+
case SET_THIN_FACE:
272+
thinFace=value;
273+
isBeautyNeedTrack=oxEye>0||thinFace>0;
274+
if (isBeautyNeedTrack&&beautyLevel==0){
275+
mAiyaCameraJni.set(SET_BEAUTY_LEVEL,1);
276+
}
277+
mAiyaCameraJni.set(key, value);
278+
break;
253279
case SET_ACTION:
254280
switch (value){
255281
case ACTION_REFRESH_PARAMS_NOW:
@@ -270,38 +296,46 @@ public void set(String key, Object obj) {
270296
}
271297
}
272298

299+
public boolean isNeedTrack(){
300+
return (currentEffect!=null||isBeautyNeedTrack)&&forceCloseTrack==FALSE;
301+
}
302+
273303
@Override
274304
public void track(final byte[] trackData, final float[] info, final int trackIndex) {
275305
if(isResourceReady){
276306
mTrackExecutor.execute(new Runnable() {
277307
@Override
278308
public void run() {
279-
if(currentEffect==null||forceCloseTrack==TRUE){
309+
if((currentEffect==null&&!isBeautyNeedTrack)||forceCloseTrack==TRUE){
310+
EData.data.setTrackCode(2);
280311
mSemaphore.release();
281312
return;
282313
}
283314
long start=System.currentTimeMillis();
284315
int trackCode=mAiyaCameraJni.track(trackData,mTrackWidth,mTrackHeight,info,
285316
trackIndex);
286317
Log.e("track------------------------>"+(System.currentTimeMillis()-start));
318+
319+
Log.e("info","info----:"+info[0]+"/"+info[1]+"/"+info[10]+"/"+info[11]);
320+
287321
if(mTrackCallback!=null){
288322
mTrackCallback.onTrack(trackCode,info);
289323
}
290324
mSemaphore.release();
291325
}
292326
});
327+
try {
328+
mSemaphore.acquire();
329+
} catch (InterruptedException e) {
330+
e.printStackTrace();
331+
}
293332
}
294333

295334
}
296335

297336
@Override
298337
public void process(int textureId, int trackIndex) {
299338
if(isResourceReady){
300-
try {
301-
mSemaphore.acquire();
302-
} catch (InterruptedException e) {
303-
e.printStackTrace();
304-
}
305339
if(!isSetParam){
306340
setParameters(input,output);
307341
}
@@ -313,13 +347,13 @@ public void process(int textureId, int trackIndex) {
313347
if(mProcessCallback!=null){
314348
mProcessCallback.onFinished();
315349
}
316-
if(mMode==MODE_GIFT&&ret==STATE_EFFECT_END){
317-
setEffect(null);
318-
}
319350
if(ret==STATE_EFFECT_END){
320351
mProcessEvent.strTag=currentEffect;
321352
mObservable.notifyState(mProcessEvent);
322353
}
354+
if(mMode==MODE_GIFT&&ret==STATE_EFFECT_END){
355+
setEffect(null);
356+
}
323357
}
324358
}
325359

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.aiyaapp.camera.sdk;
2+
3+
import android.content.Context;
4+
import android.telephony.TelephonyManager;
5+
import com.aiyaapp.camera.sdk.base.Assets;
6+
import com.aiyaapp.camera.sdk.base.Log;
7+
import java.io.File;
8+
9+
/**
10+
* Created by aiya on 2017/7/9.
11+
*/
12+
13+
public class AiyaEffectsJni {
14+
15+
private static AiyaEffectsJni instance;
16+
17+
private AiyaCameraJni mAiyaJni;
18+
19+
private AiyaEffectsJni(){
20+
mAiyaJni=new AiyaCameraJni();
21+
}
22+
23+
public static AiyaEffectsJni getInstance(){
24+
if(instance==null){
25+
synchronized(AiyaEffectsJni.class){
26+
if(instance==null){
27+
instance=new AiyaEffectsJni();
28+
}
29+
}
30+
}
31+
return instance;
32+
}
33+
34+
public boolean init(Context context,String appKey) {
35+
File cacheFilePath=context.getExternalFilesDir(null);
36+
if (cacheFilePath == null) {
37+
cacheFilePath=context.getFilesDir();
38+
}
39+
TelephonyManager tm=(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
40+
String DEVICE_ID=tm.getDeviceId();
41+
if (DEVICE_ID == null) {
42+
DEVICE_ID=android.os.Build.SERIAL;
43+
}
44+
Log.e("start prepare resource");
45+
String configPath=cacheFilePath.getAbsolutePath() + "/config";
46+
boolean pb;
47+
if (new File(configPath).exists()) {
48+
pb=true;
49+
} else {
50+
Assets assets=new Assets(context);
51+
pb=assets.doCopy();
52+
}
53+
Log.e("prepare resource success:" + pb);
54+
return pb
55+
&& mAiyaJni.init(context, configPath, configPath, context.getPackageName(), DEVICE_ID, appKey)
56+
== 0;
57+
}
58+
59+
public void track(byte[] rgbabuffer, int width, int height, float[] outfdp,int trackIndex){
60+
mAiyaJni.track(rgbabuffer, width, height, outfdp, trackIndex);
61+
}
62+
63+
public void setParameters(int width, int height, int format, int orientation, int flip,int outWidth, int outHeight, int outFormat, int outOrientation, int outFlip) {
64+
mAiyaJni.setParameters(width, height, format, orientation, flip, outWidth, outHeight, outFormat, outOrientation, outFlip);
65+
}
66+
67+
public void set(String key,int value){
68+
mAiyaJni.set(key, value);
69+
}
70+
71+
public void set(String key,Object obj){
72+
mAiyaJni.set(key, obj);
73+
}
74+
75+
public void setEffect(String effectJson){
76+
mAiyaJni.setEffect(effectJson);
77+
}
78+
79+
public int processFrame(int textureId,int width,int height,int trackIndex){
80+
return mAiyaJni.processFrame(textureId, width, height, trackIndex);
81+
}
82+
83+
public void release() {
84+
mAiyaJni.release();
85+
}
86+
87+
}

AiyaEffectsSDK/src/main/java/com/aiyaapp/camera/sdk/base/ISdkManager.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ public interface ISdkManager {
1717
String SET_BEAUTY_LEVEL="beauty_level"; //美颜等级,1-6,不在范围内表示关闭美颜
1818
String SET_BEAUTY_TYPE="beauty_type"; //美颜类型,0,1,4,5
1919
String SET_EFFECT_ON="effects_on"; //特效开关1开0关
20-
String SET_OXEYE="oxeye"; //是否大眼
21-
String SET_THIN_FACE="thin_face"; //是否瘦脸
20+
String SET_OXEYE="SetBigEyeScale"; //大眼,0-100
21+
String SET_THIN_FACE="SetSlimFaceScale"; //瘦脸,0-100
22+
23+
String SET_EFFECT_FLIP="EnableVFlip"; //effect是否翻转
2224

2325
String SET_TRACK_FORCE_CLOSE="track_force_close"; //人脸捕获强制关闭
2426

@@ -36,6 +38,8 @@ public interface ISdkManager {
3638

3739
String SET_ASSETS_MANAGER="assets_manager"; //AssetsManager
3840

41+
String SET_LOG="LogLevel";
42+
3943
int ACTION_REFRESH_PARAMS_NOW=1; //刷新params,需要在GL线程中执行
4044

4145
int STATE_EFFECT_END=0x00040000; //特效播放结束
@@ -44,6 +48,15 @@ public interface ISdkManager {
4448
int MODE_ORNAMENT=0; //饰品
4549
int MODE_GIFT=1; //礼物
4650

51+
int BEAUTY_TYPE_SUPER =1;
52+
int BEAUTY_TYPE_SNAKE =2;
53+
int BEAUTY_TYPE_MASK =3;
54+
int BEAUTY_TYPE_SUPER2P =4;
55+
int BEAUTY_TYPE_DXLB =5;
56+
int BEAUTY_TYPE_B612 =6;
57+
int BEAUTY_TYPE_FACECUT=7;
58+
int BEAUTY_TYPE_NORMAL=8;
59+
4760
int TRUE=1;
4861
int FALSE=0;
4962
//
@@ -82,7 +95,7 @@ public interface ISdkManager {
8295
/**
8396
* 人脸追踪,必须在GL环境中调用
8497
* @param trackData 需要追踪的原始图片数据
85-
* @param info 追踪结果
98+
* @param info 追踪结果,69个特征点,每两个浮点表示一个特征点,info长度200
8699
*/
87100
void track(byte[] trackData, float[] info, int trackIndex);
88101

AiyaEffectsSDK/src/main/java/com/aiyaapp/camera/sdk/base/Log.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
*/
88
package com.aiyaapp.camera.sdk.base;
99

10+
import com.aiyaapp.camera.sdk.AiyaEffects;
11+
1012
/**
1113
* Description:
1214
*/
@@ -19,6 +21,7 @@ private Log(){}
1921

2022
public static void debug(boolean isDebug){
2123
Log.isDebug=isDebug;
24+
AiyaEffects.getInstance().set(ISdkManager.SET_LOG,isDebug?0x03:0x07);
2225
}
2326

2427
public static void e(String info){

AiyaEffectsSDK/src/main/java/com/aiyaapp/camera/sdk/etest/EData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public static class d{
1818
private long drawTime=0;
1919
private float fps;
2020
private int dealTime;
21-
private int trackCode;
21+
private int trackCode=-1;
2222
private float cameraFps;
2323

2424
private long renderRequestTime=0;

AiyaEffectsSDK/src/main/java/com/aiyaapp/camera/sdk/etest/EDataShow.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private void myDraw(){
107107
EData.data.getDealTime(),EData.data.getCameraFps()),40,40, mPaint);
108108
try {
109109
mCanvas.drawText(String.format(Locale.CHINA,"Mem=%04dM,Cpu=%.3f%%,track:%b",memSize,
110-
cpuRate,EData.data.getTrackCode()==1),
110+
cpuRate,EData.data.getTrackCode()==0),
111111
40,70,mPaint);
112112
}catch (Exception e){
113113
e.printStackTrace();

AiyaEffectsSDK/src/main/java/com/aiyaapp/camera/sdk/filter/MatrixUtils.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ public static float[] scale(float[] m,float x,float y){
127127
return m;
128128
}
129129

130+
public static float[] translate(float[] m,float x,float y){
131+
Matrix.translateM(m,0,x,y,1);
132+
return m;
133+
}
134+
130135
public static float[] getOriginalMatrix(){
131136
return new float[]{
132137
1,0,0,0,

AiyaEffectsSDK/src/main/java/com/aiyaapp/camera/sdk/filter/PrepareFilter.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class PrepareFilter extends AFilter {
2727
private AiyaFilter mFilter;
2828
private int width=0;
2929
private int height=0;
30-
private float[] infos = new float[20];
30+
private float[] infos = new float[200];
3131
private int nowTextureIndex=0;
3232

3333
private int fTextureSize = 2;
@@ -89,10 +89,14 @@ public void draw() {
8989
}
9090
mFilter.setTextureId(getTextureId());
9191
EasyGlUtils.bindFrameTexture(fFrame[0],fTexture[nowTextureIndex]);
92-
GLES20.glViewport(0,0, AiyaEffects.getInstance().get(ISdkManager.SET_TRACK_WIDTH),
93-
AiyaEffects.getInstance().get(ISdkManager.SET_TRACK_HEIGHT));
94-
mFilter.draw();
95-
AiyaEffects.getInstance().track(getTrackData(), infos, nowTextureIndex);
92+
if(AiyaEffects.getInstance().isNeedTrack()){
93+
GLES20.glViewport(0,0, AiyaEffects.getInstance().get(ISdkManager.SET_TRACK_WIDTH),
94+
AiyaEffects.getInstance().get(ISdkManager.SET_TRACK_HEIGHT));
95+
mFilter.draw();
96+
AiyaEffects.getInstance().track(getTrackData(), infos, nowTextureIndex);
97+
}else{
98+
AiyaEffects.getInstance().track(null, infos, nowTextureIndex);
99+
}
96100
GLES20.glViewport(0,0,width,height);
97101
mFilter.draw();
98102
EasyGlUtils.unBindFrameBuffer();

0 commit comments

Comments
 (0)