기술나눔

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 함수 분석

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

I. 소개

AVPacket 및 AVFrame과 같은 FFmpeg 소스 코드의 많은 구조는 AVBufferRef 및 AVBuffer를 사용하여 버퍼를 관리합니다. AVBuffer는 멤버 변수 refcount를 통해 리소스 사용 횟수를 기록하고 리소스 해제를 제어합니다. 이 문서에서는 AVBuffer 및 AVBufferRef 구조를 소개합니다.

2. AVBuffer 구조 선언

AVBuffer는 데이터 버퍼 자체를 나타내는 참조 카운트 데이터 버퍼용 애플리케이션 프로그래밍 인터페이스입니다. 불투명하며 FFmpeg API를 사용하는 사용자가 직접 액세스할 수 없습니다. 사용자는 AVBufferRef를 통해 간접적으로만 액세스할 수 있습니다. 그러나 두 개의 AVBuffer 포인터를 비교하여 두 개의 서로 다른 참조가 동일한 데이터 버퍼를 설명하는지 확인할 수 있습니다.

AVBuffer 구조는 FFmpeg 소스 코드의 헤더 파일 libavutil/buffer_internal.h에서 선언됩니다(이 기사에서 데모에 사용된 FFmpeg 소스 코드 버전은 5.0.3입니다).

struct AVBuffer {
    uint8_t *data; /**