文 武,吳 勇,張 杰
(1.重慶郵電大學 重慶信科設(shè)計有限公司,重慶 401121;2.重慶郵電大學 通信新技術(shù)應(yīng)用研究所,重慶 400065)
多媒體技術(shù)的飛速發(fā)展激發(fā)了人們對視頻信息的需求,同時也推動了數(shù)字視頻相關(guān)技術(shù)的進步[1]。目前,多媒體技術(shù)已廣泛應(yīng)用于安防監(jiān)控、視頻會議、數(shù)字電視等各方面。單路視頻采集系統(tǒng)已越來越不能滿足人們的要求,因此,設(shè)計一種多路實時視頻采集及譯碼系統(tǒng)具有重要意義。傳統(tǒng)設(shè)計在單路芯片上只能完成單路視頻采集,要想實現(xiàn)多路視頻采集,大多需要集成多片采集芯片,這樣使得設(shè)計難度大,成本高,不利于推廣應(yīng)用。本文系統(tǒng)采用DM6467作為中央處理器,用TVP5158芯片作為采集譯碼芯片,可同時完成8路實時視頻采集和H.264編解碼,是目前單芯片可同時處理嵌入式視頻路數(shù)最多的解決方案之一。此外,TVP5158高度靈活的視頻輸出與基于達芬奇技術(shù)的TI數(shù)字媒體處理器TMS320DM6467的無縫接口可取消對外部FPGA的需求,可大大降低系統(tǒng)成本[2]。
TVP5158是4路高清NTSC/PAL視頻解碼器,可將所有通用基帶模擬視頻解碼成數(shù)字視頻輸出。包含4個獨立視頻解碼通道,每個通道包含1個10 bit,27 Msample/s ADC。支持復合視頻信號(Composite Video Broadcast Signal,CVBS)和偽差分視頻輸入,復合輸入信號按照2X ITU-R BT.601的時鐘頻率進行抽樣,CVBS信號解碼采用5線自適應(yīng)濾波器為色度和亮度過濾數(shù)據(jù)路徑,以減少交叉亮度和跨色度環(huán)境。在CVBS輸入端,用戶可以通過I2C主機接口來控制對比度、亮度、飽和度和色度等視頻特征,4路通道可獨立控制。TVP5158具有降噪處理功能和自動對照功能,可提升在低光條件下的視頻質(zhì)量,通過I2C總線對相關(guān)寄存器進行配置。輸出端口支持嵌入式同步的ITU-R BT.6568 bit 4∶2∶2和16 bit 4∶2∶2 YUV格式的數(shù)據(jù)流。
TMS320DM6467達芬奇處理器是一種基于DSP的片上系統(tǒng)(SoC),集成了ARM926EJ-S內(nèi)核與TMS320C64x+DSP內(nèi)核,可同時完成8路實時H.264編解碼,其中ARM926EJ-S是一種32 bit RISC處理器,可執(zhí)行32 bit或16 bit指令,處理32 bit,16 bit或8 bit數(shù)據(jù),作為DM6467的主控制器。TMS320C64x+DSP是TMS320C6000系列DSP中具有最高處理速度的定點型數(shù)字信號處理器,在1 GHz時鐘頻率下,處理速度可達8000 MIPS(每秒處理的百萬級指令數(shù))。
系統(tǒng)結(jié)構(gòu)如圖1所示,首先將8路CCD采集到的模擬視頻信號輸入到兩片級聯(lián)的TVP5158芯片,經(jīng)過A/D轉(zhuǎn)換、亮/色度分離、降噪濾波等處理后,轉(zhuǎn)換為符合DM6467的VPIF接口傳輸?shù)臄?shù)字信號。再由DSP子系統(tǒng)和視頻數(shù)據(jù)轉(zhuǎn)換引擎VDCE處理后送入通信模塊(網(wǎng)口或USB 2.0),經(jīng)無線或有線網(wǎng)絡(luò)傳輸?shù)揭曨l終端設(shè)備進行顯示。從VPIF接口出來的視頻數(shù)據(jù)也可直接通過Video OUT端口輸出到DVI顯示設(shè)備。在高清模式下,還需要啟動高清協(xié)處理器HD VICP 0/1來輔助DSP進行數(shù)字信號處理工作[3]。模塊中RS-232用來接PC機,RS-485控制云臺。
譯碼芯片TVP5158有4個8 bit的數(shù)字視頻輸出端口DVO_A_[7:0],DVO_B_[7:0],DVO_C_[7:0]和DVO_D_[7:0]。在級聯(lián)模式下,主片的DVO_C_[7:0]或DVO_D_[7:0]兩個端口作為從片的輸入口,主片的DVO_A_[7:0]或DVO_B_[7:0]則作為整個系統(tǒng)的輸出,可同時采集處理8路復合模擬視頻。TVP5158具有NTSC/PAL制式檢測和自動切換功能,其視頻輸出端口支持3種輸出模式:非交叉模式、像素交叉模式和行交叉模式。將從片的DVO_A_[7:0]連接到主片的DVO_D_[7:0],主片的DVO_A_[7:0]作為級聯(lián)系統(tǒng)的輸出,并將此端口的視頻輸出模式配置為行交叉模式,輸出格式配置為8 bit嵌入式同步的ITU-R BT.6564 :2:2格式,然后把DVO_A_[7:0]連接至VPIF接口的通道0[4]。VPIF接口有兩個8 bit的視頻輸入通道和輸出通道,通道0/1是輸入口,有相同的硬件結(jié)構(gòu);通道2/3是輸出口,有相同的硬件結(jié)構(gòu)[4]。主機通過I2C總線對TVP5158進行控制,I2C總線標準包括兩種信號:串行輸入/輸出數(shù)據(jù)線(SDA)和輸入/輸出時鐘線,負責設(shè)備和總線間的數(shù)據(jù)傳遞。SDA和SCL須通過拉電阻連接到IOVDD,當總線空閑時,SDA和SCL都是高電位。在此過程的I2C編程中,單個I2C寫操作可以傳到4個解碼器內(nèi)核中的一個或多個上。I2C子地址FEH包含4 bit,每位對應(yīng)一個解碼器內(nèi)核。當一個解碼器的寫/讀使能位被設(shè)置,I2C的寫/讀操作將被送到對應(yīng)的解碼器內(nèi)核,接口電路如圖2所示。
MCVIP驅(qū)動主要完成視頻幀采集、多通道視頻信號行交叉復用、執(zhí)行DMA傳輸?shù)裙δ?。多路視頻信號經(jīng)復用后成為一路BT656/BT1120數(shù)據(jù)流,送給后端VPIF存儲。每幀圖像都有一個通道標簽(CH-ID)、行號等信息,提供給后端的解復用操作。整個驅(qū)動程序主要由內(nèi)核空間驅(qū)動和用戶空間驅(qū)動兩部分組成,其中內(nèi)核空間包括I2C驅(qū)動、EDMA驅(qū)動、視頻端口采集驅(qū)動;用戶空間主要為應(yīng)用程序提供編程接口。驅(qū)動結(jié)構(gòu)如圖3所示。
MCVIP驅(qū)動需要調(diào)用VPIF采集驅(qū)動的注冊函數(shù)vpif_register_decoder()將其注冊到VPIF驅(qū)動中。主要過程為:分別將兩片TVP5158譯碼器信息注冊到VPIF驅(qū)動
若返回值err<0,則通過 vpif_unregister_decoder(&tvp5158_dev.decoder0)語句移除注冊。
VPIF接口驅(qū)動按照V4L2標準編寫。V4L2是V4L API的升級版本,它是Linux內(nèi)核中專門為音視頻設(shè)備驅(qū)動提供的標準的接口規(guī)范[5]。V4L2驅(qū)動是作為系統(tǒng)核心模塊來實現(xiàn)的,作為client被插入到“videodev”模塊里,其節(jié)點的主設(shè)備號是81,次設(shè)備號是0~255。當應(yīng)用程序觸發(fā)了一個驅(qū)動程序調(diào)用時,控制權(quán)首先傳遞給vid?eodev中的函數(shù),videodev負責將應(yīng)用程序傳遞的文件或節(jié)點結(jié)構(gòu)指針轉(zhuǎn)化為相應(yīng)的V4L2結(jié)構(gòu)指針,并調(diào)用V4L2驅(qū)動中的處理函數(shù)[6]。此驅(qū)動的設(shè)計主要實現(xiàn)了與MCVIP驅(qū)動的結(jié)合,包括以下幾個部分:
1)實現(xiàn)MCVIP_v4l2Create()函數(shù),在多通道視頻端口MCVIP中打開V4L2設(shè)備,然后調(diào)用相關(guān)的ioctl命令獲取設(shè)備功能、設(shè)置視頻輸入、視頻標準、視頻格式等。
2)請求幀緩沖區(qū),并調(diào)用void*mmap()函數(shù)將內(nèi)核空間緩沖區(qū)映射到用戶空間,然后將這些緩沖區(qū)入隊列,當輸出隊列已滿時,讀取緩沖區(qū)中的視頻幀,再次將空緩沖區(qū)輸入隊列,如此進行循環(huán)采集。
3)實現(xiàn) MCVIP_v4l2Start()和 MCVIP_v4l2Stop()函數(shù),啟動和停止視頻流。
根據(jù)需要重新編譯Davinci linux-2.6.10_mvl401_LSP_01_30_00_082內(nèi)核,將VPIF采集驅(qū)動直接編譯進內(nèi)核,MCVIP內(nèi)核空間驅(qū)動編譯為模塊后動態(tài)加載,用戶空間驅(qū)動編譯為動態(tài)鏈接庫。具體過程為:在PC機上進入root@wxspjk:cd/home/wy/linux-2.6.10_mvl401_LSP_01_30_00_082#目錄,然后執(zhí)行make命令出現(xiàn)信息如圖4所示。
用類似的方法編譯生成drv.ko,libdrv.so,libosa.so,libmcvip.so等文件。將生成的內(nèi)核鏡像燒寫到DM6467開發(fā)板上,分別執(zhí)行l(wèi)oadmodules.sh和start.sh腳本文件加載內(nèi)核模塊和動態(tài)鏈接庫。在PC機上對8個視頻通道逐一測試,均得到了清晰流暢的實時視頻流,圖5為其中一路視頻的截圖。以上測試結(jié)果表明,各接口驅(qū)動模塊工作正常。
本文給出了一種基于DM6467的8路實時視頻采集設(shè)計方案,該方案具有穩(wěn)定性好、采集圖像清晰、成本低廉等優(yōu)點,采集到的視頻數(shù)據(jù)存儲于SDRAM中,后期經(jīng)H.264(或其他方式)編碼后通過有線或無線網(wǎng)絡(luò)傳輸,可廣泛應(yīng)用于視頻監(jiān)控、電視會議等領(lǐng)域,具有很好的經(jīng)濟效益。
[1]趙勇,袁譽樂,丁銳.DAVINCI技術(shù)原理與應(yīng)用指南[M].南京:東南大學出版社,2008.
[2]周傳磷,肖永軍,蘇貴坡,等.基于TMS320DM642的光電目標跟蹤視頻采集與處理系統(tǒng)設(shè)計[J].電視技術(shù),2010,34(12):54-57.
[3]郭波,樊丁,彭凱.基于DaVinci技術(shù)的嵌入式視頻監(jiān)控系統(tǒng)設(shè)計[J].測控技術(shù),2009,28(10):82-83.
[4]張海濤,蔡文寰,董有爾.基于DM642的圖像處理系統(tǒng)設(shè)計及應(yīng)用[J].現(xiàn)代電子技術(shù),2008(12):125-127.
[5]DIRKS B,VERKUIL H,RUBLI M.Video for Linux two API specification revision 0.24[EB/OL].[2010-06-26].http://v4l2spec.bytesex.org/v4l2spec/v4l2.pdf.
[6]廖夢云,趙利,莫金旺.基于CMOS圖像傳感器的嵌入式視頻采集系統(tǒng)設(shè)計[J].計算機系統(tǒng)應(yīng)用,2009(5):196-197.