《ffplay的數據結構分析》
《ffplay分析(從啟動到讀取線程的操作)》
《ffplay分析(視頻解碼線程的操作)》
《ffplay分析(音頻解碼線程的操作)》
《ffplay 分析(音頻從Frame(解碼后)隊列取數據到SDL輸出)》
《ffplay分析 (視頻從Frame(解碼后)隊列取數據到SDL輸出)》
《ffplay分析 (音視頻同步:主時鐘為音頻)》
《ffplay分析 (seek操作處理)》
《ffplay源碼(版本:ffmpeg-4.2.1)》
ffplay分析 (暫停 / 播放處理)
- 一、分析:
- 1、read_thread():線程讀取線程暫停時的操作
- 2、audio_decode_frame():sdl_audio_callback()調用audio_decode_frame()判斷is->paused
- 3、sdl_audio_callback():SDL回調函數根據audio_decode_frame()返回值寫入空白數據到SDL
- 4、video_refresh():判斷paused不進行顯示下一幀
- 5、event_loop():(暫停 / 播放控制)SDLK_p、SDLK_SPACE事件處理
- 6、stream_toggle_pause():(暫停 / 播放控制)stream_toggle_pause()暫停與播放時的時鐘控制處理
一、分析:
(1)讀取數據線程暫停時:根據Packet隊列是否達到特定的大小后就不再繼續讀取數據。
(2)音頻播放線程暫停時:根據paused標志判斷寫入空白數據到SDL。
(3)視頻播放線程暫停時:根據paused標志判斷不繼續顯示下一幀。
1、read_thread():線程讀取線程暫停時的操作
2、audio_decode_frame():sdl_audio_callback()調用audio_decode_frame()判斷is->paused
3、sdl_audio_callback():SDL回調函數根據audio_decode_frame()返回值寫入空白數據到SDL
4、video_refresh():判斷paused不進行顯示下一幀
5、event_loop():(暫停 / 播放控制)SDLK_p、SDLK_SPACE事件處理