FFmpeg引用計數數據緩沖區相關的結構體:AVBuffer、AVBufferRef簡介

一、AVBuffer結構體的聲明

AVBuffer是一個用于引用計數數據緩沖區的應用程序編程接口,它表示數據緩沖區本身。它是不透明的,不能被直接訪問調用,只能通過AVBufferRef間接訪問它。但是可以通過比較兩個AVBuffer指針來檢查是否兩個不同的引用都描述了相同的數據緩沖區。

AVBuffer結構體聲明在FFmpeg源碼(本文演示用的FFmpeg源碼版本為5.0.3)的頭文件libavutil/buffer_internal.h中:

struct AVBuffer {uint8_t *data; /**< data described by this buffer */size_t size; /**< size of data in bytes *//***  number of existing AVBufferRef instances referring to this buffer*/atomic_uint refcount;/*** a callback for freeing the data*/void (*free)(void *opaque, uint8_t *data);/*** an opaque pointer, to be used by the freeing callback*/void *opaque;/*** A combination of AV_BUFFER_FLAG_**/int flags;/*** A combination of BUFFER_FLAG_**/int flags_internal;
};

成員變量data:指針,指向該緩沖區描述的數據。

成員變量size:data指向的緩沖區的大小,單位為字節。

成員變量refcount:refcount表示引用該緩沖區的現有AVBufferRef實例的數目,為atomic_uint(支持原子操作)的類型。atomic_uint類型表示每次操作refcount這個變量,包括讀取其值、更改其值,這次操作中執行的唯一一條指令是原子的,從而保護這個變量refcount不臟讀臟寫,線程安全。

成員變量void (*free)(void *opaque, uint8_t *data):函數指針,指向釋放數據的回調函數。

成員變量opaque:一個不透明的指針,由釋放數據的回調函數(函數指針void (*free)(void *opaque, uint8_t *data)指向的函數)使用。

成員變量flags:AV_BUFFER_FLAG_*的組合。

成員變量flags_internal:BUFFER_FLAG_*的組合。

二、AVBufferRef結構體的聲明

AVBufferRef是指向數據緩沖區的引用。這個結構體的大小不是公共應用程序二進制接口的一部分,也不意味著可以直接被分配。AVBufferRef對AVBuffer進行了一層封裝,實現了安全機制。用戶應通過AVBufferRef來訪問AVBuffer,而不是直接訪問AVBuffer,來保證安全。

AVBufferRef結構體聲明在FFmpeg源碼的頭文件libavutil/buffer.h中:

/*** A reference to a data buffer.** The size of this struct is not a part of the public ABI and it is not meant* to be allocated directly.*/
typedef struct AVBufferRef {AVBuffer *buffer;/*** The data buffer. It is considered writable if and only if* this is the only reference to the buffer, in which case* av_buffer_is_writable() returns 1.*/uint8_t *data;/*** Size of data in bytes.*/size_t   size;
} AVBufferRef;

成員變量buffer:AVBuffer類型,為數據緩沖區本身。

成員變量data:數據緩沖區。當且僅當這是對緩沖區的唯一引用時,它才被認為是可寫的,在這種情況下函數av_buffer_is_writable()返回1。

成員變量:data指向的緩沖區的大小,單位為字節。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40747.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40747.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40747.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL——三大范式

為什么需要數據規范化&#xff1f; 信息重復 更新異常 插入異常&#xff1a;無法正常顯示信息 刪除異常&#xff1a;丟失有效的信息 三大范式 1. 第一范式&#xff08;1NF&#xff09; 原子性&#xff1a;保證每一列不可再分 2. 第二范式&#xff08;2NF&#xf…

【公益案例展】四川農擔x中電金信——大數據智能風控平臺建設

? 中電金信公益案例 本項目案例由中電金信投遞并參與數據猿與上海大數據聯盟聯合推出的 #榜樣的力量# 《2024中國數據智能產業最具社會責任感企業》榜單/獎項”評選。 大數據產業創新服務媒體 ——聚焦數據 改變商業 1、外部經濟環境帶來的挑戰 近幾年經濟發展和市場需求的挑…

【C語言】—— 文件操作(下)

【C語言】—— 文件操作&#xff08;下&#xff09; 前言&#xff1a;五、文件的順序讀寫5.1、 順序讀寫函數介紹5.2、 f p u t c fputc fputc 函數5.3、 f g e t c fgetc fgetc 函數5.4、 f p u t s fputs fputs 函數5.5、 f g e t s fgets fgets 函數5.6、 f p r i n t f…

2024 年 亞太賽 APMCM (C題)中文賽道國際大學生數學建模挑戰賽 | 量子計算的物流配送 | 數學建模完整代碼+建模過程全解全析

當大家面臨著復雜的數學建模問題時&#xff0c;你是否曾經感到茫然無措&#xff1f;作為2022年美國大學生數學建模比賽的O獎得主&#xff0c;我為大家提供了一套優秀的解題思路&#xff0c;讓你輕松應對各種難題&#xff01; 完整內容可以在文章末尾領取&#xff01; 該段文字…

C++內存管理(候捷)第一講 筆記

內存分配的每一層面 applications可以調用STL&#xff0c;里面會有allocator進行內存分配&#xff1b;也可以使用C 基本工具primitives&#xff0c;比如new, new[], new(), ::operator new()&#xff1b;還可以使用更底層的malloc和free分配和釋放內存。最底層的是系統調用&…

實現好友關注功能的Feed流設計

