RGA
Firefly Ubuntu 已经添加了 RGA 支持 , 本文针对用户态接口librga进行说明。
16.1. 获取版本信息
root@firefly:/usr/lib/aarch64-linux-gnu# strings librga.so |grep rga_api |grep version
16.2. 使用流程说明
申请内存空间->输入图片数据->获取buffer_handle->包装buffer_handle->操作图片数据->输出图片数据
16.3. 申请内存空间的三种方法
-
molloc
-
函数原型:void *malloc(size_t size)
-
优点:简单,方便,兼容性好
-
缺点:速度慢
-
-
dma_buf_alloc
-
函数原型: int dma_buf_alloc(const char *path, size_t size, int *fd, void **va)
-
优点:内存共享,共享节点在/dev/dma_heap/* 速度快
-
缺点:只能申请4G以下的内存
-
-
drm_buf_alloc
-
函数原型:void *drm_buf_alloc(int TexWidth, int TexHeight, int bpp, int *fd, int *handle, size_t *actual_size, int flags=0)
-
优点:内存共享,速度快
-
缺点:需要额外安装libdrm库
-
16.4. 操作图片数据的接口
//图像拷贝(copy)
imcopy(rga_buffer_t src,rga_buffer_t dst);
//图像缩放(resize)
imresize(rga_buffer_t src,rga_buffer_t dst);
//图像剪切(corp)
imcrop(rga_buffer_t src,rga_buffer_t dst,im_rect im_src_rect);
//图像旋转(rotate 90/180/270)
imrotate(rga_buffer_t src,rga_buffer_t dst,RgaRotate rotation);
//图像翻转(flip=H/V)
imflip(rga_buffer_t src,rga_buffer_t dst,IM_USAGE FLIP);
//图像平移(translate)
imtranslate(rga_buffer_t src,rga_buffer_t dst,int x,int y);
//图像融合(blend)
imblend(rga_buffer_t src,rga_buffer_t dst);
//图像不同的色彩空间进行转换(cvtcolor)
imcvtcolor(rga_buffer_t src,rga_buffer_t dst,int src_format,int dst_format);
//图像填充(fill=blue/green/red)
imfill(rga_buffer_t dst,im_rect im_dst_rect, 1);