《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():最后音頻時鐘設置