2013.3.7
【DM642學習筆記七】緩衝區管理BufferManagement
(參考文檔:The TMS320DM642 VideoPort Mini-Driver ——3.2 Buffer Management)
2013.3.7
認識輸入/輸出視頻數據的緩衝區管理,有利於對視頻圖像採集、處理、顯示的理解。
輸入/輸出驅動程序都要開設至少3個緩衝區。在分配之前,驅動會根據通道配置參數計算出每一個緩衝區的大小,比如說,能容納NTSC格式視頻幀的緩衝區大小爲720*480*2.(如果縮放使能,大小減半.)
通過調用FVID_alloc(),FVID_free() 和FVID_exchange()三個函數,可實現幀緩衝區在應用程序和驅動之間的交換。
1 輸入視頻數據的存儲管理
輸入視頻數據有DM642的VPort口解碼後通過EDMA存儲到SDRAM中,這個過程通過輸入視頻藉口的設備驅動程序完成。在配置輸入視頻藉口的設備驅動程序時,至少開設3個緩衝區,設備驅動程序管理這些緩衝區用於實時視頻數據的採集。緩衝區管理方式如下圖所示。
首先,驅動程序開始運行時,3個緩衝區輪流存放更新的視頻;如a所示。
當應用程序調用FVID_alloc(),驅動程序將存放着最新數據的緩衝區給應用程序使用,另外兩個(其餘)緩衝區輪流存放更新的視頻; a—>b,b—>e(又申請了一次)
當應用程序調用FVID_exchange(),應用程序緩衝區放還給驅動,同時驅動程序將存放着最新視頻的緩衝區交給應用程序。(相當於連續調用了FVID_free(),FVID_alloc()。) b—>c,c—>d.
2 輸出視頻數據的存儲管理
保留1個緩衝區,把其餘初始化在輸出隊列,等待被應用程序使用,驅動重複顯示當前緩衝區; a
調用FVID_alloc(),應用程序從驅動得到一個緩衝區,並往裏放入數據。此時驅動仍顯示當前緩衝區; b
調用FVID_free(),應用程序返還1個準備好顯示的緩衝區給驅動。(驅動顯示完前一個後就把它作爲當前緩衝區);b—>c—>d
調動FVID_exchange(),給驅動一個準備顯示的緩衝區,並從驅動得到一個。(相當於連續調用了FVID_free(),FVID_alloc()) d—>e
簡言之,FVID_exchange()就是,應用程序處理完1幀,將這一幀返還給驅動程序,再讀入新的一幀。
2013.3.7
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.