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

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

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

  • 一、分析:
    • 1、audio_open():設置期望使用到SDL的音頻參數
    • 2、audio_open():使用期望的音頻打開SDL設備
    • 3、audio_open():判斷打開SDL設備后參數的變化
    • 4、audio_open():保存SDL設備使用的音頻參數
    • 5、sdl_audio_callback():SDL音頻讀取回調函數(判斷待拷貝到SDL的緩沖區(is->audio_buf)中是否有數據,否則調用audio_decode_frame()添加數據到is->audio_buf)
    • 6、audio_decode_frame():從Frame(解碼后)隊列中獲取一幀數據
    • 7、audio_decode_frame():獲取這一幀數據的大小(字節)如果不用重采樣操作就將這個數據和數據長度返回上一層了
    • 8、audio_decode_frame():獲取同步調整后采樣數和判斷是否需要重采樣的操作
    • 9、audio_decode_frame():需要重采樣情況下,設置重采樣的輸入輸入緩沖區
    • 10、audio_decode_frame():需要重采樣情況下,設置開啟重采樣的補嘗功能
    • 11、audio_decode_frame():需要重采樣情況下,分配重采樣輸出緩沖區內存
    • 12、audio_decode_frame():需要重采樣情況下,調用swr_convert()進行重采樣操作
    • 13、audio_decode_frame():需要重采樣情況下,將重采樣緩沖區設置到is->audio_buf
    • 13、audio_decode_frame():不需要重采樣情況下,將重采樣緩沖區設置到is->audio_buf
    • 14、audio_decode_frame():設置音頻時鐘相關
    • 15、sdl_audio_callback():將數據拷貝到SDL緩沖區中設置播放,并更新讀取操作的位置索引
    • 16、sdl_audio_callback():最后音頻時鐘設置

一、分析:

1、audio_open():設置期望使用到SDL的音頻參數

在這里插入圖片描述

2、audio_open():使用期望的音頻打開SDL設備

在這里插入圖片描述

3、audio_open():判斷打開SDL設備后參數的變化

在這里插入圖片描述

4、audio_open():保存SDL設備使用的音頻參數

在這里插入圖片描述

5、sdl_audio_callback():SDL音頻讀取回調函數(判斷待拷貝到SDL的緩沖區(is->audio_buf)中是否有數據,否則調用audio_decode_frame()添加數據到is->audio_buf)

在這里插入圖片描述

6、audio_decode_frame():從Frame(解碼后)隊列中獲取一幀數據

在這里插入圖片描述

7、audio_decode_frame():獲取這一幀數據的大小(字節)如果不用重采樣操作就將這個數據和數據長度返回上一層了

在這里插入圖片描述

8、audio_decode_frame():獲取同步調整后采樣數和判斷是否需要重采樣的操作

在這里插入圖片描述

9、audio_decode_frame():需要重采樣情況下,設置重采樣的輸入輸入緩沖區

在這里插入圖片描述

10、audio_decode_frame():需要重采樣情況下,設置開啟重采樣的補嘗功能

在這里插入圖片描述

11、audio_decode_frame():需要重采樣情況下,分配重采樣輸出緩沖區內存

**加粗樣式**

12、audio_decode_frame():需要重采樣情況下,調用swr_convert()進行重采樣操作

在這里插入圖片描述

13、audio_decode_frame():需要重采樣情況下,將重采樣緩沖區設置到is->audio_buf

在這里插入圖片描述

13、audio_decode_frame():不需要重采樣情況下,將重采樣緩沖區設置到is->audio_buf

在這里插入圖片描述

14、audio_decode_frame():設置音頻時鐘相關

在這里插入圖片描述

15、sdl_audio_callback():將數據拷貝到SDL緩沖區中設置播放,并更新讀取操作的位置索引

在這里插入圖片描述

16、sdl_audio_callback():最后音頻時鐘設置

在這里插入圖片描述

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

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

相關文章

緒論(一)

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

利用 dbghelp.dll 生成 dump 文件

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

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

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

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

版權聲明: 可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息。在某些情況下,殺毒軟件會導致InstallShield編譯過程崩潰。比如 McAfee VirusScan Enterprise 8.5.0i版本,在某些情況下會在InstallScript工程編譯過程中,將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分析(從啟動到讀取線程的操作)》 《ffplay分析(視頻解碼線程的操作)》 《ffplay分析(音頻解碼線程的操作)》 《ffplay 分析(音頻從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實例或集群數據遷移時,我們可以采用導出/導入的方式進行數據遷移,但當需要做數據異地災備或雙活時,再使用傳統的方式就不合適了,我們需要借助工具(如redis-port/redis-shake)來完成。”redis-shake介紹redis-sha…

從Live Space搬家到這里

聽說Live Space很快要關閉了,所以從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…

線性結構常規操作(四)

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

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

《ffplay的數據結構分析》 《ffplay分析(從啟動到讀取線程的操作)》 《ffplay分析(視頻解碼線程的操作)》 《ffplay分析(音頻解碼線程的操作)》 《ffplay 分析(音頻從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…

HttpService遠程校驗

今天學了下HttpService,和大家分享一下。HttpService是用來讀取遠程數據的一個對象,數據格式為XML。 我做了一個登陸校驗的功能,主要是通過HttpService將服務器端的用戶數據得到,然后在客戶端判斷輸入的用戶名和密碼是否存在。 主…

免費開源FTP Server軟件FileZilla Server

很多朋友在實際應用中都可能需要用到FTP Server類的軟件,這類軟件有很多,比較知名的有Serv-U、G6等,這里向大家介紹一下FileZilla Server,Windows平臺下一款不錯的FTP Server軟件,而且是免費的、開源的。 S…

Java BigDecimal floatValue()方法與示例

BigDecimal類floatValue()方法 (BigDecimal Class floatValue() method) floatValue() method is available in java.math package. floatValue()方法在java.math包中可用。 floatValue() method is used to convert a BigDecimal to a float value and when this BigDecimal m…

明明的隨機數(快排)

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤100),對于其中重復的數字,只保留一個,把其余相同的數去掉,不同的數…

ffplay分析 (seek操作處理)

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

android 代碼設置 鍵盤適應_硬核軟件,能在電腦上控制iPhone和Android手機

在電腦上控制手機大概已經不是什么新鮮操作,小米、華為都為自家手機和電腦的聯動推出了同屏操作之類的功能,此外也可以通過開源軟件Scrcpy來在Windows或者macOS上實現對安卓手機的控制,這些基本都只針對安卓手機。近期,奇客君發現…