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