基于DSP的視頻采集驅動(dòng)程序的設計
在隔行掃描模式下,每幀分為兩場(chǎng),兩場(chǎng)在時(shí)域上是分開(kāi)的,但在數據處理時(shí)需要將兩場(chǎng)合成一幀進(jìn)行處理,因此要進(jìn)行大量的數據搬移,占用了大量的CPU時(shí)間。通過(guò)EDMA鏈表可自動(dòng)實(shí)現場(chǎng)合成,不需占用額外的CPU時(shí)間。
EDMA的參數RAM存放了有關(guān)的傳輸參數,這些參數用于產(chǎn)生EDMA讀寫(xiě)操作所需要的地址。如圖4所示,在使用EDMA通道傳輸奇數場(chǎng)與偶數場(chǎng)時(shí),分別使用不同的EDMA參數RAM。兩組參數RAM的目的地址分別指向存儲圖像的第一行與第二行象素的首地址,并且兩組參數RAM通過(guò)鏈接地址循環(huán)相連。在EDMA通道的傳輸中,奇數場(chǎng)傳輸任務(wù)的結束會(huì )自動(dòng)地根據當前參數RAM的鏈接地址裝載傳輸偶數場(chǎng)的參數RAM,又由兩組參數RAM的目的地址可知,奇數場(chǎng)與偶數場(chǎng)分別經(jīng)EDMA通道傳輸至幀緩沖區后被隔行存儲,這樣在無(wú)需占用額外CPU時(shí)間的前提下就實(shí)現了場(chǎng)合成。
4 視頻采集驅動(dòng)程序的調用實(shí)例
DSP/BIOS應用程序通過(guò)GIO類(lèi)驅動(dòng)調用微驅動(dòng)之前,需使用DSP/BIOS配置工具注冊微驅動(dòng),將其命名為VP_CAPTURE,并啟動(dòng)GIO模塊。
在應用程序中,GIO_create函數使用已注冊的微驅動(dòng)VP_CAPTURE創(chuàng )建GIO通道,通過(guò)調用GIO_submit函數完成應用程序對視頻數據的采集操作。部分源代碼如下:
(1) 創(chuàng )建通道
GIO_Handle capChan;
int status;
capChan = GIO_create('VP_CAPTURE'),
IOM_INPUT, status, (Ptr)DM642_vCapParams, NULL);
(2) 發(fā)送獲取圖像的數據包
GIO_submit(capChan, IOM_READ, bufp, NULL, NULL);其中,DM642_vCapParams包含了視頻采集的初始化參數,如圖像大小、同步方式等;bufp用于指出采集圖像的存儲地址。不同的視頻應用程序在使用類(lèi)驅動(dòng)時(shí),可以通過(guò)改變這兩個(gè)變量復用視頻設備。這樣,極大地提高了驅動(dòng)程序的工作效率,對視頻外設的控制也大大簡(jiǎn)化了。
使用類(lèi)/微驅動(dòng)模型開(kāi)發(fā)的視頻采集驅動(dòng)程序,有效地解決了圖像采集和圖像實(shí)時(shí)處理之間的關(guān)系,在幾乎不需要CPU的干涉下,利用EDMA完成了數字視頻圖像數據的高速傳輸;通過(guò)使用類(lèi)驅動(dòng)復用驅動(dòng)程序,視頻應用程序的開(kāi)發(fā)效率獲得了極大的提高。視頻采集驅動(dòng)程序現已在自主開(kāi)發(fā)的視頻處理板卡上運行良好,為進(jìn)一步開(kāi)發(fā)遠程視頻監控系統、可視電話(huà)等視頻應用打下了堅實(shí)的基礎。
評論