姚 宇 任勇峰 袁延榮 陳建軍
(1.中北大學電子測試技術重點實驗室 太原 030051)(2.空間物理重點試驗室 北京 100076)
隨著信息技術的高速發展,具有大量數據信息的視頻已成為人們生活中最重要的信息傳輸方式[1]。隨著人們對視頻分辨率的需求不斷增長,高清、超高清視頻的海量數據已嚴重制約了視頻信息的傳輸和存儲,視頻壓縮解碼技術應運而生[2]。視頻壓縮解碼技術可以有效去除視頻數據中的冗余信息,實現視頻數據的快速傳輸和離線存儲。同時,采用硬件解碼技術能有效降低CPU在處理多路視頻流時的壓力。本文設計了一種基于嵌入式支持H.265 和H.264 的多路視頻流硬解碼裝置,通過以太網接收視頻流數據,可通過一臺設備控制多個視頻采集設備,根據需求選擇要顯示的視頻通道,可應用于多種場景。視頻解碼裝置的系統框圖如圖1所示。

圖1 視頻解碼裝置系統框圖
高清視頻解碼裝置使用高性能Hi3519 處理器,硬件由電源管理模塊、存儲模塊、HDMI 輸出模塊和以太網模塊組成,如圖2所示。電源管理模塊采用LTM4644開關電源芯片,為系統供電。Hi3519核心處理器作為主控芯片對各個子模塊和用戶接口進行配置,并對視頻數據進行處理和解碼。存儲模塊由LPDDR4和e.MMC組成,LPDDR4作為DDR為片上Linux系統的運行和海思對圖像媒體的處理提供運行空間;e.MMC 作為Flash 芯片用來存放引導Linux啟動的fastboot、Linux內核Kernel以及文件系統rootfs 等必要文件,并且可以保存以太網接收到的H.265 碼流數據。以太網模塊使用UDP 協議來接收視頻采集設備傳輸過來的H.265 視頻數據流。USB接口主要用來連接鼠標,方便使用人員對用戶界面進行操作。HDMI2.0 接口連接HDMI 顯示器,輸出用戶界面和解碼后的視頻。

圖2 視頻解碼裝置原理框圖
電源完整性是高速信號電路中重要的一環[3],為了保證高速電路中信號傳輸的效率,我們要考慮電磁兼容,走線阻抗,去耦電容布局等問題來為PCB 設計一個良好的電源和地[4]。方案中采用LTM4644電源芯片產生5.0、3.3、1.8、1.1V 為系統供電,單路供電電流可達到2A,4 路可達到8A,可以滿足大多數設備的供電需求。同時該設計結合了SVB 動態調壓功能,通過PWM 波形輸出管腳輸出不同的脈寬的直流電平,當運算量不大時降低頻率和電壓,運算量增加時提高頻率升高電壓,可以實現輸出電壓的調節、降低裝置的功耗[5],具體實現方法如圖3所示。

圖3 動態調壓實現方法
本設計的存儲電路是由LPDDR4(Low-Power DDR4 SDRAM)電路和e.MMC 電路構成的,其中LPDDR4作為DDR為片上Linux系統的運行和海思對圖像媒體的處理提供運行空間;e.MMC 作為Flash 芯片用來存放引導Linux 啟動的fastboot、Linux 內核Kernel 以及文件系統rootfs,同時也可以存儲軟件運行時產生的運行日志和UDP 接收到的視頻碼流。
LPDDR4 是一種高速CMOS、動態隨機存取存儲器。為了滿足裝置高性能和低功耗的需求,選用MT53E256M32 這款LPDDR4 芯片作為DDR,這款LPDDR4芯片將內核和I/O電源降至1.1V[6],每個芯片讀寫速率高達12.8GB/s(兩個通道,每個通道6.4GB/s),在實現高速率的同時降低了芯片的體積。
選用三星的KLM8G1GETF-B041 作為e.MMc芯片,該芯片具有后臺操作控制、命令隊列、安全寫保護和增強頻閃等功能,并且提高了RPMB 的吞吐量,有效地提高了數據的讀寫速度[7]。其高達8G的存儲容量可以離線存儲5 個通道100min 的1080P@60fps 的H.265 碼流數據,保證了存儲模塊的數據高容量。
HDMI 輸出模塊采用HDMI2.0 接口,連接方式如圖4所示,數據傳輸帶寬可達18 Gbps,最大支持傳輸4K@60Hz 的視頻。為保證PCB 設計的良好效果,需要控制HDMITX 差分對的PCB 走線控制差分阻抗100ohm+/-10%,并將查分對內等長控制在20mil內。

