From 979bc003bce710bf300bc2bd87a8278585678763 Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期四, 07 三月 2019 14:47:14 +0800
Subject: [PATCH] GB28181集成完成。录像bug暂未解决,已注释

---
 QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp |   82 ++++++++++++++++++++++++----------------
 1 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
index ebf1de9..c353675 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -44,7 +44,6 @@
 }
 
 BASICGB28181::FFmpegDecoderJPG::~FFmpegDecoderJPG() {
-
     while (m_rtpQueue.count_queue()) {
         m_rtpQueue.popNotWait();
     }
@@ -65,10 +64,20 @@
         info->buffLen = datalen;
         info->camIdx = camIdx;
         memcpy(info->buff, data, datalen);
+    {
+//        FILE *fp11 = NULL;
+//        if (!fp11) {
+//        fp11 = fopen(camIdx.c_str(), "a+");
+//    }
+//        fwrite(data, sizeof(char), datalen, fp11);
+//        fclose(fp11);
+    }
+
 #ifdef TestCode
         DBG(" m_rtpQueue.push before ");
 #endif
-        m_rtpQueue.push(info);
+        m_rtpQueue.
+        push(info);
 #ifdef TestCode
         DBG(" m_rtpQueue.push after ");
 #endif
@@ -128,6 +137,10 @@
     return bufsize;
 }
 
