houxiao
2017-08-10 dea825c24eea9fa92dd9f0ccf2e24af4ed89683c
fix for compile

git-svn-id: http://192.168.1.226/svn/proxy@998 454eff88-639b-444f-9e54-f578c98de674
13个文件已修改
409 ■■■■■ 已修改文件
VisitFace/RtspNativeCodec/app/src/main/cpp/AppConfig.cpp 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/AppConfig.h 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/CMakeLists.txt 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.cpp 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFunc.h 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncClient.cpp 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncClient.h 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.cpp 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.h 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.cpp 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/java/com/example/nativecodec/NativeCodec.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/AppConfig.cpp
@@ -35,22 +35,26 @@
void AppConfig::loadConfig(string path)
{
    fstream fs(path);
    if (!fs.is_open()) {
    if (!fs.is_open())
    {
        save(path);
        return;
    }
    Json::CharReaderBuilder builder;
    auto reader = builder.newCharReader();
    JSONCPP_STRING doc;
    std::getline(fs, doc, (char)EOF);
    JSONCPP_STRING doc;
    std::getline(fs, doc, (char) EOF);
    reader->parse(doc.data(), doc.data() + doc.size(), &root, false);
}
void AppConfig::save(string path)
{
    ofstream ofs(path);
    ofs << root.toStyledString();
    ofs.close();
}
void AppConfig::clear(){
void AppConfig::clear()
{
    root.clear();
}
VisitFace/RtspNativeCodec/app/src/main/cpp/AppConfig.h
@@ -5,27 +5,30 @@
#ifndef RTSPNATIVECODEC_APPCONFIG_H
#define RTSPNATIVECODEC_APPCONFIG_H
#include <json.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
class AppConfig {
class AppConfig
{
public:
    AppConfig();
    ~AppConfig();
    AppConfig();
    ~AppConfig();
    string getStringValue(string key);
    int    getIntValue(string key);
    void   setStringValue(string key, string value);
    void   setIntValue(string key, int value);
    void   loadConfig(string path);
    void   save(string path);
    void   clear();
    int getIntValue(string key);
    void setStringValue(string key, string value);
    void setIntValue(string key, int value);
    void loadConfig(string path);
    void save(string path);
    void clear();
private:
    Json::Value root;
};
#endif //RTSPNATIVECODEC_APPCONFIG_H
VisitFace/RtspNativeCodec/app/src/main/cpp/CMakeLists.txt
@@ -117,11 +117,12 @@
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/freetype/lib/${ARCH}/libfreetype.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/jsoncpp/lib/${ARCH}/libjsoncpp.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-json.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-rpc.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnpc.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libkj.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-json-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-rpc-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnpc-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libkj-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libkj-async-0.7-dev.so"
                      #"${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/libv4l2wrapper/lib/${ARCH}/libv4l2wrapper.a"
@@ -202,11 +203,12 @@
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/jsoncpp/lib/${ARCH}/libjsoncpp.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-json.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-rpc.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnpc.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libkj.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-json-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnp-rpc-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libcapnpc-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libkj-0.7-dev.so"
                      "${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/capnproto/lib/${ARCH}/libkj-async-0.7-dev.so"
                      #"${WORKSPACE_PATH}/VisitFace/RtspNativeCodec/app/libs/libv4l2wrapper/lib/${ARCH}/libv4l2wrapper.a"
VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.cpp
@@ -14,7 +14,6 @@
{
    stop();
    delete pipeLineRender;
    delete pipeLineAnalyzer;
    delete pipeLineDecoderDetector;
}
@@ -94,42 +93,17 @@
    PipeLine::register_global_elem_creator("PL_RTSPClient", create_PL_RTSPClient);
    PipeLine::register_global_elem_creator("PL_AndroidMediaCodecDecoder", create_PL_AndroidMediaCodecDecoder);
    PipeLine::register_global_elem_creator("PL_AndroidSurfaceViewRender", create_PL_AndroidSurfaceViewRender);
    //PipeLine::register_global_elem_creator("PL_SensetimeFaceTrack", create_PL_SensetimeFaceTrack);
    PipeLine::register_global_elem_creator("PL_SensetimeFaceTrackMitiTrd", create_PL_SensetimeFaceTrackMultiTrd);
    PipeLine::register_global_elem_creator("PL_Gainer", create_PL_Gainer);
    PipeLine::register_global_elem_creator("PL_Scale", create_PL_Scale);
    PipeLine::register_global_elem_creator("PL_ColorConv", create_PL_ColorConv);
    PipeLine::register_global_elem_creator("PL_Paint", create_PL_Paint);
    PipeLine::register_global_elem_creator("PL_V4L2Source", create_PL_V4L2Source);
    PipeLine::register_global_elem_creator("PL_BlockGrouping", create_PL_BlockGrouping);
    //PipeLine::register_global_elem_creator("PL_AndroidMediaCodecEncoder", create_PL_AndroidMediaCodecEncoder);
    bool ret = initPl_DecoderPl();
    if (!ret)
    {
        LOG_ERROR << "pipeLineDecoderDetector init error" << LOG_ENDL;
        return  false;
    }
    {
        PL_Gainer* plGainer = (PL_Gainer*)pipeLineAnalyzer->push_elem("PL_Gainer");
        ret = plGainer->init(nullptr);
        if (!ret)
        {
            LOG_ERROR << "pipeLineAnalyzer.plGainer.init error" << LOG_ENDL;
            return  false;
        }
        PL_BlockGrouping* plBG = (PL_BlockGrouping*)pipeLineAnalyzer->push_elem("PL_BlockGrouping");
        PL_BlockGrouping_Config plbgConfig;
        plbgConfig.user_score_2_func = pl_analizer_plbg_user_score_2_func;
        plbgConfig.get_rect_func = pl_analizer_plbg_get_rect_func;
        ret = plBG->init(&plbgConfig);
        if (!ret)
        {
            LOG_ERROR << "pipeLineAnalyzer.plBG.init error" << LOG_ENDL;
            return  false;
        }
    }
    {
@@ -143,29 +117,13 @@
        PL_Scale* plScale = (PL_Scale*)pipeLineRender->push_elem("PL_Scale");
        plScaleCfg.toWidth = 640;
        plScaleCfg.toHeight = 480;
        plScaleCfg.toHeight = 480;//#todo move to jni
        ret = plScale->init(&plScaleCfg);
        if (!ret)
        {
            LOG_ERROR << "pipeLineRender.plScale init error" << LOG_ENDL;
            return  false;
        }
        //PL_AndroidMediaCodecEncoder_Config amceCfg;
        //amceCfg.ak_bit_rate = 5000000; // 512KB
        //amceCfg.ak_color_format = 21; // COLOR_FormatYUV420SemiPlanar;
        //amceCfg.ak_frame_rate = 25;
        //amceCfg.ak_height = 480;
        //amceCfg.ak_i_frame_interval = 20;
        //amceCfg.ak_mime = "video/avc";
        //amceCfg.ak_width = 640;
        //PL_AndroidMediaCodecEncoder* plAMCE = (PL_AndroidMediaCodecEncoder*)pipeLineRender->push_elem("PL_AndroidMediaCodecEncoder");
        //ret = plAMCE->init(&amceCfg);
        //if (!ret)
        //{
        //    LOG_ERROR << "pipeLineRender.plAMCE init error" << LOG_ENDL;
        //    return  false;
        //}
        PL_ColorConv_Config PLColorConvCfg;
        PL_ColorConv* plColorConv = (PL_ColorConv*)pipeLineRender->push_elem("PL_ColorConv");
@@ -228,23 +186,6 @@
    //    LOG_ERROR << "pipeLineDecoderDetector.v4l2Source.init error" << LOG_ENDL;
    //    return false;
    //}
#ifdef USE_ST_SDK
//    PL_SensetimeFaceTrack *sfTrack = (PL_SensetimeFaceTrack *) pipeLineDecoderDetector->push_elem("PL_SensetimeFaceTrack");
//    ret = sfTrack->init(&sftConfig);
//    if (!ret)
//    {
//        LOG_ERROR << "pipeLineDecoderDetector.sfTrack.init error" << LOG_ENDL;
//        return false;
//    }
    PL_SensetimeFaceTrackMultiTrd *sfTrack = (PL_SensetimeFaceTrackMultiTrd *) pipeLineDecoderDetector->push_elem("PL_SensetimeFaceTrackMitiTrd");
    ret = sfTrack->init(&sftConfig);
    if (!ret)
    {
        LOG_ERROR << "pipeLineDecoderDetector.sfTrack.init error" << LOG_ENDL;
        return false;
    }
#endif
    return ret;
}
@@ -355,23 +296,6 @@
    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.plplContext.cmds.push_back(PLPLC_WTEXT);
@@ -395,14 +319,6 @@
    cameraWrapper.plplContext.params.push_back(100);
    cameraWrapper.plplContext.params.push_back(100);
}
//struct ScopeMutexLocker
//{
//    pthread_mutex_t* mut;
//    ScopeMutexLocker(pthread_mutex_t* _mut) : mut(_mut){pthread_mutex_lock(mut);};
//    ~ScopeMutexLocker(){pthread_mutex_unlock(mut);}
//    //ScopeMutexLocker(&(cameraWrapper.live_daemon_mut));
//};
void cw_elem_destory_func(PipeLineElem* elem)
{
@@ -445,23 +361,12 @@
        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));
        //}
        pm.breake(PipeMaterial::PMT_PTR, MB_Frame::MBFT__FIRST, cw_pm_breaker_ptr_paint, &(cameraWrapper));
        //#debug
        //test_paint(cameraWrapper);
        cameraWrapper.pipeLineRender->pipe(&pm);//#todo
        //if (cameraWrapper.pipeLineRender->check_pipe_complete(last = cameraWrapper.pipeLineRender->pipe(&pm)))
        //    last->gain(pm);
        cameraWrapper.pipeLineRender->pipe(&pm);
    }
    LOG_INFO << "CameraWrapper::decoder_thd stop, ret=" << LOG_ENDL;
