胡健生,張 倩,蔡艷軍
(1.武警工程學(xué)院,陜西 西安 710086;2.武警西安指揮學(xué)院,陜西 西安 710038)
責(zé)任編輯:任健男
在視頻監(jiān)控領(lǐng)域,數(shù)字化、多路化、高分辨力和小型化應(yīng)經(jīng)成為一種趨勢(shì),實(shí)時(shí)動(dòng)態(tài)視頻采集和傳輸已經(jīng)成為一種趨勢(shì),已經(jīng)成為信息和計(jì)算機(jī)領(lǐng)域的研究熱點(diǎn)。目前,常見的設(shè)計(jì)方案主要有4種:1)基于專用的視頻采集卡的方案,該方案的缺點(diǎn)是只能進(jìn)行上層的應(yīng)用軟件開發(fā),不能對(duì)其硬件電路進(jìn)行更改,體積大,成本高,不適合嵌入式應(yīng)用領(lǐng)域[1];2)基于專用的多媒體嵌入式處理器的方案,該方案的缺點(diǎn)是每路視頻采集都需要獨(dú)立的視頻編碼解碼芯片和處理器,進(jìn)行多路視頻采集時(shí)有局限性,浪費(fèi)了大量的處理器資源[2];3)基于FPGA的方案,F(xiàn)PGA主要面向邏輯控制和時(shí)序控制,可實(shí)現(xiàn)多路視頻信號(hào)的采集,但是要實(shí)現(xiàn)視頻信號(hào)的編碼相對(duì)困難[3-4];4)基于DSP技術(shù)的方案,該方案設(shè)計(jì)靈活,但是不適合進(jìn)行上層應(yīng)用程序的開發(fā),且設(shè)計(jì)復(fù)雜、開發(fā)周期長、成本高[5-6]。
系統(tǒng)主要有4個(gè)部分組成:1)多路模擬視頻輸入單元,由4個(gè)模擬攝像機(jī)組成;2)多路視頻信號(hào)采集單元,由 FPGA 芯片、4片視頻解碼芯片(SAA7111)、2片SRAM、時(shí)鐘源和配置電路組成,完成對(duì)4路模擬視頻信號(hào)的采集、存儲(chǔ)和整合,并以BT.656格式的視頻信號(hào)輸出到下一個(gè)單元;3)視頻信號(hào)壓縮編碼和傳輸單元,由ARM11高性能處理器(S3C6410)、外圍存儲(chǔ)器、以太網(wǎng)模塊等組成,利用Camera IF接收整合后的多路視頻信號(hào),在MFC模塊中對(duì)輸入的視頻信號(hào)進(jìn)行H.264壓縮,并通過IP網(wǎng)絡(luò)發(fā)送到遠(yuǎn)程監(jiān)控端;4)遠(yuǎn)程監(jiān)控單元,一方面可以顯示遠(yuǎn)端采集的視頻信號(hào),另一方面,也可以用于控制遠(yuǎn)端多路視頻采集系統(tǒng),如視頻矩陣的切換和云臺(tái)控制等。整個(gè)系統(tǒng)組成如圖1所示。多路視頻信號(hào)采集單元和視頻信號(hào)壓縮編碼和傳輸單元是系統(tǒng)的核心,在設(shè)計(jì)時(shí)需要解決以下問題:1)多路視頻信號(hào)的時(shí)鐘同步;2)多路視頻信號(hào)數(shù)據(jù)的儲(chǔ)存;3)FPGA與ARM11數(shù)據(jù)接口的實(shí)現(xiàn);4)對(duì)視頻數(shù)據(jù)的壓縮編碼。
圖1 系統(tǒng)組成框圖
FPGA通過I2C總線,對(duì)4片SAA7111進(jìn)行工作模型、輸入端口、色彩控制和輸出格式等圖像采集的控制參數(shù)進(jìn)行配置,以上參數(shù)中較重要的是輸出數(shù)據(jù)格式。SAA7111支持的輸出數(shù)據(jù)格式有411(12 bit)、422(15 bit)、CCIR-656(8 bit)、RGB(16 bit)和 RGB(24 bit),為了便于與后續(xù)單元的數(shù)據(jù)傳輸和對(duì)視頻數(shù)據(jù)的壓縮編碼,這里將SAA7111輸出的數(shù)據(jù)格式配置成CCIR-656(8 bit)。該接口使用8 bit的復(fù)合YUV數(shù)據(jù)和27 MHz的時(shí)鐘,分辨力是720×576,不需要使用傳統(tǒng)的視頻時(shí)序信號(hào)(HSYNC,VSYNC和BLANK),將時(shí)序代碼嵌入到視頻流中,可以減少芯片接口的引腳數(shù)量[7]。
由于4片SAA7111在工作時(shí)是不同步的,每次上電后輸出的時(shí)鐘和數(shù)據(jù)都具有不確定性,而最終采集到的4路視頻數(shù)據(jù)要求存儲(chǔ)在同一顯示緩存中的相應(yīng)位置處,因此必須要對(duì)4片SAA7111輸出的視頻信號(hào)進(jìn)行同步。利用FPGA內(nèi)部的鎖相環(huán)模塊,對(duì)任意一路(這里不妨設(shè)成第1路)SAA7111的輸出像素時(shí)鐘信號(hào)LLC(27 MHz)進(jìn)行4倍頻,生成采樣時(shí)鐘信號(hào)sample_clock(108 MHz),這樣在4個(gè)sample_clock周期內(nèi)剛好完成對(duì)每路視頻信號(hào)的1次采集;以第1路SAA7111輸出的幀同步信號(hào)(VREF1)為基準(zhǔn),當(dāng)其輸出第1個(gè)需要采集的像素點(diǎn)時(shí),開始進(jìn)行采樣,這樣又可以在1個(gè)幀周期內(nèi),完成對(duì)4路視頻信號(hào)中所有需要的像素點(diǎn)的采樣。采集時(shí)序如圖2所示。
系統(tǒng)中的FPGA需要先對(duì)4片SAA7111采集到的有效數(shù)據(jù)進(jìn)行緩存,然后通過以BY.656視頻格式將數(shù)據(jù)發(fā)送給ARM11,進(jìn)行編碼處理,此過程存在以下3個(gè)問題需要解決:1)顯示緩存是16 bit的SRAM,而BT.656視頻格式的數(shù)據(jù)是8 bit,因此不能直接將采集到的視頻信號(hào)存儲(chǔ)到SRAM中,也不能直接將SRAM中的數(shù)據(jù)讀出發(fā)送給ARM11;2)為了保證視頻數(shù)據(jù)傳輸?shù)母邥r(shí)效性,F(xiàn)P?GA必須將緩存SRAM中的數(shù)據(jù)及時(shí)讀出,發(fā)送給ARM11,因此存在FPGA向SRAM中同時(shí)讀寫數(shù)據(jù)的沖突問題;3)FPGA對(duì)4路視頻數(shù)據(jù)采集的時(shí)鐘sam?ple_clock頻率為108 MHz,BT.656視頻格式的時(shí)鐘頻率為27 MHz,而FPGA讀寫SRAM也有嚴(yán)格的時(shí)序要求,因此需要合理解決FPGA讀寫SRAM時(shí)鐘、FPGA采集數(shù)據(jù)時(shí)鐘和BT.656視頻時(shí)鐘之間的同步。這里,使用FIFO電路和讀寫SRAM時(shí)分復(fù)用機(jī)制,解決上述問題。
圖2 多路視頻信號(hào)同步
在視頻緩存操作模塊中,對(duì)于與多路視頻采集模塊相連的輸入端,設(shè)置4組輸入FIFO組,分別緩存采集到的4路視頻數(shù)據(jù);每組FIFO又由3個(gè)隊(duì)列,分別緩存Y,U,V分量。通過四選一控制器,判斷選擇相應(yīng)的FIFO組中的數(shù)據(jù)。每對(duì)SRAM進(jìn)行1次寫操作,都要讀取某路FIFO組中的U隊(duì)列(或V隊(duì)列)和Y隊(duì)列中的數(shù)據(jù)各1次,共16 bit的數(shù)據(jù),存儲(chǔ)到SRAM中的1個(gè)單元中。對(duì)于與BT.656視頻流生成模塊相連的輸出端,需要設(shè)置一組輸出FIFO組,同樣也由分別緩存Y,U,V分量的隊(duì)列組成。每對(duì)SRAM進(jìn)行一次讀操作,將數(shù)據(jù)的高8 bit放置在U(V)隊(duì)列中,將低8 bit放置在Y隊(duì)列中。這里需要說明的是,由于U,Y和V分量是同步的,因此每個(gè)FIFO組的3個(gè)FIFO隊(duì)列的“滿”或“空”狀態(tài)也是同步的,程序設(shè)計(jì)時(shí)使用任意一個(gè)隊(duì)列的狀態(tài)信號(hào)即可。對(duì)多路視頻信號(hào)的緩存過程,如圖3所示。
系統(tǒng)采用的“讀寫SRAM時(shí)分復(fù)用機(jī)制”,就是根據(jù)以FPGA內(nèi)部主時(shí)鐘master_clk為基準(zhǔn),根據(jù)對(duì)多路視頻信號(hào)的采集、BT.656視頻格式、讀寫SRAM三者的時(shí)序要求,按照一定的時(shí)間間隔,分時(shí)對(duì)SRAM進(jìn)行讀操作和寫操作,不僅解決了一片SRAM作為視頻數(shù)據(jù)緩存所存在的讀寫沖突問題,也解決了上述3個(gè)時(shí)序信號(hào)的同步問題。讀寫SRAM的時(shí)分復(fù)用原理如圖4所示。
圖3 對(duì)多路視頻信號(hào)的緩存原理
圖4 讀寫SRAM的時(shí)分復(fù)用原理
對(duì)第1路SAA7111的LLC(27 MHz)進(jìn)行8倍頻,得到FPGA工作的主時(shí)鐘mater_clk(216 MHz)。以mas?ter_clk為基準(zhǔn)時(shí)鐘,以其下降沿為觸發(fā)條件,根據(jù)輸入FIFO組的“空”標(biāo)志信號(hào)和輸出FIFO的“滿”標(biāo)志信號(hào)的狀態(tài),進(jìn)行SRAM讀寫狀態(tài)的判定。以對(duì)讀SRAM操作的判定為例,原則如下:當(dāng)master_clk下降沿第一次到來時(shí),master_clk應(yīng)為高電平(sram_r/w初始狀態(tài)為0),F(xiàn)P?GA進(jìn)入讀操作判斷狀態(tài)(r0)。若輸出FIFO組非滿,表明可以從SRAM中讀取數(shù)據(jù),在接下來的3個(gè)主時(shí)鐘周期里,依次跳轉(zhuǎn)到r1,r2,r3和r4這4個(gè)狀態(tài),完成1次讀SRAM操作;若顯示數(shù)據(jù)輸出模塊中的FIFO電路滿,則不能再對(duì)SRAM進(jìn)行讀操作,在接下來的3個(gè)主時(shí)鐘周期內(nèi),依次跳轉(zhuǎn)到r4,r5和r6這3個(gè)狀態(tài),在這4個(gè)狀態(tài)里不對(duì)SRAM進(jìn)行任何操作,僅起到延時(shí)作用。對(duì)寫SRAM操作的進(jìn)行判定時(shí),則參考輸入FIFO組的“空”標(biāo)識(shí)信號(hào)狀態(tài)為依據(jù)。這樣,經(jīng)過上述r0→r1→r2→r3(或r0→r4→r5→r6)→w0→w1→w2→w3(或 w0→w4→w5→w6)→r0共8個(gè)狀態(tài)的切換,剛好是1個(gè)LLC信號(hào)或BT.656視頻時(shí)鐘信號(hào)周期,完成對(duì)SRAM的讀寫操作各1次。
為了能對(duì)采集后的多路視頻信號(hào)進(jìn)行壓縮編碼,F(xiàn)P?GA要將顯示緩存(SRAM)中的視頻數(shù)據(jù)以BT.656格式輸出,因?yàn)镾AA7111輸出的數(shù)據(jù)格式應(yīng)經(jīng)配置成YUV 656(8 bit),因此這里需要再次生成BT.656視頻的時(shí)序信號(hào),將視頻緩存操作模塊中的輸出FIFO中的數(shù)據(jù)讀出即可。
選用20 MHz的外部時(shí)鐘源,利用FPGA內(nèi)部鎖相環(huán)生成系統(tǒng)的主時(shí)鐘27 MHz,即BT.656視頻標(biāo)準(zhǔn)的像素時(shí)鐘頻率。在設(shè)計(jì)視頻時(shí)序信號(hào)時(shí),設(shè)置一個(gè)20 bit像素時(shí)鐘計(jì)數(shù)器的(pclk_counter),對(duì)像素時(shí)鐘信號(hào)(pclk)進(jìn)行計(jì)數(shù);設(shè)置一個(gè)4 bit的狀態(tài)轉(zhuǎn)移標(biāo)識(shí)變量status,根據(jù)pclk_counter的值確定狀態(tài)值,在10個(gè)狀態(tài)之間進(jìn)行切換;設(shè)置一個(gè)10 bit的行計(jì)數(shù)器(line_counter),對(duì)輸出視頻的行進(jìn)行計(jì)數(shù)。BT.656視頻時(shí)序信號(hào)生成的狀態(tài)轉(zhuǎn)移如圖5所示。
圖5 時(shí)序控制代碼產(chǎn)生的狀態(tài)轉(zhuǎn)移過程
系統(tǒng)的ARM處理器S3C6410,內(nèi)部集成的多媒體編解碼器(MFC)支持MPEG4/H.263/H.264的編碼與解碼,并支持VC1解碼,性能可以達(dá)到全雙工30 f/s@640×480同時(shí)編解碼和半雙工30 f/s@720×480或25 f/s@720×576編解碼。同時(shí),自帶攝像頭接口(Camera IF),可以支持ITU R BT-601/656 YUV 8 bit標(biāo)準(zhǔn)的視頻數(shù)據(jù),支持90°旋轉(zhuǎn)功能,有2個(gè)DMA輸出通道,1個(gè)與其顯示控制器相連,用于本地顯示,1個(gè)與MFC相連,用于視頻數(shù)據(jù)的編解碼后續(xù)處理[8]。系統(tǒng)所使用的處理器S3C6410的生產(chǎn)廠商三星公司已經(jīng)提供了相應(yīng)的操作系統(tǒng)s3c-linux-2.6.21的源碼,以及攝像頭模塊、MFC和網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)源碼,在此只須對(duì)操作系統(tǒng)內(nèi)核各功能模塊進(jìn)行剪裁,再創(chuàng)建鏡像文件即可,具體方法不再贅述。
圖6 處理器接收視頻數(shù)據(jù)及編碼流程
ARM處理器接收視頻數(shù)據(jù)及編碼過程的如圖6所示。S3C6410利用Camera IF接口接收FPGA采集到的多路視頻信號(hào),將FPGA作為一個(gè)設(shè)備文件映射到內(nèi)存中,繞過了內(nèi)核緩沖區(qū),進(jìn)程可以像訪問普通內(nèi)存一樣對(duì)文件進(jìn)行訪問,同時(shí)還可采用了雙緩存的思想設(shè)計(jì),加快了視頻數(shù)據(jù)的讀寫速度。同樣,加載了MFC驅(qū)動(dòng)之后,可以像操作普通文件一樣調(diào)用MFC函數(shù)對(duì)視頻數(shù)據(jù)進(jìn)行H.264編碼。最后,經(jīng)編碼后的視頻數(shù)據(jù),通過系統(tǒng)的網(wǎng)絡(luò)接口進(jìn)行遠(yuǎn)程傳輸,遠(yuǎn)端監(jiān)控主機(jī)利用一般的視頻解碼軟件進(jìn)行解碼即可。
系統(tǒng)基于ARM11和FPGA實(shí)時(shí)對(duì)多路視頻信號(hào)進(jìn)行采集、編碼和傳輸,實(shí)現(xiàn)了多路視頻監(jiān)控功能,測(cè)試采集傳輸VGA的圖像可達(dá)到25 f/s,圖像經(jīng)過H.264編碼后平均每幀只有12 kbit左右,占用網(wǎng)絡(luò)寬帶很少,傳輸圖像清晰穩(wěn)定,具有很強(qiáng)的實(shí)用性和廣闊的應(yīng)用前景。
[1]雷剛勇.多路視頻遠(yuǎn)程監(jiān)控系統(tǒng)(客戶端)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2006.
[2]姚琳.安防監(jiān)控?zé)衢T方案評(píng)價(jià)[J].電子設(shè)計(jì)技術(shù),2009(4):87-95.
[3]周鑫,何建新,李學(xué)華.門禁系統(tǒng)視頻監(jiān)控電路設(shè)計(jì)[J].微計(jì)算機(jī)信息,2009,25(1):310-312.
[4]胡健生,臧曉昱.嵌入式多路視頻采集顯示系統(tǒng)設(shè)計(jì)[J].液晶與顯示,2010,25(6):831-835.
[5]梁修如,嚴(yán)國萍.嵌入式視頻監(jiān)控服務(wù)器系統(tǒng)典型方案及其性能分析[J].電視技術(shù),2005,29(10):93-96.
[6]席鑫寧,潘宏俠.基于DSP的LCD模塊設(shè)計(jì)及其設(shè)備狀態(tài)監(jiān)控系統(tǒng)中的應(yīng)用[J].液晶與顯示,2009,24(1):110-115.
[7]Intersil Corporation.BT.656 video interface for ICs application note[EB/OL].[2011-03-27].http://www.datasheet.net/document/app-note BT.656%20Video%20Interface%20for%20Ics?id=1767350.
[8]Samsung Electronics,Inc.S3C6410 user’s manual[EB/OL[2011-03-27].http://www.google.com.hk/url?sa=t&source=web&cd=&ved=0CC?MQFjAA&url=http%3A%2F%2Fwww.hhcn.com%2Fchinese%2Ffiles%2Fs3c6400_rev15.pdf&rct=j&q=S3C6410%20USER%E2%80% 99S% 20MANUAL&ei=tomeTtqdMNCciAfEp7WvCQ&usg=AFQjCNFW2ETBGvJcJG0poQdh7sCPLMO5tg&cad=rjt.