From 25928e3093a7c0257128192d7785ec3f74e89e81 Mon Sep 17 00:00:00 2001
From: pans <pansen626@sina.com>
Date: 星期六, 30 三月 2019 12:46:20 +0800
Subject: [PATCH] 添加注释

---
 QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h             |    7 +++
 QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp              |    1 
 QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp                   |    4 +
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h   |   15 +++++++
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp |   22 ++++++++++-
 QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp           |   19 ++++++---
 6 files changed, 57 insertions(+), 11 deletions(-)

diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
index 7fa85cd..0cfd3b4 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -45,7 +45,9 @@
 }
 
 BASICGB28181::FFmpegDecoderJPG::~FFmpegDecoderJPG() {
+    //娓呯┖闃熷垪
     while (m_rtpQueue.count_queue()) {
+        //#todo delete frameBuffInfo*
         m_rtpQueue.popNotWait();
     }
 
@@ -75,10 +77,9 @@
     }
 
 #ifdef TestCode
-        DBG(" m_rtpQueue.push before ");
+        DBG(" m_rtpQueue.push befores ");
 #endif
-        m_rtpQueue.
-        push(info);
+        m_rtpQueue.push(info);
 #ifdef TestCode
         DBG(" m_rtpQueue.push after ");
 #endif