VisitFace/RtspNativeCodec/app/src/main/cpp/CameraWrapperClient.h
@@ -24,13 +24,11 @@
{
public:
    PipeLine* pipeLineDecoderDetector;
    PipeLine* pipeLineAnalyzer;
    PipeLine* pipeLineRender;
    PL_RTSPClient_Config rtspConfig;
    PL_AndroidMediaCodecDecoder_Config amcdConfig;
    PL_AndroidSurfaceViewRender_Config asvrConfig;
    SensetimeFaceTrackConfig sftConfig;
    PL_Scale_Config plScaleCfg;
    int cameraIdx;
@@ -59,7 +57,7 @@
    std::string fontPath;
    CameraWrapper() : 
        pipeLineDecoderDetector(nullptr), pipeLineAnalyzer(nullptr), pipeLineRender(nullptr), rtspConfig(), amcdConfig(), asvrConfig(), sftConfig(),
        pipeLineDecoderDetector(nullptr), pipeLineRender(nullptr), rtspConfig(), amcdConfig(), asvrConfig(),
        cameraIdx(0), javaVM(nullptr), javaEnv(nullptr), faceCallbackClazz(0), faceCallbackFunc(0), windowRender(nullptr), windowDecode(nullptr),
        decoder_thid(0), live_daemon_thid(0), live_daemon_mut(), running(false), killed(false), lastAliveTime(0),
        faceCacheLocked(false), faceCache(),
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFunc.h
@@ -9,53 +9,63 @@
#include <capnp/ez-rpc.h>
#include <logger.h>
template <class T> class RemoteServer{
template<class T>
class RemoteServer
{
public:
    RemoteServer(std::string host,int port):host(host),port(port){};
    ~RemoteServer(){};
    RemoteServer(std::string host, int port) : host(host), port(port) {};
    bool start() {
        LOG_INFO << "server_thd::start" << LOG_ENDL;
    ~RemoteServer() {};
        if(running == true){
            LOG_INFO << "The server_thd is already running" << LOG_ENDL;
            return false;
        }
        running = true;
        pthread_mutex_init(&mutexSerevr, NULL); // 初始化互斥对象,动态加锁,用于server
    bool start()
    {
        LOG_INFO << "server_thd::start" << LOG_ENDL;
        int retServer = pthread_create(&server_thid, NULL, RemoteServer::rServer_thd, this);
        if (running == true)
        {
            LOG_INFO << "The server_thd is already running" << LOG_ENDL;
            return false;
        }
        running = true;
        pthread_mutex_init(&mutexSerevr, NULL); // 初始化互斥对象,动态加锁,用于server
        if(retServer != 0)
        {
            LOGP(ERROR, "server_thd_create: %s/n", strerror(retServer));
            running = false;
            return false;
        }
        return true;
    }
    void stop(){
        int retServer = pthread_create(&server_thid, NULL, RemoteServer::rServer_thd, this);
        if (retServer != 0)
        {
            LOGP(ERROR, "server_thd_create: %s/n", strerror(retServer));
            running = false;
            return false;
        }
        return true;
    }
    void stop()
    {
//    LOG_INFO << "server_thd::stop" << LOG_ENDL;
//    if (!running)
//        return;
//    running = false;
//    pthread_mutex_destroy(&mutexSerevr);
        //#todo
    }
        //#todo
    }
    bool running;
    bool running;
private:
    std::string host;
    int port;
    std::string host;
    int port;
    static void *rServer_thd(void *arg) {
        RemoteServer& rs = *(RemoteServer*)arg;
        capnp::EzRpcServer trpcServer(kj::heap<T>(),rs.host, rs.port);
        auto& serverLoop = trpcServer.getWaitScope();
        kj::NEVER_DONE.wait(serverLoop);
    }
    pthread_t server_thid;
    pthread_mutex_t mutexSerevr;
    static void *rServer_thd(void *arg)
    {
        RemoteServer &rs = *(RemoteServer *) arg;
        capnp::EzRpcServer trpcServer(kj::heap<T>(), rs.host, rs.port);
        auto &serverLoop = trpcServer.getWaitScope();
        kj::NEVER_DONE.wait(serverLoop);
    }
    pthread_t server_thid;
    pthread_mutex_t mutexSerevr;
};
#endif //RTSPNATIVECODEC_REMOTEFUNC_H
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncClient.cpp
@@ -5,22 +5,33 @@
#include "RemoteFuncClient.h"
#include "RemoteFunc.h"
#include "RtspNativeCodecJNIClient.h"
RemoteServer<RtspFaceDetectImpl> remoteServer("127.0.0.1",8111);
void startRemoteServer(){
    remoteServer.start();
RemoteServer<RtspFaceDetectImpl> remoteServer("127.0.0.1", 8111);
void startRemoteServer()
{
    remoteServer.start();
}
RtspFaceViewClient rtspFaceViewClient;
RtspFaceViewClient& RtspFaceViewClient(){
    return rtspFaceViewClient;
RtspFaceViewClient &RtspFaceViewClient()
{
    return rtspFaceViewClient;
}
RtspFaceViewClient::RtspFaceViewClient():rpcClient("127.0.0.1",8112),
                                         RtspFaceView::Client(rpcClient.getMain<RtspFaceView>())
RtspFaceViewClient::RtspFaceViewClient() :
        rpcClient("127.0.0.1", 8112), RtspFaceView::Client(rpcClient.getMain<RtspFaceView>())
{}
::kj::WaitScope& RtspFaceViewClient::getWaitScope(){
    return rpcClient.getWaitScope();
::kj::WaitScope &RtspFaceViewClient::getWaitScope()
{
    return rpcClient.getWaitScope();
}
::kj::Promise<void> RtspFaceDetectImpl::fireFaceCountListener(FireFaceCountListenerContext context) {
    auto results = context.getResults();
    remoteFireFaceCountListener(context.getParams(), results);
    context.setResults(results);
}
::kj::Promise<void> RtspFaceDetectImpl::fireFaceCountListener(FireFaceCountListenerContext context)
{
    auto results = context.getResults();
    remoteFireFaceCountListener(context.getParams(), results);
    context.setResults(results);
}
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncClient.h
@@ -7,23 +7,30 @@
#include <string>
#include <capnp/ez-rpc.h>
#include "RemoteMethod.proto.h"
#include "RemoteMethod.capnp.h"
#include "CameraWrapperServer.h"
void startRemoteServer();
class RtspFaceViewClient : RtspFaceView::Client{
class RtspFaceViewClient : RtspFaceView::Client
{
public:
    RtspFaceViewClient();
    ~RtspFaceViewClient(){};
    ::kj::WaitScope& getWaitScope();
    RtspFaceViewClient();
    ~RtspFaceViewClient() {};
    ::kj::WaitScope &getWaitScope();
private:
    capnp::EzRpcClient rpcClient;
    capnp::EzRpcClient rpcClient;
};
const RtspFaceViewClient& getRtspFaceViewClient();
const RtspFaceViewClient &getRtspFaceViewClient();
class RtspFaceDetectImpl final : public RtspFaceDetect::Server{
class RtspFaceDetectImpl final : public RtspFaceDetect::Server
{
public:
    virtual ::kj::Promise<void> fireFaceCountListener(FireFaceCountListenerContext context) override ;
    virtual ::kj::Promise<void> fireFaceCountListener(FireFaceCountListenerContext context) override;
};
#endif //RTSPNATIVECODEC_REMOTEMETHODCLIENT_H
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.cpp
@@ -5,38 +5,49 @@
#include "RemoteFunc.h"
#include "RemoteFuncServer.h"
#include "RtspNativeCodecJNIServer.h"
RemoteServer<RtspFaceViewImpl> remoteServer("127.0.0.1",8112);
RemoteServer<RtspFaceViewImpl> remoteServer("127.0.0.1", 8112);
RtspFaceDetectClient rtspFaceDetectClient;
void startRemoteServer(){
    AppConfig config;
    config.loadConfig("data/config.cfg");
    remoteServer.start();
void startRemoteServer()
{
    AppConfig config;
    config.loadConfig("data/config.cfg");
    remoteServer.start();
}
RtspFaceDetectClient& getRtspFaceDetectClient(){
   return rtspFaceDetectClient;
RtspFaceDetectClient &getRtspFaceDetectClient()
{
    return rtspFaceDetectClient;
}
//#todo
RtspFaceDetectClient::RtspFaceDetectClient():rpcClient("127.0.0.1",8111),
                                             RtspFaceDetect::Client(rpcClient.getMain<RtspFaceDetect>())
RtspFaceDetectClient::RtspFaceDetectClient() :
        rpcClient("127.0.0.1", 8111), RtspFaceDetect::Client(rpcClient.getMain<RtspFaceDetect>())
{}
::kj::WaitScope& RtspFaceDetectClient::getWaitScope() {
    return rpcClient.getWaitScope();
::kj::WaitScope &RtspFaceDetectClient::getWaitScope()
{
    return rpcClient.getWaitScope();
}
::kj::Promise<void> RtspFaceViewImpl::getFaceList(GetFaceListContext context) {
    auto results = context.getResults();
    remoteGetFaceList(context.getParams(), results);
    context.setResults(results);
::kj::Promise<void> RtspFaceViewImpl::getFaceList(GetFaceListContext context)
{
    auto results = context.getResults();
    remoteGetFaceList(context.getParams(), results);
    context.setResults(results);
}
::kj::Promise<void> RtspFaceViewImpl::getFaceImages(GetFaceImagesContext context){
    auto results = context.getResults();
    remoteGetFaceListImage(context.getParams(), results);
    context.setResults(results);
::kj::Promise<void> RtspFaceViewImpl::getFaceImages(GetFaceImagesContext context)
{
    auto results = context.getResults();
    remoteGetFaceListImage(context.getParams(), results);
    context.setResults(results);
}
::kj::Promise<void> RtspFaceViewImpl::setFaceLabel(SetFaceLabelContext context) {
    auto results = context.getResults();
    remoteSetFaceLabel(context.getParams(), results);
    context.setResults(results);
::kj::Promise<void> RtspFaceViewImpl::setFaceLabel(SetFaceLabelContext context)
{
    auto results = context.getResults();
    remoteSetFaceLabel(context.getParams(), results);
    context.setResults(results);
}
VisitFace/RtspNativeCodec/app/src/main/cpp/RemoteFuncServer.h
@@ -9,29 +9,34 @@
#include <capnp/ez-rpc.h>
#include "RemoteMethod.capnp.h"
class RtspFaceDetectClient :public RtspFaceDetect::Client{
class RtspFaceDetectClient : public RtspFaceDetect::Client
{
public:
    RtspFaceDetectClient();
    ~RtspFaceDetectClient(){};
    ::kj::WaitScope& getWaitScope();
    RtspFaceDetectClient();
    ~RtspFaceDetectClient() {};
    ::kj::WaitScope &getWaitScope();
private:
    capnp::EzRpcClient rpcClient;
    capnp::EzRpcClient rpcClient;
};
void startRemoteServer();
RtspFaceDetectClient& getRtspFaceDetectClient();
class RtspFaceViewImpl final : public RtspFaceView::Server {
RtspFaceDetectClient &getRtspFaceDetectClient();
class RtspFaceViewImpl final : public RtspFaceView::Server
{
public:
    virtual ::kj::Promise<void> getFaceList(GetFaceListContext context) override;
    virtual ::kj::Promise<void> getFaceList(GetFaceListContext context) override;
    virtual ::kj::Promise<void> getFaceImages(GetFaceImagesContext context) override;
    virtual ::kj::Promise<void> getFaceImages(GetFaceImagesContext context) override;
    virtual ::kj::Promise<void> setFaceLabel(SetFaceLabelContext context) override;
    virtual ::kj::Promise<void> setFaceLabel(SetFaceLabelContext context) override;
private:
};
#endif //RTSPNATIVECODEC_REMOTEMETHODSERVER_H
VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.cpp
@@ -59,7 +59,6 @@
        g_CameraWrappers[i].cameraIdx = i + 1;
        g_CameraWrappers[i].pipeLineDecoderDetector = new PipeLine;
        g_CameraWrappers[i].pipeLineAnalyzer = new PipeLine;
        g_CameraWrappers[i].pipeLineRender = new PipeLine;
        //PipeLine& pipeLine(*(g_CameraWrappers[i].pipeLineDecoderDetector));
    }
@@ -159,22 +158,6 @@
        cameraWrapper.asvrConfig.scaleToWidth = 0;
        cameraWrapper.asvrConfig.scaleToHeight = 0;
        cameraWrapper.asvrConfig.directlyDisplay = true;
    }
    {
        cameraWrapper.sftConfig.point_size = 21;
        cameraWrapper.sftConfig.detect_face_cnt_limit = MAX_FACE;
        cameraWrapper.sftConfig.draw_face_rect = false;
        cameraWrapper.sftConfig.draw_face_feature_point = false;
        cameraWrapper.sftConfig.generate_face_feature = true;
        cameraWrapper.sftConfig.generate_face_point = false;
        cameraWrapper.sftConfig.explode_feature_rect_x = 30;
        cameraWrapper.sftConfig.explode_feature_rect_y = 40;
        cameraWrapper.sftConfig.clamp_feature_rect = true;
        cameraWrapper.sftConfig.doTrackPerFrame = 1;
        //cameraWrapper.sftConfig.license_str = g_stface_license_str;
        cameraWrapper.sftConfig.visionConeAngle = 30.0f;
        cameraWrapper.sftConfig.score_min = 0.4f;
    }
    cameraWrapper.fontPath = "/data/msyh.ttc";
VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNIClient.h
@@ -2,7 +2,7 @@
#define __RTSPNATIVECODECJNI_CLIENT_H__
#define CAMERA_COUNT 2
#include <jni.h>
#include "RemoteMethod.proto.h"
#include "RemoteMethod.capnp.h"
void remoteFireFaceCountListener(const RtspFaceDetect::FireFaceCountListenerParams::Reader& params, RtspFaceDetect::FireFaceCountListenerResults::Builder& results);
extern "C"
VisitFace/RtspNativeCodec/app/src/main/java/com/example/nativecodec/NativeCodec.java
@@ -493,7 +493,7 @@
    /** Load jni .so on initialization */
    static {
        //System.loadLibrary("rtspface_client");
        System.loadLibrary("rtspface_server");
        System.loadLibrary("rtspface_client");
        //System.loadLibrary("opencv_java3");
    }