| | |
| | | |
| | | #include <pthread.h> |
| | | |
| | | #include <ev_proto.h> |
| | | #include <face_daemon_proto.h> |
| | | |
| | | #include <stdlib.h> |
| | | |
| | | #include "DebugNetwork.h" |
| | | |
| | | std::stringstream logss; |
| | | //std::fstream logss("/storage/sdcard/log.log", std::fstream::out); |
| | | //std::fstream logss("/storage/emulated/0/log.log", std::fstream::out); |
| | |
| | | |
| | | void Java_cn_com_basic_face_util_RtspFaceNative_init(JNIEnv *env, jclass clazz) |
| | | { |
| | | g_logger.set_level(VERBOSE); |
| | | g_logger.set_level(INFO); |
| | | |
| | | #ifdef USE_ST_SDK |
| | | PipeLine::register_global_elem_creator("PL_SensetimeFaceTrack", create_PL_SensetimeFaceTrack); |
| | |
| | | env->ReleaseStringUTFChars(ipaddr, utf8); |
| | | } |
| | | |
| | | static 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;"); |
| | | jmethodID jmOutputSurface_readPixels = env->GetMethodID(jcOutputSurface, "readPixels", "()Ljava/nio/Buffer;"); |
| | | |
| | | jobject jobjOutputSurface = env->NewObject(jcOutputSurface , jmOutputSurface_ctor, 1920, 1088); |
| | | jobject jobjSurface = env->CallObjectMethod(jobjOutputSurface, jmOutputSurface_getSurface); |
| | | cameraWrapper.windowDecode = ANativeWindow_fromSurface(env, jobjSurface); |
| | | } |
| | | |
| | | void readPixels(uint8_t* buf, size_t& maxSize) |
| | | { |
| | | |
| | | } |
| | | |
| | | // set the surface |
| | | void Java_cn_com_basic_face_util_RtspFaceNative_setSurface(JNIEnv *env, jclass clazz, jint cameraIdx, jobject surface) |
| | | { |
| | |
| | | |
| | | 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) |
| | |
| | | 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 = cameraWrapper.windowDecode; //cameraWrapper.windowDecode; |
| | | cameraWrapper.amcdConfig.windowSurfaceRender = nullptr;//cameraWrapper.windowRender; |
| | | 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; |
| | | cameraWrapper.asvrConfig.scaleToHeight = 480; |
| | | } |
| | | |
| | | { |
| | |
| | | cameraWrapper.sftConfig.detect_face_cnt_limit = MAX_FACE; |
| | | cameraWrapper.sftConfig.draw_face_rect = false; |
| | | cameraWrapper.sftConfig.draw_face_feature_point = false; |
| | | cameraWrapper.sftConfig.generate_face_feature = true; |
| | | cameraWrapper.sftConfig.generate_face_feature = true; |
| | | cameraWrapper.sftConfig.explode_feature_rect_x = 30; |
| | | cameraWrapper.sftConfig.explode_feature_rect_y = 40; |
| | | cameraWrapper.sftConfig.doTrackPerFrame = 50; |
| | | } |
| | | |
| | |
| | | cameraWrapper.releaseFace(); |
| | | } |
| | | |
| | | jint Java_cn_com_basic_face_util_RtspFaceNative_getFaceList(JNIEnv* env, jclass clazz, jint cameraIdx, jobject faceListPb) |
| | | jint Java_cn_com_basic_face_util_RtspFaceNative_getFaceList(JNIEnv* env, jclass clazz, jint cameraIdx, jint dbId, jobject faceListPb) |
| | | { |
| | | LOG_DEBUG << "@@@ Java_cn_com_basic_face_util_RtspFaceNative_getFaceList" << LOG_ENDL; |
| | | assert(cameraIdx > 0 && cameraIdx <= CAMERA_COUNT); |
| | |
| | | // Y channel of YUV420p, packed in protobuf |
| | | uint8_t buffer[MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT] = {0}; |
| | | size_t buffSize = sizeof(buffer); |
| | | //const size_t arrSize = env->GetArrayLength(faceListPb); |
| | | bool ret = false; |
| | | |
| | | bool ret = false; |
| | | #ifdef USE_ST_SDK |
| | | ret = cameraWrapper.faceCache.getFaceListPb(buffer, buffSize); |
| | | uint8_t * pBufPB = buffer + sizeof(EVPHeader) + sizeof(FDP_FaceDetectPB); |
| | | buffSize = sizeof(buffer) - sizeof(EVPHeader) - sizeof(FDP_FaceDetectPB); |
| | | ret = cameraWrapper.faceCache.getFaceListPb(pBufPB, buffSize); |
| | | #endif |
| | | |
| | | if (!ret) |
| | |
| | | |
| | | LOG_INFO << "Face captured " << LOG_ENDL; |
| | | |
| | | EVPHeader* evpHeader = new (buffer) EVPHeader; |
| | | evpHeader->proto = EVPProto::EVPP_PROTOBUF; |
| | | evpHeader->cmd = FaceDaemonCommand::FDC_SENSETIMEFACEDETECT_PB; |
| | | evpHeader->size = sizeof(EVPHeader) + sizeof(FDP_FaceDetectPB) + buffSize; |
| | | buffSize = evpHeader->size; |
| | | |
| | | FDP_FaceDetectPB* fdpFaceDetectPB = new (buffer + sizeof(EVPHeader)) FDP_FaceDetectPB(dbId); |
| | | |
| | | evpHeader->hton(); |
| | | fdpFaceDetectPB->hton(); |
| | | |
| | | //{ |
| | | // static size_t f = 0; |
| | | // char fname[50]; |
| | | // sprintf(fname, "/sdcard/facelist-%d-%d-%u.pb", dbId, cameraIdx, ++f); |
| | | // FILE *pFile = fopen(fname, "wb"); |
| | | // fwrite(buffer, 1, buffSize, pFile); |
| | | // fclose(pFile); |
| | | // if (f > 10)exit(0); |
| | | //} |
| | | |
| | | jclass jcRefByteArray = env->FindClass("cn/com/basic/face/util/RefByteArray"); |
| | | jfieldID jfRefByteArray_arr = env->GetFieldID(jcRefByteArray, "arr","[B"); |
| | | |
| | | jbyteArray jbaFaceListPb = env->NewByteArray(buffSize); |
| | | env->SetByteArrayRegion(jbaFaceListPb, 0, buffSize, (const jbyte*)buffer); |
| | | env->SetObjectField(faceListPb, jfRefByteArray_arr, jbaFaceListPb); |
| | | |
| | | #ifdef ENABLE_DEBUG_SENDFACEDETECT |
| | | dbgSendFaceDetect(buffer, buffSize); |
| | | #endif |
| | | |
| | | return buffSize; |
| | | } |
| | | |
| | |
| | | return jobjArrayList_Imgs; |
| | | } |
| | | |
| | | void Java_cn_com_basic_face_util_RtspFaceNative_dbgFaceAdd(JNIEnv* env, jclass clazz, jobject faceImage) |
| | | { |
| | | jclass jcNativeImg = env->FindClass("cn/com/basic/face/util/NativeImg"); |
| | | jmethodID jmNativeImg_ctor = env->GetMethodID(jcNativeImg, "<init>", "()V"); |
| | | jfieldID jfNativeImg_size = env->GetFieldID(jcNativeImg, "size","I"); |
| | | jfieldID jfNativeImg_type = env->GetFieldID(jcNativeImg, "type","I"); |
| | | jfieldID jfNativeImg_width = env->GetFieldID(jcNativeImg, "width","I"); |
| | | jfieldID jfNativeImg_height = env->GetFieldID(jcNativeImg, "height","I"); |
| | | jfieldID jfNativeImg_image = env->GetFieldID(jcNativeImg, "image","[B"); |
| | | |
| | | NativeImgIdx imgidx; |
| | | imgidx.size = env->GetIntField(faceImage, jfNativeImg_size); |
| | | imgidx.type = env->GetIntField(faceImage, jfNativeImg_type); |
| | | imgidx.width = env->GetIntField(faceImage, jfNativeImg_width); |
| | | imgidx.height = env->GetIntField(faceImage, jfNativeImg_height); |
| | | |
| | | uint8_t buffer[MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT * 3]; |
| | | size_t buffSize = 0; |
| | | |
| | | jbyteArray jbaFaceImage = (jbyteArray)env->GetObjectField(faceImage, jfNativeImg_image); |
| | | env->GetByteArrayRegion(jbaFaceImage, 0, imgidx.size, (jbyte*)buffer); |
| | | |
| | | #ifdef ENABLE_DEBUG_SENDFACEADD |
| | | dbgSendFaceAdd(imgidx, buffer); |
| | | #endif |
| | | } |
| | | |
| | | jstring Java_cn_com_basic_face_util_RtspFaceNative_dbgGetLog(JNIEnv *env, jclass clazz) |
| | | { |
| | | return env->NewStringUTF(g_dbgLog.c_str()); |
| | | } |
| | | |
| | | } |