chenke
2017-08-09 4d22d8d9332535a9c2f65e0e501a3eefbbd0ae30
VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.cpp
@@ -267,33 +267,31 @@
    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)
@@ -357,22 +355,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)
{
@@ -447,14 +445,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));