ffmpeg 写入avpacket时候,即av_interleaved_write_frame方法是如何不需要 业务层释放avpacket的 逻辑分析
我们在通过 av_interleaved_write_frame方法 写入 avpacket的时候,通常不需要关心 avpacket的生命周期。
本文分析一下内部实现的部分。
----> 代表一个内部实现。
A(){
B();
C();
}
B(){
D();
}
表示为:
A
---->B();
---->D();
---->C();
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
---->write_packets_common(s, pkt, 1/*interleaved*/);
---->write_packet_common(s, st, pkt, interleaved);
---->interleaved_write_packet(s, pkt, 0);
---->interleave_packet(s, &opkt, pkt, flush); 生命周期此方法内部
---->ff_interleave_packet_per_dts(s, out, in, flush);
---->ff_interleave_add_packet(s, pkt, interleave_compare_dts)
----> av_packet_move_ref(&this_pktl->pkt, pkt);//就是这里
---->pkt = NULL;//最后还置为nullptr了