Rockchip RGA 用法 - housekeeper-software/tech GitHub Wiki

rockchip RGA

可以做2D图像处理,不占用CPU资源,速度较快。

用法

android上提供的 RgaConvertor实际上对 librga.so的C接口的封装。目前,只提供一个接口:
public boolean blit(byte[] data,
                      int src_x,
                      int src_y,
                      int src_w,
                      int src_h,
                      int src_sw,//这个是原图的宽度,跟剪裁宽度没有关系
                      int src_sh,//这是原图的高度,跟剪裁高度没有关系
                      int src_format,
                      int transform,
                      int dst_w,
                      int dst_h,
                      int dst_sw,
                      int dst_sh,
                      int dst_format,
                      ByteBuffer out_buffer);

public boolean blit(ByteBuffer data,
                      int src_x,
                      int src_y,
                      int src_w,
                      int src_h,
                      int src_sw,
                      int src_sh,
                      int src_format,
                      int transform,
                      int dst_w,
                      int dst_h,
                      int dst_sw,
                      int dst_sh,
                      int dst_format,
                      ByteBuffer out_buffer);
输入数据如果是 byte[],使用第一个方法,输入数据是ByteBuffer,使用第二个重载的方法

注意

上面的ByteBuffer,必须是 DirectByteBuffer, 通过 ByteBuffer.allocateDirect()创建。 DirectByteBuffer 构建系统代价比较高,因而,可以使用DirectByteBufferPool来创建。

参数说明

byte[] data: 原始图像数据,可以是NV21,NV12,YUV420等,具体参考SDK说明
int src_x:    剪裁区域的x
int src_y:   剪裁区域的y
int src_w:   剪裁区域的宽
int src_h:   剪裁区域的高
int src_sw:  这个是原图的宽度,跟剪裁宽度没有关系,一般称为行距
int src_sh:  这是原图的高度,跟剪裁高度没有关系
int src_format:原图的格式,具体参考SDK中的定义
int tranform: 图像变换,旋转,镜像等,不做任何变换就直接给0
int dst_w:    目标图像的宽度
int dst_h:    图标图像的高度
int dst_sw:   目标图像的虚宽,一般等于目标图像的宽度
int dst_sh:   目标图像的虚高,一般等于目标图像的高度
int dst_format:目标图像的格式
ByteBuffer out_buffer: 目标图像的接收buffer

对图像的尺寸要求

图像的宽度必须是16的倍数,高度似乎不能为奇数。