houxiao
2017-04-28 1b4d2718a4864190a47d8b7863f36a9ae0b8055c
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;