技術共有

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 を通じて間接的にのみアクセスできます。ただし、2 つの AVBuffer ポインターを比較することで、2 つの異なる参照が同じデータ バッファーを記述しているかどうかを確認できます。

AVBuffer 構造は、FFmpeg ソース コードのヘッダー ファイル libavutil/buffer_internal.h で宣言されています (この記事のデモに使用されている FFmpeg ソース コードのバージョンは 5.0.3 です)。

struct AVBuffer {
    uint8_t *data; /**