xref: /OK3568_Linux_fs/external/linux-rga/samples/README.md (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# librga IM2D API 示例代码说明
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun​	该目录下为librga IM2D API示例代码,包含常见的图像缩放、裁剪、旋转、Blit、alpha混合等操作的示例代码。
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun## 目录说明
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun├── **im2d_api_demo**:IM2D API快速演示DEMO<br/>
8*4882a593Smuzhiyun├── **im2d_slt**:slt测试工具<br/>
9*4882a593Smuzhiyun├── **allocator_demo**:内存分配器相关示例代码<br/>
10*4882a593Smuzhiyun│   └── **src**
11*4882a593Smuzhiyun│       ├── **rga_allocator_1106_cma_demo.cpp**:RV1106没有搭载IOMMU,须分配物理连续内存调用RGA,该平台CMA节点路径与其他平台不同。<br/>
12*4882a593Smuzhiyun│       ├── **rga_allocator_dma32_demo.cpp**:使用dma_heap分配4G以内内存空间的内存(不保证物理连续)调用RGA。<br/>
13*4882a593Smuzhiyun│       ├── **rga_allocator_dma_cache_demo.cpp**:使用dma_heap分配cacheable的内存调用RGA。<br/>
14*4882a593Smuzhiyun│       ├── **rga_allocator_dma_demo.cpp**:使用dma_heap分配内存调用RGA。<br/>
15*4882a593Smuzhiyun│       ├── **rga_allocator_drm_demo.cpp**:使用DRM分配内存调用RGA。<br/>
16*4882a593Smuzhiyun│       ├── **rga_allocator_drm_phy_demo.cpp**:使用DRM分配物理连续的内存调用RGA。<br/>
17*4882a593Smuzhiyun│       ├── **rga_allocator_graphicbuffer_demo.cpp**:使用GraphicBuffer分配4G内存空间以内的内存调用RGA。<br/>
18*4882a593Smuzhiyun│       └── **rga_allocator_malloc_demo.cpp**:使用malloc分配虚拟地址调用RGA。<br/>
19*4882a593Smuzhiyun├── **alpha_demo**:alpha混合、叠加相关示例代码<br/>
20*4882a593Smuzhiyun│   └── **src**
21*4882a593Smuzhiyun│       ├── **rga_alpha_3channel_demo.cpp**:调用RGA实现三通道alpha叠加。<br/>
22*4882a593Smuzhiyun│       ├── **rga_alpha_colorkey_demo.cpp**:调用RGA实现colorkey。<br/>
23*4882a593Smuzhiyun│       ├── **rga_alpha_demo.cpp**:调用RGA实现双通道alpha叠加。<br/>
24*4882a593Smuzhiyun│       ├── **rga_alpha_osd_demo.cpp**:调用RGA实现常见OSD场景<br/>
25*4882a593Smuzhiyun│       └── **rga_alpha_yuv_demo.cpp**:调用RGA实现RGBA图像与YUV图像alpha叠加。<br/>
26*4882a593Smuzhiyun├── **async_demo**:异步模式相关示例代码<br/>
27*4882a593Smuzhiyun├── **config_demo**:线程全局配置相关示例代码<br/>
28*4882a593Smuzhiyun│   └── **src**
29*4882a593Smuzhiyun│       ├── **rga_config_single_core_demo.cpp**:指定核心执行当前RGA任务。<br/>
30*4882a593Smuzhiyun│       └── **rga_config_thread_core_demo.cpp**:当前线程均指定核心执行RGA任务。<br/>
31*4882a593Smuzhiyun├── **copy_demo**:图像搬运、拷贝相关示例代码<br/>
32*4882a593Smuzhiyun│   └── **src**
33*4882a593Smuzhiyun│       ├── **rga_copy_demo.cpp**:调用RGA实现图像拷贝。<br/>
34*4882a593Smuzhiyun│       ├── **rga_copy_fbc_demo.cpp**:调用RGA实现FBC图像拷贝。<br/>
35*4882a593Smuzhiyun│       ├── **rga_copy_tile8x8_demo.cpp**:调用RGA实现tile8*8图像拷贝。<br/>
36*4882a593Smuzhiyun│       ├── **rga_copy_splice_demo.cpp**:调用RGA实现图像拼接。<br/>
37*4882a593Smuzhiyun│       └── **rga_copy_splice_task_demo.cpp**:批处理方式调用RGA实现图像拼接。<br/>
38*4882a593Smuzhiyun├── **crop_demo**:图像裁剪、拼接相关示例代码<br/>
39*4882a593Smuzhiyun│   └──** src**
40*4882a593Smuzhiyun│       ├── **rga_crop_demo.cpp**:调用RGA实现图像裁剪。<br/>
41*4882a593Smuzhiyun│       └── **rga_crop_rect_demo.cpp**:调用RGA实现裁剪源图像并输出到目标图像上某一区域。<br/>
42*4882a593Smuzhiyun├── **cvtcolor_demo**:图像格式转换、色域转换相关示例代码<br/>
43*4882a593Smuzhiyun│   └── **src**
44*4882a593Smuzhiyun│       ├── **rga_cvtcolor_demo.cpp**:调用RGA实现图像格式转换。<br/>
45*4882a593Smuzhiyun│       ├── **rga_cvtcolor_csc_demo.cpp**:调用RGA指定色域空间转换配置实现图像格式转换。<br/>
46*4882a593Smuzhiyun│       └── **rga_cvtcolor_gray256_demo.cpp**:调用RGA实现256阶灰度图转换。<br/>
47*4882a593Smuzhiyun├── **fill_demo**:图像填充、画框相关示例代码<br/>
48*4882a593Smuzhiyun│   └── **src**
49*4882a593Smuzhiyun│       ├── **rga_fill_demo.cpp**:调用RGA实现颜色填充。<br/>
50*4882a593Smuzhiyun│       ├── **rga_fill_rectangle_demo.cpp**:调用RGA实现矩形框绘制。<br/>
51*4882a593Smuzhiyun│       ├── **rga_fill_rectangle_array_demo.cpp**:调用RGA实现多个矩形框绘制。<br/>
52*4882a593Smuzhiyun│       ├── **rga_fill_rectangle_task_demo.cpp**:批处理方式调用RGA实现矩形框绘制。<br/>
53*4882a593Smuzhiyun│       └── **rga_fill_rectangle_task_array_demo.cpp**:批处理方式调用RGA实现多个矩形框绘制。<br/>
54*4882a593Smuzhiyun├── **mosaic_demo**:马赛克遮盖相关示例代码<br/>
55*4882a593Smuzhiyun├── **padding_demo**:padding相关示例代码<br/>
56*4882a593Smuzhiyun├── **resize_demo**:图像缩放相关示例代码<br/>
57*4882a593Smuzhiyun│   └── **src**
58*4882a593Smuzhiyun│       ├── **rga_resize_demo.cpp**:调用RGA实现图像缩放。<br/>
59*4882a593Smuzhiyun│       ├── **rga_resize_rect_demo.cpp**:调用RGA实现源图像缩放并输出到目标图像指定区域。<br/>
60*4882a593Smuzhiyun│       └── **rga_resize_uv_downsampling_demo.cpp**:调用RGA实现YUV422均值降采样到YUV420。<br/>
61*4882a593Smuzhiyun├── **rop_demo**:ROP运算相关示例代码<br/>
62*4882a593Smuzhiyun├── **transform_demo**:图像变换相关示例代码<br/>
63*4882a593Smuzhiyun│   └── **src**
64*4882a593Smuzhiyun│       ├── **rga_transform_flip_demo.cpp**:调用RGA实现图像镜像。<br/>
65*4882a593Smuzhiyun│       ├── **rga_transform_rotate_demo.cpp**:调用RGA实现图像旋转。<br/>
66*4882a593Smuzhiyun│       └── **rga_transform_rotate_flip_demo.cpp**:调用RGA实现图像镜像同事旋转。<br/>
67*4882a593Smuzhiyun├── **utils**:示例代码中使用的第三方引用、通用工具代码<br/>
68*4882a593Smuzhiyun└── **sample_file**:演示代码使用图像数据文件<br/>
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun## 编译说明
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun​	本仓库示例代码支持CMAKE编译,可以通过修改toolchain_*.cmake文件以及编译脚本实现快速编译。
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun### 工具链修改
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun- **Android NDK(build for android)**
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun​	参考librga源码目录下**toolchains/toolchain_android_ndk.cmake**写法,修改NDK路径、Android版本信息等。
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun| 工具链选项                          | 描述                                         |
81*4882a593Smuzhiyun| ----------------------------------- | -------------------------------------------- |
82*4882a593Smuzhiyun| CMAKE_ANDROID_NDK                   | NDK编译包路径                                |
83*4882a593Smuzhiyun| CMAKE_SYSTEM_NAME                   | 平台名,默认为Android                        |
84*4882a593Smuzhiyun| CMAKE_SYSTEM_VERSION                | Android版本                                  |
85*4882a593Smuzhiyun| CMAKE_ANDROID_ARCH_ABI              | 处理器版本                                   |
86*4882a593Smuzhiyun| CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION | 工具链选择(clang/gcc)                      |
87*4882a593Smuzhiyun| CMAKE_ANDROID_STL_TYPE              | NDK C++库的链接方式(c++_static/c++_shared) |
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun- **Linux(buildroot/debian)**
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun​	参考librga源码目录下**toolchains/toolchain_linux.cmake**写法,修改工具链路径、名称。
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun| 工具链选项     | 描述       |
94*4882a593Smuzhiyun| -------------- | ---------- |
95*4882a593Smuzhiyun| TOOLCHAIN_HOME | 工具链目录 |
96*4882a593Smuzhiyun| TOOLCHAIN_NAME | 工具链名称 |
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun### 编译脚本修改
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun​	修改samples目录或需要编译的示例代码目录下**cmake_*.sh**,指定toolchain路径。
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun| 编译选项       | 描述                                                         |
103*4882a593Smuzhiyun| -------------- | ------------------------------------------------------------ |
104*4882a593Smuzhiyun| TOOLCHAIN_PATH | toolchain的绝对路径,即《工具链修改》小节中修改后的toolchain_*.cmake文件的绝对路径 |
105*4882a593Smuzhiyun| LIBRGA_PATH    | 需要链接的librga.so的绝对路径,默认为librga cmake编译时的默认打包路径 |
106*4882a593Smuzhiyun| BUILD_DIR      | 编译生成文件存放的相对路径                                   |
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun### 执行编译脚本
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun- **Android NDK(build for android)**
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun```bash
113*4882a593Smuzhiyun$ chmod +x ./cmake_android.sh
114*4882a593Smuzhiyun$ ./cmake_android.sh
115*4882a593Smuzhiyun```
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun- **Linux(buildroot/debian)**
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun```bash
120*4882a593Smuzhiyun$ chmod +x ./cmake_linux.sh
121*4882a593Smuzhiyun$ ./cmake_linux.sh
122*4882a593Smuzhiyun```
123*4882a593Smuzhiyun
124