派生自 development/c++

pansen
2018-12-19 ae87bf6bbddb781ff7316d032f8dc2302fb608ec
QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
@@ -3,7 +3,7 @@
//#todo index int -> string
NewRecordVideoElement::NewRecordVideoElement(std::string camid) :
videoEncoderElement(cv::Size(1920, 1080), 9, 0),
videoEncoderElement(cv::Size(1920, 1080), 5, 0),
camID(camid)
{
@@ -12,7 +12,10 @@
}
NewRecordVideoElement::~NewRecordVideoElement() {
m_imgBufQue.clear();
    queue<ImgInfo> empty;
    empty.swap(m_imgBufQue);
//m_imgBufQue.clear();
}
std::string NewRecordVideoElement::startRecord() {
@@ -22,7 +25,7 @@
     getImg(info);
    std::string srcPath= getFileName(info.time);
//    DBG("fisrt fps time"<<info.time);
    try {
        videoEncoderElement.threadInitial(srcPath, info.img);
    }
@@ -33,18 +36,20 @@
}
void NewRecordVideoElement::endRecord() {
    ImgInfo info;
    getImg(info);
    doRecord();
    doRecord();
    doRecord();
    videoEncoderElement.threadClosing();
}
void NewRecordVideoElement::doRecord() {
//    ImgInfo info=m_HiredisTool.getImage(camID);
  //  ImgInfo info=m_HiredisTool.getImage(camID);
     ImgInfo info;
     getImg(info);
     DBG(" time="<<info.time);
//    DBG(" time="<<info.time);
    videoEncoderElement.doFunc(info.img);
}
@@ -84,29 +89,131 @@
    return t_FilePath;
}
void NewRecordVideoElement::pushImgBuf(const std::string& time,cv::Mat img)
void NewRecordVideoElement::pushImgBuf(const std::string& time,cv::Mat& img)
{
     ImgInfo info;
     info.img=img;
     img.copyTo(info.img);
//     info.img=img;
     info.time=time;
     m_imgBufQue.push_front(info);
     m_imgBufQue.push(info);
//     int size=m_imgBufQue.size();
//     DBG("m_imgBufQue size="<<size);
}
 void NewRecordVideoElement::getImg(ImgInfo& info)
 {
        //todo
        int len=10;
         info=m_imgBufQue.back();
        int len=20;
         info=m_imgBufQue.front();
        int size=m_imgBufQue.size();
        //DBG("m_imgBufQue size="<<size<<" time="<<info.time);
//        DBG("m_imgBufQue size="<<size<<" time="<<info.time);
        if(size>len)
        {
             m_imgBufQue.pop_back();
             m_imgBufQue.pop();
        }
 }
 void NewRecordVideoElement::threadFunc()
 {
        Record();
 }
 void NewRecordVideoElement::threadInitial()
 {
     recordInit(40,100);
 }
 void NewRecordVideoElement::Record() {
     switch(recordStatus)
     {
         case RECORD_STOP:
 //        DBG("recordDelay:" << recordDelay);
 //        DBG("videoLength:" << videoLength);
 //        DBG("sdkTrigger:" << sdkTrigger);
             videoLength = 0;
             recordDelay = 0;
             if(sdkTrigger){
                 recordStatus = RECORD_DOING;
                 startRecord();
             }
             else
             {
                 ImgInfo info;
                 getImg(info);
             }
             break;
         case RECORD_DOING:
             videoLength++;
             if(sdkTrigger){
                 if(videoLength < fileMax){
                     doRecord();
                 }
                 else
                 {
                     recordStatus = RECORD_STOP;
                     endRecord();
                 }
             }
             else
             {
                 recordStatus = RECORD_ENDING;
                 doRecord();
             }
             break;
         case RECORD_ENDING:
//             DBG("recordDelay:" << recordDelay);
//             DBG("videoLength:" << videoLength);
//             DBG("sdkTrigger:" << sdkTrigger);
             recordDelay++;
             videoLength++;
             if(sdkTrigger){
                 if( (recordDelay < fileMin/4) &&
                     (videoLength < fileMax)){
                     doRecord();
                 }else{
                     recordStatus = RECORD_STOP;
                     endRecord();
                 }
             }else{
                 if( (recordDelay < fileMin/2) &&
                     (videoLength < fileMax)){
                    doRecord();
                 }else{
                     recordStatus = RECORD_STOP;
                     endRecord();
                 }
             }
             break;
         default:
             break;
     }
 }
 void NewRecordVideoElement::setSdkTrigger(bool isTrigger) {
     if(isTrigger)
     {
         triggerDelay = 0;
         sdkTrigger = true;
     }
     else
     {
         if(triggerDelay++ >= fileMin/2) {
             sdkTrigger = false;
         }
         else{
             sdkTrigger = true;
         }
     }
 }
 void NewRecordVideoElement::recordInit(int videoMin, int videoMax) {
     sdkTrigger = false;
     fileMin = videoMin;
     fileMax = videoMax;
     triggerDelay = fileMin/2;
     recordStatus = RECORD_STOP;
     videoLength = 0;
     recordDelay = 0;
 }