| | |
| | | faceLabels.insert(std::make_pair(st_track_id, label));
|
| | | }
|
| | |
|
| | | static void invokeCallback(CameraWrapper& cameraWrapper, int faceCount)
|
| | | void CameraWrapper::fireFaceCount(int faceCount)
|
| | | {
|
| | | //jni thread may not able to invoke java callback
|
| | | // double check it's all ok
|
| | | int getEnvStat = cameraWrapper.javaVM->GetEnv((void **)&(cameraWrapper.javaEnv), JNI_VERSION_1_6);
|
| | | int getEnvStat = javaVM->GetEnv((void **)&(javaEnv), JNI_VERSION_1_6);
|
| | | if (getEnvStat == JNI_EDETACHED)
|
| | | {
|
| | | //LOG_WARN << "GetEnv: not attached" << std::endl;
|
| | | if (cameraWrapper.javaVM->AttachCurrentThread(&(cameraWrapper.javaEnv), NULL) != 0)
|
| | | if (javaVM->AttachCurrentThread(&(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;
|
| | |
|
| | | cameraWrapper.javaEnv->CallStaticVoidMethod(cameraWrapper.faceCallbackClazz, cameraWrapper.faceCallbackFunc, cameraWrapper.cameraIdx, faceCount);
|
| | | javaEnv->CallStaticVoidMethod(faceCallbackClazz, faceCallbackFunc, cameraIdx, faceCount);
|
| | |
|
| | | if (cameraWrapper.javaEnv->ExceptionCheck())
|
| | | cameraWrapper.javaEnv->ExceptionDescribe();
|
| | | if (javaEnv->ExceptionCheck())
|
| | | javaEnv->ExceptionDescribe();
|
| | |
|
| | | cameraWrapper.javaVM->DetachCurrentThread();
|
| | | javaVM->DetachCurrentThread();
|
| | | }
|
| | |
|
| | | bool cw_pm_breaker_ptr_paint(const PipeMaterial* pm, void* args)
|
| | |
| | | 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)
|
| | | {
|
| | |
| | |
|
| | | 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));
|
| | |
|