@@ -96,10 +97,11 @@
     do {
 
 //        DBG(" m_rtpQueue.pop before ");
+        //浠庣紦瀛樹腑鑾峰彇buffinfo
         frameBuffInfo *buffinfo = fFmpegDecoderJPG->m_rtpQueue.pop();
 //        DBG(" m_rtpQueue.pop after ");
         diff = len - buffinfo->buffLen;
-//        printf("bufsize is :%ld,len is :%ld, datalen:%d \n", bufsize, len, buffinfo->buffLen);
+
         //甯ч暱澶т簬bufsize
         if (diff < 0) {
 //            DBG("/甯ч暱澶т簬bufsize" << diff);
@@ -130,7 +132,7 @@
         delete[] buffinfo->buff;
         delete buffinfo;
     } while (diff > 0);
-    //#todo 瑙﹀彂淇″彿
+
 //    DBG("emitSigal(\"read_dataOk\") begin");
 //    gSignalLock.emitSigal("read_dataOk");
     fFmpegDecoderJPG->m_readData = true;
@@ -151,12 +153,14 @@
 //    avformat_network_init();
         p_this->ic = avformat_alloc_context();
 
+        //鍒涘缓ffmpeg浣跨敤鐨勫唴瀛樼┖闂�
         p_this->iobuffer = (unsigned char *) av_malloc(p_this->m_buf_size);
         if (!p_this->iobuffer) {
             ERR("av_malloc: err======" << p_this->m_camIdx);
             p_this->m_running = false;
             continue;
         }
+//     浣跨敤鍥炶皟鍑芥暟鍜屽唴瀛樺潡鍒涘缓 AVIOContext
         p_this->avio = avio_alloc_context(p_this->iobuffer, p_this->m_buf_size, 0, p_this, p_this->read_data, NULL,
                                           NULL);
         if (!p_this->avio) {
@@ -267,7 +271,7 @@
 
 //        BASICGB28181::avframe_to_cvmat(frame).copyTo(p_this->m_image);
             p_this->m_image = std::move(BASICGB28181::avframe_to_cvmat(p_this->frame));
-
+//            灏唅甯т繚瀛樹负蹇収
             if (p_this->m_SnapshotNotSaveRet && (p_this->pkt.flags & AV_PKT_FLAG_KEY)) {
                 try {
                     std::string strNewName = "./";
@@ -304,7 +308,7 @@
 #ifdef TestCode
                 DBG("emitSigal(\"DecoderImageOK\") begin");
 #endif
-            //瑙﹀彂淇″彿
+            //瑙﹀彂涓婂眰淇″彿
             gSignalLock.emitSigal(p_this->m_camIdx + "DecoderImageOK");
 //#ifdef TestCode
 //        DBG("emitSigal(\"DecoderImageOK\") after");
@@ -349,6 +353,7 @@
         }
         m_camIdx = camIdx;
         DBG("BareFlowDecoderThd camIdx : " << camIdx);
+//        鍚姩瑙g爜绾跨▼
         std::thread t_BareFlowDecoder(BareFlowDecoderThd, this);
         t_BareFlowDecoder.detach();
     );
diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h
index dcfa1d2..cdfe87e 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h
+++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h
@@ -48,6 +48,11 @@
 
     static void initFFmpeg();
 
+    /***
+     * AVframe杞琧vmat
+     * @param frame
+     * @return
+     */
     static cv::Mat avframe_to_cvmat(AVFrame *frame);
 
     typedef struct _buffInfo {
@@ -56,6 +61,7 @@
         std::string camIdx;
     } frameBuffInfo;
 
+    //************褰曞儚妯″潡浣跨敤鐨勭粨鏋勪綋********************//
     struct FrameIdPackage_s_t {
         int64_t m_frameId;
         AVPacket m_packet;
@@ -82,6 +88,7 @@
         RECORDING_VIDEO,
         STOP_RECORD,
     };
+    //********************************//
 //    std::map<std::string, MyQueue<frameBuffInfo *> > MapMyQueue;
 
     static std::mutex g_mutex;
diff --git a/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp b/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp
index 44378a5..d10530a 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp
@@ -52,6 +52,7 @@
 
     bool iRet = C_InitSDK(&GBServerParam, &MysqlConnParam, NULL, enventcallback);
     DBG("iRet is " << iRet);
+//    绛夊緟璁惧娉ㄥ唽
     sleep(90);
 
     return iRet;
diff --git a/QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp b/QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp
index e6e74f8..7737af6 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp
@@ -6,7 +6,9 @@
 #define GB28181SDK_SPINLOCK_H
 
 #include <atomic>
-
+/***
+ * 鑷棆閿侊紝鍙兘浼氭湁娌¢攣涓婄殑bug
+ */
 class SpinLock {
 public:
     SpinLock() : m_lock(ATOMIC_FLAG_INIT) {}
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
index 8a1d652..b2acfc4 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -35,17 +35,21 @@
 
 bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) {
 
+    //绛夊緟涓嬪眰ffmpeg灏唕tp鍖呰В鐮佹垚涓哄浘鐗囧悗瑙﹀彂淇″彿,鐒跺悗瑙﹀彂褰撳墠绫荤殑submit
     std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) {
         p_this->m_waitSignal = true;
+        //寰幆锛岀敱鎴愬憳鍙橀噺鏉ョ淮鎶よ繖涓嚎绋嬬殑杩愯鐘舵��
         while (p_this->m_waitSignal) {
 //#TODO wait test
 #ifdef TestCode
             DBG("waitSignal(\"DecoderImageOK\") begin");
 #endif
+            //绛夊緟淇″彿瑙﹀彂
             gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK");
 #ifdef TestCode
             DBG("waitSignal(\"DecoderImageOK\") after");
 #endif
+            /****褰曞儚妯″潡浠g爜*****/
             p_this->m_picCount++;
             //鍑犲紶閫変竴寮犳斁鍏edis
             if (p_this->m_picCount % m_nPicsPickOne != 0) {
@@ -54,6 +58,7 @@
                 p_this->m_picCount.store(0);
             }
 
+//            浠巉fmpeg瑙g爜绫讳腑鑾峰彇鍥剧墖
             p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image);
             {
                 cv::Mat copyMat;
@@ -61,6 +66,8 @@
                 p_this->m_image.copyTo(copyMat);
                 m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat);
             }
+            /*********/
+
             p_this->submit();
         }
         INFO("waitSignalAndEmit is exit...");
@@ -69,6 +76,7 @@
 
     TryCath(
     //--------------鍥芥爣璁惧鎴栧垯鍥芥爣涓嬬骇骞冲彴蹇呴』鏀寔GB28181-2016----------------------------------------------
+    //瑙g爜绾跨▼锛屽彂璧风偣鎾姹傦紝鍚姩ffmpeg瑙g爜妯″潡
         std::thread videoCaptureElementThd([&](VideoCaptureElementWithRtp *p_this, int streamType) {
             DBG("videoCaptureElementThd start...");
             StreamTransType_E etype;
@@ -93,28 +101,36 @@
             }
             DBG("C_RealVideoStart start... m_chanPubID is " << p_this->m_chanPubID << " etype is " << etype
                                                             << " m_userdata is " << m_userdata);
+            //寮�濮嬬偣鎾棰�
             long lrealhandle = C_RealVideoStart(const_cast<char *>(p_this->m_chanPubID.c_str()), etype,
                                                 p_this->streamcallback, m_userdata);
 
             if (lrealhandle != -1) {
+                //鐐规挱鎴愬姛
                 DBG(p_this->m_chanPubID << "  C_RealVideoStart ok ... type is " << etype);
                 p_this->m_running = true;
+                //鍚姩ffmpeg瑙g爜妯″潡
                 p_this->m_fFmpegDecoderJPG.startThd(p_this->m_chanPubID, p_this->m_fps, p_this->m_gpuIdx);
+                //闃诲绾跨▼锛岀瓑寰呭閮ㄨЕ鍙戝叧闂偣鎾�
                 while (p_this->m_running) {
 //                    if(p_this->m_fFmpegDecoderJPG.getRunning()) {
-                        usleep(300000);
+                    usleep(300000);
 //                    }else{
 //                        p_this->m_running = false;
 //                        break;
 //                    }
                 }
                 DBG("videoCaptureElementThd stop ...");
+                //鍋滄鐐规挱
                 C_RealVideoStop(lrealhandle);
+                //灏唚aitSignalAndEmit 绾跨▼閫�鍑�
                 p_this->m_waitSignal = false;
                 DBG("videoCaptureElementThd stop ok...");
             } else {
+                //鐐规挱澶辫触
                 p_this->m_waitSignal = false;
                 p_this->m_running = false;
+                //鍏抽棴ffmpeg瑙g爜妯″潡
                 p_this->m_fFmpegDecoderJPG.stopThd();
                 ERR(p_this->m_chanPubID << " C_RealVideoStart is error lrealhandle is  " << lrealhandle);
             }
@@ -157,13 +173,15 @@
 //        fwrite(data, sizeof(char), datalen, fp11);
     }
 #endif
-
+    //灏嗗簳灞傜粍濂界殑rtp鍖咃紝瀛樺叆ffmpeg涓殑缂撳瓨闃熷垪
     CHKDBG(p_this->m_fFmpegDecoderJPG.pushInfo(data, datalen, p_this->m_chanPubID), true,
            "pushInfo is error !! handle is " << handle << " datatype is " << datatype << " frametype is " << frametype);
 }
 
 void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() {
+
     if ((!m_running) || (!m_waitSignal)) {
+//        鏍规嵁reopenTime鍒ゆ柇鏄惁闇�瑕侀噸鍚�
         if (reopenTime < 0) {
             stop();
             INFO("grabFrame faild, element stopping");
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
index cc6b4b9..4722443 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -17,6 +17,14 @@
 
     class VideoCaptureElementWithRtp : public basic::PipeElement {
     public:
+        /***
+         * VideoCaptureElementWithRtp 瑙嗛瑙g爜
+         * @param chanPubID 閫氶亾鍦�(鎽勫儚鏈篿d)
+         * @param fps
+         * @param streamTransType 璇锋眰鐨勮棰戞祦绫诲瀷
+         * @param gpuIdx gpuindex
+         * @param manager 涓婂眰绫荤殑鎸囬拡
+         */
         explicit VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1,
                                             RtspAnalysManager *manager = nullptr);
 
@@ -28,6 +36,11 @@
          */
         bool getRunning();
 
+
+        /***
+         * 鑾峰彇鍥剧墖
+         * @return
+         */
         cv::Mat getImage();
 
         //淇濆瓨瑙嗛鎺ュ彛,浠嶳tspAnalysManager鍙戣捣璋冪敤
@@ -74,7 +87,7 @@
 
 
         /***
-         * rtp缁勫寘鍥炶皟鍑芥暟
+         * GB28181 SDK rtp缁勫寘鍥炶皟鍑芥暟
          * @param handle
          * @param datatype
          * @param frametype

--
Gitblit v1.8.0