From 59408e43480b48b6acd6e76641ff1a97811e7ab5 Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期四, 10 一月 2019 18:19:49 +0800
Subject: [PATCH] 修改yoloServer 优化多线程?

---
 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..280ce50 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