本文来源电子发烧友社区,作者:羁傲不驯, 帖子地址:https://bbs.elecfans.com/jishu_2307583_1_1.html
RGA (Raster Graphic Acceleration Unit)是一个独立的2D硬件加速器,可用于加速点/线绘制,执行图像缩放、旋转、bitBlt、alpha混合等常见的2D图形操作。
K3568,其规格如下:
硬件版本 | 代码名称 | 输入最小 | 输入最大 | 输出最小 | 输出最大 | 像素/周期 | 性能(频率300M) |
---|---|---|---|---|---|---|---|
RGA2-Enhance | skylarkV2 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 2 | ≈600Mpix/s |
硬件版本 | 代码名称 | 输入图像数据格式 | 输出图像数据格式 |
---|---|---|---|
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(仅适用于调色板) | 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模块支持库为librga.so,通过对图像缓冲区结构体struct rga_info进行配置,实现相应的2D图形操作。为了获得更友好的开发体验,在此基础上进一步封装常用的2D图像操作接口。新的接口主要包含以下特点:
- 接口定义参考opencv/matlab中常用的2D图形接口定义,以减少二次开发的学习成本。
- 为消除RGA硬件版本差异带来的兼容问题,加入RGA query查询功能。查询内容主要包括版本信息,输入输出大分辨率及图像格式的支持。
- 对于2D图像复合操作,增加improcess接口。通过传入一系列预定义的usage执行复合操作。
- 执行图像操作之前,需要对输入输出图像缓冲区进行处理。调用wrapbuffer_T接口将输入输出图像信息填充到结构体struct rga_buffer_t,结构体中包含分辨率及图像格式等信息。
1、图片输入
- 使用libpng or libjpeg等开源库实现对用户输入图像的解码。
- 参考imv 源码,进行图片类型识别。
- 使用开源软件Opencv自适应打开图片文件。
- 使用stb-image库,打开文件获取图像。(*)
参考了很多大佬的开源软件,最后选择了使用简单易用的stb库实现对图像文件的解析。
图片输入
解析图片:
p_src->img_data = stbi_load(file_patch, &iw, &ih, &n, 0);
解析后的图像数据为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接口,输入输出参数均为最简图像结构体。
struct image_param{
int width; //宽
int heigth; //高
RgaSURF_FORMAT fmt; // 图像格式
unsigned char *img_data; //图像数据
};
int rga_resize_test(struct image_param *p_src, struct image_param *p_dst)
使用完成后需要使用release_image_file_buf接口释放图像内存!!!
图像剪裁
int rga_crop_test(struct image_param *p_src, struct image_param *p_dst, im_rect src_rect);
测试了如下图片格式
输入图片 | 输出图片 | 颜色格式 | 解析颜色格式 | 是否正常输出 | 转化时间ms |
---|---|---|---|---|---|
8192*8192 | 4096*4096 | RGBA32 | RGB888 | 是 | 217.829 |
8192*8192 | 8192*2048 | YUV420 | RGB888 | 否 | 不支持长宽超过分辨率的缩放 |
1920*1080 | 1280*720 | YUV420 | RGB888 | 是 | 8.890 |
3840*2160 | 1280*720 | RGB32 | RGBA8888 | 是 | 27.267 |
-
RK3568
+关注
关注
4文章
514浏览量
5031 -
开发板试用
+关注
关注
3文章
301浏览量
2092
发布评论请先 登录
相关推荐
评论