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