From a0092014ee12abf06edb1788b189cc7c57336063 Mon Sep 17 00:00:00 2001 From: chenke <chenke@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 09 八月 2017 13:42:00 +0800 Subject: [PATCH] Reverse merged revision(s) 988-987 from VisitFace/RtspNativeCodec: JsonCpp和CapnpProtocol功能初步实现 ........ --- VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.cpp | 66 +++++++++++++++++---------------- 1 files changed, 34 insertions(+), 32 deletions(-) diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.cpp index 2e3a0fb..c5bb607 100644 --- a/VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.cpp +++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.cpp @@ -267,31 +267,33 @@ faceLabels.insert(std::make_pair(st_track_id, label)); } -void CameraWrapper::fireFaceCount(int faceCount) +static void invokeCallback(CameraWrapper& cameraWrapper, int faceCount) { + //jni thread may not able to invoke java callback // double check it's all ok - int getEnvStat = javaVM->GetEnv((void **)&(javaEnv), JNI_VERSION_1_6); + int getEnvStat = cameraWrapper.javaVM->GetEnv((void **)&(cameraWrapper.javaEnv), JNI_VERSION_1_6); if (getEnvStat == JNI_EDETACHED) { //LOG_WARN << "GetEnv: not attached" << std::endl; - if (javaVM->AttachCurrentThread(&(javaEnv), NULL) != 0) + if (cameraWrapper.javaVM->AttachCurrentThread(&(cameraWrapper.javaEnv), NULL) != 0) LOG_WARN << "Failed to attach" << LOG_ENDL; else getEnvStat = JNI_OK; } - else if (getEnvStat == JNI_OK){ + else if (getEnvStat == JNI_OK) + { } else if (getEnvStat == JNI_EVERSION) LOG_WARN << "GetEnv: version not supported" << LOG_ENDL; else if (getEnvStat == JNI_ERR) LOG_WARN << "GetEnv: JNI_ERR" << LOG_ENDL; - javaEnv->CallStaticVoidMethod(faceCallbackClazz, faceCallbackFunc, cameraIdx, faceCount); + cameraWrapper.javaEnv->CallStaticVoidMethod(cameraWrapper.faceCallbackClazz, cameraWrapper.faceCallbackFunc, cameraWrapper.cameraIdx, faceCount); - if (javaEnv->ExceptionCheck()) - javaEnv->ExceptionDescribe(); + if (cameraWrapper.javaEnv->ExceptionCheck()) + cameraWrapper.javaEnv->ExceptionDescribe(); - javaVM->DetachCurrentThread(); + cameraWrapper.javaVM->DetachCurrentThread(); } bool cw_pm_breaker_ptr_paint(const PipeMaterial* pm, void* args) @@ -355,22 +357,22 @@ return false; } -//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); -// invokeCallback(cameraWrapper, faceCount); -// -// return false; -//} +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); + invokeCallback(cameraWrapper, faceCount); + + return false; +} void test_paint(CameraWrapper& cameraWrapper) { @@ -445,14 +447,14 @@ cameraWrapper.lastAliveTime = time(nullptr); - //if (! cameraWrapper.faceCacheLocked) - //{ - // PipeMaterial pmAnalizer(pm); - // PipeLineElem* last = cameraWrapper.pipeLineAnalyzer->pipe(&pmAnalizer); - // bool ret = last->gain(pmAnalizer); - // if (ret) - // pmAnalizer.breake(PipeMaterial::PMT_PTR, MB_Frame::MBFT__FIRST, cw_pm_breaker_ptr_face, &(cameraWrapper)); - //} + if (! cameraWrapper.faceCacheLocked) + { + PipeMaterial pmAnalizer(pm); + PipeLineElem* last = cameraWrapper.pipeLineAnalyzer->pipe(&pmAnalizer); + bool ret = last->gain(pmAnalizer); + if (ret) + pmAnalizer.breake(PipeMaterial::PMT_PTR, MB_Frame::MBFT__FIRST, cw_pm_breaker_ptr_face, &(cameraWrapper)); + } pm.breake(PipeMaterial::PMT_PTR, MB_Frame::MBFT__FIRST, cw_pm_breaker_ptr_paint, &(cameraWrapper)); -- Gitblit v1.8.0