From 5cf652629fb40796cd2e0ab17c3617ed52365473 Mon Sep 17 00:00:00 2001
From: pans <pans@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期五, 18 八月 2017 10:32:05 +0800
Subject: [PATCH] capnp client fix bug
---
VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.cpp | 314 ++++++++++++++++++++++++++++++++-------------------
1 files changed, 195 insertions(+), 119 deletions(-)
diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.cpp
index c4a679e..afffcb8 100644
--- a/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.cpp
+++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.cpp
@@ -14,11 +14,13 @@
#include <face_daemon_proto.h>
#include <stdlib.h>
+#include <iostream>
#include "DebugNetwork.h"
#include "TeleWrapper.h"
#include "cpu_sched_test.h"
+#include "RemoteFuncClient.h"
//#include <mediastreamer2/include/mediastreamer2/msjava.h>
std::stringstream logss;
@@ -36,19 +38,27 @@
const size_t _faceImagesSize = MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT * 3;
uint8_t _faceImages[_faceImagesSize]; // android stack is small
+
+//// #todo optimize not copy data here, set data to jbyteArray directly
+////Java_cn_com_basic_face_util_RtspFaceNative_getFaceList
+//// Y channel of YUV420p, packed in protobuf
+static uint8_t buffer[MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT] = {0};
+static size_t buffSize = sizeof(buffer);
+
void remoteFireFaceCountListener(const RtspFaceDetect::FireFaceCountListenerParams::Reader& params, RtspFaceDetect::FireFaceCountListenerResults::Builder& results){
int count = params.getFaceCount();
int index = params.getCameraIndex();
- g_CameraWrappers[index].fireFaceCount(count);
+ LOG_INFO <<count<< "+" << index<< LOG_ENDL;
+ g_CameraWrappers[index - 1].fireFaceCount(count);
}
extern "C"
{
void Java_cn_com_basic_face_util_RtspFaceNative_init(JNIEnv *env, jclass clazz)
- {
- g_logger.set_level(INFO);
+{
+ g_logger.set_level(INFO);
- cpu_sched();
+ cpu_sched();
#ifdef USE_ST_SDK
PipeLine::register_global_elem_creator("PL_SensetimeFaceTrackMitiTrd", create_PL_SensetimeFaceTrackMultiTrd);
@@ -59,12 +69,16 @@
g_CameraWrappers[i].cameraIdx = i + 1;
g_CameraWrappers[i].pipeLineDecoderDetector = new PipeLine;
- g_CameraWrappers[i].pipeLineAnalyzer = new PipeLine;
g_CameraWrappers[i].pipeLineRender = new PipeLine;
//PipeLine& pipeLine(*(g_CameraWrappers[i].pipeLineDecoderDetector));
}
+
g_TeleWrapper.start();
+
+ //capnp server start
+ startRemoteServer();
+
}
void
@@ -80,6 +94,54 @@
g_CameraWrappers[i].rtspConfig.requestStreamingOverTcp = true;
}
env->ReleaseStringUTFChars(ipaddr, utf8);
+}
+
+// set the surface
+void Java_cn_com_basic_face_util_RtspFaceNative_setSurface(JNIEnv *env, jclass clazz, jint cameraIdx,
+ jobject surfaceRender)
+{
+ LOG_DEBUG << "@@@ Java_cn_com_basic_face_util_RtspFaceNative_setSurface" << LOG_ENDL;
+ assert(cameraIdx > 0 && cameraIdx <= CAMERA_COUNT);
+ cameraIdx -= 1;
+
+ CameraWrapper &cameraWrapper(g_CameraWrappers[cameraIdx]);
+
+ // obtain a native windowRender from a Java surface
+ if (cameraWrapper.windowDecode != nullptr)
+ {
+ ANativeWindow_release((ANativeWindow *) (cameraWrapper.windowDecode));
+ cameraWrapper.windowDecode = NULL;
+ }
+ cameraWrapper.windowDecode = ANativeWindow_fromSurface(env, surfaceRender);
+ //cameraWrapper.windowDecode = getSurfaceHolderGetSurface(env, surfaceRender);
+ //cameraWrapper.windowDecode = ANativeWindow_fromSurface(env, (jobject)getSurfaceHolderGetSurface(env, surfaceRender));
+
+ if (cameraWrapper.windowRender != nullptr)
+ {
+ ANativeWindow_release((ANativeWindow *) (cameraWrapper.windowRender));
+ cameraWrapper.windowRender = NULL;
+ }
+ cameraWrapper.windowRender = ANativeWindow_fromSurface(env, surfaceRender);
+ cameraWrapper.asvrConfig.windowSurface = cameraWrapper.windowRender; // support reset
+ //cameraWrapper.windowRender = ANativeWindow_fromSurface(env, (jobject)getSurfaceHolderGetSurface(env, surfaceRender));
+
+ {
+ ANativeWindow* window = (ANativeWindow*)(cameraWrapper.windowRender);
+ ANativeWindow_Buffer buffer;
+ if(cameraWrapper.windowRender != nullptr && ANativeWindow_lock(window, &buffer, NULL) == 0)
+ {
+ cameraWrapper.plScaleCfg.toHeight=buffer.height;
+ cameraWrapper.plScaleCfg.toWidth=buffer.stride;
+ ANativeWindow_unlockAndPost(window);
+ }
+ else
+ {
+ cameraWrapper.plScaleCfg.toHeight=480;
+ cameraWrapper.plScaleCfg.toWidth=640;
+ }
+ }
+
+ LOGP(DEBUG, "@@@ setsurface %p,%p", cameraWrapper.windowDecode, cameraWrapper.windowRender);
}
jboolean
@@ -157,29 +219,13 @@
cameraWrapper.asvrConfig.outputOriginFrame = true;
cameraWrapper.asvrConfig.outputRenderFrame = true;
cameraWrapper.asvrConfig.scaleToWidth = 0;
- cameraWrapper.asvrConfig.scaleToHeight = 0;
- cameraWrapper.asvrConfig.directlyDisplay = true;
+ cameraWrapper.asvrConfig.scaleToHeight = 0;
+ cameraWrapper.asvrConfig.directlyDisplay = true;
}
- {
- cameraWrapper.sftConfig.point_size = 21;
- 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_point = false;
- cameraWrapper.sftConfig.explode_feature_rect_x = 30;
- cameraWrapper.sftConfig.explode_feature_rect_y = 40;
- cameraWrapper.sftConfig.clamp_feature_rect = true;
- cameraWrapper.sftConfig.doTrackPerFrame = 1;
- //cameraWrapper.sftConfig.license_str = g_stface_license_str;
- cameraWrapper.sftConfig.visionConeAngle = 30.0f;
- cameraWrapper.sftConfig.score_min = 0.4f;
- }
+ cameraWrapper.fontPath = "/data/msyh.ttc";
- cameraWrapper.fontPath = "/data/msyh.ttc";
-
- bool ret = cameraWrapper.initPl();
+ bool ret = cameraWrapper.initPl();
if (ret)
return (cameraWrapper.start() ? JNI_TRUE : JNI_FALSE);
else
@@ -321,19 +367,47 @@
LOG_DEBUG << "@@@ Java_cn_com_basic_face_util_RtspFaceNative_getFaceList" << LOG_ENDL;
assert(cameraIdx > 0 && cameraIdx <= CAMERA_COUNT);
cameraIdx -= 1;
+ if(cameraIdx <0){
+ cameraIdx += 1;
+ }
CameraWrapper &cameraWrapper(g_CameraWrappers[cameraIdx]);
- // #todo optimize not copy data here, set data to jbyteArray directly
- // Y channel of YUV420p, packed in protobuf
- uint8_t buffer[MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT] = {0};
- size_t buffSize = sizeof(buffer);
+ // Change to Global variable
+ // uint8_t buffer[MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT] = {0};
+ // size_t buffSize = sizeof(buffer);
bool ret = false;
-#ifdef USE_ST_SDK
+
uint8_t *pBufPB = buffer + sizeof(EVPHeader) + sizeof(FDP_FaceDetectPB);
buffSize = sizeof(buffer) - sizeof(EVPHeader) - sizeof(FDP_FaceDetectPB);
- ret = cameraWrapper.faceCache.getFaceListPb(pBufPB, buffSize);
-#endif
+
+// add -----8.11-----calling getfacelist
+ try
+ {
+ LOG_ERROR <<"client : i want getFaceList!!!!!!!!!!!!"<< LOG_ENDL;
+ RtspFaceViewClient* client = getRtspFaceViewClient();
+ RtspFaceView::Client rClient = client->getEzRpcClient()->getMain<RtspFaceView>();
+ //auto& waitScope =client->getEzRpcClient()->getWaitScope();
+ auto& waitScope =client->getWaitScope();
+ auto request = rClient.getFaceListRequest();
+ request.setCameraIndex(cameraIdx+1);
+ auto sendAct = request.send();
+ auto result = sendAct.wait(waitScope);
+ ret = result.getFaceList().size() > 0;
+ LOG_DEBUG << "@@@ getFaceList get data!!!!!!!!!!!!!" << LOG_ENDL;
+ memcpy(pBufPB,result.getFaceList().begin(),result.getFaceList().size());
+ }
+ catch (const kj::Exception& e){
+ LOG_ERROR <<e.getDescription().cStr()<< LOG_ENDL;
+ ret = false;
+ }
+ catch (...)
+ {
+ ret = false;
+ }
+ //-------end-------
+ LOG_ERROR <<"client : i want getFaceList end!!!!!!!!!!!!!"<< LOG_ENDL;
+ //ret = cameraWrapper.faceCache.getFaceListPb(pBufPB, buffSize);
if (!ret)
{
@@ -378,71 +452,6 @@
return buffSize;
}
-jobject
-_Java_cn_com_basic_face_util_RtspFaceNative_getFaceImages(JNIEnv *env, jclass clazz, jint cameraIdx,
- jobject faceImages)
-{
- LOG_DEBUG << "@@@ _Java_cn_com_basic_face_util_RtspFaceNative_getFaceImages" << LOG_ENDL;
- assert(cameraIdx > 0 && cameraIdx <= CAMERA_COUNT);
- cameraIdx -= 1;
- CameraWrapper &cameraWrapper(g_CameraWrappers[cameraIdx]);
-
- std::vector<NativeImgIdx> imgIdxes;
-
- memset(_faceImages, 0, _faceImagesSize);
-
- bool ret = false;
-
-#ifdef USE_ST_SDK
- size_t faceImagesSize =_faceImagesSize;
- ret = cameraWrapper.faceCache.getFaceListImage(imgIdxes, _faceImages,faceImagesSize);
-#endif
-
- if (imgIdxes.size() == 0)
- {
- LOG_INFO << "No face image captured" << LOG_ENDL;
- return nullptr;
- }
-
- jclass jcRefByteArray = env->FindClass("cn/com/basic/face/util/RefByteArray");
- jfieldID jfRefByteArray_arr = env->GetFieldID(jcRefByteArray, "arr", "[B");
-
- jbyteArray jbaFaceImages = env->NewByteArray(_faceImagesSize);
- LOG_DEBUG << "_faceImagesSize=" << _faceImagesSize << LOG_ENDL;
- env->SetByteArrayRegion(jbaFaceImages, 0, _faceImagesSize, (const jbyte *) _faceImages);
- env->SetObjectField(faceImages, jfRefByteArray_arr, jbaFaceImages);
-
- jclass jcArrayList = env->FindClass("java/util/ArrayList");
- jmethodID jmArrayList_ctor = env->GetMethodID(jcArrayList, "<init>", "()V");
- jmethodID jmArrayList_add = env->GetMethodID(jcArrayList, "add", "(Ljava/lang/Object;)Z");
-
- jclass jcNativeImgIdx = env->FindClass("cn/com/basic/face/util/NativeImgIdx");
- jmethodID jmNativeImgIdx_ctor = env->GetMethodID(jcNativeImgIdx, "<init>", "()V");
- jfieldID jfNativeImgIdx_offset = env->GetFieldID(jcNativeImgIdx, "offset", "I");
- jfieldID jfNativeImgIdx_size = env->GetFieldID(jcNativeImgIdx, "size", "I");
- jfieldID jfNativeImgIdx_type = env->GetFieldID(jcNativeImgIdx, "type", "I");
- jfieldID jfNativeImgIdx_width = env->GetFieldID(jcNativeImgIdx, "width", "I");
- jfieldID jfNativeImgIdx_height = env->GetFieldID(jcNativeImgIdx, "height", "I");
-
- jobject jobjArrayList_ImgIdxes = env->NewObject(jcArrayList, jmArrayList_ctor);
-
- for (size_t i = 0; i < imgIdxes.size(); i++)
- {
- jobject jobjNativeImgIdx = env->NewObject(jcNativeImgIdx, jmNativeImgIdx_ctor);
- env->SetIntField(jobjNativeImgIdx, jfNativeImgIdx_offset, imgIdxes[i].offset);
- env->SetIntField(jobjNativeImgIdx, jfNativeImgIdx_size, imgIdxes[i].size);
- env->SetIntField(jobjNativeImgIdx, jfNativeImgIdx_type, imgIdxes[i].type);
- env->SetIntField(jobjNativeImgIdx, jfNativeImgIdx_width, imgIdxes[i].width);
- env->SetIntField(jobjNativeImgIdx, jfNativeImgIdx_height, imgIdxes[i].height);
-
- env->CallBooleanMethod(jobjArrayList_ImgIdxes, jmArrayList_add, jobjNativeImgIdx);
-
- LOG_DEBUG << "imgIdx " << i << ":" << std::string(imgIdxes[i]) << LOG_ENDL;
- }
-
- return jobjArrayList_ImgIdxes;
-}
-
jobject Java_cn_com_basic_face_util_RtspFaceNative_getFaceImages(JNIEnv *env, jclass clazz,
jint cameraIdx)
{
@@ -453,13 +462,43 @@
std::vector<NativeImgIdx> imgIdxes;
size_t _faceImagesSize = MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT * 3;
- uint8_t *_faceImages = new uint8_t[_faceImagesSize]; // android stack is small
memset(_faceImages, 0, _faceImagesSize);
bool ret = false;
#ifdef USE_ST_SDK
- ret = cameraWrapper.faceCache.getFaceListImage(imgIdxes, _faceImages, _faceImagesSize);
+
+ //#ps add --------8.11------- calling getfaceimages
+ LOG_ERROR <<"client : i want getFaceImages!!!!!!!!!!!!!!!!"<< LOG_ENDL;
+ try
+ {
+ RtspFaceViewClient* client = getRtspFaceViewClient();
+ RtspFaceView::Client rClient = client->getEzRpcClient()->getMain<RtspFaceView>();
+ auto& waitScope =client->getWaitScope();
+
+ auto request = rClient.getFaceImagesRequest();
+ request.setCameraIndex(cameraIdx+1);
+ auto sendAct = request.send();
+ auto result = sendAct.wait(waitScope);
+ if(result.getImgIndexData().size() >0 && result.getImgData().size()>0)
+ {
+ ret =true;
+ LOG_DEBUG << "@@@ getFaceImages get data!!!!!!!" << LOG_ENDL;
+ memcpy(_faceImages,result.getImgData().begin(),result.getImgData().size());
+
+ imgIdxes.resize(result.getImgIndexData().size()/sizeof(NativeImgIdx));
+ memcpy(imgIdxes.data() ,result.getImgIndexData().begin() ,result.getImgIndexData().size());
+ }
+ }
+ catch (const kj::Exception& e)
+ {
+ std::cout << e.getDescription().cStr() << std::endl;
+ ret = false;
+ LOG_ERROR << "Java_cn_com_basic_face_util_RtspFaceNative_getFaceImages try fail" << LOG_ENDL;
+ }
+ LOG_ERROR <<"client : i want getFaceImages end!!!!!!!!!!!!!!!!!"<< LOG_ENDL;
+ //-------end-------
+ //ret = cameraWrapper.faceCache.getFaceListImage(imgIdxes, _faceImages, _faceImagesSize);
#endif
if (imgIdxes.size() == 0)
@@ -598,39 +637,40 @@
bool Java_cn_com_basic_face_util_RtspFaceNative_teleCall(JNIEnv *env, jclass clazz, jstring phone)
{
- std::string _phone;
- {
- const char *utfFunc = env->GetStringUTFChars(phone, NULL);
- _phone = utfFunc;
- env->ReleaseStringUTFChars(phone, utfFunc);
- }
+ std::string _phone;
+ {
+ const char *utfFunc = env->GetStringUTFChars(phone, NULL);
+ _phone = utfFunc;
+ env->ReleaseStringUTFChars(phone, utfFunc);
+ }
- const char *phoneNum = _phone.c_str();
- TeleTask task;
- task.command= TeleTask::CALL;
- task.param = phoneNum;
- LOG_INFO << "Java_cn_com_basic_face_util_RtspFaceNative_telCall::jni" << LOG_ENDL;
- //
- g_TeleWrapper.pushTask(task);
+ const char *phoneNum = _phone.c_str();
+ TeleTask task;
+ task.command= TeleTask::CALL;
+ task.param = phoneNum;
+ LOG_INFO << "Java_cn_com_basic_face_util_RtspFaceNative_telCall::jni" << LOG_ENDL;
+ //
+ g_TeleWrapper.pushTask(task);
}
void Java_cn_com_basic_face_util_RtspFaceNative_teleHang(JNIEnv *env, jclass clazz)
{
- TeleTask task;
- task.command =TeleTask::HANGUP;
- //
- g_TeleWrapper.pushTask(task);
+ TeleTask task;
+ task.command =TeleTask::HANGUP;
+ //
+ g_TeleWrapper.pushTask(task);
}
void Java_cn_com_basic_face_util_RtspFaceNative_teleShutdown(JNIEnv *env, jclass clazz)
{
- LOG_DEBUG << "@@@ Java_cn_com_basic_face_util_RtspFaceNative_telShutdown" << LOG_ENDL;
- g_TeleWrapper.stop();
+ LOG_DEBUG << "@@@ Java_cn_com_basic_face_util_RtspFaceNative_telShutdown" << LOG_ENDL;
+ g_TeleWrapper.stop();
}
void Java_cn_com_basic_face_util_RtspFaceNative_setFaceLabel(JNIEnv *env, jclass clazz, jint cameraIdx, jint stTrackId, jstring label)
{
LOG_DEBUG << "@@@ Java_cn_com_basic_face_util_RtspFaceNative_setFaceLabel" << LOG_ENDL;
+
assert(cameraIdx > 0 && cameraIdx <= CAMERA_COUNT);
cameraIdx -= 1;
CameraWrapper &cameraWrapper(g_CameraWrappers[cameraIdx]);
@@ -643,7 +683,43 @@
wchar_t wt = (wchar_t)jc;
wstr.push_back(wt);
}
+
env->ReleaseStringChars(label,jchars);
- cameraWrapper.setFaceLabel(stTrackId, wstr);
+
+ // ps add ------8.11--------- calling setfacelable
+ LOG_ERROR <<"client : i want setFacelable!!!!!!!"<< LOG_ENDL;
+ try
+ {
+// auto& waitScope = getRtspFaceViewClient()->getWaitScope();
+// RtspFaceView::Client& rClient = getRtspFaceViewClient()->getClient();
+
+ RtspFaceViewClient* client = getRtspFaceViewClient();
+ RtspFaceView::Client rClient = client->getEzRpcClient()->getMain<RtspFaceView>();
+ auto& waitScope =client->getWaitScope();
+
+ auto request = rClient.setFaceLabelRequest();
+ request.setCameraIndex(cameraIdx);
+ auto labelData = request.initLabel(wstr.size()*4);
+
+ char temp[100];char temp1[100];
+ memcpy(labelData.begin(), wstr.c_str(), wstr.size()*4);
+
+ memcpy(temp, labelData.begin(), wstr.size()*4);
+
+ memcpy(temp1, request.getLabel().begin(), wstr.size()*4);
+ request.setTrackId(stTrackId);
+
+ const std::wstring &string = std::wstring((wchar_t*)labelData.begin());
+ auto sendAct = request.send();
+ sendAct.wait(waitScope);
+ }
+ catch (const kj::Exception& e)
+ {
+ std::cout << e.getDescription().cStr() << std::endl;
+ return;
+ }
+ LOG_ERROR <<"client : i want setFacelable end!!!!!!!!!!!!!!"<< LOG_ENDL;
+
+ //-------end-------
}
} // extern C
--
Gitblit v1.8.0