摘要 在社交網絡應用中&#xff0c;Feed流是展示好友動態的核心功能。本文將探討如何設計一個Feed流系統&#xff0c;以實現好友關注和動態展示的功能。 1. Feed流的基本概念 Feed流是用戶在社交網絡中獲取信息的一種方式&#xff0c;通常按照時間順序展示好友或感興趣的用戶…

Maven Archetype 自定義項目模板:高效開發的最佳實踐

文章目錄 前言一、Maven Archetype二、創建自定義 Maven Archetype三、定制 Archetype 模板四、手動創建 Archetype 模板項目五、FAQ5.1 如何刪除自定義的模板5.2 是否可以在模板中使用空文件夾 六、小結推薦閱讀 前言 在軟件開發中&#xff0c;標準化和快速初始化項目結構能夠…

調用asyncio.to_thread后上下文依然一致嗎

使用Python的asyncio時&#xff0c;可以把一個同步的函數放到線程池中執行從而避免這個函數阻塞asyncio自身的事件循環。比如可以把requests庫的請求放進去 async def to_thread_do_request(url):return await asyncio.to_thread(requests.get, url)這個to_thread_do_request方…

14-20 Vision Transformer用AI的畫筆描繪新世界

概述 毫無疑問,目前最受關注且不斷發展的最重要的主題之一是使用人工智能生成圖像、視頻和文本。大型語言模型 (LLM) 已展示出其在文本生成方面的卓越能力。它們在文本生成方面的許多問題已得到解決。然而,LLM 面臨的一個主要挑戰是它們有時會產生幻覺反應。 最近推出的新模…

分布式計算、異構計算與算力共享

目錄 算力 算力共享的技術支撐 云計算技術 邊緣計算技術 區塊鏈技術 分布式計算、異構計算與算力共享 分布式計算:計算力的“集團軍作戰” 異構計算:計算力的“多兵種協同” 算力共享:計算力的“共享經濟” 深入融合,共創計算新紀元 算力共享對科研領域的影響 …

openmetadata1.3.1 自定義連接器 開發教程

openmetadata自定義連接器開發教程 一、開發通用自定義連接器教程 官網教程鏈接&#xff1a; 1.https://docs.open-metadata.org/v1.3.x/connectors/custom-connectors 2.https://github.com/open-metadata/openmetadata-demo/tree/main/custom-connector &#xff08;一&…

Matplotlib 文本

可以使用 xlabel、ylabel、text向圖中添加文本 mu, sigma 100, 15 x mu sigma * np.random.randn(10000)# the histogram of the data n, bins, patches plt.hist(x, 50, densityTrue, facecolorg, alpha0.75)plt.xlabel(Smarts) plt.ylabel(Probability) plt.title(Histo…

Qt讀取ini格式配置文件的類設計

目錄 1.引言 2.QSettings 2.1.功能特點 2.2.基本用法 3.讀取ini文件配置通用類設計 3.1.設計要點 3.2.完整實現 3.3.調用方法 4.總結 1.引言 在編寫應用程序的時&#xff0c;有些參數需要用戶配置&#xff0c;那么這些參數就涉及到存儲了&#xff0c;單從存儲來講&…

git 還原被刪除的分支

在多人項目開發中&#xff0c;有一次碰到忘記合并到master分支了&#xff0c;直接就把開發分支給刪除了&#xff0c;現在記錄下怎么還原被刪除的分支 必須保證刪除的分支之前已經被推送到了遠程倉庫 # 找出被刪除分支的最后一個提交的哈希值 git reflog show# 找到提交哈希值…

2024/07/04

1、梳理筆記(原創) 2、終端輸入一個日期&#xff0c;判斷是這一年的第幾天 scanf("%d-%d-%d",&y,&m,&d); 閏年2月29天&#xff0c;平年2月28天 #include<stdio.h> int main(int argc, char const *argv[]) {int y0,m0,d0;printf("please ente…

析構函數和拷貝構造函數

文章目錄 析構函數1.析構函數的定義&#xff1a;2.析構函數的語法&#xff1a;3.析構函數的特性&#xff1a; 拷貝構造函數1.拷貝構造函數的定義&#xff1a;2.拷貝構造函數的語法3.拷貝構造函數的特性(1)拷貝構造函數是構造函數的一個重載形式**(這個其實也很好理解&#xff0…

鴻蒙開發設備管理:【@ohos.thermal (熱管理)】

熱管理 該模塊提供熱管理相關的接口&#xff0c;包括熱檔位查詢及注冊回調等功能。 說明&#xff1a; 本模塊首批接口從API version 8開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔&#xff1a;gitee.com/li-shi…

如何實現圖片垂直旋轉90度的問題

非常簡單的問題&#xff0c;一串代碼就可以解決。復制修改一下就可以直接使用&#xff0c;一個簡單的小demo。寫項目的時候需要寫的功能&#xff0c;不到二十行代碼就可以實現。 <html> <head><title>旋轉圖片</title><meta http-equiv"Conte…

Land survey boundary report (template)

Land survey boundary report (template) 土地勘測定界報告&#xff08;模板&#xff09;.doc

【高校科研前沿】南京地理與湖泊研究所博士后夏凡為第一作者在環境科學與水資源領域Top期刊發文:鈣對云南洱海溶解有機質與浮游細菌相互作用的調控作用

文章簡介 論文名稱&#xff1a;Calcium regulates the interactions between dissolved organic matter and planktonic bacteria in Erhai Lake, Yunnan Province, China 第一作者及單位&#xff1a;夏凡&#xff08;博士后|中國科學院南京地理與湖泊研究所&#xff09; 通訊…