From 18a05d269516a5e33d8460291c2f93e73d95adce Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 26 十二月 2023 10:45:31 +0800 Subject: [PATCH] GetYUV format is NV12 --- csrc/worker/stream.cpp | 50 +++++++++++++++++++++++++------------------------- 1 files changed, 25 insertions(+), 25 deletions(-) diff --git a/csrc/worker/stream.cpp b/csrc/worker/stream.cpp index 1828304..92bc032 100644 --- a/csrc/worker/stream.cpp +++ b/csrc/worker/stream.cpp @@ -1,7 +1,13 @@ #include "stream.hpp" -#include "../ffmpeg/data/CodedData.hpp" +extern "C"{ +#include <libavcodec/avcodec.h> +} + #include "../ffmpeg/format/FormatIn.hpp" +#include "../ffmpeg/data/CodedData.hpp" +#include "../ffmpeg/log/log.hpp" +using namespace logif; namespace cffmpeg_wrap{ stream::stream(ffwrapper::FormatIn *in, const int maxSize) @@ -12,50 +18,44 @@ stream::~stream(){ std::lock_guard<std::mutex> locker(mutex_avpkt_); - list_avpkt_.clear(); + list_pkt_.clear(); } - int stream::SetPacket(std::shared_ptr<ffwrapper::CodedData> data){ - if (data){ - - auto audio = streamRef_->isAudioPkt(data->getAVPacket()); + int stream::SetPacket(const CPacket &pkt){ + if (pkt.data){ // 濡傛灉鍖呮槸闊抽鍖�,浣嗘槸涓嶄娇鐢ㄩ煶棰�,鐩存帴杩斿洖 - if (!audio_ && audio){ + if (!audio_ && streamRef_->isAudioPkt(&pkt.data->getAVPacket())){ return 0; } std::lock_guard<std::mutex> locker(mutex_avpkt_); - list_avpkt_.push_back(data); - - while(list_avpkt_.size() > max_size_){ - list_avpkt_.pop_front(); - while(!list_avpkt_.empty()){ - auto &cache = list_avpkt_.front(); - AVPacket &avpkt = cache->getAVPacket(); - if (!(avpkt.flags & AV_PKT_FLAG_KEY)){ - list_avpkt_.pop_front(); - }else{ - break; - } + list_pkt_.push_back(pkt); + while(list_pkt_.size() > max_size_/2*3){ + CPacket &tmpkt = list_pkt_.front(); + if (tmpkt.data->getAVPacket().flags & AV_PKT_FLAG_KEY){ + break; } + list_pkt_.pop_front(); } - return list_avpkt_.size(); + + return list_pkt_.size(); } return 0; } void stream::GetPacket(unsigned char **pktData, int *size, int *key){ std::lock_guard<std::mutex> l(mutex_avpkt_); - if(list_avpkt_.empty()){ + if(list_pkt_.empty()){ return; } - auto data = list_avpkt_.front(); - auto pkt = data->getAVPacket(); + + auto data = list_pkt_.front(); + list_pkt_.pop_front(); + + auto pkt = data.data->getAVPacket(); *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(); } } \ No newline at end of file -- Gitblit v1.8.0