FFmpeg5.0源码阅读——内存池AVBufferPool

文章详细介绍了FFmpeg中AVBuffer和AVBufferRef的结构及其操作函数,包括AVBuffer的data、size、refcount等属性,以及AVBufferRef作为AVBuffer的操作句柄的角色。同时,文章解析了AVBufferPool的内存池机制,如何通过AVBufferPool进行内存的分配和回收,以及其线程安全的管理方式。

摘要:FFmpeg中大多数数据存储比如AVFrame,AVPacket都是通过AVBufferRef管理的,而承载数据的结构为AVBuffer。本文主要通过FFmpeg源码来分析下FFmpeg中AVBuffer相关的实现。
关键字AVBufferAVBufferPoolAVBufferPool

1. AVBufferRef

1.1 AVBuffer结构定义

  AVBuffer声明在libavutil/buffer_internal.h文件中,而相关的操作函数定义在libavutil/buffer.c中。先简单看下AVBuffer的结构:

struct AVBuffer {
   
   
    uint8_t *data;          /**< data described by this buffer */
    size_t size;                /**< size of data in bytes */
    atomic_uint refcount;   //number of existing AVBufferRef instances referring to this **buffer**
    void (*free)(void *opaque, uint8_t *data);//a callback for freeing the data
    void *opaque;//an opaque pointer, to be used by the freeing callback
    int flags;//A combination of AV_BUFFER_FLAG_*
    int flags_internal;//A combination of BUFFER_FLAG_*
};

  该结构比较简单,就是一个含有引用计数的数据类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值