圖4 HDMI接口連接
在HDMI 源端啟動后,若顯示器與HDMI 源端未處于連接狀態,即可檢測到引腳19 為低電平;若為連接狀態,那么18號引腳將會給HDMI顯示器提供+5 V 的電壓,然后HDMI顯示器內部再進行線路轉換,將19 號引腳轉為高電平。此時就可以通過檢測15、16 號引腳的DDC(Display Data Channel)通道,以獲取顯示器的分辨率信息,由此來確定HDMI輸出模塊的輸出屏幕分辨率參數[8]。
以太網網口是工業相機常見的接口,視頻解碼裝置可以與視頻轉發服務端或視頻采集裝置直接連接進行視頻數據接收,同時對多個視頻采集裝置進行指令控制。本系統采用RGMII模式,RGMII是一種減少引腳數的接口,通過將接口引腳數從GMII 接口中使用的25 個引腳減少到12 個,可以簡化設計。與現有的GMII 或TBI 接口相比,它可以減少路由高密度網絡解決方案所需的層數,從而降低系統成本。使用RGMII,MAC/switch ASIC 需要更少的管腳,這可以通過實現比GMII 或TBI 更小的芯片尺寸來降低MAC/switch 成本[9],該模式的參考時鐘頻率是125 MHz,同時兼容25 MHz 和2.5 MHz。該設計采用RTL8211作為以太網物理芯片,RTL8211 支持IEEE 802.3 RGMII 接口,RGMII 接口支持3.3V、2.5V、1.8V、1.5V 信號,并且支持半工、全工操作[10]。圖5所示為以太網硬件連接示意圖。

圖5 以太網硬件連接
視頻解碼裝置的開發環境為Ubuntu 16.0.4,開發環境需要安裝交叉編譯工具arm-himix200-linux、Hi3519AV100SDK、Qt SDK 及Qt Creator 開發環境。Ubuntu 16.0.4 運行于vmware16.0.2 虛擬機,虛擬機運行于Windows 10 操作系統。海思提供的媒體處理軟件平臺(Media Process Platform,MPP),可支持應用軟件快速開發。該平臺對應用軟件屏蔽了芯片相關的復雜的底層處理,并對應用軟件直接提供MPI(MPP Programe Interface)接口完成相應功能[11]。
軟件整體流程圖如圖6所示。

圖6 軟件整體流程圖
在程序運行時,首先對系統變量完成初始化,通過讀取HDMI 接口的EDID 信息來確定顯示器的時序和分辨率,根據信息對HIFB進行初始化配置,最終實現用戶界面的顯示。根據分辨率和通道路數創建配置視頻緩存池,視頻緩存池主要向媒體業務提供大塊物理內存管理功能,負責內存的分配和回收,讓物理內存資源在各個媒體處理模塊中合理使用。然后根據啟動的通道數來創建相應數量的VDEC、VPSS 通道,并一一綁定。接下來根據配置界面的網絡端口進行UDP 的創建與端口綁定,啟用相應數量的線程進行數據的接收、處理并發送給對應的VDEC 通道,VDEC 在對視頻數據進行解碼后再將圖像發送給VPSS 模塊對圖像進行裁剪、格式轉換后轉發給VO模塊輸出至顯示屏顯示。
圖形用戶界面基于Qt 和海思的HIFB 實現,在視頻解碼裝置啟動后,海思視頻層VHD0與Qt的圖形層G0在視頻輸出模塊完成疊加處理,通過HDMI接口輸出。同時加載Linux 設備列表的鼠標驅動,使得用戶可通過鼠標進行修改配置來控制視頻解碼裝置的狀態。
圖形用戶界面如圖7所示,主要包括編碼格式、分屏規格、通道選擇和分辨率選擇等參數的配置。重寫Qt 的鼠標移動事件,鼠標移動到配置功能區位置區域時自動彈出,鼠標移開區域后自動隱藏,可以實現全屏無遮擋的實時預覽。

