diff --git a/framework/base/media/AVAFPacket.cpp b/framework/base/media/AVAFPacket.cpp index 604dfde7f..7a3c4b46e 100644 --- a/framework/base/media/AVAFPacket.cpp +++ b/framework/base/media/AVAFPacket.cpp @@ -31,7 +31,7 @@ void AVAFPacket::copyInfo() mInfo.pos = mpkt->pos; } -AVAFPacket::AVAFPacket(AVPacket &pkt) +AVAFPacket::AVAFPacket(AVPacket &pkt, bool isProtected) : mIsProtected(isProtected) { mpkt = av_packet_alloc(); av_init_packet(mpkt); @@ -39,7 +39,7 @@ AVAFPacket::AVAFPacket(AVPacket &pkt) copyInfo(); } -AVAFPacket::AVAFPacket(AVPacket *pkt) +AVAFPacket::AVAFPacket(AVPacket *pkt, bool isProtected) : mIsProtected(isProtected) { mpkt = av_packet_alloc(); av_init_packet(mpkt); @@ -47,7 +47,7 @@ AVAFPacket::AVAFPacket(AVPacket *pkt) copyInfo(); } -AVAFPacket::AVAFPacket(AVPacket **pkt) +AVAFPacket::AVAFPacket(AVPacket **pkt, bool isProtected) : mIsProtected(isProtected) { mpkt = *pkt; *pkt = nullptr; @@ -66,7 +66,7 @@ uint8_t *AVAFPacket::getData() unique_ptr AVAFPacket::clone() { - return unique_ptr(new AVAFPacket(mpkt)); + return unique_ptr(new AVAFPacket(mpkt, mIsProtected)); } int64_t AVAFPacket::getSize() diff --git a/framework/base/media/AVAFPacket.h b/framework/base/media/AVAFPacket.h index 4ca4cbff0..21a888319 100644 --- a/framework/base/media/AVAFPacket.h +++ b/framework/base/media/AVAFPacket.h @@ -14,11 +14,11 @@ extern "C" { class AVAFPacket : public IAFPacket { public: - attribute_deprecated explicit AVAFPacket(AVPacket &pkt); + attribute_deprecated explicit AVAFPacket(AVPacket &pkt, bool isProtected = false); - explicit AVAFPacket(AVPacket *pkt); + explicit AVAFPacket(AVPacket *pkt, bool isProtected = false); - explicit AVAFPacket(AVPacket **pkt); + explicit AVAFPacket(AVPacket **pkt, bool isProtected = false); ~AVAFPacket() override; @@ -26,6 +26,11 @@ class AVAFPacket : public IAFPacket { uint8_t *getData() override; + bool isProtected() override + { + return mIsProtected; + } + std::unique_ptr clone() override; int64_t getSize() override; @@ -36,6 +41,7 @@ class AVAFPacket : public IAFPacket { private: AVPacket *mpkt{nullptr}; + bool mIsProtected; void copyInfo(); }; diff --git a/framework/base/media/IAFPacket.h b/framework/base/media/IAFPacket.h index 99515a028..9ab951c96 100644 --- a/framework/base/media/IAFPacket.h +++ b/framework/base/media/IAFPacket.h @@ -75,6 +75,11 @@ class CICADA_CPLUS_EXTERN IAFPacket { return mbDiscard; } + virtual bool isProtected() + { + return false; + } + packetInfo &getInfo(); void setExtraData(const uint8_t *extra_data, int extra_data_size) diff --git a/framework/demuxer/avFormatDemuxer.cpp b/framework/demuxer/avFormatDemuxer.cpp index 094b6015b..c230df064 100644 --- a/framework/demuxer/avFormatDemuxer.cpp +++ b/framework/demuxer/avFormatDemuxer.cpp @@ -344,7 +344,7 @@ namespace Cicada { pkt->duration = av_rescale_q(pkt->duration, mCtx->streams[pkt->stream_index]->time_base, av_get_time_base_q()); } - packet = unique_ptr(new AVAFPacket(&pkt)); + packet = unique_ptr(new AVAFPacket(&pkt, mSecretDemxuer)); if (needUpdateExtraData) { packet->setExtraData(new_extradata, new_extradata_size); diff --git a/framework/demuxer/avFormatDemuxer.h b/framework/demuxer/avFormatDemuxer.h index 0dffcd56c..47387f957 100644 --- a/framework/demuxer/avFormatDemuxer.h +++ b/framework/demuxer/avFormatDemuxer.h @@ -120,6 +120,7 @@ namespace Cicada { std::string mProbeString{}; AVFormatContext *mCtx = nullptr; int MAX_QUEUE_SIZE = 60; // about 500ms video and audio packet + bool mSecretDemxuer{false}; private: std::atomic_bool mInterrupted{false};