diff --git a/framework/base/media/IAFPacket.h b/framework/base/media/IAFPacket.h index 88beb01bd..bb42bb8d5 100644 --- a/framework/base/media/IAFPacket.h +++ b/framework/base/media/IAFPacket.h @@ -11,7 +11,6 @@ #include #include #include -#include #include extern "C" { @@ -44,8 +43,6 @@ class CICADA_CPLUS_EXTERN IAFPacket { uint8_t *extra_data; int extra_data_size; - AFCodecID codec_id; - void dump(); ~packetInfo() diff --git a/framework/codec/ActiveDecoder.cpp b/framework/codec/ActiveDecoder.cpp index 964139e7d..8511648ff 100644 --- a/framework/codec/ActiveDecoder.cpp +++ b/framework/codec/ActiveDecoder.cpp @@ -26,6 +26,7 @@ int ActiveDecoder::open(const Stream_meta *meta, void *voutObsr, uint64_t flags) } mRunning = true; + mCodecId = meta->codec; #if AF_HAVE_PTHREAD auto func = [this]() -> int { return this->decode_func(); }; mDecodeThread = new afThread(func, LOG_TAG); @@ -156,7 +157,7 @@ bool ActiveDecoder::needDrop(IAFPacket *packet) } // TODO: make sure HEVC not need drop also - if (packet->getInfo().codec_id != AF_CODEC_ID_HEVC) { + if (mCodecId != AF_CODEC_ID_HEVC) { return false; } diff --git a/framework/codec/ActiveDecoder.h b/framework/codec/ActiveDecoder.h index 4fcaefb69..d8f7b77a9 100644 --- a/framework/codec/ActiveDecoder.h +++ b/framework/codec/ActiveDecoder.h @@ -94,6 +94,7 @@ class ActiveDecoder : public Cicada::IDecoder { #endif bool bHolding = false; std::queue> mHoldingQueue{}; + enum AFCodecID mCodecId{AF_CODEC_ID_NONE}; }; diff --git a/framework/demuxer/avFormatDemuxer.cpp b/framework/demuxer/avFormatDemuxer.cpp index 4219422e3..197351548 100644 --- a/framework/demuxer/avFormatDemuxer.cpp +++ b/framework/demuxer/avFormatDemuxer.cpp @@ -299,11 +299,11 @@ namespace Cicada { const uint8_t *new_extradata = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, &new_extradata_size); - int streamIndex = pkt->stream_index; - AVCodecParameters *codecpar = mCtx->streams[streamIndex]->codecpar; if (new_extradata) { AF_LOGI("AV_PKT_DATA_NEW_EXTRADATA"); + int streamIndex = pkt->stream_index; + AVCodecParameters *codecpar = mCtx->streams[streamIndex]->codecpar; av_free(codecpar->extradata); codecpar->extradata = static_cast(av_malloc(new_extradata_size + AV_INPUT_BUFFER_PADDING_SIZE)); memcpy(codecpar->extradata, new_extradata, new_extradata_size); @@ -350,16 +350,8 @@ namespace Cicada { if (needUpdateExtraData) { packet->setExtraData(new_extradata, new_extradata_size); - } else if (!bFillExtraData && (nullptr == packet->getInfo().extra_data) && (nullptr != codecpar->extradata)) { - packet->setExtraData(codecpar->extradata, codecpar->extradata_size); } - if (packet->getInfo().extra_data) { - bFillExtraData = true; - } - - packet->getInfo().codec_id = AVCodec2CicadaCodec(codecpar->codec_id); - if (packet->getInfo().pts != INT64_MIN) { packet->getInfo().timePosition = packet->getInfo().pts - mCtx->start_time; } @@ -554,7 +546,6 @@ namespace Cicada { mPthread->stop(); } - bFillExtraData = false; #endif } diff --git a/framework/demuxer/avFormatDemuxer.h b/framework/demuxer/avFormatDemuxer.h index 2e74a4e0b..b27d6f823 100644 --- a/framework/demuxer/avFormatDemuxer.h +++ b/framework/demuxer/avFormatDemuxer.h @@ -125,7 +125,6 @@ namespace Cicada { std::map> mStreamCtxMap{}; AVIOContext *mPInPutPb = nullptr; bool bOpened{false}; - bool bFillExtraData{false}; int64_t mStartTime = INT64_MIN; std::deque> mPacketQueue{}; std::atomic_bool bEOS{false};