圖7 圖形用戶界面
其中編碼格式是視頻源端發送的視頻數據壓縮編碼格式;視頻源端口是視頻源的發送視頻數據的UDP 端口;分屏設置為VO 模塊顯示的視頻個數,規格為1/4/9 分屏,根據所選分屏選項來設置VO 視頻輸出模塊的分屏模式;最后根據所勾選的啟動通道個數來確定開啟UDP 端口、VDEC 解碼模塊和VPSS視頻處理子模塊的個數。
Hi3519 中對視頻的解碼是通過視頻解碼模塊(VDEC)實現的。VDEC 模塊提供驅動視頻解碼硬件工作的MPI 接口,實現視頻解碼功能。VDEC 的硬件解碼模塊包括VDH 和JPEGD,支持H.264/H.265/JPEG/MJPEG,H.264/H.265 最大支持3840×2160@60fps,JPEG/MJPEG:最大支持4096×2160@60fps。視頻解碼功能流程圖如圖8所示,首先根據啟動的通道個數和分辨率分配合適的VBPool 給VDEC,然后創建相應數量的VDEC 通道并配置屬性,解碼通道配置成功后調用HI_MPI_VDEC_StartRecvStream()函數讓解碼器開始接收碼流。將UDP 接收到的碼流數據存放在FIFO 中,每次收到數據后對FIFO 中的碼流數據進行編碼格式的判斷,當檢測到一幀完整的編碼數據后,將FIFO 中的這一完整幀數據發送給VDEC 解碼模塊開始解碼,解碼完成后將圖像發送給VPSS進行裁剪和格式轉換。在每次完成一包數據解碼后,需要判斷是否結束解碼功能,若需要結束解碼功能則需要停止、銷毀解碼通道并且注銷VBPool資源。

圖8 解碼功能流程圖
功能測試包括多通道功能測試、圖像質量測試和解碼延時測試,通過這三個測試結果來衡量解碼裝置。
將U-boot 引導程序、Hisilicon Linux(內核基于Linux 標準內核4.9.y 版本移植)和編寫好的嵌入式程序通過HiTool工具燒寫到解碼裝置,開機啟動后加載相應的驅動[12]。然后將解碼裝置和遙測數據采集裝置的以太網接入同一個交換機內,并配置好IP地址,每個遙測數據發送裝置通過不同的端口發送遙測數據流給解碼裝置,在解碼裝置上配置好每個通道的端口號。
在只有一個通道或者對某一通道全屏觀察時,啟用通道只需勾選1 個,分屏規格設置為一分屏,點擊下發配置信息,就可實現對某一通道的全屏顯示,效果如圖9所示。

圖9 單分屏單通道測試圖
當啟用通道勾選4 個,分屏規格選擇為四分屏,點擊下發配置信息,效果如圖10所示。

圖10 四分屏四通道測試圖
當啟用通道全部勾選時,即所有通道都開啟,點擊下發配置信息后,效果如圖11所示。

圖11 九分屏九通道測試圖
本小節通過客觀評價標準峰值信噪比(PSNR)來分析圖像質量[13],PSNR的計算公式如下:
通常來講,PSNR 值越高,圖像就越清晰,一般PSNR 在[35dB,40dB]區間時,人眼已經無法分辨出圖像之間的差異[14]。使用海思官方工具vpss_src_dump 可以獲取到VDEC 解碼后的圖像數據,使用Matlab 計算圖像的峰值信噪比,并且對比H.265 碼流與原始YUV 圖像文件壓縮比。在不同分辨率和不同畫面場景下的PSNR 和圖像壓縮比結果如表1所示。

表1 PSNR分析結果
通過表1的分析結果可知本裝置在靜態和動態情況下的PSNR 都處于[38dB,39dB]之間,證明解碼后的圖像質量良好。
經系統整體流程分析可知,從視頻采集裝置采集數據到顯示器顯示主要經過三個部分,編解碼延遲、以太網傳輸延遲和顯示延遲。測試環境是在平板電腦上開始秒表計數,用相機采集秒表計數軟件的圖像,然后在解碼裝置的HDMI 顯示器上顯示,用手機同時抓拍平板電腦和HDMI 顯示器圖像得到測試結果。在高碼率和低碼率的傳輸情況下進行十組時延測試(前五組為高碼率2M,后五組為低碼率1M),測試結果如表2所示。

表2 解碼延時測試
通過表2測試結果進行分析可知,在2M 碼率情況下,實時播放的時延平均在150ms~160ms。在相同條件下采用1M 碼率傳輸時,實時播放的延時增加,平均在250ms 左右,相比增加100ms。視頻采用H.265 編碼后的文件與YUV 文件壓縮比大約為1:270。可以滿足快速傳輸和實時解碼的需求,具有較高的經濟及軍事效益。
針對當下海軍艦船監測的需求,設計了一種基于嵌入式支持多通道的解碼裝置。該解碼裝置實現了對遙測視頻碼流的快速傳輸、實時顯示和多通道顯示。實驗結果證明,該設計用戶界面操作簡單,解碼圖像質量較好,高碼率傳輸下實時顯示延時小于200ms。相較于傳統解碼裝置,該設計具備低延時、易操作和高質量等突出優勢。該裝置的設計為海軍艦船領域的多通道實時監測問題提供了潛在可行的新型解決方案。