技术共享

FFmpeg引用计数数据缓冲区相关的结构体:AVBuffer、AVBufferRef简介

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

=================================================================

FFmpeg内存管理相关的源码分析:

FFmpeg中内存分配和释放相关的源码:av_malloc函数、av_mallocz函数、av_free函数和av_freep函数分析

FFmpeg引用计数数据缓冲区相关的结构体:AVBuffer、AVBufferRef简介

FFmpeg源码:buffer_create、av_buffer_create、av_buffer_default_free、av_buffer_alloc、av_buffer_allocz函数分析

FFmpeg源码:av_buffer_ref、av_buffer_unref函数分析

=================================================================

一、引言

FFmpeg源码里面很多结构体,比如AVPacket、AVFrame都使用了AVBufferRef和AVBuffer来管理缓冲区。AVBuffer里面通过成员变量refcount记录资源使用的次数,控制资源的释放。本文对AVBuffer和AVBufferRef结构体进行简介。

二、AVBuffer结构体的声明

AVBuffer是一个用于引用计数数据缓冲区的应用程序编程接口,它表示数据缓冲区本身。它是不透明的,不能被使用FFmpeg API的用户直接访问调用。用户只能通过AVBufferRef间接访问它。但是可以通过比较两个AVBuffer指针来检查是否两个不同的引用都描述了相同的数据缓冲区。

AVBuffer结构体声明在FFmpeg源码(本文演示用的FFmpeg源码版本为5.0.3)的头文件libavutil/buffer_internal.h中:

struct AVBuffer {
    uint8_t *data; /**