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