From a3365259bd9c51db3b5cfcf013ed323f27d1725a Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期三, 26 十二月 2018 15:01:51 +0800
Subject: [PATCH] 添加人脸时,裁剪图片

---
 QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp |  184 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 138 insertions(+), 46 deletions(-)

diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
index dda7544..625b24a 100644
--- a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
+++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
@@ -3,26 +3,27 @@
 
 //#todo index int -> string
 NewRecordVideoElement::NewRecordVideoElement(std::string camid) :
-videoEncoderElement(cv::Size(1920, 1080), 9, 0),
-camID(camid)
-{
+    videoEncoderElement(cv::Size(1920, 1080), 8, 0), camID(camid) {
 
-   // basicPath();
-    m_cutPath= appPref.getStringData("user.loop.absolute.path");
+    // basicPath();
+    m_cutPath = appPref.getStringData("user.loop.absolute.path");
 }
 
 NewRecordVideoElement::~NewRecordVideoElement() {
-m_imgBufQue.clear();
+    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);
+    ImgInfo info;
+    getImg(info);
+    std::string srcPath = getFileName(info.time);
 
-
+//    DBG("fisrt fps time"<<info.time);
     try {
         videoEncoderElement.threadInitial(srcPath, info.img);
     }
@@ -33,24 +34,24 @@
 }
 
 void NewRecordVideoElement::endRecord() {
-    ImgInfo info;
-    getImg(info);
+    doRecord();
+    doRecord();
+    doRecord();
     videoEncoderElement.threadClosing();
 }
 
 void NewRecordVideoElement::doRecord() {
 
+    //  ImgInfo info=m_HiredisTool.getImage(camID);
+    ImgInfo info;
+    getImg(info);
 
-//    ImgInfo info=m_HiredisTool.getImage(camID);
-     ImgInfo info;
-     getImg(info);
-     DBG(" time="<<info.time);
+//    DBG(" time="<<info.time);
     videoEncoderElement.doFunc(info.img);
 }
 
- std::string NewRecordVideoElement::getFileName(std::string timeStamp)
-{
-    std::string dirPath=makeDir();
+std::string NewRecordVideoElement::getFileName(std::string timeStamp) {
+    std::string dirPath = makeDir();
 
     char szDateTime[256] = {0};
     sprintf(szDateTime, "%s%s.mp4", dirPath.c_str(), timeStamp.c_str());
@@ -69,44 +70,135 @@
     }
     char buf[24];
 
-     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 '";
+    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 '";
     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;
-     info.img=img;
-     info.time=time;
-     m_imgBufQue.push_front(info);
+
+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);
 //     int size=m_imgBufQue.size();
 //     DBG("m_imgBufQue size="<<size);
 }
- void NewRecordVideoElement::getImg(ImgInfo& info)
- {
-        //todo
-        int len=10;
-         info=m_imgBufQue.back();
-        int size=m_imgBufQue.size();
-        //DBG("m_imgBufQue size="<<size<<" time="<<info.time);
-        if(size>len)
-        {
-             m_imgBufQue.pop_back();
+
+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::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