问题:从av_read_frame中读到一个AVPacket如何放入Packet queue
AVPacket复制分两种情况,一种是深拷贝,一种是浅拷贝,主要介绍一下浅拷贝的情况

AVPacket中有一个AVBufferRef类型的指针,这个指针指向了AVBuffer,AVBuffer中有一个引用计数,用来统计有多少个AVPacket引用到这个buffer。(AVPacket引用到同一个AVBuffer,共同拥有的是AVBuffer而不是AVBufferRef)
AVPacket常用API
| AVPacket* av_packet_alloc(void) | 分配AVPacket,不分配AVBuffer和AVBuffer无关 |
| void av_packet_free(AVPacket **pkt) | 释放AVPacket ,其中也调用了av_packet_unref,会释放AVBuffer |
| void av_init_packet(AVPacket *pkt) | 只初始化AVPacket字段,buffer会设置为null |
| int av_new_packet(AVPacket* pkt,int size) | 会给AVPacket中的AVBuffer申请空间 |
| int av_packet_ref(AVPacket *dst, const AVPacket *src) | 增加引用计数,将原拷贝给目标 |
| void av_packet_unref(AVPacket *pkt) | 减少引用计数 |
| void av_packet_move_ref(AVPacket *dst, AVPacket *src) | 转移引用计数,转移会直接将dst中的AVBufferRef给到src |
浙公网安备 33010602011771号