rkrga

Rockchip RGA 库的 Rust 语言绑定.

Rockchip RGA 是一个独立的二维光栅图形加速单元。 它加速了二维图形操作,例如点/线绘制、图像缩放、旋转、位图、图像合成等。

当前基于 Rockchip RGA v1.2.x 应用接口接口实现。

本项目仅适用于 Rockchip 公司具有 RGA 模块的 SOC 平台,例如 RK33XX、RK35XX 等。

准备工作

在引用或编译本项目前,你需要将 Rust 工具链更新到 1.57 以上的版本。

同时确认 Target: aarch64-unknown-linux-gnu 已经安装,若是没有可以执行以下命令安装:

sh rustup target add aarch64-unknown-linux-gnu

由于本项目的目标平台为 ARM64 架构,因此在开始是基本使用交叉编译模式, 在 x86/x86_64 平台上开发、编译,然后讲可执行文件上传到目标设备执行, 因此在交叉编译环境下编译本项目前你需要设置以下环境变量:

```sh

设置包含有 RgaApi.h 的目录

export RKRGAINCLUDEDIR=/opt/fullv/2021.02.7-rklaser1/staging/usr/include/rga

设置交叉编译工具链 SYSROOT 目录

export RKRGASYSROOTDIR=/opt/fullv/2021.02.7-rklaser1/staging ```

另外还需要设定 Cargo 交叉编译关配置,创建 .cargo/config.toml 文件并写入类似于以下内容:

```toml [build] target = "aarch64-unknown-linux-gnu"

[target.aarch64-unknown-linux-gnu] linker = "/opt/fullv/2021.02.7-rklaser1/host/bin/aarch64-buildroot-linux-gnu-gcc" runner = "./target-runner.sh" ```

注意:以上路径仅为作者自身项目所用,你需要调整为合适自己的路径。

当以上配置都妥当后,现在可以安照 Rust 标准开发流程来进行后续工作了。

使用示例

```rust use rkrga::{Rga, RgaBuffer, RgaInfoBuilder, RgaRectBuilder, RgaTransform}; use std::sync::Arc;

// 初始化 RGA 模块 let rga = Arc::new(Rga::new().unwrap());

// 设定输入、输出图像信息 let srcrect = RgaRectBuilder::new().size(1280, 720).format(RgaPixelFormat::Rgba8888).build(); let dstrect = RgaRectBuilder::new().size(720, 1280).format(RgaPixelFormat::Rgba8888).build();

// 分配输入、输出内存缓冲区 let srcbo = RgaBuffer::withrectmapped(Arc::clone(&rga), &srcrect).unwrap(); let dstbo = RgaBuffer::withrectmapped(Arc::clone(&rga), &dstrect).unwrap();

// 生成 RGA 操作信息 let srcinfo = RgaInfoBuilder::new().bo(&srcbo).rect(&srcrect).build(); let mut dstinfo = RgaInfoBuilder::new().bo(&dstbo).rect(&dstrect).build();

// 执行旋转操作 rga.rotate(&srcinfo, &mut dstinfo, RgaTransform::Rot90).unwrap(); ```