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