1.FFmpeg内存模型

在这里插入图片描述
AVPacket是压缩数据的结构体(解码前或编码后的结构体)

AVFrame是保存音频/视频帧信息的结构体

2.AVPacket常用API

AVPacket *av_packet_alloc(void); //分配AVPacket 这个时候和buffer没有关系

void av_packet_free(AVPacket **pkt); //释放AVPacket 和_alloc对应

void av_init_packet(AVPacket *pkt); //初始化AVPacket 只是单纯初始化pkt字段

int av_new_packet(AVPacket *pkt, int size); //给AVPacket的buf分配内存,引用计数初始化为1

int av_packet_ref(AVPacket *dst, const AVPacket *src); //增加引用计数

void av_packet_unref(AVPacket *pkt); //减少引用计数

void av_packet_move_ref(AVPacket *dst, AVPacket *src); //转移引用计数

AVPacket *av_packet_clone(const AVPacket *src); //等于av_packet_alloc()+av_packet_ref()

3.AVFrame常用API

AVFrame *av_frame_alloc(void); //分配AVFrame

void av_frame_free(AVFrame **frame); //释放AVFrame

int av_frame_ref(AVFrame *dst, const AVFrame *src); //增加引用计数

void av_frame_unref(AVFrame *frame); //减少引用计数

void av_frame_move_ref(AVFrame *dst, AVFrame *src); //转移引用计数

int av_frame_get_buffer(AVFrame *frame, int align); //根据AVFrame分配内存

AVFrame *av_frame_clone(const AVFrame *src); //等于av_frame_alloc()+av_frame_ref()

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