From c8e6fb13202d18e3c1ada38578d2a5cc3c184198 Mon Sep 17 00:00:00 2001
From: miyanhui <dennismi1024@gmail.com>
Date: 星期一, 18 二月 2019 17:15:45 +0800
Subject: [PATCH] VideoToImageMulth和VideoAnalyFromHC支持RPC的端口设置
---
QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp | 308 ++++++++++++++++++++++++++++----------------------
1 files changed, 173 insertions(+), 135 deletions(-)
diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
index 625b24a..3b8498f 100644
--- a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
+++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
@@ -1,57 +1,75 @@
#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), 8, 0), camID(camid) {
+//videoEncoderElement(cv::Size(1920, 1080), 5, 0),
+camID(camid),
+m_bSaveWH(false)
+{
- // basicPath();
- m_cutPath = appPref.getStringData("user.loop.absolute.path");
+ // basicPath();
+ //isRecord=false;
+ m_cutPath= appPref.getStringData("user.loop.absolute.path");
+
+ recordInit(appPref.getIntData("n_cut_min_duration"),appPref.getIntData("n_cut_max_duration"));
}
NewRecordVideoElement::~NewRecordVideoElement() {
std::queue<ImgInfo> empty;
empty.swap(m_imgBufQue);
-//m_imgBufQue.clear();
+
}
std::string NewRecordVideoElement::startRecord() {
-// ImgInfo info=m_HiredisTool.getImage(camID);
- ImgInfo info;
- getImg(info);
- std::string srcPath = getFileName(info.time);
-// DBG("fisrt fps time"<<info.time);
- try {
- videoEncoderElement.threadInitial(srcPath, info.img);
+
+ ImgInfo info;
+ getImg(info);
+ std::string srcPath= getFileName(info.time);
+ m_filename=srcPath;
+ // DBG("m_filename: " << m_filename);
+ if(!m_bSaveWH)
+ {
+ m_bSaveWH=m_hiredisTool.hashSet(camID,"width",info.img.cols) && m_hiredisTool.hashSet(camID,"height",info.img.rows);
+ DBG("m_bSaveWH="<<m_bSaveWH);
}
- 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 +78,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 +87,156 @@
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)
+{
+// std::string tmp="camId="+camID+"pushImgBuf";
+// ClockTimer cl(tmp);
+ ImgInfo info;
+ img.copyTo(info.img);
// info.img=img;
- info.time = time;
- m_imgBufQue.push(info);
+ info.time=time;
+ m_imgBufQue.push(info);
+ // if(isRecord)
+ // DBG("camId="<<camID<<"pushtime="<<info.time);
// 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)
+ {
+// std::string tmp="camId="+camID+"getImg";
+// ClockTimer cl(tmp);
+ 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();
+ }
+// if(isRecord)
+// DBG("camId="<<camID<<"gettime="<<info.time);
-}
+ }
+// void NewRecordVideoElement::threadFunc()
+// {
+// Record();
+// }
+// void NewRecordVideoElement::threadInitial()
+// {
-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;
+ 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_DOING:
+ videoLength++;
+ if(sdkTrigger){
+ if(videoLength < fileMax){
+ doRecord();
+ }
+ else
+ {
+ recordStatus = RECORD_STOP;
+ endRecord();
+ }
+ }
+ else
+ {
+ recordStatus = RECORD_ENDING;
+ doRecord();
+ }
+ break;
- case RECORD_ENDING:
+ 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) {
+// std::string tmp="camId="+camID+"setSdkTrigger";
+// ClockTimer cl(tmp);
+ 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*8;//fps=8
+ fileMax = videoMax*8;
+ 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