diff --git a/src/Extension/Factory.cpp b/src/Extension/Factory.cpp index f69eead7..9904a784 100644 --- a/src/Extension/Factory.cpp +++ b/src/Extension/Factory.cpp @@ -205,6 +205,9 @@ Frame::Ptr Factory::getFrameFromPtr(CodecId codec, const char *data, size_t byte Frame::Ptr Factory::getFrameFromBuffer(CodecId codec, Buffer::Ptr data, uint64_t dts, uint64_t pts) { auto frame = Factory::getFrameFromPtr(codec, data->data(), data->size(), dts, pts); + if(!frame){ + return nullptr; + } return std::make_shared(frame, false, std::move(data)); } diff --git a/src/Rtp/Decoder.cpp b/src/Rtp/Decoder.cpp index 7c20514d..e4df841b 100644 --- a/src/Rtp/Decoder.cpp +++ b/src/Rtp/Decoder.cpp @@ -115,9 +115,11 @@ void DecoderImp::onDecode(int stream, int codecid, int flags, int64_t pts, int64 onFrame(stream, frame); return; } - ref.second.inputFrame(frame, [&,codec](uint64_t dts, uint64_t pts, const Buffer::Ptr &buffer, bool) { - onFrame(stream, Factory::getFrameFromBuffer(codec, buffer, dts, pts)); - }); + if(ref.first){ + ref.second.inputFrame(frame, [&](uint64_t dts, uint64_t pts, const Buffer::Ptr &buffer, bool) { + onFrame(stream, Factory::getFrameFromBuffer(codec, buffer, dts, pts)); + }); + } } #else void DecoderImp::onDecode(int stream,int codecid,int flags,int64_t pts,int64_t dts,const void *data,size_t bytes) {}