pans
2017-08-15 e26a5550539fa0cad91313bf9670df605199a324
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,6 +38,7 @@
const size_t _faceImagesSize = MAX_FACE * MAX_FACE_WIDTH * MAX_FACE_HEIGHT * 3;
uint8_t _faceImages[_faceImagesSize]; // android stack is small
void remoteFireFaceCountListener(const RtspFaceDetect::FireFaceCountListenerParams::Reader& params, RtspFaceDetect::FireFaceCountListenerResults::Builder& results){
    int count = params.getFaceCount();
    int index = params.getCameraIndex();
@@ -50,6 +53,10 @@
cpu_sched();
#ifdef USE_ST_SDK
    PipeLine::register_global_elem_creator("PL_SensetimeFaceTrackMitiTrd", create_PL_SensetimeFaceTrackMultiTrd);
#endif
for (size_t i = 0; i < CAMERA_COUNT; i++)
{
   g_CameraWrappers[i].cameraIdx = i + 1;
@@ -60,6 +67,12 @@
}
g_TeleWrapper.start();
    //pansen test Client start
    LOG_ERROR << "pansen test Client start" << std::endl;
    startRemoteServer();
    LOG_ERROR << "pansen test Client end" << std::endl;
    //pansen test Client end
}
void
@@ -356,11 +369,34 @@
    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
// ps add -----8.11-----
    try
    {
        LOG_ERROR <<"client : i want getFaceList!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<< LOG_ENDL;
        RtspFaceViewClient* client = getRtspFaceViewClient();
        RtspFaceView::Client rClient = client->getEzRpcClient()->getMain<RtspFaceView>();
        auto& waitScope =client->getWaitScope();
        auto  request = rClient.getFaceListRequest();
        request.setCameraIndex(cameraIdx);
        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(),buffSize);
    }
    catch (const kj::Exception& e)
    {
        LOG_ERROR <<e.getDescription().cStr()<< LOG_ENDL;
        ret = false;
    }
    //-------end-------
    LOG_ERROR <<"client : i want getFaceList   end!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<< LOG_ENDL;
    //ret = cameraWrapper.faceCache.getFaceListPb(pBufPB, buffSize);
    if (!ret)
    {
@@ -405,71 +441,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)
{
@@ -480,12 +451,40 @@
    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
    //#ps add --------8.11-------
    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);
        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());
            memcpy(&imgIdxes ,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
@@ -658,11 +657,13 @@
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;
    LOG_ERROR <<"ps ------------start"<< LOG_ENDL;
    assert(cameraIdx > 0 && cameraIdx <= CAMERA_COUNT);
    cameraIdx -= 1;
    CameraWrapper &cameraWrapper(g_CameraWrappers[cameraIdx]);
    const jchar* jchars = env->GetStringChars(label, nullptr);
    std::wstring wstr;
    LOG_ERROR <<"ps ------------4"<< LOG_ENDL;
    int lenth = env->GetStringLength(label);
    for (int i = 0; i < lenth; ++i) {
@@ -670,7 +671,39 @@
        wchar_t wt = (wchar_t)jc;
        wstr.push_back(wt);
    }
    env->ReleaseStringChars(label,jchars);
    cameraWrapper.setFaceLabel(stTrackId, wstr);
    // ps add ------8.11---------
    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);
        const capnp::Data::Builder &labelData = request.initLabel(wstr.size());
        LOG_ERROR <<"ps ------------3"<< LOG_ENDL;
        memcpy((char*)labelData.begin(), wstr.c_str(), wstr.size());
        request.setLabel(labelData);
        request.setTrackId(stTrackId);
        LOG_ERROR <<"ps ------------2"<< LOG_ENDL;
        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-------
    //cameraWrapper.setFaceLabel(stTrackId, wstr);
}
} // extern C