引言
ITU-R BT.656定義了一個(gè)并行的硬件接口用來傳送一路4:2:2的YCbCr的數(shù)字視頻流。視頻流的分辨率為720×576像素的D1格式。我們需要發(fā)送的視頻數(shù)據(jù)源通常是經(jīng)過MPEG2壓縮的,分辨率為352×288像素的CIF格式。在輸出到顯示終端前,處理器需要對(duì)CIF格式的圖像數(shù)據(jù)插值為D1(720×576像素)格式,然后再通過ITU-R BT.656并行的硬件接口輸出給視頻編碼器。在這種前提下,可以利用一個(gè)ITU-R BT.656的硬件接口傳輸4路不同的CIF格式的視頻數(shù)據(jù)流,然后在接收側(cè)通過FPGA(現(xiàn)場(chǎng)可編程門陣列)將4路視頻數(shù)據(jù)流分離、插值生成D1格式的數(shù)據(jù)輸出給視頻編碼器。通過該方式,可以克服某些視頻處理器輸出端口的限制,使視頻輸出端口擴(kuò)展為原來的4倍。同時(shí),由于使用FPGA進(jìn)行插值運(yùn)算,分擔(dān)了一部分視頻處理器的工作量。 1 硬件連接 圖1展示了一個(gè)BT.656并行硬件接口用來連接一個(gè)視頻處理器和視頻編碼器的情況。該硬件接口由8根數(shù)據(jù)信號(hào)和1根時(shí)鐘信號(hào)組成。 圖2所示是通過FPGA擴(kuò)展4路視頻的連接方式。FPGA通過BT.656接口接收視頻處理器發(fā)出的數(shù)據(jù)信號(hào),然后將4路視頻信號(hào)分離、插值后通過4路BT.656并行硬件接口輸出到4個(gè)視頻編碼器,實(shí)現(xiàn)視頻處理器一個(gè)視頻輸出端口同時(shí)輸出4路視頻信號(hào)。 2 數(shù)據(jù)結(jié)構(gòu) 2.1 標(biāo)準(zhǔn)BT.656并行數(shù)據(jù)結(jié)構(gòu) BT.656并行接口除了傳輸4:2:2的YCbCr視頻數(shù)據(jù)流外,還有行、列同步所用的控制信號(hào)。如圖3所示,一幀圖像數(shù)據(jù)由一個(gè)625行、每行1 728字節(jié)的數(shù)據(jù)塊組成。其中,23~311行是偶數(shù)場(chǎng)視頻數(shù)據(jù),336~624行是奇數(shù)場(chǎng)視頻數(shù)據(jù),其余為垂直控制信號(hào)。 BT.656每行的數(shù)據(jù)結(jié)構(gòu)如圖4所示。 圖4中,每行數(shù)據(jù)包含水平控制信號(hào)和YCbCr。視頻數(shù)據(jù)信號(hào)。視頻數(shù)據(jù)信號(hào)排列順序?yàn)镃b-Y-Cr-Y。每行開始的288字節(jié)為行控制信號(hào),開始的4字節(jié)為EAV信號(hào)(有效視頻結(jié)束),緊接著280個(gè)固定填充數(shù)據(jù),最后是4字節(jié)的SAV信號(hào)(有效視頻起始)。 SAV和EAV信號(hào)有3字節(jié)的前導(dǎo):FF、FF、00;最后1字節(jié)XY表示該行位于整個(gè)數(shù)據(jù)幀的位置及如何區(qū)分SAV、EAV。XY字節(jié)各比特位含義見圖5。 圖5中,最高位bit7為固定數(shù)據(jù)1;F=0表示偶數(shù)場(chǎng),F(xiàn)=1表示奇數(shù)場(chǎng);V=0表示該行為有效視頻數(shù)據(jù),V=1表示該行沒有有效視頻數(shù)據(jù);H=0表示為SAV信號(hào),H=1表示為EAV信號(hào);P3~P0為保護(hù)信號(hào),由F、V、H信號(hào)計(jì)算生成;P3=V異或H;P2=F異或H;P1=F異或V;P0=F異或V異或H。 2.2 使用BT.656并行接口傳輸4路CIF格式視頻的數(shù)據(jù)結(jié)構(gòu) 視頻處理器的輸出是靈活多變的,可以改變處理器的輸出數(shù)據(jù)結(jié)構(gòu)來同時(shí)傳送4路252×288像素的視頻信號(hào)。BT.656并行接口傳輸?shù)挠行б曨l數(shù)據(jù)流為720×586,正好可以分割為4個(gè)360×288像素的空間來傳輸4路352×288像素的視頻數(shù)據(jù)。多余的空間用固定數(shù)據(jù)“8010”進(jìn)行填充。 修改后的數(shù)據(jù)結(jié)構(gòu)如圖6所示。 原來存放第1場(chǎng)的數(shù)據(jù)的位置用來存放第1、第2路視頻數(shù)據(jù);原來存放第2場(chǎng)的數(shù)據(jù)的位置用來存放第3、第4路視頻數(shù)據(jù)。 3 FPGA實(shí)現(xiàn)的功能 FPGA主要用來完成4路352×288像素視頻流的分離,以及將視頻流插值到標(biāo)準(zhǔn)BT.656接口所需的720×586像素的分辨率。同時(shí),該FPGA還要重新生成SAV、EAV幀控制信號(hào),結(jié)合插值后的4路視頻流產(chǎn)生新的符合BT.656結(jié)構(gòu)的數(shù)據(jù)幀傳送給視頻編碼設(shè)備。其功能框圖如圖7所示。 首先,4路352×288像素的視頻流從BT.656結(jié)構(gòu)的幀結(jié)構(gòu)中分離出來,分別存儲(chǔ)到各自的存儲(chǔ)空間。然后,352×288像素的視頻流被讀取、插值為704×288像素,然后再填充為720×288像素的視頻流。在成幀的模塊中,產(chǎn)生BT.656的幀結(jié)構(gòu)所需的SAV、EAV信號(hào);將插值生成的720×288像素的數(shù)據(jù)作為偶數(shù)場(chǎng)的數(shù)據(jù)填入BT.656的幀結(jié)構(gòu)中,奇數(shù)場(chǎng)的數(shù)據(jù)復(fù)制偶數(shù)場(chǎng)的數(shù)據(jù)。最后,將生成的BT.656標(biāo)準(zhǔn)視頻流發(fā)送給視頻編碼器輸出到顯示終端上。 3.1 存儲(chǔ)器選擇 由于需要同時(shí)存儲(chǔ)4路352×288的視頻流,需要的存儲(chǔ)空間為4路×288行×352×2字節(jié)(視頻流為4:2:2的YCbCr信號(hào),一個(gè)點(diǎn)通過亮度信號(hào)和色差信號(hào)來表示,所以圖像的一個(gè)點(diǎn)實(shí)際占用2字節(jié))。計(jì)算可得需要800 kB左右的空間。低成本的FPGA內(nèi)部很難提供如此多的存儲(chǔ)空間,可以外掛一片1MB容量的SRAM用于存儲(chǔ)視頻數(shù)據(jù)。 BT.656接口定義的時(shí)鐘頻率為27 MHz。SRAM要能提供1路8 bit×27 MHz數(shù)據(jù)寫入,4路8bit×27 MHz讀出,總共1Gbit/s以上的數(shù)據(jù)帶寬?梢赃x擇位寬為16 bit、工作時(shí)鐘頻率100 MHz、帶寬為1.6Gbit/s的SRAM。 3.2 插值算法 將352×288像素的原始視頻流變換為714×288像素的視頻流就需要進(jìn)行插值。該插值運(yùn)算是一維的,也就是說只需要加倍每行的點(diǎn)數(shù)而行數(shù)不變。插值運(yùn)算前,應(yīng)該先將Y、Cb、Cr信號(hào)分離,然后分別對(duì)Y、Cb、Cr信號(hào)進(jìn)行插值。簡(jiǎn)單的插值法有最近鄰域法和線性插值法等。最近鄰域法是插入點(diǎn)的值簡(jiǎn)單復(fù)制鄰近點(diǎn)的值;線性插值法是插入點(diǎn)相鄰的兩個(gè)數(shù)據(jù)取算術(shù)平均值,得到插入值。應(yīng)用更加復(fù)雜的插值算法可以改善圖像質(zhì)量。在本文設(shè)計(jì)中,實(shí)現(xiàn)這兩種簡(jiǎn)單的插值方法就已經(jīng)滿足需求。 4 結(jié)束語 本文提出一種利用一個(gè)BT.656接口傳輸4路視頻流的方法。該方法利用FPGA接收4路CIF格式的視頻數(shù)據(jù),然后分離、插值為4路D1格式視頻流后,重新生成BT.656的數(shù)據(jù)幀發(fā)送給視頻編碼芯片,從而實(shí)現(xiàn)視頻處理器的一個(gè)硬件接口傳輸4路視頻圖像。通過該方法可以克服視頻處理器芯片輸出端口的限制,增加了其擴(kuò)展性。在實(shí)際測(cè)試和應(yīng)用中,取得了滿意的效果。 |