基于SoPC的視頻跟蹤系統(tǒng)中OSD功能的實(shí)現(xiàn)
OSD(On Screen Display)是指將系統(tǒng)的參數(shù)和狀態(tài)信息在屏幕上顯示出來,在電視機(jī)、錄像機(jī)等家電產(chǎn)品中這種技術(shù)早已廣泛應(yīng)用。視頻跟蹤系統(tǒng)要求進(jìn)行數(shù)字、符號(hào)、跟蹤窗的實(shí)時(shí)顯示,即具有OSD功能,包括無視頻輸入指示、鎖定指示、跟蹤狀態(tài)和性能指示、顯示脫靶量數(shù)據(jù)及其他操作參數(shù)等。
OSD的實(shí)現(xiàn)方法基本上有三種:使用專用OSD器件;選用支持OSD功能的處理器;采用PLD。在實(shí)時(shí)性要求較高的視頻跟蹤系統(tǒng)中,需要使用大規(guī)模FPGA進(jìn)行并行圖像處理,并且在FPGA中實(shí)現(xiàn)SoPC設(shè)計(jì),同時(shí)應(yīng)能減小系統(tǒng)的體積和成本。如果只選用專用OSD器件或帶有OSD功能的處理器反而會(huì)增加系統(tǒng)硬件設(shè)計(jì)的復(fù)雜度,降低系統(tǒng)的可靠性。因此,有必要采用與SoPC系統(tǒng)相結(jié)合的OSD實(shí)現(xiàn)方案。
1 視頻跟蹤系統(tǒng)
基于SoPC技術(shù)的視頻跟蹤系統(tǒng)框圖如圖1所示。系統(tǒng)采用Altera公司的Stratix 系列FPGA及Nios Ⅱ軟核處理器實(shí)現(xiàn)SoPC設(shè)計(jì),將圖像處理、目標(biāo)識(shí)別與跟蹤等協(xié)處理單元掛在Nios Ⅱ處理器上,并通過SPI、I2C等IP-Core實(shí)現(xiàn)對(duì)操縱桿、視頻編解碼器等設(shè)備的控制。系統(tǒng)支持PAL-D(576i25)標(biāo)準(zhǔn)輸入輸出。
2 OSD實(shí)現(xiàn)方案
2.1 SoPC系統(tǒng)的配置結(jié)構(gòu)
在SoPC系統(tǒng)中,實(shí)現(xiàn)OSD功能要與如圖2所示的SoPC系統(tǒng)的配置結(jié)構(gòu)相結(jié)合,系統(tǒng)采用Altera公司的MAX-II器件作為配置控制器,在系統(tǒng)啟動(dòng)(boot)時(shí)負(fù)責(zé)將FPGA的配置數(shù)據(jù)從外部Flash Memory傳送到Stratix中。這里將OSD字符/圖形庫以只讀數(shù)據(jù)的形式存放在外部CFI-Flash中,CFI-Flash同時(shí)裝有FPGA的配置數(shù)據(jù)和軟件程序,配置結(jié)束后MAX-Ⅱ需要將連接CFI-Flash的全部總線置為‘Z’,這樣Nios Ⅱ處理器才能夠獲得CFI-Flash的總線使用權(quán),以讀取程序和OSD數(shù)據(jù)。
2.2 OSD實(shí)現(xiàn)結(jié)構(gòu)
OSD實(shí)現(xiàn)框圖如圖3所示。這里采用了FPGA中的一個(gè)M-RAM作為OSD緩存,其中每位與視頻中的一個(gè)像素映射。因PAL-D復(fù)合視頻信號(hào)為隔行掃描,因此,OSD緩存中的數(shù)據(jù)按奇/偶場(chǎng)方式存放,每場(chǎng)占用720×288/8=25 920B,M-RAM大小為64KB,可實(shí)現(xiàn)全視場(chǎng)范圍的單色OSD映射。OSD緩存被定義為雙口方式,輸出與視頻數(shù)據(jù)流同步。
OSD緩存的數(shù)據(jù)位寬可定義為2n(n=0,1,…),但應(yīng)該注意:數(shù)據(jù)位寬選得越大,NiosⅡ處理器的訪問速度就越快,而OSD的水平方向定位也越復(fù)雜;數(shù)據(jù)位寬選得越小,水平方向定位越精確,但訪問速度也會(huì)越慢,且實(shí)時(shí)性差。因此,進(jìn)行折衷處理,選擇lpm_width=8。
M-RAM的讀地址要根據(jù)行、場(chǎng)同步信號(hào)生成,圖像原始分辨率為864×625,則水平計(jì)數(shù)器Cnt_Hor和垂直計(jì)數(shù)器Cnt_Ver為10bit寬,Cnt_Hor的異步清零端接脈沖化后的行同步信號(hào)HSYNC,Cnt_Ver的異步清零端接脈沖化后的場(chǎng)同步信號(hào)VSYNC。在有效圖像分辨率為720×576范圍內(nèi),使能地址計(jì)數(shù)器Cnt_Rd_Addr、Cnt_Rd_Addr的計(jì)數(shù)時(shí)鐘為像素時(shí)鐘的8分頻,即每8個(gè)像素時(shí)鐘讀取一個(gè)數(shù)據(jù),Cnt_Rd_Addr的異步清零端接脈沖化后的場(chǎng)同步信號(hào)VSYNC。
OSD緩存讀地址生成邏輯如圖4所示。圖中,1.6875MHz時(shí)鐘脈沖化后接74165的STLD(并行數(shù)據(jù)加載信號(hào)),每隔8個(gè)像素時(shí)鐘載入一個(gè)字節(jié)的OSD數(shù)據(jù)并串行輸出。圖5為最簡單的OSD合成邏輯,圖中,bit→piexl的映射邏輯用一個(gè)8位并-串轉(zhuǎn)換器74165實(shí)現(xiàn),使用兩個(gè)8bit的Mux2_1,如果ctrl_bit等于‘0’,則YCbCr輸出原圖像數(shù)據(jù);如果ctrl_bit等于‘1’,則Y輸出0xEB,CbCr輸出0x10。
2.3 OSD API
OSD API的實(shí)現(xiàn)包括:創(chuàng)建API硬件接口;建立字符/圖形庫;OSD顯示驅(qū)動(dòng)函數(shù)(包括字節(jié)重構(gòu)、字符顯示、圖形顯示、消隱等)。
API硬件接口可以通過SoPCBuilder建立,包括16位地址OSD_ADDR、8位數(shù)據(jù)OSD_DATA、寫使能OSD_WEN和OSD緩存的異步清零信號(hào)OSD_ACLR。由于M-RAM不能設(shè)置初始數(shù)據(jù),因此上電后首先將OSD_ACLR置位,然后對(duì)OSD緩存初始化后,再將OSD_ACLR置零,以免開機(jī)時(shí)系統(tǒng)出現(xiàn)花屏現(xiàn)象。
字符/圖形庫可以通過字模提取軟件得到,并定義到unsigned char const型數(shù)組中。打開Nios Ⅱ IDE中的System Library Properties窗口,將read-only data memory(.rodata)項(xiàng)設(shè)為ext_flash,即將OSD庫放在外部的CFI-Flash中。
OSD數(shù)據(jù)寫入緩存時(shí)要注意兩個(gè)關(guān)鍵問題,一是垂直方向上的隔行處理,即按照奇偶場(chǎng)規(guī)則寫入緩存;二是水平方向上的字節(jié)拆分與重構(gòu),因?yàn)镺SD緩存是整字節(jié)(8bit)訪問的,為了實(shí)現(xiàn)字符/圖形的像素級(jí)定位,該操作是必要的。例如,為了在位置3開始疊加如圖6所示的11個(gè)bit‘1’,需要補(bǔ)5個(gè)bit的‘0’,并將重構(gòu)后的“0x3f、0xf8”寫入OSD緩存,該操作由軟件完成。
3 結(jié)果與結(jié)論
OSD實(shí)現(xiàn)效果如圖7所示,監(jiān)視器上疊加有字符、數(shù)字和圖形,如果進(jìn)一步設(shè)計(jì),還可以實(shí)現(xiàn)彩色OSD、畫中畫以及透明效果,本文只是對(duì)這一方案進(jìn)行了初步驗(yàn)證。
實(shí)際應(yīng)用證明,本文提出的設(shè)計(jì)方案新穎、合理,能夠有效減小視頻跟蹤系統(tǒng)的體積、降低系統(tǒng)復(fù)雜度和成本,具有極大的實(shí)用價(jià)值。
評(píng)論