【DM642學習筆記七】緩衝區管理BufferManagement

   (參考文檔:The TMS320DM642 VideoPort Mini-Driver ——3.2 Buffer Management)
   認識輸入/輸出視頻數據的緩衝區管理,有利於對視頻圖像採集、處理、顯示的理解。
   輸入/輸出驅動程序都要開設至少3個緩衝區。在分配之前,驅動會根據通道配置參數計算出每一個緩衝區的大小,比如說,能容納NTSC格式視頻幀的緩衝區大小爲720*480*2.(如果縮放使能,大小減半.)
  通過調用FVID_alloc(),FVID_free() 和FVID_exchange()三個函數,可實現幀緩衝區在應用程序和驅動之間的交換。

1 輸入視頻數據的存儲管理
    輸入視頻數據有DM642的VPort口解碼後通過EDMA存儲到SDRAM中,這個過程通過輸入視頻藉口的設備驅動程序完成。在配置輸入視頻藉口的設備驅動程序時,至少開設3個緩衝區,設備驅動程序管理這些緩衝區用於實時視頻數據的採集。緩衝區管理方式如下圖所示。【DM642】緩衝區管理BufferManagement
【DM642】緩衝區管理BufferManagement
  首先,驅動程序開始運行時,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幀,將這一幀返還給驅動程序,再讀入新的一幀。
【DM642】緩衝區管理BufferManagement
【DM642】緩衝區管理BufferManagement
2013.3.7

發佈了37 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章