本文來源電子發(fā)燒友社區(qū),作者:羈傲不馴, 帖子地址:https://bbs.elecfans.com/jishu_2307583_1_1.html
RGA (Raster Graphic Acceleration Unit)是一個(gè)獨(dú)立的2D硬件加速器,可用于加速點(diǎn)/線繪制,執(zhí)行圖像縮放、旋轉(zhuǎn)、bitBlt、alpha混合等常見的2D圖形操作。
K3568,其規(guī)格如下:
硬件版本 | 代碼名稱 | 輸入最小 | 輸入最大 | 輸出最小 | 輸出最大 | 像素/周期 | 性能(頻率300M) |
---|---|---|---|---|---|---|---|
RGA2-Enhance | skylarkV2 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 2 | ≈600Mpix/s |
硬件版本 | 代碼名稱 | 輸入圖像數(shù)據(jù)格式 | 輸出圖像數(shù)據(jù)格式 |
---|---|---|---|
RGA2-Enhance | skylarkV2 | RGBA/BGRA/ARGB/ABGR8888RGBA/BGRA/ARGB/ABGR4444RGBA/BGRA/ARGB/ABGR5551RGB/BGR888RGB/BGR565YUV420 8位YUV420 10位YUV422 8位YUV422 10位YUYV/YVYU/UYVY/VYUY422BPP8/BPP4/BPP2/BPP1(僅適用于調(diào)色板) | RGBA/BGRA/ARGB/ABGR8888RGBA/BGRA/ARGB/ABGR4444RGBA/BGRA/ARGB/ABGR5551RGB/BGR888RGB/BGR565YUV420 8位YUV422 8位YUYV/YVYU/UYVY/VYUY422YUYV/YVYU/UYVY/VYUY420YUV400Y4/Y1 |
本文程序見下鏈接:
github.com
RGA模塊支持庫(kù)為librga.so,通過對(duì)圖像緩沖區(qū)結(jié)構(gòu)體struct rga_info進(jìn)行配置,實(shí)現(xiàn)相應(yīng)的2D圖形操作。為了獲得更友好的開發(fā)體驗(yàn),在此基礎(chǔ)上進(jìn)一步封裝常用的2D圖像操作接口。新的接口主要包含以下特點(diǎn):
- 接口定義參考o(jì)pencv/matlab中常用的2D圖形接口定義,以減少二次開發(fā)的學(xué)習(xí)成本。
- 為消除RGA硬件版本差異帶來的兼容問題,加入RGA query查詢功能。查詢內(nèi)容主要包括版本信息,輸入輸出大分辨率及圖像格式的支持。
- 對(duì)于2D圖像復(fù)合操作,增加improcess接口。通過傳入一系列預(yù)定義的usage執(zhí)行復(fù)合操作。
- 執(zhí)行圖像操作之前,需要對(duì)輸入輸出圖像緩沖區(qū)進(jìn)行處理。調(diào)用wrapbuffer_T接口將輸入輸出圖像信息填充到結(jié)構(gòu)體struct rga_buffer_t,結(jié)構(gòu)體中包含分辨率及圖像格式等信息。
1、圖片輸入
- 使用libpng or libjpeg等開源庫(kù)實(shí)現(xiàn)對(duì)用戶輸入圖像的解碼。
- 參考imv 源碼,進(jìn)行圖片類型識(shí)別。
- 使用開源軟件Opencv自適應(yīng)打開圖片文件。
- 使用stb-image庫(kù),打開文件獲取圖像。(*)
參考了很多大佬的開源軟件,最后選擇了使用簡(jiǎn)單易用的stb庫(kù)實(shí)現(xiàn)對(duì)圖像文件的解析。
圖片輸入
解析圖片:
p_src->img_data = stbi_load(file_patch, &iw, &ih, &n, 0);
解析后的圖像數(shù)據(jù)為img_data,圖像的寬:iw;高:ih;顏色通道:n 其中n為:
enum {
STBI_default = 0, // only used for desired_channels
STBI_grey = 1, //灰度圖
STBI_grey_alpha = 2, //灰度+透明度
STBI_rgb = 3, //RGB圖
STBI_rgb_alpha = 4 // RGB+透明度
};
圖像縮放
圖像縮放功能使用rga接口,輸入輸出參數(shù)均為最簡(jiǎn)圖像結(jié)構(gòu)體。
struct image_param{
int width; //寬
int heigth; //高
RgaSURF_FORMAT fmt; // 圖像格式
unsigned char *img_data; //圖像數(shù)據(jù)
};
int rga_resize_test(struct image_param *p_src, struct image_param *p_dst)
使用完成后需要使用release_image_file_buf接口釋放圖像內(nèi)存?。?!
圖像剪裁
int rga_crop_test(struct image_param *p_src, struct image_param *p_dst, im_rect src_rect);
測(cè)試了如下圖片格式
輸入圖片 | 輸出圖片 | 顏色格式 | 解析顏色格式 | 是否正常輸出 | 轉(zhuǎn)化時(shí)間ms |
---|---|---|---|---|---|
8192*8192 | 4096*4096 | RGBA32 | RGB888 | 是 | 217.829 |
8192*8192 | 8192*2048 | YUV420 | RGB888 | 否 | 不支持長(zhǎng)寬超過分辨率的縮放 |
1920*1080 | 1280*720 | YUV420 | RGB888 | 是 | 8.890 |
3840*2160 | 1280*720 | RGB32 | RGBA8888 | 是 | 27.267 |
-
RK3568
+關(guān)注
關(guān)注
4文章
521瀏覽量
5139 -
開發(fā)板試用
+關(guān)注
關(guān)注
3文章
301瀏覽量
2121
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論