From 0436e5443295395025f89f0d091aab1e9551d1a4 Mon Sep 17 00:00:00 2001 From: pansen <pansen626@sina.com> Date: 星期四, 10 一月 2019 20:26:31 +0800 Subject: [PATCH] Merge branch 'ywv1.2' of ssh://192.168.1.226:29418/development/c++ into ywv1.2 --- QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp | 287 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 153 insertions(+), 134 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp index f6829c7..b9e696c 100644 --- a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp +++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp @@ -1,12 +1,16 @@ #include "NewRecordVideoElement.h" #include <basic/util/app/AppPreference.hpp> - +#include <QString> +#include <QDateTime> //#todo index int -> string NewRecordVideoElement::NewRecordVideoElement(std::string camid) : - videoEncoderElement(cv::Size(1920, 1080), 5, 0), camID(camid) { +//videoEncoderElement(cv::Size(1920, 1080), 5, 0), +camID(camid) +{ - // basicPath(); - m_cutPath = appPref.getStringData("user.loop.absolute.path"); + // basicPath(); + m_cutPath= appPref.getStringData("user.loop.absolute.path"); + recordInit(60,360); } NewRecordVideoElement::~NewRecordVideoElement() { @@ -19,39 +23,43 @@ std::string NewRecordVideoElement::startRecord() { // ImgInfo info=m_HiredisTool.getImage(camID); - ImgInfo info; - getImg(info); - std::string srcPath = getFileName(info.time); + ImgInfo info; + getImg(info); + std::string srcPath= getFileName(info.time); + m_filename=srcPath; + DBG("m_filename: " << m_filename); -// DBG("fisrt fps time"<<info.time); - try { - videoEncoderElement.threadInitial(srcPath, info.img); - } - catch (std::exception &e) { - ERR(e.what()) - } + m_hiredisTool.pushImageBuf(m_filename,info.img); + m_hiredisTool.addFileInfo(m_filename,RECORD_DOING); return srcPath; } void NewRecordVideoElement::endRecord() { - doRecord(); - doRecord(); - doRecord(); - videoEncoderElement.threadClosing(); + + ImgInfo info; + getImg(info); +// DBG("m_filename: " << m_filename); +// DBG("recordDelay:" << recordDelay); +// DBG("videoLength:" << videoLength); +// DBG("sdkTrigger:" << sdkTrigger); + m_hiredisTool.pushImageBuf(m_filename,info.img); + m_hiredisTool.addFileInfo(m_filename,RECORD_ENDING); } void NewRecordVideoElement::doRecord() { - // ImgInfo info=m_HiredisTool.getImage(camID); - ImgInfo info; - getImg(info); -// DBG(" time="<<info.time); - videoEncoderElement.doFunc(info.img); + // ImgInfo info=m_HiredisTool.getImage(camID); + ImgInfo info; + getImg(info); + + m_hiredisTool.pushImageBuf(m_filename,info.img); + m_hiredisTool.addFileInfo(m_filename,RECORD_DOING); } -std::string NewRecordVideoElement::getFileName(std::string timeStamp) { - std::string dirPath = makeDir(); + std::string NewRecordVideoElement::getFileName(const std::string& timeStamp) +{ + std::string dirPath=makeDir(timeStamp); char szDateTime[256] = {0}; sprintf(szDateTime, "%s%s.mp4", dirPath.c_str(), timeStamp.c_str()); @@ -60,7 +68,7 @@ } -std::string NewRecordVideoElement::makeDir() { +std::string NewRecordVideoElement::makeDir(const std::string& timeStamp) { //# ./camIndex/YYYYMM/DD/YYYYMMDDHH/ std::string t_FilePath = m_cutPath; @@ -69,136 +77,147 @@ t_FilePath.push_back('/'); } char buf[24]; + QDateTime dt = QDateTime::fromString(QString::fromStdString(timeStamp), "yyyy-MM-dd hh:mm:ss:zzz"); - time_t t = time(nullptr); - // 20180901113048 2018-09-01 11:30:48 - strftime(buf, 24, "%Y%m%d%H", localtime(&t)); - std::string t_strTime(buf); - //# ./camIndex/YYYYMM/DD/ - t_FilePath.append(camID + "/" + t_strTime.substr(0, 6) + "/" + t_strTime.substr(6, 2) + "/"); - //YYYYMMDDHH - t_FilePath.append(t_strTime.substr(0, 10) + "/"); - std::string t_cmd = "mkdir -p '"; + std::string t_strTime=dt.toString("yyyyMMddhh").toStdString(); + DBG("t_strTime="<<t_strTime); + t_FilePath.append(camID + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/"); + //YYYYMMDDHH + t_FilePath.append(t_strTime.substr(0,10)+ "/"); + std::string t_cmd = "mkdir -p '"; t_cmd.append(t_FilePath + "'"); //#get path mkdir path system(t_cmd.c_str()); return t_FilePath; } - -void NewRecordVideoElement::pushImgBuf(const std::string &time, cv::Mat &img) { - ImgInfo info; - img.copyTo(info.img); +void NewRecordVideoElement::pushImgBuf(const std::string& time,cv::Mat& img) +{ + ImgInfo info; + img.copyTo(info.img); // info.img=img; - info.time = time; - m_imgBufQue.push(info); + info.time=time; + m_imgBufQue.push(info); // int size=m_imgBufQue.size(); // DBG("m_imgBufQue size="<<size); } - -void NewRecordVideoElement::getImg(ImgInfo &info) { - //todo - int len = 20; - info = m_imgBufQue.front(); - int size = m_imgBufQue.size(); -// DBG("m_imgBufQue size="<<size<<" time="<<info.time); - if (size > len) { - m_imgBufQue.pop(); - } + void NewRecordVideoElement::getImg(ImgInfo& info) + { + info=m_imgBufQue.front(); + int size=m_imgBufQue.size(); +// DBG("m_imgBufQue size="<<size<<" camId="<<camID<<" fileMin="<<fileMin/2); + if(size>fileMin/2) + { + m_imgBufQue.pop(); + } -} -void NewRecordVideoElement::threadFunc() { - Record(); -} + } + void NewRecordVideoElement::threadFunc() + { +// Record(); + } + void NewRecordVideoElement::threadInitial() + { -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; + 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_ENDING: + 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)) { + 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(); - } - } else { - if ((recordDelay < fileMin / 2) && - (videoLength < fileMax)) { - doRecord(); - } else { - recordStatus = RECORD_STOP; - endRecord(); - } - } - break; + }else{ + recordStatus = RECORD_STOP; + endRecord(); + } + } + break; - default: - break; - } -} + default: + break; + } + } + void NewRecordVideoElement::setSdkTrigger(bool isTrigger) { + if(isTrigger) + { +// DBG("setSdkTrigger time=" << AppUtil::getTimeUSecString()); + triggerDelay = 0; + sdkTrigger = true; + } + else + { + if(triggerDelay++ >= fileMin/2) { + sdkTrigger = false; + } + else{ + sdkTrigger = true; + } + } + Record(); + } + void NewRecordVideoElement::recordInit(int videoMin, int videoMax) { -void NewRecordVideoElement::setSdkTrigger(bool isTrigger) { - if (isTrigger) { - triggerDelay = 0; - sdkTrigger = true; - } else { - if (triggerDelay++ >= fileMin / 2) { - sdkTrigger = false; - } else { - sdkTrigger = true; - } - } -} + sdkTrigger = false; + fileMin = videoMin; + fileMax = videoMax; + triggerDelay = fileMin/2; -void NewRecordVideoElement::recordInit(int videoMin, int videoMax) { - sdkTrigger = false; - fileMin = videoMin; - fileMax = videoMax; - triggerDelay = fileMin / 2; - - recordStatus = RECORD_STOP; - videoLength = 0; - recordDelay = 0; -} + recordStatus = RECORD_STOP; + videoLength = 0; + recordDelay = 0; + } -- Gitblit v1.8.0