G2D圖像處理硬件調(diào)用和測試-基于米爾-全志T113-i國產(chǎn)開發(fā)板
概述:
MYC-YT113i核心板及開發(fā)板
真正的國產(chǎn)核心板,100%國產(chǎn)物料認(rèn)證
國產(chǎn)T113-i處理器配備2*Cortex-A7@1.2GHz ,RISC-V
外置DDR3接口、支持視頻編解碼器、HiFi4 DSP
接口豐富:視頻采集接口、顯示器接口、USB2.0 接口、CAN 接口、千兆以太網(wǎng)接口
工業(yè)級:-40℃~+85℃、尺寸37mm*39mm
郵票孔+LGA,140+50PIN
米爾-全志T113-i國產(chǎn)核心板
米爾-全志T113-i國產(chǎn)開發(fā)板
全志 T113-i 2D圖形加速硬件支持情況
Supports layer size up to 2048 x 2048 pixels
Supports pre-multiply alpha image data
Supports color key
Supports two pipes Porter-Duff alpha blending
Supports multiple video formats 4:2:0, 4:2:2, 4:1:1 and multiple pixel formats (8/16/24/32 bits graphics
layer)
Supports memory scan order option
Supports any format convert function
Supports 1/16× to 32× resize ratio
Supports 32-phase 8-tap horizontal anti-alias filter and 32-phase 4-tap vertical anti-alias filter
Supports window clip
Supports FillRectangle, BitBlit, StretchBlit and MaskBlit
Supports horizontal and vertical flip, clockwise 0/90/180/270 degree rotate for normal buffer
Supports horizontal flip, clockwise 0/90/270 degree rotate for LBC buffer
可以看到 g2d 硬件支持相當(dāng)多的2D圖像處理,包括顏色空間轉(zhuǎn)換,分辨率縮放,圖層疊加,旋轉(zhuǎn)等。
1.開發(fā)環(huán)境配置
基礎(chǔ)開發(fā)環(huán)境搭建參考上上上一篇
除了工具鏈外,我們使用 opencv-mobile 加載輸入圖片和保存結(jié)果,用來查看顏色轉(zhuǎn)換是否正常
g2d硬件直接采用標(biāo)準(zhǔn)的 Linux ioctl 操縱,只需要引入相關(guān)結(jié)構(gòu)體定義即可,無需鏈接so
此外,g2d的輸入和輸出數(shù)據(jù)必須在dmaion buffer上,因此還需要dmaion.h頭文件,用來分配和釋放dmaion buffer
2.基于C語言實(shí)現(xiàn)的YUV轉(zhuǎn)RGB
這里復(fù)用之前T113-i JPG解碼的函數(shù)
3.基于ARM neon指令集優(yōu)化的YUV轉(zhuǎn)RGB
考慮到armv7編譯器的自動neon優(yōu)化能力較差,這里針對性的編寫 arm neon inline assembly 實(shí)現(xiàn)YUV2RGB內(nèi)核部分,達(dá)到最優(yōu)化的性能,榨干cpu性能。
4.基于G2D圖形硬件的YUV轉(zhuǎn)RGB
我們先實(shí)現(xiàn) dmaion buffer 管理器,這里貼的代碼省略了異常錯誤處理的邏輯,有個坑是 linux-4.9 和 linux-5.4 用法不一樣,米爾電子的這個T113-i系統(tǒng)是linux-5.4,所以不兼容4.9內(nèi)核的ioctl用法習(xí)慣。
5.然后再實(shí)現(xiàn) G2D圖形硬件 YUV轉(zhuǎn)RGB 的轉(zhuǎn)換器
?提前分配好YUV和RGB的dmaion buffer
?將YUV數(shù)據(jù)拷貝到dmaion buffer,flush cache完成同步
?配置轉(zhuǎn)換參數(shù),ioctl調(diào)用G2D_CMD_BITBLT_H完成轉(zhuǎn)換
?flush cache完成同步,從dmaion buffer拷貝出RGB數(shù)據(jù)
?釋放dmaion buffer
6.G2D圖像硬件YUV轉(zhuǎn)RGB測試
考慮到dmaion buffer分配和釋放都比較耗時,我們提前做好,循環(huán)調(diào)用步驟3的G2D轉(zhuǎn)換,統(tǒng)計(jì)耗時,并在top工具中查看CPU占用率
可以看到 ARM neon 的優(yōu)化效果非常明顯,而使用G2D圖形硬件能獲得進(jìn)一步加速,并且能顯著降低CPU占用率!
轉(zhuǎn)換結(jié)果對比和分析
C和neon的轉(zhuǎn)換結(jié)果完全一致,但是g2d轉(zhuǎn)換后的圖片有明顯的色差
G2D圖形硬件只支持 G2D_BT601,G2D_BT709,G2D_BT2020 3種YUV系數(shù),而JPG所使用的YUV系數(shù)是改版BT601,因此產(chǎn)生了色差
從g2d內(nèi)核驅(qū)動中也可以得知,暫時沒有方法為g2d設(shè)置自定義的YUV系數(shù),g2d不適合用于JPG的編解碼,但依然適合攝像頭和視頻編解碼的顏色空間轉(zhuǎn)換