From 1b4d2718a4864190a47d8b7863f36a9ae0b8055c Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期五, 28 四月 2017 17:38:09 +0800 Subject: [PATCH] optimize --- VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNI.cpp | 44 +++++++++++++++++++++++++++++++++----------- 1 files changed, 33 insertions(+), 11 deletions(-) diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNI.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNI.cpp index 59f2a80..375c7eb 100644 --- a/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNI.cpp +++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNI.cpp @@ -58,6 +58,24 @@ env->ReleaseStringUTFChars(ipaddr, utf8); } +void createHiddenSurface(JNIEnv *env, int cameraIdx) +{ + CameraWrapper& cameraWrapper(g_CameraWrappers[cameraIdx]); + + //OutputSurface outputSurface = null; + //outputSurface = new OutputSurface(mWidth, mHeight); + //outputSurface.getSurface(); + //outputSurface.release(); + + jclass jcOutputSurface = env->FindClass("com/example/nativecodec/OutputSurface"); + jmethodID jmOutputSurface_ctor = env->GetMethodID(jcOutputSurface, "<init>", "(II)V"); + jmethodID jmOutputSurface_getSurface = env->GetMethodID(jcOutputSurface, "getSurface", "()Landroid/view/Surface;"); + + jobject jobjOutputSurface = env->NewObject(jcOutputSurface , jmOutputSurface_ctor, 1920, 1088); + jobject jobjSurface = env->CallObjectMethod(jobjOutputSurface, jmOutputSurface_getSurface); + cameraWrapper.windowDecode = ANativeWindow_fromSurface(env, jobjSurface); +} + // set the surface void Java_cn_com_basic_face_util_RtspFaceNative_setSurface(JNIEnv *env, jclass clazz, jint cameraIdx, jobject surface) { @@ -67,14 +85,17 @@ CameraWrapper& cameraWrapper(g_CameraWrappers[cameraIdx]); - // obtain a native window from a Java surface - if (cameraWrapper.window) + // obtain a native windowRender from a Java surface + if (cameraWrapper.windowRender) { - ANativeWindow_release((ANativeWindow*)(cameraWrapper.window)); - cameraWrapper.window = NULL; + ANativeWindow_release((ANativeWindow*)(cameraWrapper.windowRender)); + cameraWrapper.windowRender = NULL; } - cameraWrapper.window = ANativeWindow_fromSurface(env, surface); - LOGP(DEBUG, "@@@ setsurface %p", cameraWrapper.window); + cameraWrapper.windowRender = ANativeWindow_fromSurface(env, surface); + + //createHiddenSurface(env, cameraIdx); + + LOGP(DEBUG, "@@@ setsurface %p", cameraWrapper.windowRender); } jboolean Java_cn_com_basic_face_util_RtspFaceNative_createPlayer(JNIEnv* env, jclass clazz, jint cameraIdx, jstring uri) @@ -101,18 +122,19 @@ cameraWrapper.amcdConfig.ak_mime = "video/avc"; cameraWrapper.amcdConfig.ak_width = 640; cameraWrapper.amcdConfig.ak_height = 480; - cameraWrapper.amcdConfig.windowSurface = nullptr; // cameraWrapper.window - cameraWrapper.amcdConfig.releaseOutputBuffIdx = true; + cameraWrapper.amcdConfig.windowSurfaceDecode = nullptr; //cameraWrapper.windowDecode; + cameraWrapper.amcdConfig.windowSurfaceRender = nullptr; + cameraWrapper.amcdConfig.releaseOutputBuffIdx = true; + cameraWrapper.amcdConfig.releaseOutputBuffIdxInPay = false; cameraWrapper.amcdConfig.generateDecodedDataPerFrame = 1; - cameraWrapper.amcdConfig.renderFromOutputBuffIdx = false;//true - cameraWrapper.amcdConfig.renderFromOutputBuff = false; + #ifndef USE_ST_SDK cameraWrapper.amcdConfig.releaseOutputBuffIdxInPay = true; #endif } { - cameraWrapper.asvrConfig.windowSurface = cameraWrapper.window; + cameraWrapper.asvrConfig.windowSurface = cameraWrapper.windowRender; cameraWrapper.asvrConfig.outputOriginFrame = true; cameraWrapper.asvrConfig.outputRenderFrame = true; cameraWrapper.asvrConfig.scaleToWidth = 640; -- Gitblit v1.8.0