
AVBuffer是 FFmpeglibavutil中的引用计数数据缓冲原语。音视频管线中,一帧图像、一个压缩包、一块硬件表面往往要在解封装、解码、滤镜、编码之间流动。若每次传递都拷贝数据,内存带宽与 CPU 开销将不可接受。FFmpeg 的设计选择是:数据只有一份,引用可以有很多份,引用计数归零时由最后一个持有者释放。一、两个核心对象AVBuffer API 包含两个职责严格分离的结构体。1.AVBuffer(内部实现)struct AVBuffer { uint8_t *data; size_t size; atomic_uint refcount; void (*free)(void *opaque, uint8_t *data); void *opaque; int flags; int flags_internal; };代表底层数据缓冲本身结构体定义在libavutil/buffer_internal.h,对调用者不透明持有:数据指针与大小、原子引用计数、释放回调、用户上下文调用者不应直接访问该结构体2.