王紅亮,馬 軍,曲 皎
(中北大學(xué)電子測試技術(shù)國家重點實驗室,山西 太原 030051)
通信技術(shù)、移動終端的升級換代,大數(shù)據(jù)處理技術(shù)的快速發(fā)展帶來社會生產(chǎn)生活方式的巨大變革。視頻影像娛樂方面人們更追求高清、全高清、超高清分辨率的細(xì)膩畫面[1];軍工產(chǎn)業(yè)方面,高質(zhì)量的影像資料能更好地促進(jìn)工程的順利開展,而此領(lǐng)域面臨著上一代視頻設(shè)備采集存儲設(shè)備的更新?lián)Q代問題。為了解決視頻采集分辨率低,視頻壓縮算法壓縮比低,存儲設(shè)備速率低和容量不夠等問題[2],設(shè)計了一種全高清視頻壓縮編碼與存儲系統(tǒng),整個系統(tǒng)外接HDMI 接口的全高清視頻(分辨率為1 920?1 080P@60 frame/s),采用H.264 高壓縮比編碼算法,并實現(xiàn)壓縮碼流的本地固態(tài)存儲。
綜合考慮開發(fā)周期、開發(fā)難度及實際需求等因素,本設(shè)計選用硬件壓縮方案,根據(jù)通用性及易購買性,選用華為海思的Hi3516A 芯片,此芯片可以實現(xiàn)全高清視頻H.264 三個檔次的編碼,內(nèi)嵌了ARM處理器,運行Linux 操作系統(tǒng)[3],芯片支持多種分辨率及幀頻的視頻輸入。
本系統(tǒng)大容量視頻存儲模塊采用FPGA +FLASH 陣列實現(xiàn)Hi3516A 芯片壓縮編碼圖像數(shù)據(jù)的存儲。FPGA+FLASH 陣列存儲方案是目前大容量視頻存儲的主流方案[4],利用并行總線技術(shù)和流水線設(shè)計組成的FLASH 陣列容量大,速度高,后期可根據(jù)實際應(yīng)用需求進(jìn)行FLASH 陣列的擴(kuò)展,繼續(xù)提高存儲速度和容量[5-6]。
系統(tǒng)總設(shè)計框圖如圖1 所示,整個系統(tǒng)包含視頻接口轉(zhuǎn)換模塊、視頻實時壓縮編碼模塊和視頻存儲模塊三個部分,全高清數(shù)字視頻為輸入源,視頻經(jīng)壓縮后存儲在FLASH 中,最后由外部USB 讀數(shù)設(shè)備將壓縮碼流文件上傳至PC 端解碼播放。
圖1 系統(tǒng)總體設(shè)計框圖
視頻接口轉(zhuǎn)換模塊將HDMI 接口的音視頻混合差分信號轉(zhuǎn)換成為BT1120 接口的YCbCr4:2:2 格式的視頻以便于Hi3516A 的接收。本著功能模塊化設(shè)計和儀器通用性設(shè)計的考慮,視頻接口轉(zhuǎn)換電路由FPGA 控制,將Hi3516A 平臺自帶的視頻接口預(yù)留出來,在今后系統(tǒng)移植、不同模塊組合時方便二次開發(fā)。視頻壓縮模塊將BT1120 接口的視頻經(jīng)H.264 編碼壓縮后通過USB2.0 接口將H.264 裸流發(fā)送至視頻存儲模塊,此模塊通過Hi3516A 的MPP(軟件開發(fā)平臺)提供的API 接口以及l(fā)ibusb 庫提供API 接口開發(fā)應(yīng)用程序?qū)崿F(xiàn)。視頻存儲模塊由USB 2.0 接口電路模塊和FLASH 存儲電路模塊兩部分組成,用于讀取USB 2.0 接口的壓縮碼流并存儲在FLASH 陣列中。
視頻壓縮編碼模塊主要以海思的Hi3516A 開發(fā)板為設(shè)計平臺,完成軟件流程的設(shè)計。圖2 為Hi3516A 軟件設(shè)計框圖。
圖2 Hi3516A 軟件設(shè)計框圖
本系統(tǒng)通過調(diào)用MPP 提供的相關(guān)API 接口完成BT1120 接口視頻的輸入、處理及編碼,H.264 碼流的實時傳輸通過Hi3516A 平臺的USB 2.0 接口實現(xiàn)。
Hi3516A 軟件中的系統(tǒng)控制主要完成硬件復(fù)位及初始化、公共視頻緩存池的初始化、MPP 初始化及各功能模塊的綁定功能。在視頻輸入之前,需要先進(jìn)行系統(tǒng)初始化任務(wù),具體流程如下。
Hi3516A 內(nèi)部經(jīng)集成視頻捕獲單元VICAP(Video capture),它包含一個視頻輸入設(shè)備:Dev0,和一個物理通道:Chn0,Dev0 獲取的圖像經(jīng)Chn0 到達(dá)VPSS 模塊。
視頻輸入程序段流程圖以及相應(yīng)的API 接口如圖4 所示。輸入設(shè)備和輸入通道需要配置的屬性有輸入視頻分辨率,掃描方式,像素格式,目標(biāo)圖像大小等,成功時配置函數(shù)返回值為0。需注意輸入通道Ch0 配置的目標(biāo)圖像大小不得小于輸入設(shè)備Dev0 配置的圖像大小。至此,啟動視頻輸入模塊,開始采集BT1120 接口的視頻數(shù)據(jù)。
圖3 系統(tǒng)初始化程序流程圖
圖4 視頻輸入程序段流程圖及API
VI 模塊獲取的視頻需經(jīng)過VPSS(視頻處理子系統(tǒng))模塊,此模塊完成視頻數(shù)據(jù)的預(yù)處理,包括去隔行、去噪、遮擋、裁剪、縮放等。
VPSS 模塊流程圖以及相應(yīng)的API 如圖5 所示。此模塊主要完成VPSS 組和通道的創(chuàng)建以及VPSS和VI 的綁定。Hi3516A 平臺支持VPSS 模塊創(chuàng)建一個組,組接收VI 模塊采集的1 080P 視頻,然后送到VPSS 通道,VPSS 通道可與視頻編碼模塊通道對接。
圖5 視頻處理程序段流程圖及API
Hi3516A 集成視頻硬件編碼器,支持H.264、H.265、MPEG 等多種編碼算法。本系統(tǒng)編碼模塊創(chuàng)建一個編碼通道對接VPSS 通道,完成輸入視頻的H.264 編碼。
VENC 編碼模塊包含碼率控制器(RC)和編碼器(Encoder)。RC 支持三種碼率控制模式,VBR(可變比特率)、FIXQP(固定QP 值)和CBR(固定比特率),本系統(tǒng)選用CBR 模式來實現(xiàn)平均碼流速率編碼。兼顧輸入視頻的分辨率、幀率和輸出視頻的質(zhì)量要求,本系統(tǒng)設(shè)置為4 096 kbit/s 的碼流速率,輸出幀率設(shè)置為25 frame/s。編碼模塊流程圖以及相應(yīng)的API 接口如圖6 所示。
圖6 視頻編碼程序段流程圖及API
編碼模塊產(chǎn)生的H.264 碼流需通過開辟線程發(fā)送出去。圖7 所示為碼流獲取發(fā)送流程圖及相應(yīng)的API 接口。Hi3516A 多媒體處理器支持多種外部通信接口,本系統(tǒng)選用USB 2.0 接口進(jìn)行通信,它將編碼完成后的碼流發(fā)送至視頻存儲模塊。USB 2.0 的批量傳輸利用libusb 提供的API 接口完成。
圖7 碼流獲取發(fā)送流程圖及API
Hi3516A 平臺生成的H.264 碼流通過對接FPGA 平臺的USB 接口來完成存儲。總體邏輯如圖8 所示,由Sil9135 接口控制模塊、FLASH 陣列控制模塊、USB2.0 接口控制模塊組成。
圖8 FPGA 總體邏輯框圖
視頻接口轉(zhuǎn)換電路以SiL9135A 芯片為核心,將通過HDMI 傳輸?shù)母咔鍞?shù)字視頻轉(zhuǎn)換為BT1120 接口信號輸入到Hi3516A 平臺,此芯片的配置通過IIC 總線由SiL9135 控制模塊來完成,相關(guān)寄存器如表1 所示。
表1 Sil9135 寄存器配置
USB2.0 接口芯片選用 Cypress 公司的CY7C68013A,此芯片配置為Slave fifo 模式,作為從設(shè)備與FPGA 進(jìn)行通信[7],本系統(tǒng)采用官方提供的從FIFO 模式固件程序。只用到一個數(shù)據(jù)讀FIFO,將地址線設(shè)置為00,選擇端口2。FPGA 通過異步讀CY7C68013 A 端口2 FIFO 中的數(shù)據(jù)來實現(xiàn)與接口電路的通信。
USB 讀數(shù)狀態(tài)轉(zhuǎn)換圖如圖9 所示,復(fù)位進(jìn)入IDLE 空閑狀態(tài),當(dāng)檢測到端口2 狀態(tài)指示信號FLAGA 為1(端口2 FIFO 非空)時,發(fā)送讀FIFO 指令,流程為順序USB_SLOE 和USB_SLRD 信號置0,在RD_CMD 狀態(tài)停留8 個時鐘周期后USB_SLRD 置1,此時數(shù)據(jù)異步讀出到緩存FIFO,而后由FLASH控制模塊獲取。
圖9 USB 讀數(shù)狀態(tài)轉(zhuǎn)換圖
本系統(tǒng)選用2 片MT29F256G08AUAAA FLASH作為存儲介質(zhì)。FLASH 控制模塊邏輯如圖10 所示。該模塊設(shè)計了標(biāo)準(zhǔn)的FIFO 數(shù)據(jù)和控制接口信號來完成與外部FIFO 的通信,模塊內(nèi)部利用并行總線技術(shù)將兩片F(xiàn)LASH 擴(kuò)展到16bit,并簡化控制邏輯,使用單總線控制技術(shù),在流水線操作方式下完成兩片芯片的讀寫、擦除操作,大大提高讀寫速率和操作效率。
圖10 FLASH 控制模塊結(jié)構(gòu)圖
利用USB 讀數(shù)設(shè)備將存儲與FLASH 中的碼流數(shù)據(jù)讀出,在PC 端用多媒體軟件VLC 解碼播放,測試結(jié)果如圖11 所示。
圖11 VLC 播放H.264 文件界面
通過VLC 軟件播放接收到H.264 文件,可以看到視頻播放流暢,無卡頓,且無明顯丟幀或亂碼導(dǎo)致的花屏綠屏。和攝像頭原始圖像相比,如圖12,視頻效果無肉眼可辨差別,說明從視頻獲取到編碼、存儲、回讀,整個流程工作順利,系統(tǒng)功能良好。
圖12 攝像頭原始圖像
本課題性能測試包含碼率、壓縮比和視頻質(zhì)量測試三部分。碼流速率可用迅雷影音查看,在播放H.264 文件過程時,右擊鼠標(biāo),點擊媒體信息可看到基本媒體信息如圖13 所示。
圖13 視頻流基本媒體信息
本課題設(shè)置的H.264 編碼輸出碼率為4 096 kbit/s,從迅雷影音軟件可看到文件類型為H.264 文件,分辨率為1 920?1 080,碼率信息為4 283 kbit/s。測試多組視頻流,觀測其碼率,測試結(jié)果如表2 所示。平均值為4 304 kbit/s,有(4 304-4 096)/4 096≈5%的誤差。
表2 碼率及壓縮比測試
將上述碼流文件用有“瑞士軍刀”之稱的FFmpeg 軟件解碼成YUV4:2:0 格式的文件[8-10],對比解碼后YUV 格式文件和壓縮后的H.264 文件大小,計算其壓縮比,利用如下公式計算壓縮比:
壓縮比=Y(jié)UV 格式文件:H.264 文件大小
測試結(jié)果如表2 所示,壓縮比平均值在155 ∶1左右,表明壓縮性能良好。
主要從主觀評定和客觀評定兩個方面來評定壓縮視頻的質(zhì)量。國際電聯(lián)ITU BT-500 建議在視頻主觀評價定義的標(biāo)準(zhǔn)中,將圖像質(zhì)量分為優(yōu)、良、中、差、劣[11],但因主觀測試評定主觀性強,本課題采用客觀質(zhì)量測試方法對圖像質(zhì)量進(jìn)行測試,通過計算PSNR 值來進(jìn)行評估,其含義是峰值信號與噪聲信號之比[12],計算方法為式(1)、式(2):
式中:2n-1 與量化精度相關(guān),n為像素量化精度。MSE(Mean Squared Error)為原始圖像和處理圖像之間的均方誤差,其中1 920 和1 080 分別是圖像寬度值和高度值,X和Y分別是原始圖像和解壓后圖像像素值。
通過MATLAB 計算壓縮后H.264 文件相對于解碼后原始YUV 文件的PSNR 值,五個不同情景下計算的PSNR 值及其平均值如表3 所示。
表3 不同視頻RSNR 測試
PSNR 平均值為36.26 dB。通常來說,PSNR 值超過28 dB 時,圖像質(zhì)量的差異不明顯,在35 dB~40 dB 時,肉眼已無法分辨圖像之間的差異,表明本系統(tǒng)壓縮質(zhì)量良好。
本文針對傳統(tǒng)軍工領(lǐng)域視頻采集存儲設(shè)備分辨率低,存儲時長等缺陷設(shè)計了全高清視頻實時壓縮編碼與存儲系統(tǒng),從功能和性能的兩方面對系統(tǒng)測試的結(jié)果表明,此系統(tǒng)能將1 920?1 080 的全高清視頻實現(xiàn)150 ∶1 的編碼壓縮比,且壓縮碼流可進(jìn)行達(dá)36 h 時長存儲,很好地實現(xiàn)了視頻壓縮與存儲的設(shè)計任務(wù)。另外,此系統(tǒng)可進(jìn)行編碼算法的進(jìn)一步優(yōu)化達(dá)到更好的壓縮質(zhì)量和更小的數(shù)據(jù)量。系統(tǒng)也可從接口等方面擴(kuò)展其應(yīng)用場景及實用性。