派生自 development/c++

pansen
2019-04-03 17ae0cd78c16f55d38dc3f9ad6b27688f445aee3
Merge branch 'yangwu1.3' into 1.3nsq
7个文件已修改
114 ■■■■■ 已修改文件
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/StructureApp/AppPipeController.cpp 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/StructureApp/FaceExtractElement.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -146,6 +146,7 @@
 */
void BASICGB28181::FFmpegDecoderJPG::BareFlowDecoderThd(FFmpegDecoderJPG *p_this) {
    DBG(p_this->m_camIdx << "  BareFlowDecoderThd ok ... gpuIdx is " << p_this->m_gpuIdx);
    DBG("p_thisADDR:" << p_this << "p_this->m_running" << p_this->m_running);
    while (!p_this->m_running) {
        p_this->m_running = true;
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -35,9 +35,12 @@
bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) {
    if(!m_waitSignalrunning) {
        DBG("std::thread waitSignalAndEmit create New!!");
    //等待下层ffmpeg将rtp包解码成为图片后触发信号,然后触发当前类的submit
    std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) {
        p_this->m_waitSignal = true;
            p_this->m_waitSignalrunning = true;
        //循环,由成员变量来维护这个线程的运行状态
        while (p_this->m_waitSignal) {
//#TODO wait test
@@ -70,9 +73,11 @@
            p_this->submit();
        }
            p_this->m_waitSignalrunning = false;
        INFO("waitSignalAndEmit is exit...");
    }, this);
    waitSignalAndEmit.detach();
    }
    TryCath(
    //--------------国标设备或则国标下级平台必须支持GB28181-2016----------------------------------------------
@@ -146,9 +151,12 @@
                //点播失败
                p_this->m_waitSignal = false;
                p_this->m_running = false;
                //关闭ffmpeg解码模块
                p_this->m_fFmpegDecoderJPG.stopThd();
                ERR(p_this->m_chanPubID << " C_RealVideoStart is error lrealhandle is  " << lrealhandle);
                p_this->startRtpStream(p_this->m_streamTransType);
            }
        }, this, streamTransType);
@@ -196,20 +204,20 @@
void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() {
    if ((!m_running) || (!m_waitSignal)) {
//        根据reopenTime判断是否需要重启
        if (reopenTime < 0) {
            stop();
            INFO("grabFrame faild, element stopping");
            return;
        } else {
            //todo 业务死锁
            usleep(reopenTime * 1000);
            INFO("grabFrame faild, try reopen video: ");
            startRtpStream(m_streamTransType);
            return;
        }
    }
//    if ((!m_running) || (!m_waitSignal)) {
////        根据reopenTime判断是否需要重启
//        if (reopenTime < 0) {
//            stop();
//            INFO("grabFrame faild, element stopping");
//            return;
//        } else {
//            //todo 业务死锁
//            usleep(reopenTime * 1000);
//            INFO("grabFrame faild, try reopen video: ");
//            startRtpStream(m_streamTransType);
//            return;
//        }
//    }
    fireConnectors();
}
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -68,6 +68,7 @@
        std::atomic<bool> m_running;
        std::atomic<bool> m_waitSignal;
        std::atomic<bool> m_waitSignalrunning;
        //用来保存录像视频的路径
        std::string m_cutPath;
QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -33,8 +33,7 @@
//    recordVideoElement(-1, ""),
    bRecordVideoEnable(false),
    m_bSetWH(false)
{
    m_bSetWH(false) {
    init();
@@ -90,9 +89,7 @@
    rightJudgment(ruleMap[KeepRightSdk]),
    bRecordVideoEnable(RecordVideoEnable),
    m_sdkRuleMap(ruleMap),
    m_bSetWH(false)
  {
    m_bSetWH(false) {
    DBG("camId" << camId);
    init();
    initPerimeter();
@@ -229,6 +226,7 @@
                               "perStaticElement: "<<perStaticElement.getTriggerState());
    }*/
}
void AppPipeController::init() {
    unsigned char ip_old[15] = {0};
@@ -261,14 +259,13 @@
        m_hiredisTool.listRpop(m_camId,imgKey);
        if(imgKey.empty())
        {
            ERR("CamId  "<<m_camId<<" No ImgKey");
//            ERR("CamId  "<<m_camId<<" No ImgKey");
            return;
        }
        cv::Mat imageTemp;
        m_hiredisTool.getKeyImage(imgKey,imageTemp);
        if(!m_bSetWH)
        {
        if (!m_bSetWH) {
            INFO("SetWidth:"<<imageTemp.cols<<"  Height:"<<imageTemp.rows);
            appPref.setIntData(m_camId+"width",imageTemp.cols);
            appPref.setIntData(m_camId+"height",imageTemp.rows);
@@ -276,8 +273,7 @@
        }
        m_hiredisTool.delKey(imgKey);
        if(imageTemp.empty())
        {
        if (imageTemp.empty()) {
            ERR("No Image Data In: "<<m_camId<<"   ImgKey:"<<imgKey);
            return;
        }
@@ -398,8 +394,7 @@
        registerElement(faceRpcElement);
        registerElement(faceExtractElement);
    }
    if(appPref.getIntData("show.image") == 1)
    {
    if (appPref.getIntData("show.image") == 1) {
        imageDrawElement.registerConnector([&] {
            ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
@@ -543,14 +538,12 @@
    leftJudgment.init(rule.strAreas, rule.strLine);
    rightJudgment.init(rule.strExAreas, rule.strExLine);
    yoloRpcElement.registerConnector([&] {
        if(!leftJudgment.isBusy())
        {
        if (!leftJudgment.isBusy()) {
             leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
              leftJudgment.setImage(yoloRpcElement.getImage());
              leftJudgment.submit();
        }
        if(!rightJudgment.isBusy())
        {
        if (!rightJudgment.isBusy()) {
            rightJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
            rightJudgment.setImage(yoloRpcElement.getImage());
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -92,6 +92,20 @@
            auto sharedImage = cv::Mat(image.rows, image.cols, CV_8UC3, sharedMemory->data());
            image.copyTo(sharedImage);
            // 上传大图
            string strBigImgUrl;
            if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
                fdfsClient->rwLock.rdlock();
                std::vector<unsigned char> buffer;
                CvUtil::cvMat2Buffer(image, buffer);
                fdfsClient->fastFds->uploadFile(buffer, strBigImgUrl, "jpg");
                fdfsClient->rwLock.unlock();
            } else {
                strBigImgUrl = "";
                ERR("fdfsClient is nullptr ???");
            }
            unsigned long size = faceExtractQueueTmp[i].facesPos.size();
            for (int j = 0; j < size; j++) {
                auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
@@ -109,7 +123,6 @@
                }
                features.clear();
                features.emplace_back(feature);
                std::string strImgUrl = "http://";
                if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
                    fdfsClient->rwLock.rdlock();
@@ -127,7 +140,18 @@
                    strImgUrl = "";
                    ERR("fdfsClient is nullptr ???");
                }
                InsertToESDB(faceExtractQueueTmp, t_com_sc, i, j, feature, strImgUrl, strBigImgUrl);
            }
        }
    } catch (std::exception &e) {
        ERR(e.what())
    }
    if (!features.empty())fireConnectors();
}
void FaceExtractElement::InsertToESDB(const vector<FaceToExtract> &faceExtractQueueTmp, float t_com_sc, int i, int j,
                                      FaceDetect::Data &feature, string &strImgUrl, string &strBigImgUrl) {
                //拼接json
                string str_uuid;
                uuid_t t_uuid;
@@ -139,7 +163,7 @@
                Json::Value t_json;
                t_json["Id"] = str_uuid; //主键
                std::string feature_base64;
    string feature_base64;
                feature_base64 = base64.Encode(feature.data(), feature.size());
                //#在对比中添加特征值
@@ -156,7 +180,7 @@
                t_json["personPicUrl"] = "";//人员图片 store
                t_json["picAddress"] = getProperty("str_addr");//抓拍地址
                DBG("picAddress=" << t_json["picAddress"]);
                t_json["picMaxUrl"] = "";//大图路径
    t_json["picMaxUrl"] = strBigImgUrl;//大图路径
                t_json["picLocalUrl"] = "";//本地路径
                t_json["picSmUrl"] = strImgUrl;//人员抓小图
                //#todo
@@ -167,7 +191,7 @@
                t_json["content"] = "";
                //t_json["viType"] = "2";//只有4种类型 1:personface 2:personbody 3:car 4:bicycle 5:none 未知类型
                t_json["sdkType"] = std::to_string(
    t_json["sdkType"] = to_string(
                    m_sdkRule.nSdkType);//只有4种类型 1:personface 2:personbody 3:car 4:bicycle 5:none 未知类型
                t_json["personIsHub"] = "4";//1: 报警  2: 可疑  3: 安全  4: 未知
@@ -223,7 +247,7 @@
                t_json["indeviceid"] = appPref.getStringData("fxDevID");
                t_json["indevicename"] = appPref.getStringData("fxDevNAME");
                std::string strImageKey = faceExtractQueueTmp[i].scoredRects[j].properties["imgKey"];
    string strImageKey = faceExtractQueueTmp[i].scoredRects[j].properties["imgKey"];
                INFO("SaveImageKey To ES: " << strImageKey);
                t_json["imgKey"] = strImageKey;
@@ -235,7 +259,7 @@
                    }
                    INFO("Record Video " << strImageKey);
                    server->recordVideo(strImageKey);
                } catch (std::exception &e) {
    } catch (exception &e) {
                    ERR("Record Video Err: " << strImageKey << "   Message: " << e.what());
                    //return;
                }
@@ -257,14 +281,9 @@
                                                                              t_com_sc);
                }
            }
        }
    } catch (std::exception &e) {
        ERR(e.what())
    }
    if (!features.empty())fireConnectors();
}
std::vector<::FaceDetect::Data> FaceExtractElement::getFeatures() const {
    return features;
}
QiaoJiaSystem/StructureApp/FaceExtractElement.h
@@ -14,6 +14,7 @@
#include <mutex>
#include <jsoncpp/json/json.h>
#include "DBStruct.h"
#define VECTOR_MAX 50
class QSharedMemory;
@@ -57,10 +58,13 @@
//    AlarmServerInterface::TableNames tableNames;
    std::vector<::FaceDetect::Data> features;
    cv::Mat m_image;
    Base64 base64;
    SdkRule m_sdkRule;
    SaveVideoRpcClient_t m_rpcClient;
    void InsertToESDB(const vector<FaceToExtract> &faceExtractQueueTmp, float t_com_sc, int i, int j,
                      FaceDetect::Data &feature, string &strImgUrl, string &strBigImgUrl);
};
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -478,7 +478,7 @@
//        INFO("Save Succeed Cam: " << camId << " ImageKey: " << imageName);
        item->second->SaveImage(imageName, img);
    } else {
        ERR("Save Failed Cam: " << camId << " ImageKey: " << imageName);
//        ERR("Save Failed Cam: " << camId << " ImageKey: " << imageName);
    }
//    m_imgRedisCRwLock.unlock();
//    INFO("MYH DEBUG HERE");