From 2ec7bb8c87f1598ba390f99d01fea059c02a966a Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期四, 25 七月 2019 17:41:51 +0800
Subject: [PATCH] update

---
 csrc/wrapper.cpp |   31 +++++++++++++++++++++++++++++--
 1 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp
index 71de725..72fda1d 100644
--- a/csrc/wrapper.cpp
+++ b/csrc/wrapper.cpp
@@ -201,7 +201,7 @@
             auto in = init_reader(input_url_.c_str());
 
             if (!in) {
-                logIt("ERROR: init_reader!\n");
+                logIt("ERROR: init_reader! url: %s\n", input_url_.c_str());
                 usleep(200000);
                 continue;
             }
@@ -218,6 +218,9 @@
                     pkt.id = id++;
                 }
                 pkt.data = data;
+                if(data != nullptr) {
+                    cacheAVPacket(data->getAVPacket());
+                }
 
                 run_worker(in.get(), pkt);
                 if(!data){
@@ -334,6 +337,30 @@
         auto p = list_pic_.front();
         *data = p.data; *w = p.w; *h = p.h;
         list_pic_.pop_front();
+    }
+
+    void Wrapper::GetPacket(unsigned char **pktData, int *size, int *key){
+        std::lock_guard<std::mutex> l(mutex_avpkt_);
+        if(list_avpkt_.empty()){
+            return;
+        }
+        auto pkt = list_avpkt_.front();
+        *key = pkt.flags & AV_PKT_FLAG_KEY;
+        *size = pkt.size;
+        *pktData = (unsigned char *)malloc(*size);
+        memcpy(*pktData, pkt.data, pkt.size);
+
+        list_avpkt_.pop_front();
+    }
+    void Wrapper::cacheAVPacket(const AVPacket &pkt){
+        std::lock_guard<std::mutex> l(mutex_pic_);
+        while(list_avpkt_.size() > 10){
+//            printf("cacheAVPacket drop packets!!!!!!!!!!\n");
+            for(int i = 0; i < 5; i++){
+                list_avpkt_.pop_front();
+            }
+        }
+        list_avpkt_.emplace_back(pkt);
     }
 
     void Wrapper::run_worker(ffwrapper::FormatIn *in, avpacket &pkt){
@@ -523,7 +550,7 @@
     	    }
     	    *size = pkt.size + extradata_size;
     	    *out = (unsigned char *)malloc(*size);
-	
+
     	    memcpy(*out, extra, extradata_size);
     	    memcpy(*out + extradata_size, pkt.data, pkt.size);
 

--
Gitblit v1.8.0