摘 要: 目前使用的圖像傳感器主要有CMOS和CCD兩類。CMOS器件功耗低、集成度高,但成像質(zhì)量不如CCD器件好。因此該多攝像頭視頻采集系統(tǒng)采用了CCD和CMOS兩種器件,以滿足多種需求。提出了一種基于TI公司TMS320DM365處理芯片、采用CCD和CMOS器件的攝像頭軟硬件切換設(shè)計(jì)方案。
關(guān)鍵詞: 視頻采集;TMS320DM365;攝像頭切換
0 引言
近年來,隨著移動(dòng)終端的快速發(fā)展,計(jì)算能力增強(qiáng),移動(dòng)網(wǎng)絡(luò)傳輸速度大幅提高,移動(dòng)視頻監(jiān)控技術(shù)發(fā)展迅速。目前國內(nèi)外視頻監(jiān)控業(yè)務(wù)主要應(yīng)用在公共領(lǐng)域、行業(yè)用戶和個(gè)人用戶。特別是在公共場所,國外設(shè)置了眾多監(jiān)控設(shè)備,以加強(qiáng)對公共領(lǐng)域安全的控制能力[1]。嵌入式視頻采集系統(tǒng)具有高效、體積小、實(shí)時(shí)穩(wěn)定、低成本等優(yōu)點(diǎn)[2],自然而然地成為了視頻監(jiān)控設(shè)備的良好載體。
目前使用的圖像傳感器有CMOS(互補(bǔ)金屬氧化物半導(dǎo)體)和CCD(電荷耦合器件)兩類。與CCD相比,CMOS器件具有功耗低、集成度高等優(yōu)點(diǎn),但是在噪點(diǎn)和成像質(zhì)量方面不如CCD器件[3]。而CCD器件則剛好相反。所以在本設(shè)計(jì)中,采用了CCD與CMOS搭配的設(shè)計(jì)。其中CCD器件搭配TVP5151視頻解碼芯片,外置的CCD攝像頭能夠提供更靈活、更清晰的視頻圖像。CMOS則是采用了OV5640的模組,利用其集成度高、體積小的特點(diǎn),作為內(nèi)置的視頻采集攝像頭,滿足視頻聊天等一般成像需求。
1 硬件框架設(shè)計(jì)
整個(gè)視頻采集系統(tǒng)終端以TMS320DM365芯片作為處理器芯片,基本模塊有DDR2、SDRAM、NAND Flash、網(wǎng)口、串口以及負(fù)責(zé)進(jìn)行信令和視頻數(shù)據(jù)傳輸?shù)?G模塊等。TI公司的基于DaVinci技術(shù)的TMS320DM365芯片,集成了一顆ARM926EJ-S內(nèi)核,一個(gè)圖像處理子系統(tǒng)(VPSS),一個(gè)H.264高清編碼器協(xié)處理器HDVICP和一個(gè)MPEG-4/JPEG高清編碼器協(xié)處理器MJCP,支持多格式編解碼[4],所以特別適用于圖像處理。視頻采集部分主要由DM365的VPFE(視頻處理前端)、一個(gè)多路轉(zhuǎn)換器和兩個(gè)視頻數(shù)據(jù)采集芯片(OV5640和TVP5151)組成。攝像頭硬件切換由DM365的GPIO口對多路轉(zhuǎn)換器進(jìn)行控制,選擇輸入到VPFE的數(shù)據(jù)源。
系統(tǒng)硬件框架設(shè)計(jì)圖如圖1所示。
DM365的VPFE采集驅(qū)動(dòng)是一個(gè)V4L2設(shè)備驅(qū)動(dòng),可以對RGB和YUV數(shù)據(jù)進(jìn)行采集。VPFE的簡單框架如圖2所示[5]。
視頻采集前端在接收到原始的YUV視頻數(shù)據(jù)后,可以對數(shù)據(jù)進(jìn)行存儲,同時(shí)又將視頻數(shù)據(jù)通過內(nèi)部的數(shù)據(jù)總線傳輸?shù)綀D像處理模塊。此時(shí)可對圖像數(shù)據(jù)進(jìn)行裁剪、縮放等,以適應(yīng)本地存儲或者網(wǎng)絡(luò)上傳的需求。
視頻采集前端在接收到原始的YUV視頻數(shù)據(jù)后,可以對數(shù)據(jù)進(jìn)行存儲,同時(shí)又將視頻數(shù)據(jù)通過內(nèi)部的數(shù)據(jù)總線傳輸?shù)綀D像處理模塊。此時(shí)可對圖像數(shù)據(jù)進(jìn)行裁剪、縮放等,以適應(yīng)本地存儲或者是網(wǎng)絡(luò)上傳的需求。
2 軟件設(shè)計(jì)
2.1 VPFE模塊驅(qū)動(dòng)
TMS320DM365數(shù)字多媒體芯片包含一個(gè)視頻處理模塊用來處理視頻數(shù)據(jù),減輕主處理器的負(fù)擔(dān)。它支持大多數(shù)主流的外置視頻采集設(shè)備。而與外置視頻采集設(shè)備直接相連的就是視頻處理前端子系統(tǒng)(VPFE)。
VPFE采集驅(qū)動(dòng)通過標(biāo)準(zhǔn)的V4L2接口將底層硬件的功能暴露給了上層應(yīng)用程序,在應(yīng)用程序和設(shè)備驅(qū)動(dòng)之間建立起了橋梁[6]。VPFE驅(qū)動(dòng)初始化開始后,首先通過imp_get_hw_if()函數(shù)和ccdc_get_hw_interface()函數(shù)綁定imp和CCDC的接口函數(shù)組,隨后對CCDC模塊進(jìn)行初始化。初始化CCDC模塊之后,驅(qū)動(dòng)會分配需要的內(nèi)存用來存儲采集上來的視頻數(shù)據(jù)。最后,便是調(diào)用driver_register(&vpfe_driver)函數(shù)和platform_device_register(&_vpfe_device)函數(shù)注冊驅(qū)動(dòng)和平臺設(shè)備。系統(tǒng)啟動(dòng)時(shí),檢測到其驅(qū)動(dòng)和設(shè)備都存在后,就會調(diào)用vpfe_prob()函數(shù),這個(gè)函數(shù)做的最重要的事情就是調(diào)用video_register_device()函數(shù)綁定了file_operations結(jié)構(gòu)體,提供給應(yīng)用程序訪問內(nèi)核與設(shè)備驅(qū)動(dòng)的接口。同時(shí)生成一個(gè)設(shè)備文件節(jié)點(diǎn)(/dev/Video0),這樣,應(yīng)用程序就能通過訪問/dev/Video0設(shè)備文件節(jié)點(diǎn),配合Ioctl函數(shù)調(diào)用VPFE驅(qū)動(dòng)中file_operations結(jié)構(gòu)體成員函數(shù)來進(jìn)行視頻的采集。
VPFE初始化流程圖如圖3所示。在此設(shè)計(jì)中采用了兩種視頻采集芯片,分別為德州儀器的TVP5151和豪威科技的OV5640。這兩種芯片的驅(qū)動(dòng)程序中,在完成標(biāo)準(zhǔn)的I2C設(shè)備注冊的工作后,都會調(diào)用vpif_register_decoder(&ov5640_dev[i])或是vpif_register_decoder(&TVP5151 _dev[i])函數(shù)將采集芯片的各種操作函數(shù)接口封裝成一個(gè)struct decoder_device結(jié)構(gòu)體注冊到前面提到的VPFE模塊中。這樣,應(yīng)用程序就可以通過VPFE的設(shè)備文件節(jié)點(diǎn)(/dev/Video0)來調(diào)用VPFE的操作函數(shù),進(jìn)而再間接地調(diào)用采集設(shè)備的操作函數(shù),完成視頻采集芯片的配置工作,使得其能夠正常工作。
2.2 攝像頭軟切換
此設(shè)計(jì)中使用了兩種視頻采集芯片TVP5151與OV5640,因此會有兩個(gè)decoder_device結(jié)構(gòu)體注冊到VPFE模塊中。攝像頭的軟切換,也就是對VPFE模塊中注冊的decodor_device結(jié)構(gòu)體進(jìn)行重新選擇,決定該調(diào)用哪個(gè)采集芯片,并對CCDC模塊進(jìn)行相應(yīng)的配置。于此同時(shí),對多路選擇器也要進(jìn)行相應(yīng)的配置,使其選擇正確的通路。攝像頭切換流程如圖4所示。
首先自然是通過3個(gè)GPIO口來配置多路選擇器選擇正確的通路,使得DM365可以獲取到來自正確的采集芯片的視頻數(shù)據(jù)。VIDIOC_ENUMINPUT命令會通過VPFE模塊調(diào)用到注冊到VPFE模塊中的采集芯片驅(qū)動(dòng)的操作函數(shù)enuminput,從而依次檢索注冊到VPFE中的各個(gè)decoder_device結(jié)構(gòu)體中是否有需要的input_info,并返回對應(yīng)的decoder_device的序號。所以只需要在調(diào)用VIDIOC_ENUMINPUT命令時(shí)傳入與所需要采集芯片驅(qū)動(dòng)中相同的input類型,便可以找到對應(yīng)的decoder_device,從而切換到對應(yīng)的攝像頭。得到正確的decoder_device序號后,即可用VIDIOC_S_INPUT命令,調(diào)用到采集芯片驅(qū)動(dòng)中的initialize函數(shù),完成其初始化。
切換到正確的視頻數(shù)據(jù)源以后,還要對CCDC模塊進(jìn)行對應(yīng)的設(shè)置。這時(shí)需要調(diào)用命令VIDIOC_S_STD:ioctl(fd,VIDIOC_S_STD,&std),它會調(diào)用到視頻采集芯片驅(qū)動(dòng)中的setstd函數(shù),進(jìn)而對驅(qū)動(dòng)中的struct v4l2_standard結(jié)構(gòu)體數(shù)組進(jìn)行便利,找到其中數(shù)據(jù)成員ID與VIDIOC_S_STD命令傳入?yún)?shù)std相同的項(xiàng),返回其name成員,并將其作為ccdc_hw_if->setstd()函數(shù)的參數(shù)執(zhí)行,便可以對CCDC模塊的分辨率、幀率等信息進(jìn)行設(shè)置。例如,當(dāng)檢索到的name值為“VGA-30”時(shí),CCDC模塊分辨率便會被設(shè)置成640×480,幀率為30 FPS。
2.3 掃描方式的切換
此設(shè)計(jì)方案中用到的兩種視頻采集芯片的掃描方式是不同的。TVP5151是隔行掃描,一幀分為奇偶兩場,而OV5640是逐行掃描。VPFE模塊對于這兩種掃描方式的處理方式是不同的,所以完成攝像頭的切換后,還要把CCDC模塊掃描方式設(shè)定成與對應(yīng)的視頻采集芯片一致。在VPFE驅(qū)動(dòng)中,有一個(gè)標(biāo)志位frame_format就是用來表示掃描方式的,frame_format為0時(shí)表示隔行掃描,即使用TVP5151;為1時(shí)就表示逐行掃描,即使用OV5640。原本ccdc_hw_if->setstd()函數(shù)還可以對掃描方式進(jìn)行設(shè)定,但是由于本設(shè)計(jì)所使用的內(nèi)核版本的缺陷,設(shè)定無法生效,所以添加了一個(gè)小補(bǔ)?。涸趦?nèi)核VOFE驅(qū)動(dòng)中聲明了一個(gè)變量scanmode,并使用EXP ORT_SYMBOL(scanmode)使之成為內(nèi)核全局變量。然后分別在TVP5151和OV5640驅(qū)動(dòng)的intialize函數(shù)中對其進(jìn)行賦值。TVP5151為隔行掃描,故對其賦0,OV5640則相反。這樣,每次切換攝像頭后,在初始化采集芯片的同時(shí)也會對CCDC的掃描方式進(jìn)行選擇。
3 測試結(jié)果
測試在實(shí)驗(yàn)室的單兵設(shè)備上進(jìn)行。在后置的OV5640攝像頭模組和外置的TVP5151攝像頭模組之間進(jìn)行了切換,外置攝像頭更清晰,也更靈活。而內(nèi)置的則勝在方便、小巧。設(shè)計(jì)達(dá)到了預(yù)期目標(biāo)。測試效果圖如圖5所示。
4 結(jié)論
嵌入式芯片技術(shù)的快速發(fā)展,使其在視頻監(jiān)控設(shè)備總的應(yīng)用越來越廣泛。同樣發(fā)展迅速的還有視頻采集芯片。本文設(shè)計(jì)實(shí)現(xiàn)了基于TMS320DM365硬件平臺的多攝像頭軟硬件切換方案,采用了CMOS和CCD兩種器件,實(shí)現(xiàn)了不同廠家型號、不同掃描方式的視頻采集芯片模組之間的順暢切換。這在視頻采集芯片發(fā)展越來越多樣化的今天,有一定的意義。
參考文獻(xiàn)
[1] 苗潤生.3G移動(dòng)視頻監(jiān)控業(yè)務(wù)的應(yīng)用與發(fā)展[D].北京:北京郵電大學(xué),2010.
[2] 李佳林,劉永春.基于S3C2440網(wǎng)絡(luò)視頻采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識與技術(shù),2014(6):1314-1316, 1325.
[3] 王旭東,葉玉堂.CMOS與CCD圖像傳感器的比較研究和發(fā)展趨勢[J].電子設(shè)計(jì)工程,2010(11):178-181.
[4] 徐凱,錢燕,魏宗群,等.基于TMS320DM365的3G實(shí)時(shí)視頻傳輸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].浙江農(nóng)業(yè)科學(xué),2012(7):1056-1059.
[5] Texas Instruments. Davinci Linux VPFE Capture Driver [EB/OL]. [2015-07-15]. http://www.ti.com/lit/an/sprs566a/ sprs566a. pdf.2015.2.
[6] 潘力策,孟利民.基于DM365的雙碼流視頻監(jiān)控設(shè)備的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2015,34(10):41-43,47.