Обмен технологиями

Структуры, связанные с буфером данных подсчета ссылок 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.

2. Объявление структуры AVBuffer

AVBuffer — это интерфейс прикладного программирования для буферов данных с подсчетом ссылок, которые представляют собой сам буфер данных. Он непрозрачен и не может быть доступен напрямую пользователям, использующим API FFmpeg. Пользователи могут получить к нему доступ только косвенно через AVBufferRef. Но вы можете проверить, описывают ли две разные ссылки один и тот же буфер данных, сравнив два указателя AVBuffer.

Структура AVBuffer объявлена ​​в заголовочном файле libavutil/buffer_internal.h исходного кода FFmpeg (версия исходного кода FFmpeg, используемая для демонстрации в этой статье, — 5.0.3):

struct AVBuffer {
    uint8_t *data; /**