| | |
| | | |
| | | #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); |
| | |
| | | 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 |
| | | } |
| | | |
| | | } |