ffplay分析(音頻解碼線程的操作)

《ffplay的數據結構分析》
《ffplay分析(從啟動到讀取線程的操作)》
《ffplay分析(視頻解碼線程的操作)》
《ffplay 分析(音頻從Frame(解碼后)隊列取數據到SDL輸出)》
《ffplay分析 (視頻從Frame(解碼后)隊列取數據到SDL輸出)》
《ffplay分析 (音視頻同步:主時鐘為音頻)》
《ffplay分析 (暫停 / 播放處理)》
《ffplay分析 (seek操作處理)》
《ffplay源碼(版本:ffmpeg-4.2.1)》

ffplay分析(音頻解碼線程的操作)

  • 一、分析:
    • 1、stream_component_open():開啟音頻解碼線程audio_thread()
    • 2、audio_thread():解碼前分配AVframe工作
    • 3、audio_thread():調用decoder_decode_frame()獲取解碼后的一幀數據
    • 4、audio_thread():循環調用avcodec_receive_frame()獲取解碼完成幀
    • 5、audio_thread():avcodec_receive_frame()獲取的結果判斷是否正常返回,還是退出循環往下走
    • 6、audio_thread():從Packet(解碼前)隊列獲取新的Packet
    • 7、audio_thread():獲取的Packet判斷是否是flush Packet
    • 8、audio_thread():調用avcodec_send_packet() 進行解碼
    • 9、audio_thread():調用frame_queue_peek_writable()獲取可寫Frame,設置相應參數
    • 10、audio_thread():調用av_frame_move_ref()移動AVFrame->buffer,調用frame_queue_push()表示添加到Frame(解碼后)隊列
    • 11、audio_thread():音頻解碼線程結束處理,除了請求退出或異常退出,否則不會的。

)

一、分析:

1、stream_component_open():開啟音頻解碼線程audio_thread()

在這里插入圖片描述

2、audio_thread():解碼前分配AVframe工作

在這里插入圖片描述

3、audio_thread():調用decoder_decode_frame()獲取解碼后的一幀數據

在這里插入圖片描述

4、audio_thread():循環調用avcodec_receive_frame()獲取解碼完成幀

在這里插入圖片描述
在這里插入圖片描述

5、audio_thread():avcodec_receive_frame()獲取的結果判斷是否正常返回,還是退出循環往下走

在這里插入圖片描述

6、audio_thread():從Packet(解碼前)隊列獲取新的Packet

在這里插入圖片描述

7、audio_thread():獲取的Packet判斷是否是flush Packet

在這里插入圖片描述

8、audio_thread():調用avcodec_send_packet() 進行解碼

在這里插入圖片描述

9、audio_thread():調用frame_queue_peek_writable()獲取可寫Frame,設置相應參數

在這里插入圖片描述

10、audio_thread():調用av_frame_move_ref()移動AVFrame->buffer,調用frame_queue_push()表示添加到Frame(解碼后)隊列

在這里插入圖片描述

11、audio_thread():音頻解碼線程結束處理,除了請求退出或異常退出,否則不會的。

在這里插入圖片描述

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

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

相關文章

More Effective C++ (運算符)

4.1&#xff1a;謹慎定義類型轉換函數<1>容易的方法是利用一個最新的編譯器特性&#xff1a;explicit關鍵字<2>C編譯器把">>"作為一個符號來解釋&#xff0c;在兩個">"間沒有空格&#xff0c;語句會產生語法錯誤。<3>隱式類型轉…

大綱(二)

一、數據結構就是邏輯結構存儲結構(物理結構)相應操作(算法實現) 二、邏輯結構 集合1:1 線性結構1:n 樹m:n 圖 主要是可以畫到紙上進行分析的結構圖就是邏輯結構&#xff0c;分析問題可以得出唯一一個邏輯結構 三、存儲結構(物理結構) 順序存儲結構(例如:線性表)鏈式存儲結…

php微信獲取mediaid超出限制_Python實現每日微信自動打卡

眾所周知&#xff0c;因為疫情的原因&#xff0c;很多高校和公司都要求員工每日在微信上進行打卡&#xff0c;來匯報自己的當前身體狀態和所處地區。但絕大多數情況下&#xff0c;每天打卡的信息其實是不會變的&#xff0c;我們要做的就是進入公眾號——自動登錄點進打卡頁面—…

[原創]INI文件的讀寫操作

INI文件的讀寫操作在程序開發中&#xff0c;很多人會把參數保存為ini文件格式&#xff0c;ini文件的一個好處是可以保存為一個結構體主結構&#xff0c;如 [User] Nametest UserIdtest [Server] ServerIp127.0.0.1 ServerPort80 …… 很方便也很容易區分&#xff0c;而且不同節…

Java ResourceBundle keySet()方法及示例

ResourceBundle類keySet()方法 (ResourceBundle Class keySet() method) keySet() method is available in java.util package. keySet()方法在java.util包中可用。 keySet() method is used to get all the existing keys from this ResourceBundle and its super bundles to …

ffplay 分析(音頻從Frame(解碼后)隊列取數據到SDL輸出)

《ffplay的數據結構分析》 《ffplay分析&#xff08;從啟動到讀取線程的操作&#xff09;》 《ffplay分析&#xff08;視頻解碼線程的操作&#xff09;》 《ffplay分析&#xff08;音頻解碼線程的操作&#xff09;》 《ffplay分析 &#xff08;視頻從Frame(解碼后)隊列取數據到…

