Skip to content

Commit

Permalink
hot switch engine mode
Browse files Browse the repository at this point in the history
  • Loading branch information
iFinVer committed Dec 28, 2016
1 parent e3a1703 commit 663ce4c
Show file tree
Hide file tree
Showing 118 changed files with 193 additions and 26,369 deletions.
2 changes: 1 addition & 1 deletion finengine/dependencies.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
dependencies {
compile project(':javacv')
// compile project(':javacv')
}
16 changes: 15 additions & 1 deletion finengine/src/main/cpp/finengine/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,9 +227,22 @@ JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeSwitchFilter(J
engineHolder->currentFilter = mFilterType;
}

JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeSwitchToModeNormal(JNIEnv *env, jobject instance, jlong engine){
GLContextHolder *engineHolder = (GLContextHolder *) engine;
engineHolder->engineMode = ENGINE_MODE_NORMAL;
LOGI("%s","switched mode to normal!");
}

JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeSwitchToModeFaceSwap(JNIEnv *env, jobject instance, jlong engine){
GLContextHolder *engineHolder = (GLContextHolder *) engine;
engineHolder->engineMode = ENGINE_MODE_FACE_SWAP;
LOGI("%s","switched mode to swap face!");
}

JNIEXPORT void JNICALL
Java_com_ifinver_finengine_FinEngine_nativeSwitchToModeMonaLisa(JNIEnv *env, jobject, jlong engine, jstring filePath_) {
const char *filePath = env->GetStringUTFChars(filePath_, 0);
LOGI("%s","switching mode to mona lisa ..");
GLContextHolder *engineHolder = (GLContextHolder *) engine;
if (engineHolder->monaFilePath.compare(filePath)) {
//不相等才会走进来
Expand Down Expand Up @@ -335,7 +348,6 @@ void renderFrame(GLContextHolder *engineHolder, jbyte *data, jint width, jint he
void renderRgb(GLContextHolder *engineHolder, unsigned char *data, jint width, jint height, jint degree, jboolean mirror, jint outWidth,
jint outHeight, jlong facePtr) {
glUseProgram(engineHolder->programRGB);
engineHolder->currentProgram = engineHolder->programRGB;

//输入顶点
glEnableVertexAttribArray(engineHolder->posRgbAttrVertices);
Expand Down Expand Up @@ -365,6 +377,8 @@ void renderRgb(GLContextHolder *engineHolder, unsigned char *data, jint width, j
glDisableVertexAttribArray(engineHolder->posRgbAttrVertices);
glDisableVertexAttribArray(engineHolder->posRgbAttrTexCoords);

glUseProgram(engineHolder->currentProgram);

//画点
// drawFacePoints(engineHolder, facePtr, width, height, odd);

Expand Down
2 changes: 2 additions & 0 deletions finengine/src/main/cpp/finengine/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeRelease(JNIEnv
JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeRender(JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jint, jboolean, jint, jint,jlong);
JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeSwitchFilter(JNIEnv *env, jobject, jlong, jobject, jint, jstring, jstring);
JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeSwitchToModeMonaLisa(JNIEnv *env, jobject instance, jlong,jstring filePath_);
JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeSwitchToModeNormal(JNIEnv *env, jobject instance, jlong);
JNIEXPORT void JNICALL Java_com_ifinver_finengine_FinEngine_nativeSwitchToModeFaceSwap(JNIEnv *env, jobject instance, jlong);
}

void releaseGLContext(GLContextHolder *engineHolder);
Expand Down
58 changes: 47 additions & 11 deletions finengine/src/main/java/com/ifinver/finengine/FinEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,6 @@ public class FinEngine {
public static final int FILTER_TYPE_H_MIRROR = 7;
public static final int FILTER_TYPE_FISH_EYE = 8;

public static final int ENGINE_MODE_NORMAL = 100;
public static final int ENGINE_MODE_FACE_SWAP = 101;
public static final int ENGINE_MODE_MONA_LISA = 102;

private final FinEngineThread mEngineThread;
private final int mEngineId;

Expand Down Expand Up @@ -70,6 +66,13 @@ public void switchFilter(Context ctx, int filterType) {
mEngineThread.switchFilter(ctx, filterType);
}

public void switchModeToNormal(){
mEngineThread.switchModeToNormal();
}

public void switchModeToSwapFace(){
mEngineThread.switchModeToSwapFace();
}

public void switchModeToMonaLisa(Context ctx) {
synchronized (this) {
Expand Down Expand Up @@ -103,7 +106,9 @@ private class FinEngineThread extends HandlerThread implements Handler.Callback
private final int MSG_RELEASE = 0x104;
private final int MSG_PROCESS = 0x105;
private final int MSG_SWITCH_FILTER = 0x106;
private final int MSG_SWITCH_MODE = 0x107;
private final int MSG_SWITCH_MODE_NORMAL = 0x107;
private final int MSG_SWITCH_MODE_MONALISA = 0x108;
private final int MSG_SWITCH_MODE_SWAP_FACE = 0x109;

private Handler mSelfHandler;
private boolean delayStart = false;
Expand All @@ -118,15 +123,13 @@ private class FinEngineThread extends HandlerThread implements Handler.Callback
private int mOutHeight;
private AssetManager mAssetManager;
private int mFilterType;
private int mEngineMode;
private long mEngine;
private long mFacePtr;
private String mMonaLisaFilePath;

FinEngineThread(Surface output, int width, int height) {
super("FinEngineThread", Process.THREAD_PRIORITY_URGENT_DISPLAY);
this.mFilterType = FILTER_TYPE_NORMAL;
mEngineMode = ENGINE_MODE_NORMAL;
this.mOutputSurface = output;
this.mOutWidth = width;
this.mOutHeight = height;
Expand All @@ -144,14 +147,25 @@ public void switchFilter(Context ctx, int filterType) {
this.mAssetManager = ctx.getApplicationContext().getAssets();
this.mFilterType = filterType;
}
mSelfHandler.removeCallbacksAndMessages(null);
mSelfHandler.sendEmptyMessage(MSG_SWITCH_FILTER);
}

public void switchModeToNormal(){
mSelfHandler.removeCallbacksAndMessages(null);
mSelfHandler.sendEmptyMessage(MSG_SWITCH_MODE_NORMAL);
}

public void switchModeToSwapFace() {
mSelfHandler.removeCallbacksAndMessages(null);
mSelfHandler.sendEmptyMessage(MSG_SWITCH_MODE_SWAP_FACE);
}

public void switchModeToMonaLisa(String path) {
synchronized (FinEngineThread.class) {
this.mMonaLisaFilePath = path;
this.mEngineMode = ENGINE_MODE_MONA_LISA;
mSelfHandler.sendEmptyMessage(MSG_SWITCH_MODE);
mSelfHandler.removeCallbacksAndMessages(null);
mSelfHandler.sendEmptyMessage(MSG_SWITCH_MODE_MONALISA);
}
}

Expand Down Expand Up @@ -182,9 +196,15 @@ public boolean handleMessage(Message msg) {
case MSG_SWITCH_FILTER:
switchFilterInternal();
return true;
case MSG_SWITCH_MODE:
case MSG_SWITCH_MODE_MONALISA:
switchToMonaLisaInternal();
return true;
case MSG_SWITCH_MODE_NORMAL:
switchToNormalModeInternal();
return true;
case MSG_SWITCH_MODE_SWAP_FACE:
switchToFaceSwapModeInternal();
return true;
case MSG_PROCESS:
if (isPrepared && mData != null) {
nativeRender(mEngine, mData, mFrameWidth, mFrameHeight, mDegree, isFrontCamera, mOutWidth, mOutHeight, mFacePtr);
Expand All @@ -201,6 +221,20 @@ private void switchToMonaLisaInternal() {
}
}
}
private void switchToFaceSwapModeInternal() {
if (isPrepared) {
synchronized (FinEngineThread.class) {
nativeSwitchToModeFaceSwap(mEngine);
}
}
}
private void switchToNormalModeInternal() {
if (isPrepared) {
synchronized (FinEngineThread.class) {
nativeSwitchToModeNormal(mEngine);
}
}
}

private void switchFilterInternal() {
if (isPrepared) {
Expand All @@ -225,6 +259,7 @@ private void init() {

private void sendReleaseMsg() {
isPrepared = false;
mSelfHandler.removeCallbacksAndMessages(null);
mSelfHandler.sendEmptyMessage(MSG_RELEASE);
}

Expand All @@ -239,7 +274,6 @@ public void resizeInput(int surfaceWidth, int surfaceHeight) {
}
}


/**
* @return 0 means failed
*/
Expand All @@ -250,6 +284,8 @@ public void resizeInput(int surfaceWidth, int surfaceHeight) {
private native void nativeSwitchFilter(long engine, AssetManager mAssetManager, int mFilterType, String mVertexName, String mFragmentName);

private native void nativeSwitchToModeMonaLisa(long engine, String filePath);
private native void nativeSwitchToModeNormal(long engine);
private native void nativeSwitchToModeFaceSwap(long engine);

private native void nativeRender(long engine, byte[] data, int frameWidth, int frameHeight, int degree, boolean mirror, int mOutWidth, int mOutHeight, long mFacePtr);
}
18 changes: 18 additions & 0 deletions finengine/src/main/java/com/ifinver/finengine/Renderer.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,24 @@ public void switchFilter(Context ctx,int filter){
}
}

public void switchModeToNormal() {
if(mFinEngine != null){
mFinEngine.switchModeToNormal();
}
}

public void switchModeToSwapFace() {
if(mFinEngine != null){
mFinEngine.switchModeToSwapFace();
}
}

public void switchModeToMonaLisa(Context ctx) {
if(mFinEngine != null){
mFinEngine.switchModeToMonaLisa(ctx);
}
}

public interface RenderListener{
void onRenderPrepared(int outputWidth,int outputHeight);
void onFrameRendered();
Expand Down
18 changes: 0 additions & 18 deletions javacv/build.gradle

This file was deleted.

9 changes: 0 additions & 9 deletions javacv/lint.xml

This file was deleted.

6 changes: 0 additions & 6 deletions javacv/src/main/AndroidManifest.xml

This file was deleted.

33 changes: 0 additions & 33 deletions javacv/src/main/aidl/org/opencv/engine/OpenCVEngineInterface.aidl

This file was deleted.

Loading

0 comments on commit 663ce4c

Please sign in to comment.