From 0607eba0ba964b3178507eabcd234fe7d8a0d860 Mon Sep 17 00:00:00 2001 From: pans <pans@454eff88-639b-444f-9e54-f578c98de674> Date: 星期五, 18 八月 2017 11:06:16 +0800 Subject: [PATCH] capnp server fix bug --- VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFunc.h | 4 +- VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperServer.cpp | 42 ++++++++++++++++++++ VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIServer.cpp | 10 +++- VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.cpp | 11 +++-- 4 files changed, 57 insertions(+), 10 deletions(-) diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperServer.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperServer.cpp index e084d8d..0cf6a61 100644 --- a/VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperServer.cpp +++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperServer.cpp @@ -10,6 +10,8 @@ #include <PL_ColorConv.h> #include <PL_AndroidMediaCodecEncoder.h> #include <PL_RTSPServer2.h> +#include <iostream> + CameraWrapper::~CameraWrapper() { stop(); @@ -275,7 +277,6 @@ { if (faceLabels.size() > 32) faceLabels.clear(); - faceLabels.insert(std::make_pair(st_track_id, label)); } @@ -371,7 +372,46 @@ bool cw_pm_breaker_ptr_face(const PipeMaterial* pm, void* args) { + CameraWrapper& cameraWrapper = *(CameraWrapper*)args; + if (cameraWrapper.faceCacheLocked) + return false; + int faceCount = cameraWrapper.faceCache.getFaceCount(*pm); + if (faceCount <= 0 || cameraWrapper.faceCallbackFunc == 0) + return false; + cameraWrapper.faceCache.cachePm(*pm); + //remote call start, 涓轰簡淇濊瘉閫氱敤鎬э紝鏈皢浠ヤ笅姝ラ灏佸叆RtspFaceDetectClient + //#todo 浼樺寲灏佽 + try + { + LOG_INFO <<"try start"<< LOG_ENDL; +// RtspFaceDetect::Client* rClient = getRtspFaceDetectClient()->getClient(); +// auto& waitScope = getRtspFaceDetectClient()->getWaitScope(); + + RtspFaceDetectClient* client = getRtspFaceDetectClient(); + RtspFaceDetect::Client rClient = client->getEzRpcClient()->getMain<RtspFaceDetect>(); + auto& waitScope = client->getWaitScope(); + + auto request = rClient.fireFaceCountListenerRequest(); + request.setCameraIndex(cameraWrapper.cameraIdx); + request.setFaceCount(faceCount); + LOG_INFO <<"!!!!!"<<cameraWrapper.cameraIdx << "+" << faceCount << LOG_ENDL; + LOG_INFO <<"call client : i have face!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<< LOG_ENDL; + auto sendAct = request.send(); + sendAct.ignoreResult().wait(waitScope); + } + catch (const kj::Exception& e) + { + LOG_INFO <<"catch!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<< LOG_ENDL; + LOG_ERROR << "catch!!!" <<e.getDescription().cStr() << LOG_ENDL; + std::cout << e.getDescription().cStr() << std::endl; + return false; + } + catch (std::exception e){ + LOG_ERROR << "catch!!!" <<e.what() << LOG_ENDL; + } + //remote call end + return true; } void test_paint(CameraWrapper& cameraWrapper) diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFunc.h b/VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFunc.h index f5b2bd2..e32d26a 100644 --- a/VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFunc.h +++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFunc.h @@ -57,7 +57,8 @@ static void *rServer_thd(void *arg) { - try { + try + { RemoteServer &rs = *(RemoteServer *) arg; capnp::EzRpcServer trpcServer(kj::heap<T>(), rs.host, rs.port); auto &serverLoop = trpcServer.getWaitScope(); @@ -66,7 +67,6 @@ catch (kj::Exception e){ LOG_ERROR<<e.getLine()<<LOG_ENDL; } - } diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.cpp index 2b47182..1636105 100644 --- a/VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.cpp +++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.cpp @@ -79,15 +79,16 @@ ::kj::Promise<void> RtspFaceViewImpl::getFaceList(GetFaceListContext context) { + LOG_ERROR <<"getFaceList :start !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<< LOG_ENDL; auto results = context.getResults(); remoteGetFaceList(context.getParams(), results); - LOG_ERROR <<"getFaceList : !!!!!!!!!!!!!!!"<< LOG_ENDL; + return kj::READY_NOW; } ::kj::Promise<void> RtspFaceViewImpl::getFaceImages(GetFaceImagesContext context) { - auto results = context.getResults(); + auto results = context.getResults(); remoteGetFaceListImage(context.getParams(), results); LOG_ERROR <<"getFaceImages : !!!!!!!!!!!!!!"<< LOG_ENDL; return kj::READY_NOW; @@ -95,8 +96,10 @@ ::kj::Promise<void> RtspFaceViewImpl::setFaceLabel(SetFaceLabelContext context) { - auto results = context.getResults(); - remoteSetFaceLabel(context.getParams(), results); LOG_ERROR <<"setFaceLabel : !!!!!!!!!!!!"<< LOG_ENDL; + auto results = context.getResults(); + + remoteSetFaceLabel(context.getParams(), results); + return kj::READY_NOW; } diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIServer.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIServer.cpp index 4e272dc..98118da 100644 --- a/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIServer.cpp +++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIServer.cpp @@ -39,7 +39,7 @@ const size_t _faceImagesSize = MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT * 3; uint8_t _faceImages[_faceImagesSize]; // android stack is small -const size_t _faceListBufferSize = sizeof(MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT*3); +const size_t _faceListBufferSize = MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT*3; uint8_t faceListBuffer[_faceListBufferSize] = {0}; void remoteGetFaceListImage(const RtspFaceView::GetFaceImagesParams::Reader& params, RtspFaceView::GetFaceImagesResults::Builder& results){ @@ -50,7 +50,7 @@ memset(_faceImages, 0, _faceImagesSize); bool ret = cameraWrapper.faceCache.getFaceListImage(imgIdxes, _faceImages, faceImagesSize); if (imgIdxes.size() == 0){ - LOG_INFO << "No face image captured" << LOG_ENDL; + LOG_INFO << "No face image captured!!!!!" << LOG_ENDL; return; } int imgIdxesSize = imgIdxes.size() * sizeof(NativeImgIdx); @@ -58,10 +58,11 @@ memcpy(imgIndexData.begin(), imgIdxes.data(), imgIdxesSize); auto imgData = results.initImgData(_faceImagesSize); memcpy(imgData.begin(), _faceImages, _faceImagesSize); - LOG_ERROR <<"c++ server : remoteGetFaceListImage!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<< LOG_ENDL; + LOG_ERROR <<"c++ server : remoteGetFaceListImage!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<< LOG_ENDL; } void remoteGetFaceList(const RtspFaceView::GetFaceListParams::Reader& params, RtspFaceView::GetFaceListResults::Builder& results){ + const int cameraIdx = params.getCameraIndex() - 1; CameraWrapper& cameraWrapper(g_CameraWrappers[cameraIdx]); uint8_t *pBufPB = faceListBuffer + sizeof(EVPHeader) + sizeof(FDP_FaceDetectPB); @@ -69,11 +70,14 @@ cameraWrapper.faceCache.getFaceListPb(pBufPB, faceListBufferSize); auto buffer = results.initFaceList(faceListBufferSize); memcpy(buffer.begin(), pBufPB, faceListBufferSize); + results.setFaceList(buffer); + } void remoteSetFaceLabel(const RtspFaceView::SetFaceLabelParams::Reader& params, RtspFaceView::SetFaceLabelResults::Builder& results){ const int cameraIdx = params.getCameraIndex() - 1; CameraWrapper& cameraWrapper(g_CameraWrappers[cameraIdx]); + LOG_DEBUG<<"!!!!lable"<< params.toString().flatten().cStr() <<LOG_ENDL; cameraWrapper.setFaceLabel(params.getTrackId(),std::wstring((wchar_t*)params.getLabel().begin())); } -- Gitblit v1.8.0