FFmpeg内存模型

问题:
(1)从av_read_frame读取到一个AVPacket后怎么放入队列?
(2)从avcodec_recevice_frame读取到一个AVFrame后又怎么放入队列?
◼ 从现有的Packet拷贝一个新Packet的时候,有两种情况:
①两个Packet的buf引用的是同一数据缓存空间,这时候要注意数据缓存空间的释放问题;
②两个Packet的buf引用不同的数据缓存空间,每个Packet都有数据缓存空间的copy;


◼ 更为精确的模型



实际共同持有的是AVBuffer

FFmpeg内存模型-引用计数
- 对于多个AVPacket共享同一个缓存空间,FFmpeg使用的引用计数的机制(reference-count):
◼ 初始化引用计数为0,只有真正分配AVBuffer的时候,引用计数初始化为1;
◼ 当有新的Packet引用共享的缓存空间时,就将引用计数+1;
◼ 当释放了引用共享空间的Packet,就将引用计数-1;引用计数为0时,就释放掉引用的缓存空间AVBuffer。 - AVFrame也是采用同样的机制。
AVPacket常用API

AVFrame常用API

网友评论