緒論(一)

一、問題驅動—>畫出唯一的邏輯結構—>定義存儲結構—>實現相應的操作 二、算法—>(定義\特點)步驟—>實現—>評價標準 算法有五大特點&#xff1a; 可行性確定性有窮性(有限性)0個或0個以上的輸入至少一個以上的輸出 評價標準&#xff1a; 時間復雜度 …

利用 dbghelp.dll 生成 dump 文件

dbghelp.dll windows的系統目錄system32下&#xff0c;都有dbghelp.dll&#xff0c;但在實際使用時&#xff0c;往往會讓exe加載自己目錄下的dll&#xff0c;以避免系統目錄下的dll版本不一導致的程序異常。 故一般都是用LoadLibrary()的方式加載Dll&#xff0c;先加載當前目錄…

pandas 根據列名索引多列數據_Pandas 數據聚合與分組運算[groupby+apply]速查筆記

利用Pandas將數據進行分組&#xff0c;并將各組進行聚合或自定義函數處理。Pandas中Groupby分組與聚合過程導入模塊import pandas as pd縮寫df表示Dataframe對象分組df.groupby(col1)&#xff1a; 根據col1列將df全部列分組&#xff08;默認&#xff1a;axis0行&#xff09;df[…

殺毒軟件對InstallShield編譯過程以及安裝包運行的影響

版權聲明: 可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息。在某些情況下&#xff0c;殺毒軟件會導致InstallShield編譯過程崩潰。比如 McAfee VirusScan Enterprise 8.5.0i版本&#xff0c;在某些情況下會在InstallScript工程編譯過程中&#xff0c;將ISSe…

Java FileInputStream close()方法與示例

FileInputStream類close()方法 (FileInputStream Class close() method) close() method is available in java.io package. close()方法在java.io包中可用。 close() method is used to close this FileInputStream and free all system resources linked with this stream. c…

ffplay分析 (視頻從Frame(解碼后)隊列取數據到SDL輸出)

《ffplay的數據結構分析》 《ffplay分析&#xff08;從啟動到讀取線程的操作&#xff09;》 《ffplay分析&#xff08;視頻解碼線程的操作&#xff09;》 《ffplay分析&#xff08;音頻解碼線程的操作&#xff09;》 《ffplay 分析&#xff08;音頻從Frame(解碼后)隊列取數據到…

線性結構節點類型(三)

一、線性結構 特點 第一個數據元素沒有前驅最后一個數據元素沒有后繼1:1邏輯上相鄰、物理上也相鄰 類型 線性表(就是一張二維表)(為主研究對象)棧隊列 學習方法 畫邏輯結構—>定義存儲結構—>實現相應的操作 二、線性表 線性結構 邏輯上的1:1存儲結構 順序存儲結…

PL/SQL詳細介紹

PL/SQL筆記PL/SQL塊中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事務控制語句(COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DDL語句(CREATE,ALTER,DROP)和DCL語句(GRANT,REVOKE) 1.檢索單行數據 1.1使用標量變量接受數據 v_ename emp.ename%type; v_sal emp.sal%…

redis 備份導出rdb_Redis數據遷移利器之redisshake

“當需要進行Redis實例或集群數據遷移時&#xff0c;我們可以采用導出/導入的方式進行數據遷移&#xff0c;但當需要做數據異地災備或雙活時&#xff0c;再使用傳統的方式就不合適了&#xff0c;我們需要借助工具(如redis-port/redis-shake)來完成。”redis-shake介紹redis-sha…

從Live Space搬家到這里

聽說Live Space很快要關閉了&#xff0c;所以從http://peking2toronto.spaces.live.com/搬家到這里。轉載于:https://www.cnblogs.com/pentest/archive/2010/08/29/1811726.html

java 方法 示例_Java Collectionsfrequency()方法與示例

java 方法 示例集合類的frequency()方法 (Collections Class frequency() method) frequency() method is available in java.util package. frequency()方法在java.util包中可用。 frequency() method is used to return the frequency of the given Object (obj) to the give…

線性結構常規操作(四)

定義存儲結構(以單向鏈表為主) 對于鏈表的定義&#xff0c;通過結構體進行定義&#xff0c;包括兩部分&#xff0c;一是數據域&#xff0c;另一個就是指針&#xff0c;用于指向下一個節點。 1&#xff0c;創建鏈表 定義鏈表&#xff1a; struct nodesq{int data;//數據域&a…

ffplay分析 (暫停 / 播放處理)

《ffplay的數據結構分析》 《ffplay分析&#xff08;從啟動到讀取線程的操作&#xff09;》 《ffplay分析&#xff08;視頻解碼線程的操作&#xff09;》 《ffplay分析&#xff08;音頻解碼線程的操作&#xff09;》 《ffplay 分析&#xff08;音頻從Frame(解碼后)隊列取數據到…

源碼 狀態機_[源碼閱讀] 阿里SOFA服務注冊中心MetaServer(1)

[源碼閱讀] 阿里SOFA服務注冊中心MetaServer(1)0x00 摘要0x01 服務注冊中心1.1 服務注冊中心簡介1.2 SOFARegistry 總體架構1.3 為什么要分層0x02 MetaServer2.1簡介2.2 問題0x03 代碼結構0x04 啟動運行4.1 集成部署4.2 獨立部署0x05 總體邏輯5.1 程序主體5.2 配置0x06 啟動6.1…