+/***
+ * 瑙g爜绾跨▼
+ * @param p_this
+ */
 void BASICGB28181::FFmpegDecoderJPG::BareFlowDecoderThd(FFmpegDecoderJPG *p_this) {
     DBG(p_this->m_camIdx << "  BareFlowDecoderThd ok ... gpuIdx is " << p_this->m_gpuIdx);
     p_this->m_running = true;
@@ -188,25 +201,25 @@
         //# todo save package
         p_this->frame_number++;
 
-        //DBG("GotPicture "<<m_camId<<":"<<frame_number);
-        //鏀惧湪姝ゅ鏄洜涓轰箣鍓嶆斁鍦ㄥ墠闈�,鏀跺埌鐨勫抚涓嶅畬鎴�
-        p_this->SaveToPacketVector(pkt);
-        p_this->CheckSave();
-
         int err6 = avcodec_send_packet(ctx, &pkt);
-        av_packet_unref(&pkt);
+//        av_packet_unref(&pkt);
         int err7 = avcodec_receive_frame(ctx, frame);
         if ((err7 == AVERROR(EAGAIN)) || (err5 < 0) || (err6 < 0)) {
             ERR(" error << err7:" << err7 << "  err5: " << err5 << " err6: " << err6);
             usleep(40000);
             continue;
         }
+        //DBG("GotPicture "<<m_camId<<":"<<frame_number);
+        //鏀惧湪姝ゅ鏄洜涓轰箣鍓嶆斁鍦ㄥ墠闈�,鏀跺埌鐨勫抚涓嶅畬鎴�
+        p_this->SaveToPacketVector(pkt);
+        p_this->CheckSave();
+
 //        BASICGB28181::avframe_to_cvmat(frame).copyTo(p_this->m_image);
         p_this->m_image = std::move(BASICGB28181::avframe_to_cvmat(frame));
 
 #ifdef TestCode
         {
-//            TestCode
+//            TestCode 娴嬭瘯浠g爜淇濆瓨鍥剧墖鍒版湰鍦�
             ClockTimer cl("TestCode");
             std::string strNewTime2 = AppUtil::getTimeUSecString();
             cv::putText(p_this->m_image, strNewTime2, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN,
@@ -228,7 +241,7 @@
 #ifdef TestCode
         DBG("emitSigal(\"DecoderImageOK\") begin");
 #endif
-
+        //瑙﹀彂淇″彿
         gSignalLock.emitSigal(p_this->m_camIdx + "DecoderImageOK");
 //#ifdef TestCode
 //        DBG("emitSigal(\"DecoderImageOK\") after");
@@ -278,7 +291,7 @@
 
 bool BASICGB28181::FFmpegDecoderJPG::stopThd() {
     TryCath(
-        DBG(m_camIdx << "  FFmpegDecoderJPG stopThd ... ");
+        DBG(m_camIdx << "  FFmpegDecoderJPG stopThd ... " << m_camIdx);
         m_running = false;
     );
     return true;
@@ -380,9 +393,11 @@
         int64_t firstKeyFrameDts = m_packetsVec[0].m_packet.dts;
         for (const auto &item:m_packetsVec) {
             if (item.m_frameId < lastFrameId) {
+                DBG("item.m_frameId < lastFrameId   " << item.m_frameId << "  " << lastFrameId);
                 conversion(const_cast<AVPacket *> (&item.m_packet), firstKeyFramePts, firstKeyFrameDts, video_st);
                 av_write_frame(m_pOutFmtCtx, &item.m_packet);
             } else {
+                DBG("item.m_frameId > lastFrameId   " << item.m_frameId << "  " << lastFrameId);
                 break;
             }
         }
@@ -440,6 +455,7 @@
     m_frameIndex++;
     m_packetsVec.push_back({m_frameIndex, newPacket});
     if (newPacket.flags & AV_PKT_FLAG_KEY) {
+        DBG("newPacket.flags & AV_PKT_FLAG_KEY   ");
         m_last_I_FrameId = m_frameIndex;
     }
 }
@@ -460,27 +476,27 @@
     */
     m_pOutVideo_stream = avformat_new_stream(m_pOutFmtCtx, NULL);
     {
-//        AVCodecContext *c;
-//        c = m_pOutVideo_stream->codec;
-//        c->bit_rate = 400000;
-//        c->codec_id = video_st->codec->codec_id;
-//        c->codec_type = video_st->codec->codec_type;
-//        c->time_base.num = video_st->time_base.num;
-//        c->time_base.den = video_st->time_base.den;
-//        fprintf(stderr, "time_base.num = %d time_base.den = %d\n", c->time_base.num, c->time_base.den);
-//        c->width = video_st->codec->width;
-//        c->height = video_st->codec->height;
-//        c->pix_fmt = video_st->codec->pix_fmt;
-//        printf("%d %d %d", c->width, c->height, c->pix_fmt);
-//        c->flags = video_st->codec->flags;
-//        c->flags |= CODEC_FLAG_GLOBAL_HEADER;
-//        c->me_range = video_st->codec->me_range;
-//        c->max_qdiff = video_st->codec->max_qdiff;
-//
-//        c->qmin = video_st->codec->qmin;
-//        c->qmax = video_st->codec->qmax;
-//
-//        c->qcompress = video_st->codec->qcompress;
+        AVCodecContext *c;
+        c = m_pOutVideo_stream->codec;
+        c->bit_rate = 400000;
+        c->codec_id = video_st->codec->codec_id;
+        c->codec_type = video_st->codec->codec_type;
+        c->time_base.num = video_st->time_base.num;
+        c->time_base.den = video_st->time_base.den;
+        fprintf(stderr, "time_base.num = %d time_base.den = %d\n", c->time_base.num, c->time_base.den);
+        c->width = video_st->codec->width;
+        c->height = video_st->codec->height;
+        c->pix_fmt = video_st->codec->pix_fmt;
+        printf("%d %d %d", c->width, c->height, c->pix_fmt);
+        c->flags = video_st->codec->flags;
+        c->flags |= CODEC_FLAG_GLOBAL_HEADER;
+        c->me_range = video_st->codec->me_range;
+        c->max_qdiff = video_st->codec->max_qdiff;
+
+        c->qmin = video_st->codec->qmin;
+        c->qmax = video_st->codec->qmax;
+
+        c->qcompress = video_st->codec->qcompress;
     }
     ret = avio_open(&m_pOutFmtCtx->pb, filename, AVIO_FLAG_WRITE);
     if (ret < 0) {
@@ -488,7 +504,7 @@
         return -1;
     }
 
-    avformat_write_header(m_pOutFmtCtx, NULL);
+    DBG(" avformat_write_header   " << avformat_write_header(m_pOutFmtCtx, NULL));
 
     m_bstartWrite = true;
     m_bFirstKeyFrame = true;

--
Gitblit v1.8.0