From ae87bf6bbddb781ff7316d032f8dc2302fb608ec Mon Sep 17 00:00:00 2001 From: pansen <pansen626@sina.com> Date: 星期三, 19 十二月 2018 19:44:42 +0800 Subject: [PATCH] Merge QiaojiaoSystem Code (svn version is r3345) --- QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp | 139 +++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 123 insertions(+), 16 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp index dda7544..a46ad7c 100644 --- a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp +++ b/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; + } -- Gitblit v1.8.0