xref: /OK3568_Linux_fs/external/linux-rga/docs/Rockchip_Developer_Guide_RGA_CN.md (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# RGA IM2D API 开发指南
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun文件标识:RK-KF-YF-403
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun发布版本:V2.2.2
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun日期:2023-06-28
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun文件密级:□绝密   □秘密   □内部资料   ■公开
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun**免责声明**
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun本文档按“现状”提供,瑞芯微电子股份有限公司(“本公司”,下同)不对本文档的任何陈述、信息和内容的准确性、可靠性、完整性、适销性、特定目的性和非侵权性提供任何明示或暗示的声明或保证。本文档仅作为使用指导的参考。
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun由于产品版本升级或其他原因,本文档将可能在未经任何通知的情况下,不定期进行更新或修改。
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun**商标声明**
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun“Rockchip”、“瑞芯微”、“瑞芯”均为本公司的注册商标,归本公司所有。
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun本文档可能提及的其他所有注册商标或商标,由其各自拥有者所有。
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun**版权所有 © 2022 瑞芯微电子股份有限公司**
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun超越合理使用范畴,非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun瑞芯微电子股份有限公司
28*4882a593Smuzhiyun
29*4882a593SmuzhiyunRockchip Electronics Co., Ltd.
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun地址:     福建省福州市铜盘路软件园A区18号
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun网址:     [www.rock-chips.com](http://www.rock-chips.com)
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun客户服务电话: +86-4007-700-590
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun客户服务传真: +86-591-83951833
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun客户服务邮箱: [fae@rock-chips.com](mailto:fae@rock-chips.com)
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun---
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun**读者对象**
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun本文档(本指南)主要适用于以下工程师:
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun- 技术支持工程师
48*4882a593Smuzhiyun- 软件开发工程师
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun**修订记录**
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun| **日期**   | **版本** | **作者**           | **修改说明**                                                 |
53*4882a593Smuzhiyun| ---------- | -------- | ------------------ | ------------------------------------------------------------ |
54*4882a593Smuzhiyun| 2020/06/24 | 1.0.0    | 陈城,李煌         | 初始版本                                                     |
55*4882a593Smuzhiyun| 2020/10/16 | 1.0.1    | 陈城,李煌,余乔伟 | 更新部分接口                                                 |
56*4882a593Smuzhiyun| 2021/12/07 | 2.0.0    | 陈城,李煌,余乔伟 | 增加RGA3相关支持                                             |
57*4882a593Smuzhiyun| 2022/01/20 | 2.1.0    | 陈城,李煌,余乔伟 | - 更新im2d api接口说明<br/>- 更新硬件指标说明,以及对齐限制<br/>- 增加数据结构介绍 |
58*4882a593Smuzhiyun| 2022/06/22 | 2.1.1    | 陈城,李煌,余乔伟 | 完善格式支持/对齐说明                                        |
59*4882a593Smuzhiyun| 2022/09/15 | 2.2.0    | 陈城,李煌,余乔伟 | - 补充默认值相关说明<br/>- 新增array接口<br/>- 新增task接口<br/>- 新增矩形边框绘制接口 |
60*4882a593Smuzhiyun| 2022/02/09 | 2.2.1    | 余乔伟             | 更正文档格式                                                 |
61*4882a593Smuzhiyun| 2022/06/28 | 2.2.2    | 余乔伟             | - 增加芯片RK3562介绍<br/>- 完善针对灰度图的注意事项          |
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun---
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun**目 录**
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun[TOC]
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun---
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun## 概述
72*4882a593Smuzhiyun
73*4882a593SmuzhiyunRGA (Raster Graphic Acceleration Unit)是一个独立的2D硬件加速器,可用于加速点/线绘制,执行图像缩放、旋转、bitBlt、alpha混合等常见的2D图形操作。
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun### 设计指标
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun<table>
80*4882a593Smuzhiyun   <tr>
81*4882a593Smuzhiyun      <td rowspan="2">Version</td>
82*4882a593Smuzhiyun      <td rowspan="2">Codename</td>
83*4882a593Smuzhiyun      <td rowspan="2">Chip</td>
84*4882a593Smuzhiyun      <td rowspan="1" colspan="2">Source</td>
85*4882a593Smuzhiyun      <td rowspan="1" colspan="2">Destination</td>
86*4882a593Smuzhiyun      <td rowspan="2">Function</td>
87*4882a593Smuzhiyun      <td rowspan="2">Pixels/Cycle</td>
88*4882a593Smuzhiyun   </tr>
89*4882a593Smuzhiyun   <tr>
90*4882a593Smuzhiyun       <td>min</td>
91*4882a593Smuzhiyun       <td>max</td>
92*4882a593Smuzhiyun       <td>min</td>
93*4882a593Smuzhiyun       <td>max</td>
94*4882a593Smuzhiyun   </tr>
95*4882a593Smuzhiyun   <tr>
96*4882a593Smuzhiyun      <td rowspan="4">RGA1</td>
97*4882a593Smuzhiyun      <td>Pagani</td>
98*4882a593Smuzhiyun      <td>RK3066</td>
99*4882a593Smuzhiyun      <td rowspan="4">2x2</td>
100*4882a593Smuzhiyun      <td rowspan="4">8192x8192</td>
101*4882a593Smuzhiyun      <td rowspan="4">2x2</td>
102*4882a593Smuzhiyun      <td rowspan="4">2048x2048</td>
103*4882a593Smuzhiyun      <td rowspan="4">90/180/270 Rotate<br/>X/Y Mirror<br/>Crop<br/>1/2~8 scale<br/>Alpha blend<br/>Color key<br/>Color fill<br/>ROP<br/>IOMMU(32bit)</td>
104*4882a593Smuzhiyun      <td rowspan="4">1</td>
105*4882a593Smuzhiyun   </tr>
106*4882a593Smuzhiyun   <tr>
107*4882a593Smuzhiyun      <td>Jaguar Plus</td>
108*4882a593Smuzhiyun      <td>RK3188</td>
109*4882a593Smuzhiyun   </tr>
110*4882a593Smuzhiyun   <tr>
111*4882a593Smuzhiyun      <td>Beetles</td>
112*4882a593Smuzhiyun      <td>RK2926/2928</td>
113*4882a593Smuzhiyun   </tr>
114*4882a593Smuzhiyun   <tr>
115*4882a593Smuzhiyun      <td>Beetles Plus</td>
116*4882a593Smuzhiyun      <td>RK3026/3028</td>
117*4882a593Smuzhiyun   </tr>
118*4882a593Smuzhiyun   <tr>
119*4882a593Smuzhiyun      <td rowspan="2">RGA1_plus</td>
120*4882a593Smuzhiyun      <td>Audi</td>
121*4882a593Smuzhiyun      <td>RK3128</td>
122*4882a593Smuzhiyun      <td rowspan="2">2x2</td>
123*4882a593Smuzhiyun      <td rowspan="2">8192x8192</td>
124*4882a593Smuzhiyun      <td rowspan="2">2x2</td>
125*4882a593Smuzhiyun      <td rowspan="2">2048x2048</td>
126*4882a593Smuzhiyun      <td rowspan="2">90/180/270 Rotate<br/>X/Y Mirror<br/>Crop<br/>1/2~8 scale<br/>Alpha blend<br/>Color key<br/>Color fill<br/>Color palette<br/>IOMMU(32bit)</td>
127*4882a593Smuzhiyun      <td rowspan="2">1</td>
128*4882a593Smuzhiyun   </tr>
129*4882a593Smuzhiyun   <tr>
130*4882a593Smuzhiyun      <td>Granite</td>
131*4882a593Smuzhiyun      <td>Sofia 3gr</td>
132*4882a593Smuzhiyun   </tr>
133*4882a593Smuzhiyun   <tr>
134*4882a593Smuzhiyun      <td rowspan="2">RGA2</td>
135*4882a593Smuzhiyun      <td>Lincoln</td>
136*4882a593Smuzhiyun      <td>RK3288/3288w</td>
137*4882a593Smuzhiyun      <td rowspan="2">2x2</td>
138*4882a593Smuzhiyun      <td rowspan="2">8192x8192</td>
139*4882a593Smuzhiyun      <td rowspan="2">2x2</td>
140*4882a593Smuzhiyun      <td rowspan="2">4096x4096</td>
141*4882a593Smuzhiyun      <td rowspan="2">90/180/270 Rotate<br/>X/Y Mirror<br/>Crop<br/>1/16~16 scale<br/>Alpha blend<br/>Color key<br/>Color fill<br/>Color palette<br/>ROP<br/>IOMMU(32bit)</td>
142*4882a593Smuzhiyun      <td rowspan="2">2</td>
143*4882a593Smuzhiyun   </tr>
144*4882a593Smuzhiyun   <tr>
145*4882a593Smuzhiyun      <td>Capricorn</td>
146*4882a593Smuzhiyun      <td>RK3190</td>
147*4882a593Smuzhiyun   </tr>
148*4882a593Smuzhiyun   <tr>
149*4882a593Smuzhiyun      <td rowspan="2">RGA2-Lite0</td>
150*4882a593Smuzhiyun      <td>Maybach</td>
151*4882a593Smuzhiyun      <td>RK3368</td>
152*4882a593Smuzhiyun      <td rowspan="2">2x2</td>
153*4882a593Smuzhiyun      <td rowspan="2">8192x8192</td>
154*4882a593Smuzhiyun      <td rowspan="2">2x2</td>
155*4882a593Smuzhiyun      <td rowspan="2">4096x4096</td>
156*4882a593Smuzhiyun      <td rowspan="2">90/180/270 Rotate<br/>X/Y Mirror<br/>Crop<br/>1/8~8 scale<br/>Alpha blend<br/>Color key<br/>Color fill<br/>Color palette<br/>ROP<br/>IOMMU(32bit)</td>
157*4882a593Smuzhiyun      <td rowspan="2">2</td>
158*4882a593Smuzhiyun   </tr>
159*4882a593Smuzhiyun   <tr>
160*4882a593Smuzhiyun      <td>BMW</td>
161*4882a593Smuzhiyun      <td>RK3366</td>
162*4882a593Smuzhiyun   </tr>
163*4882a593Smuzhiyun   <tr>
164*4882a593Smuzhiyun      <td rowspan="4">RGA2-Lite1</td>
165*4882a593Smuzhiyun      <td>Benz</td>
166*4882a593Smuzhiyun      <td>RK3228</td>
167*4882a593Smuzhiyun      <td rowspan="4">2x2</td>
168*4882a593Smuzhiyun      <td rowspan="4">8192x8192</td>
169*4882a593Smuzhiyun      <td rowspan="4">2x2</td>
170*4882a593Smuzhiyun      <td rowspan="4">4096x4096</td>
171*4882a593Smuzhiyun      <td rowspan="4">90/180/270 Rotate<br/>X/Y Mirror<br/>Crop<br/>1/8~8 scale<br/>Alpha blend<br/>Color key<br/>Color fill<br/>Color palette<br/>IOMMU(32bit)</td>
172*4882a593Smuzhiyun      <td rowspan="4">2</td>
173*4882a593Smuzhiyun   </tr>
174*4882a593Smuzhiyun   <tr>
175*4882a593Smuzhiyun      <td>Infiniti</td>
176*4882a593Smuzhiyun      <td>RK3228H</td>
177*4882a593Smuzhiyun   </tr>
178*4882a593Smuzhiyun   <tr>
179*4882a593Smuzhiyun      <td>Gemini</td>
180*4882a593Smuzhiyun      <td>RK3326</td>
181*4882a593Smuzhiyun   </tr>
182*4882a593Smuzhiyun   <tr>
183*4882a593Smuzhiyun      <td>Lion</td>
184*4882a593Smuzhiyun      <td>RK1808</td>
185*4882a593Smuzhiyun   </tr>
186*4882a593Smuzhiyun   <tr>
187*4882a593Smuzhiyun      <td rowspan="8">RGA2-Enhance</td>
188*4882a593Smuzhiyun      <td>Mclaren</td>
189*4882a593Smuzhiyun      <td>RK3399</td>
190*4882a593Smuzhiyun      <td rowspan="8">2x2</td>
191*4882a593Smuzhiyun      <td rowspan="8">8192x8192</td>
192*4882a593Smuzhiyun      <td rowspan="8">2x2</td>
193*4882a593Smuzhiyun      <td rowspan="8">4096x4096</td>
194*4882a593Smuzhiyun      <td rowspan="8">90/180/270 Rotate<br/>X/Y Mirror<br/>Crop<br/>1/16~16 scale<br/>Alpha blend<br/>Color key<br/>Color fill<br/>Color palette<br/>ROP(NA for RV1108/RV1109/RK3566)<br/>NN quantize(NA for RK3399/RV1108)<br/>osd (only RV1106/RV1103)<br/>IOMMU(32bit, RK3528为40bit,NA for RV1106/1103)</td>
195*4882a593Smuzhiyun      <td rowspan="8">2</td>
196*4882a593Smuzhiyun   </tr>
197*4882a593Smuzhiyun   <tr>
198*4882a593Smuzhiyun      <td>Mercury</td>
199*4882a593Smuzhiyun      <td>RK1108</td>
200*4882a593Smuzhiyun   </tr>
201*4882a593Smuzhiyun   <tr>
202*4882a593Smuzhiyun      <td>Puma</td>
203*4882a593Smuzhiyun      <td>RV1126/RV1109</td>
204*4882a593Smuzhiyun   </tr>
205*4882a593Smuzhiyun   <tr>
206*4882a593Smuzhiyun      <td>skylarkV2</td>
207*4882a593Smuzhiyun      <td>RK3566/RK3568</td>
208*4882a593Smuzhiyun   </tr>
209*4882a593Smuzhiyun   <tr>
210*4882a593Smuzhiyun      <td>Orion</td>
211*4882a593Smuzhiyun      <td>RK3588</td>
212*4882a593Smuzhiyun   </tr>
213*4882a593Smuzhiyun   <tr>
214*4882a593Smuzhiyun      <td>Otter</td>
215*4882a593Smuzhiyun      <td>RV1106/1103</td>
216*4882a593Smuzhiyun   </tr>
217*4882a593Smuzhiyun   <tr>
218*4882a593Smuzhiyun       <td>Bull</td>
219*4882a593Smuzhiyun       <td>RK3528</td>
220*4882a593Smuzhiyun    </tr>
221*4882a593Smuzhiyun   <tr>
222*4882a593Smuzhiyun       <td>Snipe</td>
223*4882a593Smuzhiyun       <td>RK3562</td>
224*4882a593Smuzhiyun    </tr>
225*4882a593Smuzhiyun      <td rowspan="1">RGA3</td>
226*4882a593Smuzhiyun      <td>Orion</td>
227*4882a593Smuzhiyun      <td>RK3588</td>
228*4882a593Smuzhiyun      <td rowspan="1">68x2</td>
229*4882a593Smuzhiyun      <td rowspan="1">8176x8176</td>
230*4882a593Smuzhiyun      <td rowspan="1">68x2</td>
231*4882a593Smuzhiyun      <td rowspan="1">8128x8128</td>
232*4882a593Smuzhiyun      <td rowspan="4">90/180/270 Rotate<br/>X/Y Mirror<br/>Crop<br/>1/8~8 scale<br/>Alpha blend<br/>Color key<br/>FBC<br/>IOMMU(40bit)</td>
233*4882a593Smuzhiyun      <td rowspan="1">3 (by pass)<br/>2 (scale)</td>
234*4882a593Smuzhiyun   </tr>
235*4882a593Smuzhiyun</table>
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun> 注:
238*4882a593Smuzhiyun>
239*4882a593Smuzhiyun> 1). 单位时钟周期处理像素的能力为理论数据,实际运行性能表现与带宽、硬件频率等相关,列表数据仅供参考。
240*4882a593Smuzhiyun>
241*4882a593Smuzhiyun> 2). 除最小输入分辨率限制外,每个通道可设置的实际操作矩形的x、y、width、height参数必须大于等于2。
242*4882a593Smuzhiyun>
243*4882a593Smuzhiyun> 3). RGA的寻址能力和IOMMU的bit位数是相关联的,例如搭载支持32bit IOMMU的RGA实际的物理地址寻址能力仅支持0~4G的内存空间。
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun### 图像格式支持
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun- Pixel Format conversion, BT.601/BT.709/BT.2020(only RGA3)
250*4882a593Smuzhiyun- Dither operation
251*4882a593Smuzhiyun
252*4882a593Smuzhiyun<table>
253*4882a593Smuzhiyun   <tr>
254*4882a593Smuzhiyun      <td>Version</td>
255*4882a593Smuzhiyun      <td>Codename</td>
256*4882a593Smuzhiyun      <td>Chip</td>
257*4882a593Smuzhiyun      <td>Input Data Format</td>
258*4882a593Smuzhiyun      <td>Output Data Format</td>
259*4882a593Smuzhiyun   </tr>
260*4882a593Smuzhiyun   <tr>
261*4882a593Smuzhiyun      <td rowspan="4">RGA1</td>
262*4882a593Smuzhiyun      <td>Pagani</td>
263*4882a593Smuzhiyun      <td>RK3066</td>
264*4882a593Smuzhiyun      <td rowspan="4"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_BPP1<br/>RK_FORMAT_BPP2<br/>RK_FORMAT_BPP4<br/>RK_FORMAT_BPP8
265*4882a593Smuzhiyun      </td>
266*4882a593Smuzhiyun      <td rowspan="4">
267*4882a593SmuzhiyunRK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP (only for Blur/sharpness)<br/>RK_FORMAT_YCrCbr_420_SP (only for Blur/sharpness)<br/>RK_FORMAT_YCbCr_422_SP (only for Blur/sharpness)<br/>RK_FORMAT_YCrCbr_422_SP (only for Blur/sharpness)<br/>RK_FORMAT_YCbCr_420_P (only for Blur/sharpness)<br/>RK_FORMAT_YCrCbr_420_P (only for Blur/sharpness)<br/>RK_FORMAT_YCbCr_422_P (only for Blur/sharpness)<br/>RK_FORMAT_YCrCbr_422_P (only for Blur/sharpness)
268*4882a593Smuzhiyun      </td>
269*4882a593Smuzhiyun   </tr>
270*4882a593Smuzhiyun   <tr>
271*4882a593Smuzhiyun      <td>Jaguar Plus</td>
272*4882a593Smuzhiyun      <td>RK3188</td>
273*4882a593Smuzhiyun   </tr>
274*4882a593Smuzhiyun   <tr>
275*4882a593Smuzhiyun      <td>Beetles</td>
276*4882a593Smuzhiyun      <td>RK2926/2928</td>
277*4882a593Smuzhiyun   </tr>
278*4882a593Smuzhiyun   <tr>
279*4882a593Smuzhiyun      <td>Beetles Plus</td>
280*4882a593Smuzhiyun      <td>RK3026/3028</td>
281*4882a593Smuzhiyun   </tr>
282*4882a593Smuzhiyun   <tr>
283*4882a593Smuzhiyun      <td rowspan="2">RGA1_plus</td>
284*4882a593Smuzhiyun      <td>Audi</td>
285*4882a593Smuzhiyun      <td>RK3128</td>
286*4882a593Smuzhiyun      <td rowspan="2"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_BPP1<br/>RK_FORMAT_BPP2<br/>RK_FORMAT_BPP4<br/>RK_FORMAT_BPP8
287*4882a593Smuzhiyun      </td>
288*4882a593Smuzhiyun      <td rowspan="2">
289*4882a593SmuzhiyunRK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP (only for normal Bitblt without alpha)<br/>RK_FORMAT_YCrCbr_420_SP (only for normal Bitblt without alpha)<br/>RK_FORMAT_YCbCr_422_SP (only for normal Bitblt without alpha)<br/>RK_FORMAT_YCrCbr_422_SP (only for normal Bitblt without alpha)<br/>RK_FORMAT_YCbCr_420_P (only for normal Bitblt without alpha)<br/>RK_FORMAT_YCrCbr_420_P (only for normal Bitblt without alpha)<br/>RK_FORMAT_YCbCr_422_P (only for normal Bitblt without alpha)<br/>RK_FORMAT_YCrCbr_422_P (only for normal Bitblt without alpha)
290*4882a593Smuzhiyun      </td>
291*4882a593Smuzhiyun   </tr>
292*4882a593Smuzhiyun   <tr>
293*4882a593Smuzhiyun      <td>Granite</td>
294*4882a593Smuzhiyun      <td>Sofia 3gr</td>
295*4882a593Smuzhiyun   </tr>
296*4882a593Smuzhiyun   <tr>
297*4882a593Smuzhiyun      <td rowspan="2">RGA2</td>
298*4882a593Smuzhiyun      <td>Lincoln</td>
299*4882a593Smuzhiyun      <td>RK3288/3288w</td>
300*4882a593Smuzhiyun      <td rowspan="2"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_BPP1 (only for color palette)<br/>RK_FORMAT_BPP2 (only for color palette)<br/>RK_FORMAT_BPP4 (only for color palette)<br/>RK_FORMAT_BPP8 (only for color palette)
301*4882a593Smuzhiyun      </td>
302*4882a593Smuzhiyun      <td rowspan="2"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P
303*4882a593Smuzhiyun      </td>
304*4882a593Smuzhiyun   </tr>
305*4882a593Smuzhiyun   <tr>
306*4882a593Smuzhiyun      <td>Capricorn</td>
307*4882a593Smuzhiyun      <td>RK3190</td>
308*4882a593Smuzhiyun   </tr>
309*4882a593Smuzhiyun   <tr>
310*4882a593Smuzhiyun      <td rowspan="2">RGA2-Lite0</td>
311*4882a593Smuzhiyun      <td>Maybach</td>
312*4882a593Smuzhiyun      <td>RK3368</td>
313*4882a593Smuzhiyun      <td rowspan="2"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_BPP1 (only for color palette)<br/>RK_FORMAT_BPP2 (only for color palette)<br/>RK_FORMAT_BPP4 (only for color palette)<br/>RK_FORMAT_BPP8 (only for color palette)
314*4882a593Smuzhiyun      </td>
315*4882a593Smuzhiyun      <td rowspan="2"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P
316*4882a593Smuzhiyun      </td>
317*4882a593Smuzhiyun   </tr>
318*4882a593Smuzhiyun   <tr>
319*4882a593Smuzhiyun      <td>BMW</td>
320*4882a593Smuzhiyun      <td>RK3366</td>
321*4882a593Smuzhiyun   </tr>
322*4882a593Smuzhiyun   <tr>
323*4882a593Smuzhiyun      <td rowspan="4">RGA2-Lite1</td>
324*4882a593Smuzhiyun      <td>Benz</td>
325*4882a593Smuzhiyun      <td>RK3228</td>
326*4882a593Smuzhiyun      <td rowspan="4"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_YCbCr_420_SP_10B<br/>RK_FORMAT_YCrCb_420_SP_10B<br/>RK_FORMAT_YCbCr_422_SP_10B<br/>RK_FORMAT_YCrCb_422_SP_10B<br/>RK_FORMAT_BPP1 (only for color palette)<br/>RK_FORMAT_BPP2 (only for color palette)<br/>RK_FORMAT_BPP4 (only for color palette)<br/>RK_FORMAT_BPP8 (only for color palette)
327*4882a593Smuzhiyun      </td>
328*4882a593Smuzhiyun      <td rowspan="4"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P
329*4882a593Smuzhiyun      </td>
330*4882a593Smuzhiyun   </tr>
331*4882a593Smuzhiyun   <tr>
332*4882a593Smuzhiyun      <td>Infiniti</td>
333*4882a593Smuzhiyun      <td>RK3228H</td>
334*4882a593Smuzhiyun   </tr>
335*4882a593Smuzhiyun   <tr>
336*4882a593Smuzhiyun      <td>Gemini</td>
337*4882a593Smuzhiyun      <td>RK3326</td>
338*4882a593Smuzhiyun   </tr>
339*4882a593Smuzhiyun   <tr>
340*4882a593Smuzhiyun      <td>Lion</td>
341*4882a593Smuzhiyun      <td>RK1808</td>
342*4882a593Smuzhiyun   </tr>
343*4882a593Smuzhiyun   <tr>
344*4882a593Smuzhiyun      <td rowspan="7">RGA2-Enhance</td>
345*4882a593Smuzhiyun      <td>Mclaren</td>
346*4882a593Smuzhiyun      <td>RK3399</td>
347*4882a593Smuzhiyun      <td rowspan="2"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_YCbCr_420_SP_10B<br/>RK_FORMAT_YCrCb_420_SP_10B<br/>RK_FORMAT_YCbCr_422_SP_10B<br/>RK_FORMAT_YCrCb_422_SP_10B<br/>RK_FORMAT_BPP1 (only for color palette)<br/>RK_FORMAT_BPP2 (only for color palette)<br/>RK_FORMAT_BPP4 (only for color palette)<br/>RK_FORMAT_BPP8 (only for color palette)
348*4882a593Smuzhiyun      </td>
349*4882a593Smuzhiyun      <td rowspan="2"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_YUYV_422<br/>RK_FORMAT_YVYU_422<br/>RK_FORMAT_UYVY_422<br/>RK_FORMAT_VYUY_422
350*4882a593Smuzhiyun      </td>
351*4882a593Smuzhiyun   </tr>
352*4882a593Smuzhiyun   <tr>
353*4882a593Smuzhiyun      <td>Mercury</td>
354*4882a593Smuzhiyun      <td>RK1108</td>
355*4882a593Smuzhiyun   </tr>
356*4882a593Smuzhiyun   <tr>
357*4882a593Smuzhiyun      <td>Puma</td>
358*4882a593Smuzhiyun      <td>RV1126/ RV1109</td>
359*4882a593Smuzhiyun      <td rowspan="5"> RK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_YUYV_422<br/>RK_FORMAT_YVYU_422<br/>RK_FORMAT_UYVY_422<br/>RK_FORMAT_VYUY_422<br/>RK_FORMAT_YCbCr_400<br/>RK_FORMAT_YCbCr_420_SP_10B<br/>RK_FORMAT_YCrCb_420_SP_10B<br/>RK_FORMAT_YCbCr_422_SP_10B<br/>RK_FORMAT_YCrCb_422_SP_10B<br/>RK_FORMAT_BPP1 (only for color palette)<br/>RK_FORMAT_BPP2 (only for color palette)<br/>RK_FORMAT_BPP4 (only for color palette)<br/>RK_FORMAT_BPP8 (only for color palette)
360*4882a593Smuzhiyun      </td>
361*4882a593Smuzhiyun      <td rowspan="5">
362*4882a593SmuzhiyunRK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_YUYV_422<br/>RK_FORMAT_YVYU_422<br/>RK_FORMAT_UYVY_422<br/>RK_FORMAT_VYUY_422<br/>RK_FORMAT_YCbCr_400<br/>RK_FORMAT_Y4
363*4882a593Smuzhiyun   	  </td>
364*4882a593Smuzhiyun   </tr>
365*4882a593Smuzhiyun   <tr>
366*4882a593Smuzhiyun      <td>skylarkV2</td>
367*4882a593Smuzhiyun      <td>RK3566/RK3568</td>
368*4882a593Smuzhiyun   </tr>
369*4882a593Smuzhiyun   <tr>
370*4882a593Smuzhiyun   <td>Orion</td>
371*4882a593Smuzhiyun      <td>RK3588</td>
372*4882a593Smuzhiyun   </tr>
373*4882a593Smuzhiyun   <tr>
374*4882a593Smuzhiyun   <td>Otter</td>
375*4882a593Smuzhiyun      <td>RV1106/1103</td>
376*4882a593Smuzhiyun   </tr>
377*4882a593Smuzhiyun   <td>Bull</td>
378*4882a593Smuzhiyun      <td>RK3528</td>
379*4882a593Smuzhiyun   </tr>
380*4882a593Smuzhiyun   <tr>
381*4882a593Smuzhiyun      <td rowspan="1">RGA3</td>
382*4882a593Smuzhiyun      <td>Orion</td>
383*4882a593Smuzhiyun      <td>RK3588</td>
384*4882a593Smuzhiyun      <td rowspan="1">
385*4882a593SmuzhiyunRK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YUYV_422<br/>RK_FORMAT_YVYU_422<br/>RK_FORMAT_UYVY_422<br/>RK_FORMAT_VYUY_422<br/>RK_FORMAT_YCbCr_420_SP_10B<br/>RK_FORMAT_YCrCb_420_SP_10B<br/>RK_FORMAT_YCbCr_422_SP_10B<br/>RK_FORMAT_YCrCb_422_SP_10B
386*4882a593Smuzhiyun      </td>
387*4882a593Smuzhiyun      <td rowspan="1">
388*4882a593SmuzhiyunRK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565<br>RK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YUYV_422<br/>RK_FORMAT_YVYU_422<br/>RK_FORMAT_UYVY_422<br/>RK_FORMAT_VYUY_422<br/>RK_FORMAT_YCbCr_420_SP_10B<br/>RK_FORMAT_YCrCb_420_SP_10B<br/>RK_FORMAT_YCbCr_422_SP_10B<br/>RK_FORMAT_YCrCb_422_SP_10B
389*4882a593Smuzhiyun      </td>
390*4882a593Smuzhiyun   </tr>
391*4882a593Smuzhiyun</table>
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun> 注:
394*4882a593Smuzhiyun>
395*4882a593Smuzhiyun> 1). ”RK_FORMAT_YCbCr_400“格式即YUV格式仅取Y通道,常用于256(2的8次方)阶灰度图,这里需要注意由于是YUV格式存在RGB/YUV色域转换时需要留意色域配置,例如需要完整的256阶灰度图需要在转换时配置为full range。
396*4882a593Smuzhiyun>
397*4882a593Smuzhiyun> 2). “RK_FORMAT_Y4”格式即YUV格式仅取Y通道,并dither至4bit,常用于16(2的4次方)阶灰度图,涉及色域转换时配置的注意事项同“RK_FORMAT_YCbCr_400”。
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun
400*4882a593Smuzhiyun
401*4882a593Smuzhiyun### 图像格式对齐说明
402*4882a593Smuzhiyun
403*4882a593Smuzhiyun<table>
404*4882a593Smuzhiyun    <tr>
405*4882a593Smuzhiyun        <td>Version</td>
406*4882a593Smuzhiyun        <td>Byte_stride</td>
407*4882a593Smuzhiyun        <td>Format</td>
408*4882a593Smuzhiyun        <td>Alignment</td>
409*4882a593Smuzhiyun    </tr>
410*4882a593Smuzhiyun	<tr>
411*4882a593Smuzhiyun        <td rowspan="4">RGA1<br/>RGA1_Plus</td>
412*4882a593Smuzhiyun        <td rowspan="4">4</td>
413*4882a593Smuzhiyun        <td>
414*4882a593SmuzhiyunRK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888
415*4882a593Smuzhiyun        </td>
416*4882a593Smuzhiyun        <td>width stride无对齐要求</td>
417*4882a593Smuzhiyun    </tr>
418*4882a593Smuzhiyun    <tr>
419*4882a593Smuzhiyun        <td>
420*4882a593SmuzhiyunRK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565
421*4882a593Smuzhiyun        </td>
422*4882a593Smuzhiyun        <td>width stride须2对齐</td>
423*4882a593Smuzhiyun    </tr>
424*4882a593Smuzhiyun    <tr>
425*4882a593Smuzhiyun        <td>
426*4882a593SmuzhiyunRK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888
427*4882a593Smuzhiyun        </td>
428*4882a593Smuzhiyun        <td>width stride须4对齐</td>
429*4882a593Smuzhiyun    </tr>
430*4882a593Smuzhiyun    <tr>
431*4882a593Smuzhiyun        <td>
432*4882a593SmuzhiyunRK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P
433*4882a593Smuzhiyun        </td>
434*4882a593Smuzhiyun        <td>width stride须4对齐,x_offset、y_offset、width、height、height stride均须2对齐</td>
435*4882a593Smuzhiyun    </tr>
436*4882a593Smuzhiyun    <tr>
437*4882a593Smuzhiyun        <td rowspan="6">RGA2<br/>RGA2_Lite0<br/>RGA2_Lite1<br/>RGA2_Enhance</td>
438*4882a593Smuzhiyun        <td rowspan="6">4</td>
439*4882a593Smuzhiyun        <td>
440*4882a593SmuzhiyunRK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888
441*4882a593Smuzhiyun        </td>
442*4882a593Smuzhiyun        <td>width stride无对齐要求</td>
443*4882a593Smuzhiyun    </tr>
444*4882a593Smuzhiyun    <tr>
445*4882a593Smuzhiyun        <td>
446*4882a593SmuzhiyunRK_FORMAT_RGBA_4444<br/>RK_FORMAT_BGRA_4444<br/>RK_FORMAT_ARGB_4444<br/>RK_FORMAT_ABGR_4444<br/>RK_FORMAT_RGBA_5551<br/>RK_FORMAT_BGRA_5551<br/>RK_FORMAT_ARGB_5551<br/>RK_FORMAT_ABGR_5551<br/>RK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565
447*4882a593Smuzhiyun        </td>
448*4882a593Smuzhiyun        <td>width stride须2对齐</td>
449*4882a593Smuzhiyun    </tr>
450*4882a593Smuzhiyun    <tr>
451*4882a593Smuzhiyun    	<td>
452*4882a593SmuzhiyunRK_FORMAT_YUYV_422<br/>RK_FORMAT_YVYU_422<br/>RK_FORMAT_UYVY_422<br/>RK_FORMAT_VYUY_422<br/>RK_FORMAT_YUYV_420<br/>RK_FORMAT_YVYU_420<br/>RK_FORMAT_UYVY_420<br/>RK_FORMAT_VYUY_420
453*4882a593Smuzhiyun        </td>
454*4882a593Smuzhiyun        <td>width stride须2对齐,x_offset、y_offset、width、height、height stride均须2对齐</td>
455*4882a593Smuzhiyun    </tr>
456*4882a593Smuzhiyun    <tr>
457*4882a593Smuzhiyun        <td>
458*4882a593SmuzhiyunRK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888
459*4882a593Smuzhiyun        </td>
460*4882a593Smuzhiyun        <td>width stride须4对齐</td>
461*4882a593Smuzhiyun    </tr>
462*4882a593Smuzhiyun    <tr>
463*4882a593Smuzhiyun        <td>
464*4882a593SmuzhiyunRK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP<br/>RK_FORMAT_YCbCr_420_P<br/>RK_FORMAT_YCrCbr_420_P<br/>RK_FORMAT_YCbCr_422_P<br/>RK_FORMAT_YCrCbr_422_P<br/>RK_FORMAT_YCbCr_400<br/>RK_FORMAT_Y4
465*4882a593Smuzhiyun        </td>
466*4882a593Smuzhiyun        <td>width stride须4对齐,x_offset、y_offset、width、height、height stride均须2对齐</td>
467*4882a593Smuzhiyun    </tr>
468*4882a593Smuzhiyun    <tr>
469*4882a593Smuzhiyun        <td>
470*4882a593SmuzhiyunRK_FORMAT_YCbCr_420_SP_10B<br/>RK_FORMAT_YCrCb_420_SP_10B<br/>RK_FORMAT_YCbCr_422_SP_10B<br/>RK_FORMAT_YCrCb_422_SP_10B
471*4882a593Smuzhiyun        </td>
472*4882a593Smuzhiyun        <td>width stride须16对齐,x_offset、y_offset、width、height、height stride均须2对齐</td>
473*4882a593Smuzhiyun    </tr>
474*4882a593Smuzhiyun	<tr>
475*4882a593Smuzhiyun		<td rowspan="8">RGA3</td>
476*4882a593Smuzhiyun        <td rowspan="8">16</td>
477*4882a593Smuzhiyun        <td>
478*4882a593SmuzhiyunRK_FORMAT_RGBA_8888<br/>RK_FORMAT_BGRA_8888<br/>RK_FORMAT_ARGB_8888<br/>RK_FORMAT_ABGR_8888<br/>RK_FORMAT_RGBX_8888<br/>RK_FORMAT_BGRX_8888<br/>RK_FORMAT_XRGB_8888<br/>RK_FORMAT_XBGR_8888
479*4882a593Smuzhiyun        </td>
480*4882a593Smuzhiyun        <td>width stride须4对齐</td>
481*4882a593Smuzhiyun    </tr>
482*4882a593Smuzhiyun    <tr>
483*4882a593Smuzhiyun        <td>
484*4882a593SmuzhiyunRK_FORMAT_RGB_565<br/>RK_FORMAT_BGR_565
485*4882a593Smuzhiyun        </td>
486*4882a593Smuzhiyun        <td>width stride须8对齐</td>
487*4882a593Smuzhiyun    </tr>
488*4882a593Smuzhiyun    <tr>
489*4882a593Smuzhiyun    	<td>
490*4882a593SmuzhiyunRK_FORMAT_YUYV_422<br/>RK_FORMAT_YVYU_422<br/>RK_FORMAT_UYVY_422<br/>RK_FORMAT_VYUY_422
491*4882a593Smuzhiyun        </td>
492*4882a593Smuzhiyun        <td>width stride须8对齐,x_offset、y_offset、width、height、height stride均须2对齐</td>
493*4882a593Smuzhiyun    </tr>
494*4882a593Smuzhiyun    <tr>
495*4882a593Smuzhiyun        <td>
496*4882a593SmuzhiyunRK_FORMAT_RGB_888<br/>RK_FORMAT_BGR_888
497*4882a593Smuzhiyun        </td>
498*4882a593Smuzhiyun        <td>width stride须16对齐</td>
499*4882a593Smuzhiyun    </tr>
500*4882a593Smuzhiyun	<tr>
501*4882a593Smuzhiyun        <td>
502*4882a593SmuzhiyunRK_FORMAT_YCbCr_420_SP<br/>RK_FORMAT_YCrCbr_420_SP<br/>RK_FORMAT_YCbCr_422_SP<br/>RK_FORMAT_YCrCbr_422_SP
503*4882a593Smuzhiyun        </td>
504*4882a593Smuzhiyun        <td>width stride须16对齐,x_offset、y_offset、width、height、height stride均须2对齐</td>
505*4882a593Smuzhiyun	</tr>
506*4882a593Smuzhiyun    <tr>
507*4882a593Smuzhiyun        <td>
508*4882a593SmuzhiyunRK_FORMAT_YCbCr_420_SP_10B<br/>RK_FORMAT_YCrCb_420_SP_10B<br/>RK_FORMAT_YCbCr_422_SP_10B<br/>RK_FORMAT_YCrCb_422_SP_10B
509*4882a593Smuzhiyun        </td>
510*4882a593Smuzhiyun        <td>width stride须64对齐,x_offset、y_offset、width、height、height stride均须2对齐</td>
511*4882a593Smuzhiyun    </tr>
512*4882a593Smuzhiyun    <tr>
513*4882a593Smuzhiyun        <td>FBC mode</td>
514*4882a593Smuzhiyun        <td>除上述格式对齐要求外,width stride、height stride须16对齐</td>
515*4882a593Smuzhiyun    </tr>
516*4882a593Smuzhiyun    <tr>
517*4882a593Smuzhiyun        <td>TILE8*8 mode</td>
518*4882a593Smuzhiyun        <td>除上述格式对齐要求外,width、height须8对齐,输入通道width stride、height stride须16对齐。</td>
519*4882a593Smuzhiyun    </tr>
520*4882a593Smuzhiyun</table>
521*4882a593Smuzhiyun
522*4882a593Smuzhiyun
523*4882a593Smuzhiyun> 注:
524*4882a593Smuzhiyun>
525*4882a593Smuzhiyun> 1). 对齐要求计算公式:lcm(bpp,byte_stride * 8) / pixel_stride。
526*4882a593Smuzhiyun>
527*4882a593Smuzhiyun> 2). 当芯片平台搭载多版本硬件时,为了保证硬件利用率,librga会按最严格的对齐要求进行约束。
528*4882a593Smuzhiyun
529*4882a593Smuzhiyun
530*4882a593Smuzhiyun
531*4882a593Smuzhiyun---
532*4882a593Smuzhiyun
533*4882a593Smuzhiyun## 版本说明
534*4882a593Smuzhiyun
535*4882a593SmuzhiyunRGA的支持库librga.so按照一定规则更新版本号,标识着功能新增、兼容性、问题修正的更新提交,并提供几种方式查询版本号,方便开发者在使用librga.so时可以清楚的辨别当前的库文件版本是否适合于当前的开发环境。详细版本更新日志以及版本差异可以查阅源码根目录下**CHANGLOG.md**。
536*4882a593Smuzhiyun
537*4882a593Smuzhiyun
538*4882a593Smuzhiyun
539*4882a593Smuzhiyun### librga API版本说明
540*4882a593Smuzhiyun
541*4882a593Smuzhiyun#### 版本号格式与递增规则
542*4882a593Smuzhiyun
543*4882a593Smuzhiyun##### 版本号格式
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun```
546*4882a593Smuzhiyunmajor.minor.revision_[build]
547*4882a593Smuzhiyun```
548*4882a593Smuzhiyun
549*4882a593Smuzhiyun例如:
550*4882a593Smuzhiyun
551*4882a593Smuzhiyun> 1.0.0_[0]
552*4882a593Smuzhiyun
553*4882a593Smuzhiyun
554*4882a593Smuzhiyun
555*4882a593Smuzhiyun##### 递增规则
556*4882a593Smuzhiyun
557*4882a593Smuzhiyun| 名称     | 规则                                                   |
558*4882a593Smuzhiyun| -------- | ------------------------------------------------------ |
559*4882a593Smuzhiyun| major    | 主版本号,当提交不向下兼容的版本。                     |
560*4882a593Smuzhiyun| minor    | 次版本号,当向下兼容的功能性API新增。                  |
561*4882a593Smuzhiyun| revision | 修订版本号,当提交向下兼容的功能补充或致命的问题修正。 |
562*4882a593Smuzhiyun| build    | 编译版本号,当向下兼容的问题修正。                     |
563*4882a593Smuzhiyun
564*4882a593Smuzhiyun
565*4882a593Smuzhiyun
566*4882a593Smuzhiyun#### 版本号查询
567*4882a593Smuzhiyun
568*4882a593Smuzhiyun##### strings命令查询:
569*4882a593Smuzhiyun
570*4882a593Smuzhiyun以Android R 64位为例:
571*4882a593Smuzhiyun
572*4882a593Smuzhiyun```shell
573*4882a593Smuzhiyun:/# strings vendor/lib64/librga.so |grep rga_api |grep version
574*4882a593Smuzhiyunrga_api version 1.0.0_[0]
575*4882a593Smuzhiyun```
576*4882a593Smuzhiyun
577*4882a593Smuzhiyun
578*4882a593Smuzhiyun
579*4882a593Smuzhiyun##### 日志打印:
580*4882a593Smuzhiyun
581*4882a593Smuzhiyun当每个进程首次调用RGA API时,会打印版本号。
582*4882a593Smuzhiyun
583*4882a593Smuzhiyun```
584*4882a593Smuzhiyunrockchiprga: rga_api version 1.0.0_[0]
585*4882a593Smuzhiyun```
586*4882a593Smuzhiyun
587*4882a593Smuzhiyun
588*4882a593Smuzhiyun
589*4882a593Smuzhiyun##### 函数接口查询
590*4882a593Smuzhiyun
591*4882a593Smuzhiyun调用以下API,可以查询代码版本号、编译版本号、RGA硬件版本信息。具体使用说明可以查看 **应用接口说明** 章节。
592*4882a593Smuzhiyun
593*4882a593Smuzhiyun```
594*4882a593Smuzhiyunquerystring(RGA_VERSION);
595*4882a593Smuzhiyun```
596*4882a593Smuzhiyun
597*4882a593Smuzhiyun> 字符串格式如下:
598*4882a593Smuzhiyun>
599*4882a593Smuzhiyun> RGA_api version       : v1.0.0_[0]
600*4882a593Smuzhiyun> RGA version               : RGA_2_Enhance
601*4882a593Smuzhiyun
602*4882a593Smuzhiyun
603*4882a593Smuzhiyun
604*4882a593Smuzhiyun##### 属性查询
605*4882a593Smuzhiyun
606*4882a593Smuzhiyun该方式查询版本号仅Android系统支持,并且须已有进程调用RGA后,属性设置方生效。
607*4882a593Smuzhiyun
608*4882a593Smuzhiyun```shell
609*4882a593Smuzhiyun:/# getprop |grep rga
610*4882a593Smuzhiyun[vendor.rga_api.version]: [1.0.0_[0]]
611*4882a593Smuzhiyun```
612*4882a593Smuzhiyun
613*4882a593Smuzhiyun
614*4882a593Smuzhiyun
615*4882a593Smuzhiyun### 驱动版本说明
616*4882a593Smuzhiyun
617*4882a593Smuzhiyunlibrga是基于驱动调用RGA硬件的,必须要保证驱动版本在使用的librga库的支持范围内。
618*4882a593Smuzhiyun
619*4882a593Smuzhiyun#### 版本号格式与递增规则
620*4882a593Smuzhiyun
621*4882a593Smuzhiyun##### 版本号格式
622*4882a593Smuzhiyun
623*4882a593Smuzhiyun```
624*4882a593Smuzhiyun<driver_name>: v major.minor.revision
625*4882a593Smuzhiyun```
626*4882a593Smuzhiyun
627*4882a593Smuzhiyun例如:
628*4882a593Smuzhiyun
629*4882a593Smuzhiyun> RGA2 Device Driver: v2.1.0
630*4882a593Smuzhiyun>
631*4882a593Smuzhiyun> RGA multicore Device Driver: v1.2.23
632*4882a593Smuzhiyun
633*4882a593Smuzhiyun
634*4882a593Smuzhiyun
635*4882a593Smuzhiyun##### 递增规则
636*4882a593Smuzhiyun
637*4882a593Smuzhiyun| 名称     | 规则                                                   |
638*4882a593Smuzhiyun| -------- | ------------------------------------------------------ |
639*4882a593Smuzhiyun| major    | 主版本号,当提交不向下兼容的版本。                     |
640*4882a593Smuzhiyun| minor    | 次版本号,当向下兼容的功能性API新增。                  |
641*4882a593Smuzhiyun| revision | 修订版本号,当提交向下兼容的功能补充或致命的问题修正。 |
642*4882a593Smuzhiyun
643*4882a593Smuzhiyun
644*4882a593Smuzhiyun
645*4882a593Smuzhiyun#### 版本号查询
646*4882a593Smuzhiyun
647*4882a593Smuzhiyun##### 开机日志查询:
648*4882a593Smuzhiyun
649*4882a593Smuzhiyun开机后使用以下命令查询RGA驱动初始化日志,部分早期的驱动没有打印版本号,该方法仅适用部分驱动。
650*4882a593Smuzhiyun
651*4882a593Smuzhiyun```
652*4882a593Smuzhiyun dmesg |grep rga
653*4882a593Smuzhiyun```
654*4882a593Smuzhiyun
655*4882a593Smuzhiyun例如:
656*4882a593Smuzhiyun
657*4882a593Smuzhiyun> [    2.382393] rga3_core0 fdb60000.rga: Adding to iommu group 2
658*4882a593Smuzhiyun>[    2.382651] rga: rga3_core0, irq = 33, match scheduler
659*4882a593Smuzhiyun> [    2.383058] rga: rga3_core0 hardware loaded successfully, hw_version:3.0.76831.
660*4882a593Smuzhiyun> [    2.383121] rga: rga3_core0 probe successfully
661*4882a593Smuzhiyun> [    2.383687] rga3_core1 fdb70000.rga: Adding to iommu group 3
662*4882a593Smuzhiyun> [    2.383917] rga: rga3_core1, irq = 34, match scheduler
663*4882a593Smuzhiyun> [    2.384313] rga: rga3_core1 hardware loaded successfully, hw_version:3.0.76831.
664*4882a593Smuzhiyun> [    2.384412] rga: rga3_core1 probe successfully
665*4882a593Smuzhiyun> [    2.384893] rga: rga2, irq = 35, match scheduler
666*4882a593Smuzhiyun> [    2.385238] rga: rga2 hardware loaded successfully, hw_version:3.2.63318.
667*4882a593Smuzhiyun> [    2.385257] rga: rga2 probe successfully
668*4882a593Smuzhiyun> [    2.385455] rga_iommu: IOMMU binding successfully, default mapping core[0x1]
669*4882a593Smuzhiyun> [    2.385586] rga: Module initialized. v1.2.23
670*4882a593Smuzhiyun>
671*4882a593Smuzhiyun
672*4882a593Smuzhiyun其中 “v1.2.23” 便是驱动版本号。
673*4882a593Smuzhiyun
674*4882a593Smuzhiyun
675*4882a593Smuzhiyun
676*4882a593Smuzhiyun##### 调试节点查询
677*4882a593Smuzhiyun
678*4882a593Smuzhiyun可以通过驱动调试节点查询版本号,如果没有以下节点则说明当前运行的是不支持查询的驱动版本。
679*4882a593Smuzhiyun
680*4882a593Smuzhiyun- 使用默认使能CONFIG_ROCKCHIP_RGA_DEBUG_FS编译选项的kernel。
681*4882a593Smuzhiyun
682*4882a593Smuzhiyun```shell
683*4882a593Smuzhiyuncat /sys/kernel/debug/rkrga/driver_version
684*4882a593Smuzhiyun```
685*4882a593Smuzhiyun
686*4882a593Smuzhiyun- 使能ROCKCHIP_RGA_PROC_FS编译选项的kernel。
687*4882a593Smuzhiyun
688*4882a593Smuzhiyun```shell
689*4882a593Smuzhiyuncat /proc/rkrga/driver_version
690*4882a593Smuzhiyun```
691*4882a593Smuzhiyun
692*4882a593Smuzhiyun例如:
693*4882a593Smuzhiyun
694*4882a593Smuzhiyun> cat /sys/kernel/debug/rkrga/driver_version
695*4882a593Smuzhiyun>RGA multicore Device Driver: v1.2.23
696*4882a593Smuzhiyun
697*4882a593Smuzhiyun这里 “RGA multicore Device Driver”是指驱动名称为RGA multicore Device Driver,“v1.2.23” 是指版本为1.2.23,即说明当前驱动为1.2.23版本的RGA multicore Device Driver(通常简称multi_rga driver)驱动。
698*4882a593Smuzhiyun
699*4882a593Smuzhiyun> cat /sys/kernel/debug/rkrga/driver_version
700*4882a593Smuzhiyun>RGA2 Device Driver: v2.1.0
701*4882a593Smuzhiyun
702*4882a593Smuzhiyun这里 “RGA2 Device Driver” 是指驱动名称为RGA2 Device Driver,“v2.1.0” 是指版本号为2.1.0,即说明当前驱动为2.1.0版本的RGA2 Device Driver(通常简称rga2 driver)驱动。
703*4882a593Smuzhiyun
704*4882a593Smuzhiyun
705*4882a593Smuzhiyun
706*4882a593Smuzhiyun### 版本对应关系
707*4882a593Smuzhiyun
708*4882a593Smuzhiyun使用RGA时需要确认保证当前的运行环境是可以正常工作的,下表为常用的librga与驱动版本对应关系。
709*4882a593Smuzhiyun
710*4882a593Smuzhiyun| librga版本    | 对应驱动                                                     | 硬件支持         |
711*4882a593Smuzhiyun| ------------- | ------------------------------------------------------------ | ---------------- |
712*4882a593Smuzhiyun| 无版本号      | 对应SDK内驱动                                                | RGA1、RGA2       |
713*4882a593Smuzhiyun| 1.0.0 ~ 1.3.2 | RGA Device Driver(kernel - 4.4及以上)<br/>RGA2 Device Driver(无版本号或v2.1.0) | RGA1、RGA2       |
714*4882a593Smuzhiyun| > 1.4.0       | RGA multicore Device Driver(v1.2.0及以上)                  | RGA2、RGA3       |
715*4882a593Smuzhiyun| > 1.9.0       | RGA Device Driver(kernel-4.4及以上)<br/>RGA2 Device Driver(无版本号和v2.1.0)<br/>RGA multicore Device Driver(v1.2.0及以上) | RGA1、RGA2、RGA3 |
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun
718*4882a593Smuzhiyun
719*4882a593Smuzhiyun---
720*4882a593Smuzhiyun
721*4882a593Smuzhiyun## 应用接口
722*4882a593Smuzhiyun
723*4882a593SmuzhiyunRGA模块支持库为librga.so,通过对图像缓冲区结构体struct rga_info进行配置,实现相应的2D图形操作。为了获得更友好的开发体验,在此基础上进一步封装常用的2D图像操作接口。新的接口主要包含以下特点:
724*4882a593Smuzhiyun- 接口定义参考opencv/matlab中常用的2D图形接口定义,以减少二次开发的学习成本。
725*4882a593Smuzhiyun- 为消除RGA硬件版本差异带来的兼容问题,加入RGA query查询功能。查询内容主要包括版本信息,输入输出大分辨率及图像格式的支持。
726*4882a593Smuzhiyun- 执行图像操作之前,需要对输入输出图像缓冲区进行处理。调用wrapbuffer_T接口将输入输出图像信息填充到结构体struct rga_buffer_t,结构体中包含分辨率及图像格式等信息。
727*4882a593Smuzhiyun- 对于2D图像复合操作,增加improcess接口。通过传入一系列预定义的usage执行复合操作。
728*4882a593Smuzhiyun- 支持对单次无法完成的图像复合操作进行绑定为一个RGA图像任务,统一提交到驱动内逐个执行。
729*4882a593Smuzhiyun
730*4882a593Smuzhiyun
731*4882a593Smuzhiyun
732*4882a593Smuzhiyun### 概述
733*4882a593Smuzhiyun
734*4882a593Smuzhiyun该软件支持库提供以下API,异步模式仅支持C++实现。
735*4882a593Smuzhiyun
736*4882a593Smuzhiyun- **querystring**: 查询获取当前芯片平台RGA硬件版本与功能支持信息,以字符串的形式返回。
737*4882a593Smuzhiyun- **imcheckHeader**:  校验当前使用头文件版本与librga版本差异。
738*4882a593Smuzhiyun- **importbuffer_T**: 将外部内存(dma_fd、虚拟地址、物理地址)导入RGA驱动内部,实现硬件快速访问物理连续/非物理连续的内存。
739*4882a593Smuzhiyun- **releasebuffer_handle**: 将外部buffer从RGA驱动内部解除引用与映射。
740*4882a593Smuzhiyun- **wrapbuffer_handle**: 快速封装图像缓冲区结构(rga_buffer_t)。
741*4882a593Smuzhiyun- **imbeginJob**:创建RGA图像处理任务。
742*4882a593Smuzhiyun- **imendJob**: 提交并执行RGA图像处理任务。
743*4882a593Smuzhiyun- **imcancelJob**: 取消并删除RGA图像处理任务。
744*4882a593Smuzhiyun- **imcopy**: 调用RGA实现快速图像拷贝操作。
745*4882a593Smuzhiyun- **imcopyTask**: 向RGA图像任务中添加快速图像拷贝操作。
746*4882a593Smuzhiyun- **imresize**: 调用RGA实现快速图像缩放操作。
747*4882a593Smuzhiyun- **imresizeTask**: 向RGA图像任务中添加快速图像缩放操作。
748*4882a593Smuzhiyun- **impyramind**: 调用RGA实现快速图像金字塔操作。
749*4882a593Smuzhiyun- **imcrop**: 调用RGA实现快速图像裁剪操作。
750*4882a593Smuzhiyun- **imcropTask**: 向RGA图像任务中添加快速图像裁剪操作。
751*4882a593Smuzhiyun- **imtranslate**: 调用RGA实现快速图像平移操作。
752*4882a593Smuzhiyun- **imtranslateTask**: 向RGA图像任务中添加快速图像平移操作。
753*4882a593Smuzhiyun- **imcvtcolor**: 调用RGA实现快速图像格式转换。
754*4882a593Smuzhiyun- **imcvtcolorTask**: 向RGA图像任务中添加快速图像格式转换。
755*4882a593Smuzhiyun- **imrotate**: 调用RGA实现快速图像旋转操作。
756*4882a593Smuzhiyun- **imrotateTask**: 向RGA图像任务中添加快速图像旋转操作。
757*4882a593Smuzhiyun- **imflip**: 调用RGA实现快速图像翻转操作。
758*4882a593Smuzhiyun- **imflipTask**: 向RGA图像任务中添加快速图像翻转操作。
759*4882a593Smuzhiyun- **imblend**: 调用RGA实现双通道快速图像合成操作。
760*4882a593Smuzhiyun- **imblendTask**: 向RGA图像任务中添加双通道快速图像合成操作。
761*4882a593Smuzhiyun- **imcomposite**: 调用RGA实现三通道快速图像合成操作。
762*4882a593Smuzhiyun- **imcompositeTask**: 向RGA图像任务中添加三通道快速图像合成操作。
763*4882a593Smuzhiyun- **imcolorkey**: 调用RGA实现快速图像颜色键操作。
764*4882a593Smuzhiyun- **imcolorkeyTask**: 向RGA图像任务中添加快速图像颜色键操作。
765*4882a593Smuzhiyun- **imosd**:调用RGA实现快速图像OSD字幕叠加。
766*4882a593Smuzhiyun- **imosdTask**:向RGA图像任务中添加快速图像OSD字幕叠加。
767*4882a593Smuzhiyun- **imquantize**: 调用RGA实现快速图像运算点前处理(量化)操作。
768*4882a593Smuzhiyun- **imquantizeTask**: 向RGA图像任务中添加快速图像运算点前处理(量化)操作。
769*4882a593Smuzhiyun- **imrop**: 调用RGA实现快速图像光栅操作。
770*4882a593Smuzhiyun- **imropTask**: 向RGA图像任务中添加快速图像光栅操作。
771*4882a593Smuzhiyun- **imfill**: 调用RGA实现快速图像填充操作。
772*4882a593Smuzhiyun- **imfillArray**: 调用RGA实现多组快速图像填充操作。
773*4882a593Smuzhiyun- **imfillTask**: 向RGA图像任务中添加快速图像填充操作。
774*4882a593Smuzhiyun- **imfillTaskArray**: 向RGA图像任务中添加多组快速图像填充操作。
775*4882a593Smuzhiyun- **imrectangle**: 调用RGA实现等距矩形边框快速绘制操作。
776*4882a593Smuzhiyun- **imrectangleArray**: 调用RGA实现多组等距矩形边框快速绘制操作。
777*4882a593Smuzhiyun- **imrectangleTask**: 向RGA图像任务中添加等距矩形边框快速绘制操作。
778*4882a593Smuzhiyun- **imrectangleTaskArray**: 向RGA图像任务中添加多组等距矩形边框快速绘制操作。
779*4882a593Smuzhiyun- **immakeBorder**: 调用RGA实现矩形边框快速绘制操作。
780*4882a593Smuzhiyun- **immosaic**:调用RGA实现快速图像马赛克遮盖。
781*4882a593Smuzhiyun- **immosaicArray**:调用RGA实现快速图像马赛克遮盖。
782*4882a593Smuzhiyun- **immosaicTask**:向RGA图像任务中添加快速图像马赛克遮盖。
783*4882a593Smuzhiyun- **immosaicTaskArray**:向RGA图像任务中添加快速图像马赛克遮盖。
784*4882a593Smuzhiyun- **improcess**: 调用RGA实现快速图像复合处理操作。
785*4882a593Smuzhiyun- **improcessTask**: 向RGA图像任务中添加快速图像复合处理操作。
786*4882a593Smuzhiyun- **imcheck**: 校验参数是否合法,以及当前硬件是否支持该操作。
787*4882a593Smuzhiyun- **imsync**: 用于异步模式时,同步任务完成状态。
788*4882a593Smuzhiyun- **imconfig**: 向当前线程上下文添加默认配置。
789*4882a593Smuzhiyun
790*4882a593Smuzhiyun
791*4882a593Smuzhiyun
792*4882a593Smuzhiyun### 获取RGA 版本及支持信息
793*4882a593Smuzhiyun
794*4882a593Smuzhiyun#### querystring
795*4882a593Smuzhiyun
796*4882a593Smuzhiyun```C++
797*4882a593Smuzhiyunconst char* querystring(int name);
798*4882a593Smuzhiyun```
799*4882a593Smuzhiyun
800*4882a593Smuzhiyun> 查询RGA基础信息及分辨率格式等支持情况
801*4882a593Smuzhiyun
802*4882a593Smuzhiyun| **Parameters** | **Description**                                              |
803*4882a593Smuzhiyun| -------------- | ------------------------------------------------------------ |
804*4882a593Smuzhiyun| name           | RGA_VENDOR                 - 厂商信息<br/>RGA_VERSION                 - 版本信息<br/>RGA_MAX_INPUT            - 支持的最大输入分辨率<br/>RGA_MAX_OUTPUT        - 支持的最大输出分辨率<br/>RGA_BYTE_STRIDE          - 支持的stride对齐要求<br/>RGA_SCALE_LIMIT           - 支持得缩放倍数<br/>RGA_INPUT_FORMAT     - 支持的输入格式<br/>RGA_OUTPUT_FORMAT - 支持的输出格式<br/>RGA_EXPECTED               - 预期性能<br/>RGA_ALL                           - 输出所有信息 |
805*4882a593Smuzhiyun
806*4882a593Smuzhiyun **Returns** a string describing properties of RGA.
807*4882a593Smuzhiyun
808*4882a593Smuzhiyun
809*4882a593Smuzhiyun
810*4882a593Smuzhiyun### 头文件版本校验
811*4882a593Smuzhiyun
812*4882a593Smuzhiyun#### imcheckHeader
813*4882a593Smuzhiyun
814*4882a593Smuzhiyun```C++
815*4882a593SmuzhiyunIM_API IM_STATUS imcheckHeader(im_api_version_t header_version = RGA_CURRENT_API_HEADER_VERSION);
816*4882a593Smuzhiyun```
817*4882a593Smuzhiyun
818*4882a593Smuzhiyun> 校验当前使用头文件版本与librga版本差异。
819*4882a593Smuzhiyun
820*4882a593Smuzhiyun| **Parameters** | **Description**                                             |
821*4882a593Smuzhiyun| -------------- | ----------------------------------------------------------- |
822*4882a593Smuzhiyun| header_version | 头文件版本,通常使用宏 RGA_CURRENT_API_HEADER_VERSION即可。 |
823*4882a593Smuzhiyun
824*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
825*4882a593Smuzhiyun
826*4882a593Smuzhiyun
827*4882a593Smuzhiyun
828*4882a593Smuzhiyun### 图像缓冲区预处理
829*4882a593Smuzhiyun
830*4882a593Smuzhiyun#### importbuffer_T
831*4882a593Smuzhiyun
832*4882a593Smuzhiyun> 对于需要RGA处理的外部内存,可以使用importbuffer_T接口将缓冲区对应的物理地址信息映射到RGA驱动内部,并获取缓冲区相应的地址信息,方便后续的稳定、快速地调用RGA完成工作。
833*4882a593Smuzhiyun
834*4882a593Smuzhiyun| **Parameters(T)**    | Data Type       | Description                                                  |
835*4882a593Smuzhiyun| -------------------- | --------------- | ------------------------------------------------------------ |
836*4882a593Smuzhiyun| virtual address      | void *          | 图像缓冲区虚拟地址                                           |
837*4882a593Smuzhiyun| physical address     | uint64_t        | 图像缓冲区连续的物理地址                                     |
838*4882a593Smuzhiyun| fd                   | int             | 图像缓冲区DMA的文件描述符                                    |
839*4882a593Smuzhiyun| GraphicBuffer handle | buffer_handle_t | 图像缓冲区handle, 包含缓冲区地址,文件描述符,分辨率及格式等信息 |
840*4882a593Smuzhiyun| GraphicBuffer        | GraphicBuffer   | android graphic buffer                                       |
841*4882a593Smuzhiyun| AHardwareBuffer      | AHardwareBuffer | chunks of memory that can be accessed by various hardware components in the system. https://developer.android.com/ndk/reference/group/a-hardware-buffer |
842*4882a593Smuzhiyun
843*4882a593Smuzhiyun> 不同的buffer类型调用RGA的性能是不同的,性能排序如下所示:
844*4882a593Smuzhiyun>
845*4882a593Smuzhiyun> physical address > fd > virtual address
846*4882a593Smuzhiyun>
847*4882a593Smuzhiyun> 一般推荐使用fd作为buffer类型。
848*4882a593Smuzhiyun
849*4882a593Smuzhiyun```c++
850*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_fd(int fd, int size);
851*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int size);
852*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int size);
853*4882a593Smuzhiyun```
854*4882a593Smuzhiyun
855*4882a593Smuzhiyun| Parameter | **Description**                |
856*4882a593Smuzhiyun| --------- | ------------------------------ |
857*4882a593Smuzhiyun| fd/va/pa  | **[required]** external buffer |
858*4882a593Smuzhiyun| size      | **[required]** memory size     |
859*4882a593Smuzhiyun
860*4882a593Smuzhiyun```c++
861*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_fd(int fd, int width, int height, int format);
862*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int width, int height, int format);
863*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int width, int height, int format);
864*4882a593Smuzhiyun```
865*4882a593Smuzhiyun
866*4882a593Smuzhiyun| Parameter | **Description**                                        |
867*4882a593Smuzhiyun| --------- | ------------------------------------------------------ |
868*4882a593Smuzhiyun| fd/va/pa  | **[required]** external buffer                         |
869*4882a593Smuzhiyun| width     | **[required]** pixel width stride of the image buffer  |
870*4882a593Smuzhiyun| height    | **[required]** pixel height stride of the image buffer |
871*4882a593Smuzhiyun| format    | **[required]** pixel format of the image buffer        |
872*4882a593Smuzhiyun
873*4882a593Smuzhiyun```c++
874*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_fd(int fd, im_handle_param_t *param);
875*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, im_handle_param_t *param);
876*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, im_handle_param_t *param);
877*4882a593Smuzhiyun```
878*4882a593Smuzhiyun
879*4882a593Smuzhiyun| Parameter | **Description**                            |
880*4882a593Smuzhiyun| --------- | ------------------------------------------ |
881*4882a593Smuzhiyun| fd/va/pa  | **[required]** external buffer             |
882*4882a593Smuzhiyun| param     | **[required]** configure buffer parameters |
883*4882a593Smuzhiyun
884*4882a593Smuzhiyun```c++
885*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_GraphicBuffer_handle(buffer_handle_t hnd);
886*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_GraphicBuffer(sp<GraphicBuffer> buf);
887*4882a593SmuzhiyunIM_API rga_buffer_handle_t importbuffer_AHardwareBuffer(AHardwareBuffer *buf);
888*4882a593Smuzhiyun```
889*4882a593Smuzhiyun
890*4882a593Smuzhiyun| Parameter | **Description**                |
891*4882a593Smuzhiyun| --------- | ------------------------------ |
892*4882a593Smuzhiyun| hnd/buf   | **[required]** external buffer |
893*4882a593Smuzhiyun
894*4882a593Smuzhiyun**Returns** rga_buffer_handle_t to describe the memory handle.
895*4882a593Smuzhiyun
896*4882a593Smuzhiyun
897*4882a593Smuzhiyun
898*4882a593Smuzhiyun#### releasebuffer_handle
899*4882a593Smuzhiyun
900*4882a593Smuzhiyun> 当使用外部内存调用RGA完毕后,需要通过内存句柄 handle 调用 releasebuffer_handle解除该缓冲区与RGA驱动的映射和绑定关系,并释放RGA驱动内部对应的资源。
901*4882a593Smuzhiyun
902*4882a593Smuzhiyun```c++
903*4882a593SmuzhiyunIM_API IM_STATUS releasebuffer_handle(rga_buffer_handle_t handle);
904*4882a593Smuzhiyun```
905*4882a593Smuzhiyun
906*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
907*4882a593Smuzhiyun
908*4882a593Smuzhiyun
909*4882a593Smuzhiyun
910*4882a593Smuzhiyun#### wrapbuffer_handle
911*4882a593Smuzhiyun
912*4882a593Smuzhiyun> IM2D图形库接口参数中,输入源图像及输出目标图像应支持多种类型,它主要包含内存、图像格式、图像宽高等信息。在执行相应的图像操作之前,需要先调用wrapbuffer_handle将输入输出的图像参数转化为统一的 rga_buffer_t 结构作为user API的输入参数。
913*4882a593Smuzhiyun
914*4882a593Smuzhiyun```C++
915*4882a593Smuzhiyunrga_buffer_t wrapbuffer_handle(rga_buffer_handle_t handle,
916*4882a593Smuzhiyun                               int width,
917*4882a593Smuzhiyun                               int height,
918*4882a593Smuzhiyun                               int format,
919*4882a593Smuzhiyun                               int wstride = width,
920*4882a593Smuzhiyun                               int hstride = height);
921*4882a593Smuzhiyun```
922*4882a593Smuzhiyun| Parameter | **Description**                                              |
923*4882a593Smuzhiyun| --------- | ------------------------------------------------------------ |
924*4882a593Smuzhiyun| handle    | **[required]** RGA buffer handle                             |
925*4882a593Smuzhiyun| width     | **[required]** pixel width of the image that needs to be processed |
926*4882a593Smuzhiyun| height    | **[required]** pixel height of the image that needs to be processed |
927*4882a593Smuzhiyun| format    | **[required]** pixel format                                  |
928*4882a593Smuzhiyun| wtride    | **[optional]** pixel width stride of the image               |
929*4882a593Smuzhiyun| hstride   | **[optional]** pixel width stride of the image               |
930*4882a593Smuzhiyun
931*4882a593Smuzhiyun **Returns** a rga_buffer_t to desribe image information.
932*4882a593Smuzhiyun
933*4882a593Smuzhiyun
934*4882a593Smuzhiyun
935*4882a593Smuzhiyun### 图像处理任务创建
936*4882a593Smuzhiyun
937*4882a593Smuzhiyun#### imbeginJob
938*4882a593Smuzhiyun
939*4882a593Smuzhiyun```c++
940*4882a593SmuzhiyunIM_API im_job_handle_t imbeginJob(uint64_t flags = 0);
941*4882a593Smuzhiyun```
942*4882a593Smuzhiyun
943*4882a593Smuzhiyun> 创建一个RGA图像处理任务,将返回一个任务句柄,job_handle 可用于添加/删除RGA图像操作、提交/执行该任务。
944*4882a593Smuzhiyun
945*4882a593Smuzhiyun| Parameter | **Description**          |
946*4882a593Smuzhiyun| --------- | ------------------------ |
947*4882a593Smuzhiyun| flags     | **[optional]** job flags |
948*4882a593Smuzhiyun
949*4882a593Smuzhiyun**Returns** im_job_handle_t to describe the job handle.
950*4882a593Smuzhiyun
951*4882a593Smuzhiyun
952*4882a593Smuzhiyun
953*4882a593Smuzhiyun### 图像处理任务提交
954*4882a593Smuzhiyun
955*4882a593Smuzhiyun#### imendJob
956*4882a593Smuzhiyun
957*4882a593Smuzhiyun```c++
958*4882a593SmuzhiyunIM_API IM_STATUS imendJob(im_job_handle_t job_handle,
959*4882a593Smuzhiyun                          int sync_mode = IM_SYNC,
960*4882a593Smuzhiyun                          int acquire_fence_fd = 0,
961*4882a593Smuzhiyun                          int *release_fence_fd = NULL);
962*4882a593Smuzhiyun```
963*4882a593Smuzhiyun
964*4882a593Smuzhiyun> 提交并执行已创建的RGA图像处理任务。完成后将自动删除当前完成的RGA图像处理任务资源。
965*4882a593Smuzhiyun
966*4882a593Smuzhiyun| Parameter        | **Description**                                              |
967*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
968*4882a593Smuzhiyun| job_handle       | **[required]** job handle                                    |
969*4882a593Smuzhiyun| sync_mode        | **[optional]** wait until operation complete                 |
970*4882a593Smuzhiyun| acquire_fence_fd | **[optional]** Used in async mode, run the job after waiting foracquire_fence signal |
971*4882a593Smuzhiyun| release_fence_fd | **[optional]** Used in async mode, as a parameter of imsync() |
972*4882a593Smuzhiyun
973*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
974*4882a593Smuzhiyun
975*4882a593Smuzhiyun
976*4882a593Smuzhiyun
977*4882a593Smuzhiyun### 图像处理任务取消
978*4882a593Smuzhiyun
979*4882a593Smuzhiyun#### imcancelJob
980*4882a593Smuzhiyun
981*4882a593Smuzhiyun```c++
982*4882a593SmuzhiyunIM_API IM_STATUS imcancelJob(im_job_handle_t job_handle);
983*4882a593Smuzhiyun```
984*4882a593Smuzhiyun
985*4882a593Smuzhiyun> 取消并删除已创建的RGA图像处理任务。
986*4882a593Smuzhiyun
987*4882a593Smuzhiyun| Parameter  | **Description**           |
988*4882a593Smuzhiyun| ---------- | ------------------------- |
989*4882a593Smuzhiyun| job_handle | **[required]** job handle |
990*4882a593Smuzhiyun
991*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
992*4882a593Smuzhiyun
993*4882a593Smuzhiyun
994*4882a593Smuzhiyun
995*4882a593Smuzhiyun### 图像拷贝
996*4882a593Smuzhiyun
997*4882a593Smuzhiyun#### imcopy
998*4882a593Smuzhiyun
999*4882a593Smuzhiyun```C++
1000*4882a593SmuzhiyunIM_STATUS imcopy(const rga_buffer_t src,
1001*4882a593Smuzhiyun                 rga_buffer_t dst,
1002*4882a593Smuzhiyun                 int sync = 1,
1003*4882a593Smuzhiyun                 int *release_fence_fd = NULL);
1004*4882a593Smuzhiyun```
1005*4882a593Smuzhiyun
1006*4882a593Smuzhiyun> 执行单次快速图像拷贝操作,将图像从src通道图像缓冲区拷贝到dst通道图像缓冲区上。
1007*4882a593Smuzhiyun
1008*4882a593Smuzhiyun| Parameter        | **Description**                                              |
1009*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1010*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1011*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1012*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1013*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1014*4882a593Smuzhiyun
1015*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1016*4882a593Smuzhiyun
1017*4882a593Smuzhiyun
1018*4882a593Smuzhiyun
1019*4882a593Smuzhiyun#### imcopyTask
1020*4882a593Smuzhiyun
1021*4882a593Smuzhiyun```C++
1022*4882a593SmuzhiyunIM_API IM_STATUS imcopyTask(im_job_handle_t job_handle,
1023*4882a593Smuzhiyun                            const rga_buffer_t src,
1024*4882a593Smuzhiyun                            rga_buffer_t dst);
1025*4882a593Smuzhiyun```
1026*4882a593Smuzhiyun
1027*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像拷贝操作,用法和imcopy一致。
1028*4882a593Smuzhiyun
1029*4882a593Smuzhiyun| Parameter  | **Description**             |
1030*4882a593Smuzhiyun| ---------- | --------------------------- |
1031*4882a593Smuzhiyun| job_handle | **[required]** job handle   |
1032*4882a593Smuzhiyun| src        | **[required]** input image  |
1033*4882a593Smuzhiyun| dst        | **[required]** output image |
1034*4882a593Smuzhiyun
1035*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1036*4882a593Smuzhiyun
1037*4882a593Smuzhiyun
1038*4882a593Smuzhiyun
1039*4882a593Smuzhiyun### 图像缩放、图像金字塔
1040*4882a593Smuzhiyun
1041*4882a593Smuzhiyun#### imresize
1042*4882a593Smuzhiyun
1043*4882a593Smuzhiyun```C++
1044*4882a593SmuzhiyunIM_STATUS imresize(const rga_buffer_t src,
1045*4882a593Smuzhiyun                   rga_buffer_t dst,
1046*4882a593Smuzhiyun                   double fx = 0,
1047*4882a593Smuzhiyun                   double fy = 0,
1048*4882a593Smuzhiyun                   int interpolation = INTER_LINEAR,
1049*4882a593Smuzhiyun                   int sync = 1,
1050*4882a593Smuzhiyun                   int *release_fence_fd = NULL);
1051*4882a593Smuzhiyun```
1052*4882a593Smuzhiyun
1053*4882a593Smuzhiyun> 根据不同的应用场景,可选择配置dst来描述缩放的目标图像大小,或配置缩放系数fx/fy实现缩放指定倍率的效果。同时配置dst和缩放系数fx/fy时,将采用缩放系数fx/fy计算后的结果作为目标图像大小。
1054*4882a593Smuzhiyun>
1055*4882a593Smuzhiyun> interpolation 仅硬件版本RGA1/RGA1 plus 可以支持配置,其他硬件版本RGA须查询对应TRM确认缩放算法。
1056*4882a593Smuzhiyun>
1057*4882a593Smuzhiyun> 注意:使用缩放系数fx/fy进行倍率缩放时,YUV等对宽高对齐有要求的格式将强制向下对齐至符合要求,使用该功能有可能会改变预期缩放效果。
1058*4882a593Smuzhiyun
1059*4882a593Smuzhiyun| Parameters       | Description                                                  |
1060*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1061*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1062*4882a593Smuzhiyun| dst              | **[required]** output image; it has the size dsize (when it is non-zero) or the size computed from src.size(), fx, and fy; the type of dst is the same as of src. |
1063*4882a593Smuzhiyun| fx               | **[optional]** scale factor along the horizontal axis; when it equals 0, it is computed as:<br/>fx = (double) dst.width / src.width |
1064*4882a593Smuzhiyun| fy               | **[optional]** scale factor along the vertical axis; when it equals 0, it is computed as:<br/>fy = (double) dst.height / src.height |
1065*4882a593Smuzhiyun| interpolation    | **[optional]** interpolation method:<br/>INTER_NEAREST - a nearest-neighbor interpolation<br/>INTER_LINEAR - a bilinear interpolation (used by default)<br/>INTER_CUBIC - a bicubic interpolation over 4x4 pixel neighborhood |
1066*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1067*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1068*4882a593Smuzhiyun
1069*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1070*4882a593Smuzhiyun
1071*4882a593Smuzhiyun
1072*4882a593Smuzhiyun
1073*4882a593Smuzhiyun#### impyramid
1074*4882a593Smuzhiyun
1075*4882a593Smuzhiyun```C++
1076*4882a593SmuzhiyunIM_STATUS impyramid (const rga_buffer_t src,
1077*4882a593Smuzhiyun                     rga_buffer_t dst,
1078*4882a593Smuzhiyun                     IM_SCALE direction)
1079*4882a593Smuzhiyun```
1080*4882a593Smuzhiyun
1081*4882a593Smuzhiyun> 金字塔缩放。根据direction 宽高同时做1/2 或者 2 倍的缩放。
1082*4882a593Smuzhiyun
1083*4882a593Smuzhiyun| Parameters       | Description                                                  |
1084*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1085*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1086*4882a593Smuzhiyun| dst              | **[required]** output image;                                 |
1087*4882a593Smuzhiyun| direction        | **[required]** scale mode<br/>IM_UP_SCALE  ——  up scale <br/>IM_DOWN_SCALE —— down scale |
1088*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1089*4882a593Smuzhiyun
1090*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1091*4882a593Smuzhiyun
1092*4882a593Smuzhiyun
1093*4882a593Smuzhiyun
1094*4882a593Smuzhiyun#### imresizeTask
1095*4882a593Smuzhiyun
1096*4882a593Smuzhiyun```C++
1097*4882a593SmuzhiyunIM_API IM_STATUS imresizeTask(im_job_handle_t job_handle,
1098*4882a593Smuzhiyun                              const rga_buffer_t src,
1099*4882a593Smuzhiyun                              rga_buffer_t dst,
1100*4882a593Smuzhiyun                              double fx = 0,
1101*4882a593Smuzhiyun                              double fy = 0,
1102*4882a593Smuzhiyun                              int interpolation = 0);
1103*4882a593Smuzhiyun```
1104*4882a593Smuzhiyun
1105*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像缩放操作,用法和imresize一致。
1106*4882a593Smuzhiyun
1107*4882a593Smuzhiyun| Parameters    | Description                                                  |
1108*4882a593Smuzhiyun| ------------- | ------------------------------------------------------------ |
1109*4882a593Smuzhiyun| job_handle    | **[required]** job handle                                    |
1110*4882a593Smuzhiyun| src           | **[required]** input image                                   |
1111*4882a593Smuzhiyun| dst           | **[required]** output image; it has the size dsize (when it is non-zero) or the size computed from src.size(), fx, and fy; the type of dst is the same as of src. |
1112*4882a593Smuzhiyun| fx            | **[optional]** scale factor along the horizontal axis; when it equals 0, it is computed as:<br/>fx = (double) dst.width / src.width |
1113*4882a593Smuzhiyun| fy            | **[optional]** scale factor along the vertical axis; when it equals 0, it is computed as:<br/>fy = (double) dst.height / src.height |
1114*4882a593Smuzhiyun| interpolation | **[optional]** interpolation method:<br/>INTER_NEAREST - a nearest-neighbor interpolation<br/>INTER_LINEAR - a bilinear interpolation (used by default)<br/>INTER_CUBIC - a bicubic interpolation over 4x4 pixel neighborhood |
1115*4882a593Smuzhiyun
1116*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1117*4882a593Smuzhiyun
1118*4882a593Smuzhiyun
1119*4882a593Smuzhiyun
1120*4882a593Smuzhiyun### 图像裁剪
1121*4882a593Smuzhiyun
1122*4882a593Smuzhiyun#### imcrop
1123*4882a593Smuzhiyun
1124*4882a593Smuzhiyun```C++
1125*4882a593SmuzhiyunIM_STATUS imcrop(const rga_buffer_t src,
1126*4882a593Smuzhiyun                 rga_buffer_t dst,
1127*4882a593Smuzhiyun                 im_rect rect,
1128*4882a593Smuzhiyun                 int sync = 1,
1129*4882a593Smuzhiyun                 int *release_fence_fd = NULL);
1130*4882a593Smuzhiyun```
1131*4882a593Smuzhiyun
1132*4882a593Smuzhiyun> 通过指定Rect 的大小区域执行图像裁剪。
1133*4882a593Smuzhiyun
1134*4882a593Smuzhiyun| Parameter        | Description                                                  |
1135*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1136*4882a593Smuzhiyun| src              | **[required] **input image                                   |
1137*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1138*4882a593Smuzhiyun| rect             | **[required]** crop region<br/>x - upper-left x coordinate<br/>y - upper-left y coordinate<br/>width - region width<br/>height - region height |
1139*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1140*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1141*4882a593Smuzhiyun
1142*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1143*4882a593Smuzhiyun
1144*4882a593Smuzhiyun
1145*4882a593Smuzhiyun
1146*4882a593Smuzhiyun#### imcropTask
1147*4882a593Smuzhiyun
1148*4882a593Smuzhiyun```C++
1149*4882a593SmuzhiyunIM_API IM_STATUS imcropTask(im_job_handle_t job_handle,
1150*4882a593Smuzhiyun                            const rga_buffer_t src,
1151*4882a593Smuzhiyun                            rga_buffer_t dst,
1152*4882a593Smuzhiyun                            im_rect rect);
1153*4882a593Smuzhiyun```
1154*4882a593Smuzhiyun
1155*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像裁剪操作,用法和imcrop一致。
1156*4882a593Smuzhiyun
1157*4882a593Smuzhiyun| Parameter  | Description                                                  |
1158*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1159*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1160*4882a593Smuzhiyun| src        | **[required] **input image                                   |
1161*4882a593Smuzhiyun| dst        | **[required]** output image                                  |
1162*4882a593Smuzhiyun| rect       | **[required]** crop region<br/>x - upper-left x coordinate<br/>y - upper-left y coordinate<br/>width - region width<br/>height - region height |
1163*4882a593Smuzhiyun
1164*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1165*4882a593Smuzhiyun
1166*4882a593Smuzhiyun
1167*4882a593Smuzhiyun
1168*4882a593Smuzhiyun### 图像平移
1169*4882a593Smuzhiyun
1170*4882a593Smuzhiyun#### imtranslate
1171*4882a593Smuzhiyun
1172*4882a593Smuzhiyun```C++
1173*4882a593SmuzhiyunIM_STATUS imtranslate(const rga_buffer_t src,
1174*4882a593Smuzhiyun                      rga_buffer_t dst,
1175*4882a593Smuzhiyun                      int x,
1176*4882a593Smuzhiyun                      int y,
1177*4882a593Smuzhiyun                      int sync = 1,
1178*4882a593Smuzhiyun                      int *release_fence_fd = NULL);
1179*4882a593Smuzhiyun```
1180*4882a593Smuzhiyun
1181*4882a593Smuzhiyun> 对图像做平移操作,移动到(x, y)坐标位置,src和dst 宽高须一致,超出部分会被裁剪。
1182*4882a593Smuzhiyun
1183*4882a593Smuzhiyun| Parameter        | Description                                                  |
1184*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1185*4882a593Smuzhiyun| src              | **[required]**input image                                    |
1186*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1187*4882a593Smuzhiyun| x                | **[required]** horizontal translation                        |
1188*4882a593Smuzhiyun| y                | **[required]** vertical translation                          |
1189*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1190*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1191*4882a593Smuzhiyun
1192*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1193*4882a593Smuzhiyun
1194*4882a593Smuzhiyun
1195*4882a593Smuzhiyun
1196*4882a593Smuzhiyun#### imtranslateTask
1197*4882a593Smuzhiyun
1198*4882a593Smuzhiyun```C++
1199*4882a593SmuzhiyunIM_API IM_STATUS imtranslateTask(im_job_handle_t job_handle,
1200*4882a593Smuzhiyun                                 const rga_buffer_t src,
1201*4882a593Smuzhiyun                                 rga_buffer_t dst,
1202*4882a593Smuzhiyun                                 int x,
1203*4882a593Smuzhiyun                                 int y);
1204*4882a593Smuzhiyun```
1205*4882a593Smuzhiyun
1206*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像平移操作,用法和imtranslate一致。
1207*4882a593Smuzhiyun
1208*4882a593Smuzhiyun| Parameter  | Description                           |
1209*4882a593Smuzhiyun| ---------- | ------------------------------------- |
1210*4882a593Smuzhiyun| job_handle | **[required]** job handle             |
1211*4882a593Smuzhiyun| src        | **[required]**input image             |
1212*4882a593Smuzhiyun| dst        | **[required]** output image           |
1213*4882a593Smuzhiyun| x          | **[required]** horizontal translation |
1214*4882a593Smuzhiyun| y          | **[required]** vertical translation   |
1215*4882a593Smuzhiyun
1216*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1217*4882a593Smuzhiyun
1218*4882a593Smuzhiyun
1219*4882a593Smuzhiyun
1220*4882a593Smuzhiyun### 图像格式转换
1221*4882a593Smuzhiyun
1222*4882a593Smuzhiyun#### imcvtcolor
1223*4882a593Smuzhiyun
1224*4882a593Smuzhiyun```C++
1225*4882a593SmuzhiyunIM_STATUS imcvtcolor(rga_buffer_t src,
1226*4882a593Smuzhiyun                     rga_buffer_t dst,
1227*4882a593Smuzhiyun                     int sfmt,
1228*4882a593Smuzhiyun                     int dfmt,
1229*4882a593Smuzhiyun                     int mode = IM_COLOR_SPACE_DEFAULT,
1230*4882a593Smuzhiyun                     int sync = 1,
1231*4882a593Smuzhiyun                     int *release_fence_fd = NULL);
1232*4882a593Smuzhiyun```
1233*4882a593Smuzhiyun
1234*4882a593Smuzhiyun> 格式转换功能,具体格式支持根据soc有不同请查阅**图像格式支持**章节。
1235*4882a593Smuzhiyun>
1236*4882a593Smuzhiyun> 格式可以通过rga_buffer_t 设置,也可以通过sfmt/dfmt分别配置源图像及输出图像格式,当涉及YUV/RGB色域转换时可以通过mode配置转换的色域,默认按照BT.601 limit range进行转换。
1237*4882a593Smuzhiyun
1238*4882a593Smuzhiyun| parameter        | Description                                                  |
1239*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1240*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1241*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1242*4882a593Smuzhiyun| sfmt             | **[optional]** source image format                           |
1243*4882a593Smuzhiyun| dfmt             | **[optional]** destination image format                      |
1244*4882a593Smuzhiyun| Mode             | **[optional]** color space mode:<br/>IM_YUV_TO_RGB_BT601_LIMIT<br/>IM_YUV_TO_RGB_BT601_FULL<br/>IM_YUV_TO_RGB_BT709_LIMIT<br/>IM_RGB_TO_YUV_BT601_LIMIT<br/>IM_RGB_TO_YUV_BT601_FULL<br/>IM_RGB_TO_YUV_BT709_LIMIT |
1245*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1246*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1247*4882a593Smuzhiyun
1248*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS  on success or else negative error code.
1249*4882a593Smuzhiyun
1250*4882a593Smuzhiyun
1251*4882a593Smuzhiyun
1252*4882a593Smuzhiyun#### imcvtcolorTask
1253*4882a593Smuzhiyun
1254*4882a593Smuzhiyun```C++
1255*4882a593SmuzhiyunIM_API IM_STATUS imcvtcolorTask(im_job_handle_t job_handle,
1256*4882a593Smuzhiyun                                rga_buffer_t src,
1257*4882a593Smuzhiyun                                rga_buffer_t dst,
1258*4882a593Smuzhiyun                                int sfmt,
1259*4882a593Smuzhiyun                                int dfmt,
1260*4882a593Smuzhiyun                                int mode = IM_COLOR_SPACE_DEFAULT);
1261*4882a593Smuzhiyun```
1262*4882a593Smuzhiyun
1263*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像平移操作,用法和imcvtcolor一致。
1264*4882a593Smuzhiyun
1265*4882a593Smuzhiyun| parameter  | Description                                                  |
1266*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1267*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1268*4882a593Smuzhiyun| src        | **[required]** input image                                   |
1269*4882a593Smuzhiyun| dst        | **[required]** output image                                  |
1270*4882a593Smuzhiyun| sfmt       | **[optional]** source image format                           |
1271*4882a593Smuzhiyun| dfmt       | **[optional]** destination image format                      |
1272*4882a593Smuzhiyun| Mode       | **[optional]** color space mode:<br/>IM_YUV_TO_RGB_BT601_LIMIT<br/>IM_YUV_TO_RGB_BT601_FULL<br/>IM_YUV_TO_RGB_BT709_LIMIT<br/>IM_RGB_TO_YUV_BT601_LIMIT<br/>IM_RGB_TO_YUV_BT601_FULL<br/>IM_RGB_TO_YUV_BT709_LIMIT |
1273*4882a593Smuzhiyun
1274*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS  on success or else negative error code.
1275*4882a593Smuzhiyun
1276*4882a593Smuzhiyun
1277*4882a593Smuzhiyun
1278*4882a593Smuzhiyun### 图像旋转
1279*4882a593Smuzhiyun
1280*4882a593Smuzhiyun#### imrotate
1281*4882a593Smuzhiyun
1282*4882a593Smuzhiyun```c++
1283*4882a593SmuzhiyunIM_STATUS imrotate(const rga_buffer_t src,
1284*4882a593Smuzhiyun                   rga_buffer_t dst,
1285*4882a593Smuzhiyun                   int rotation,
1286*4882a593Smuzhiyun                   int sync = 1,
1287*4882a593Smuzhiyun                   int *release_fence_fd = NULL);
1288*4882a593Smuzhiyun```
1289*4882a593Smuzhiyun
1290*4882a593Smuzhiyun>
1291*4882a593Smuzhiyun>  支持图像旋转90,180,270度。
1292*4882a593Smuzhiyun
1293*4882a593Smuzhiyun| Parameter        | Description                                                  |
1294*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1295*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1296*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1297*4882a593Smuzhiyun| rotation         | **[required]** rotation angle:<br/>IM_HAL_TRANSFORM_ROT_90<br/>IM_HAL_TRANSFORM_ROT_180<br/>IM_HAL_TRANSFORM_ROT_270 |
1298*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1299*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1300*4882a593Smuzhiyun
1301*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1302*4882a593Smuzhiyun
1303*4882a593Smuzhiyun
1304*4882a593Smuzhiyun
1305*4882a593Smuzhiyun#### imrotateTask
1306*4882a593Smuzhiyun
1307*4882a593Smuzhiyun```c++
1308*4882a593SmuzhiyunIM_API IM_STATUS imrotateTask(im_job_handle_t job_handle,
1309*4882a593Smuzhiyun                              const rga_buffer_t src,
1310*4882a593Smuzhiyun                              rga_buffer_t dst,
1311*4882a593Smuzhiyun                              int rotation);
1312*4882a593Smuzhiyun```
1313*4882a593Smuzhiyun
1314*4882a593Smuzhiyun>通过job_handle向指定的任务中添加图像旋转操作,用法和imrotate一致。
1315*4882a593Smuzhiyun
1316*4882a593Smuzhiyun| Parameter  | Description                                                  |
1317*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1318*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1319*4882a593Smuzhiyun| src        | **[required]** input image                                   |
1320*4882a593Smuzhiyun| dst        | **[required]** output image                                  |
1321*4882a593Smuzhiyun| rotation   | **[required]** rotation angle:<br/>IM_HAL_TRANSFORM_ROT_90<br/>IM_HAL_TRANSFORM_ROT_180<br/>IM_HAL_TRANSFORM_ROT_270 |
1322*4882a593Smuzhiyun
1323*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1324*4882a593Smuzhiyun
1325*4882a593Smuzhiyun
1326*4882a593Smuzhiyun
1327*4882a593Smuzhiyun### 图像镜像翻转
1328*4882a593Smuzhiyun
1329*4882a593Smuzhiyun#### imfilp
1330*4882a593Smuzhiyun
1331*4882a593Smuzhiyun```c++
1332*4882a593SmuzhiyunIM_STATUS imflip (const rga_buffer_t src,
1333*4882a593Smuzhiyun                  rga_buffer_t dst,
1334*4882a593Smuzhiyun                  int mode,
1335*4882a593Smuzhiyun                  int sync = 1,
1336*4882a593Smuzhiyun                  int *release_fence_fd = NULL);
1337*4882a593Smuzhiyun```
1338*4882a593Smuzhiyun
1339*4882a593Smuzhiyun> 支持图像做水平、垂直镜像翻转。
1340*4882a593Smuzhiyun
1341*4882a593Smuzhiyun| Parameter        | Description                                                  |
1342*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1343*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1344*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1345*4882a593Smuzhiyun| mode             | **[required]** flip mode:<br/>IM_HAL_TRANSFORM_FLIP_H_V<br/>IM_HAL_TRANSFORM_FLIP_H<br/>IM_HAL_TRANSFORM_FLIP_V |
1346*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1347*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1348*4882a593Smuzhiyun
1349*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1350*4882a593Smuzhiyun
1351*4882a593Smuzhiyun
1352*4882a593Smuzhiyun
1353*4882a593Smuzhiyun#### imflipTask
1354*4882a593Smuzhiyun
1355*4882a593Smuzhiyun```c++
1356*4882a593SmuzhiyunIM_API IM_STATUS imflipTask(im_job_handle_t job_handle,
1357*4882a593Smuzhiyun                            const rga_buffer_t src,
1358*4882a593Smuzhiyun                            rga_buffer_t dst,
1359*4882a593Smuzhiyun                            int mode);
1360*4882a593Smuzhiyun```
1361*4882a593Smuzhiyun
1362*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像镜像翻转操作,用法和imflip一致。
1363*4882a593Smuzhiyun
1364*4882a593Smuzhiyun| Parameter  | Description                                                  |
1365*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1366*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1367*4882a593Smuzhiyun| src        | **[required]** input image                                   |
1368*4882a593Smuzhiyun| dst        | **[required]** output image                                  |
1369*4882a593Smuzhiyun| mode       | **[required]** flip mode:<br/>IM_HAL_TRANSFORM_FLIP_H_V<br/>IM_HAL_TRANSFORM_FLIP_H<br/>IM_HAL_TRANSFORM_FLIP_V |
1370*4882a593Smuzhiyun
1371*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1372*4882a593Smuzhiyun
1373*4882a593Smuzhiyun
1374*4882a593Smuzhiyun
1375*4882a593Smuzhiyun### 图像合成
1376*4882a593Smuzhiyun
1377*4882a593Smuzhiyun#### imblend/imcomposite
1378*4882a593Smuzhiyun
1379*4882a593Smuzhiyun```c++
1380*4882a593SmuzhiyunIM_STATUS imblend(const rga_buffer_t fg_image,
1381*4882a593Smuzhiyun                  rga_buffer_t bg_image,
1382*4882a593Smuzhiyun                  int mode = IM_ALPHA_BLEND_SRC_OVER,
1383*4882a593Smuzhiyun                  int sync = 1,
1384*4882a593Smuzhiyun                  int *release_fence_fd = NULL);
1385*4882a593Smuzhiyun```
1386*4882a593Smuzhiyun
1387*4882a593Smuzhiyun> RGA使用A+B -> B 的图像双通道合成模式, 将前景图像(srcA通道)与背景图像(dst通道)根据配置的混合模型执行对应的Alpha叠加计算,并将合成结果输出至dst通道上,当没有配置混合模式时则默认设置为src-over模式。
1388*4882a593Smuzhiyun
1389*4882a593Smuzhiyun```c++
1390*4882a593SmuzhiyunIM_STATUS imcomposite(const rga_buffer_t fg_image,
1391*4882a593Smuzhiyun                      const rga_buffer_t bg_image,
1392*4882a593Smuzhiyun                      rga_buffer_t output_image,
1393*4882a593Smuzhiyun                      int mode = IM_ALPHA_BLEND_SRC_OVER,
1394*4882a593Smuzhiyun                      int sync = 1,
1395*4882a593Smuzhiyun                      int *release_fence_fd = NULL);
1396*4882a593Smuzhiyun```
1397*4882a593Smuzhiyun
1398*4882a593Smuzhiyun> RGA使用A+B -> C 的图像三通道合成模式,将前景图像(srcA通道)与背景图像(srcB通道)根据配置的混合模型执行对应的Alpha叠加计算,并将合成结果输出至dst通道上,当没有配置混合模式时则默认设置为src-over模式。
1399*4882a593Smuzhiyun
1400*4882a593Smuzhiyun两种图像合成模式中mode 可以配置不同的**Porter-Duff混合模型**:
1401*4882a593Smuzhiyun
1402*4882a593Smuzhiyun> 说明Porter-Duff混合模型前,先做出如下定义:
1403*4882a593Smuzhiyun>
1404*4882a593Smuzhiyun> - S -**标识两个混合图像中的源图像**,即前景图像,为souce的缩写。
1405*4882a593Smuzhiyun> - D -**标识两个混合图像中的目标图像**,即背景图像,为destination的缩写。
1406*4882a593Smuzhiyun> - R -**标识两个图像混合的结果**,为result的缩写。
1407*4882a593Smuzhiyun> - c -**标识像素的颜色**,即(RGBA)的RGB部分,描述图像本身色彩,为color的缩写。(**注意**,Porter-Duff混合模型中的色彩值(RGB)均为左乘后的结果,即原始色彩与透明度的乘积,如色彩值未左乘则需要进行预乘(Xc = Xc * Xa)操作。)
1408*4882a593Smuzhiyun> - a -**标识像素的透明度**,即(RGBA)的A部分,描述图像本身的透明度,为Alpha的缩写。
1409*4882a593Smuzhiyun> - f -**标识作用于C或者A上的因子**,为factor的缩写。
1410*4882a593Smuzhiyun>
1411*4882a593Smuzhiyun> Porter-Duff混合模型的核心公式如下:
1412*4882a593Smuzhiyun>
1413*4882a593Smuzhiyun> Rc = Sc * Sf + Dc * Df;
1414*4882a593Smuzhiyun>
1415*4882a593Smuzhiyun> 即: 结果色 = 源色彩 * 源因子 + 目标色彩 * 目标因子。
1416*4882a593Smuzhiyun>
1417*4882a593Smuzhiyun> Ra = Sa * Sf + Da * Df;
1418*4882a593Smuzhiyun>
1419*4882a593Smuzhiyun> 即: 结果透明度 = 源透明度 * 源因子 + 目标透明度 * 目标因子。
1420*4882a593Smuzhiyun
1421*4882a593SmuzhiyunRGA支持以下几种混合模型:
1422*4882a593Smuzhiyun
1423*4882a593Smuzhiyun> SRC:
1424*4882a593Smuzhiyun>
1425*4882a593Smuzhiyun> ​		Sf = 1, Df = 0;
1426*4882a593Smuzhiyun>
1427*4882a593Smuzhiyun> ​		[Rc,Ra] = [Sc,Sa];
1428*4882a593Smuzhiyun>
1429*4882a593Smuzhiyun> DST:
1430*4882a593Smuzhiyun>
1431*4882a593Smuzhiyun> ​		Sf = 0, Df = 1;
1432*4882a593Smuzhiyun>
1433*4882a593Smuzhiyun> ​		[Rc,Ra] = [Dc,Da];
1434*4882a593Smuzhiyun>
1435*4882a593Smuzhiyun> SRC_OVER:
1436*4882a593Smuzhiyun>
1437*4882a593Smuzhiyun> ​		Sf = 1, Df = (1 - Sa);
1438*4882a593Smuzhiyun>
1439*4882a593Smuzhiyun> ​		[Rc,Ra] = [ Sc + (1 - Sa) * Dc, Sa + (1 - Sa) * Da ];
1440*4882a593Smuzhiyun>
1441*4882a593Smuzhiyun> DST_OVER:
1442*4882a593Smuzhiyun>
1443*4882a593Smuzhiyun> ​		Sf = (1 - Da) , Df = 1;
1444*4882a593Smuzhiyun>
1445*4882a593Smuzhiyun> ​		[Rc,Ra] = [ Sc * (1 - Da)  + Dc, Sa * (1 - Da) + Da ] ;
1446*4882a593Smuzhiyun
1447*4882a593Smuzhiyun【注意】图像合成模式不支持YUV格式之间合成,imblend函数dst图像不支持YUV格式,imcomposite函数srcB图像不支持YUV格式。
1448*4882a593Smuzhiyun
1449*4882a593Smuzhiyun| Parameter        | Description                                                  |
1450*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1451*4882a593Smuzhiyun| fg_image         | **[required]** foreground image                              |
1452*4882a593Smuzhiyun| bg_image         | **[required]** background image, when A+B->B it is also the output destination image. |
1453*4882a593Smuzhiyun| output_image     | **[required]** output destination image.                     |
1454*4882a593Smuzhiyun| mode             | **[optional]** blending mode:<br/>IM_ALPHA_BLEND_SRC —— SRC模式<br/>IM_ALPHA_BLEND_DST —— DST模式  <br/>IM_ALPHA_BLEND_SRC_OVER —— SRC OVER模式<br/>IM_ALPHA_BLEND_DST_OVER —— DST OVER模式<br />IM_ALPHA_BLEND_PRE_MUL —— 预乘使能,当需要预乘时须将该标识与其他模式标识进行或处理,再赋值给mode |
1455*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1456*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1457*4882a593Smuzhiyun
1458*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1459*4882a593Smuzhiyun
1460*4882a593Smuzhiyun
1461*4882a593Smuzhiyun
1462*4882a593Smuzhiyun#### imblendTask/imcompositeTask
1463*4882a593Smuzhiyun
1464*4882a593Smuzhiyun```c++
1465*4882a593SmuzhiyunIM_API IM_STATUS imblendTask(im_job_handle_t job_handle,
1466*4882a593Smuzhiyun                             const rga_buffer_t fg_image,
1467*4882a593Smuzhiyun                             rga_buffer_t bg_image,
1468*4882a593Smuzhiyun                             int mode = IM_ALPHA_BLEND_SRC_OVER);
1469*4882a593Smuzhiyun```
1470*4882a593Smuzhiyun
1471*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加A+B -> B模式的图像合成操作,用法和imblend一致,当没有配置混合模式时则默认设置为src-over模式。
1472*4882a593Smuzhiyun
1473*4882a593Smuzhiyun```c++
1474*4882a593SmuzhiyunIM_API IM_STATUS imcompositeTask(im_job_handle_t job_handle,
1475*4882a593Smuzhiyun                                 const rga_buffer_t fg_image,
1476*4882a593Smuzhiyun                                 const rga_buffer_t bg_image,
1477*4882a593Smuzhiyun                                 rga_buffer_t output_image,
1478*4882a593Smuzhiyun                                 int mode = IM_ALPHA_BLEND_SRC_OVER);
1479*4882a593Smuzhiyun```
1480*4882a593Smuzhiyun
1481*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加A+B -> C模式的图像合成操作,用法和imcomposite一致,当没有配置混合模式时则默认设置为src-over模式。
1482*4882a593Smuzhiyun
1483*4882a593Smuzhiyun【注意】图像合成模式不支持YUV格式之间合成,imblend函数dst图像不支持YUV格式,imcomposite函数srcB图像不支持YUV格式。
1484*4882a593Smuzhiyun
1485*4882a593Smuzhiyun| Parameter    | Description                                                  |
1486*4882a593Smuzhiyun| ------------ | ------------------------------------------------------------ |
1487*4882a593Smuzhiyun| job_handle   | **[required]** job handle                                    |
1488*4882a593Smuzhiyun| fg_image     | **[required]** foreground image                              |
1489*4882a593Smuzhiyun| bg_image     | **[required]** background image, when A+B->B it is also the output destination image. |
1490*4882a593Smuzhiyun| output_image | **[required]** output destination image.                     |
1491*4882a593Smuzhiyun| mode         | **[optional]** blending mode:<br/>IM_ALPHA_BLEND_SRC —— SRC模式<br/>IM_ALPHA_BLEND_DST —— DST模式  <br/>IM_ALPHA_BLEND_SRC_OVER —— SRC OVER模式<br/>IM_ALPHA_BLEND_DST_OVER —— DST OVER模式<br />IM_ALPHA_BLEND_PRE_MUL —— 预乘使能,当需要预乘时须将该标识与其他模式标识进行或处理,再赋值给mode |
1492*4882a593Smuzhiyun
1493*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1494*4882a593Smuzhiyun
1495*4882a593Smuzhiyun
1496*4882a593Smuzhiyun
1497*4882a593Smuzhiyun### 色键(Color Key)
1498*4882a593Smuzhiyun
1499*4882a593Smuzhiyun#### imcolorkey
1500*4882a593Smuzhiyun
1501*4882a593Smuzhiyun```C++
1502*4882a593SmuzhiyunIM_STATUS imcolorkey(const rga_buffer_t src,
1503*4882a593Smuzhiyun                     rga_buffer_t dst,
1504*4882a593Smuzhiyun                     im_colorkey_range range,
1505*4882a593Smuzhiyun                     int mode = IM_ALPHA_COLORKEY_NORMAL,
1506*4882a593Smuzhiyun                     int sync = 1,
1507*4882a593Smuzhiyun                     int *release_fence_fd = NULL);
1508*4882a593Smuzhiyun```
1509*4882a593Smuzhiyun
1510*4882a593Smuzhiyun> Color Key技术是对源图像进行预处理,将符合色键过滤条件的像素的alpha分量置零,其中所述色键过滤条件为非透明的颜色值,并将预处理后的源图像与目标图像进行alpha混合模式。
1511*4882a593Smuzhiyun>
1512*4882a593Smuzhiyun> 该模式仅支持在源图像(src)区域的图像上针对设定的颜色范围实现Color Key功能,并叠加在目标图像(dst)区域上。
1513*4882a593Smuzhiyun
1514*4882a593Smuzhiyun> IM_ALPHA_COLORKEY_NORMAL为正常模式,即在设定的颜色范围内的颜色作为过滤条件,在该色彩范围内的像素点Alpha分量清零,IM_ALPHA_COLORKEY_INVERTED则反之,当没有配置模式时则默认设置为IM_ALPHA_COLORKEY_NORMAL模式。
1515*4882a593Smuzhiyun
1516*4882a593Smuzhiyun| **Parameters** | **Range**        | **Description**                           |
1517*4882a593Smuzhiyun| -------------- | ---------------- | ----------------------------------------- |
1518*4882a593Smuzhiyun| max            | 0x0 ~ 0xFFFFFFFF | 需要消去/抠取的颜色范围最大值,排列为ABGR |
1519*4882a593Smuzhiyun| min            | 0x0 ~ 0xFFFFFFFF | 需要消去/抠取的颜色范围最小值,排列为ABGR |
1520*4882a593Smuzhiyun
1521*4882a593Smuzhiyun| parameter        | Description                                                  |
1522*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1523*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1524*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1525*4882a593Smuzhiyun| range            | **[required]** Target color range<br/>typedef struct im_colorkey_range {<br/>    int max;<br/>    int min;<br/>} im_colorkey_value; |
1526*4882a593Smuzhiyun| Mode             | **[required]** Color Key mode:<br/>IM_ALPHA_COLORKEY_NORMAL<br/>IM_ALPHA_COLORKEY_INVERTED |
1527*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1528*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1529*4882a593Smuzhiyun
1530*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS  on success or else negative error code.
1531*4882a593Smuzhiyun
1532*4882a593Smuzhiyun
1533*4882a593Smuzhiyun
1534*4882a593Smuzhiyun#### imcolorkeyTask
1535*4882a593Smuzhiyun
1536*4882a593Smuzhiyun```C++
1537*4882a593SmuzhiyunIM_API IM_STATUS imcolorkeyTask(im_job_handle_t job_handle,
1538*4882a593Smuzhiyun                                const rga_buffer_t fg_image,
1539*4882a593Smuzhiyun                                rga_buffer_t bg_image,
1540*4882a593Smuzhiyun                                im_colorkey_range range,
1541*4882a593Smuzhiyun                                int mode = IM_ALPHA_COLORKEY_NORMAL);
1542*4882a593Smuzhiyun```
1543*4882a593Smuzhiyun
1544*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像Color Key操作,用法和imcolorkey一致,当没有配置模式时则默认设置为IM_ALPHA_COLORKEY_NORMAL模式。
1545*4882a593Smuzhiyun
1546*4882a593Smuzhiyun| **Parameters** | **Range**        | **Description**                           |
1547*4882a593Smuzhiyun| -------------- | ---------------- | ----------------------------------------- |
1548*4882a593Smuzhiyun| max            | 0x0 ~ 0xFFFFFFFF | 需要消去/抠取的颜色范围最大值,排列为ABGR |
1549*4882a593Smuzhiyun| min            | 0x0 ~ 0xFFFFFFFF | 需要消去/抠取的颜色范围最小值,排列为ABGR |
1550*4882a593Smuzhiyun
1551*4882a593Smuzhiyun| parameter  | Description                                                  |
1552*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1553*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1554*4882a593Smuzhiyun| src        | **[required]** input image                                   |
1555*4882a593Smuzhiyun| dst        | **[required]** output image                                  |
1556*4882a593Smuzhiyun| range      | **[required]** Target color range<br/>typedef struct im_colorkey_range {<br/>    int max;<br/>    int min;<br/>} im_colorkey_value; |
1557*4882a593Smuzhiyun| Mode       | **[required]** Color Key mode:<br/>IM_ALPHA_COLORKEY_NORMAL<br/>IM_ALPHA_COLORKEY_INVERTED |
1558*4882a593Smuzhiyun
1559*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS  on success or else negative error code.
1560*4882a593Smuzhiyun
1561*4882a593Smuzhiyun
1562*4882a593Smuzhiyun
1563*4882a593Smuzhiyun### 图像字幕叠加(OSD)
1564*4882a593Smuzhiyun
1565*4882a593Smuzhiyun#### imosd
1566*4882a593Smuzhiyun
1567*4882a593Smuzhiyun```c++
1568*4882a593SmuzhiyunIM_API IM_STATUS imosd(const rga_buffer_t osd,
1569*4882a593Smuzhiyun                       const rga_buffer_t bg_image,
1570*4882a593Smuzhiyun                       const im_rect osd_rect,
1571*4882a593Smuzhiyun                       im_osd_t *osd_config,
1572*4882a593Smuzhiyun                       int sync = 1,
1573*4882a593Smuzhiyun                       int *release_fence_fd = NULL);
1574*4882a593Smuzhiyun```
1575*4882a593Smuzhiyun
1576*4882a593Smuzhiyun> OSD(On-Screen-Display)功能,可以将文字信息叠加在视频图片上,并对字体进行亮度统计、自动反色功能。
1577*4882a593Smuzhiyun
1578*4882a593Smuzhiyun| parameter        | Description                                                  |
1579*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1580*4882a593Smuzhiyun| OSD              | **[required]** osd block image                               |
1581*4882a593Smuzhiyun| bg_image         | **[required]** output image                                  |
1582*4882a593Smuzhiyun| osd_rect         | **[required]** image region to OSD                           |
1583*4882a593Smuzhiyun| osd_config       | **[required]** OSD function config                           |
1584*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1585*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1586*4882a593Smuzhiyun
1587*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS  on success or else negative error code.
1588*4882a593Smuzhiyun
1589*4882a593Smuzhiyun
1590*4882a593Smuzhiyun
1591*4882a593Smuzhiyun#### imosdTask
1592*4882a593Smuzhiyun
1593*4882a593Smuzhiyun```c++
1594*4882a593SmuzhiyunIM_API IM_STATUS imosdTask(im_job_handle_t job_handle,
1595*4882a593Smuzhiyun                           const rga_buffer_t osd,
1596*4882a593Smuzhiyun                           const rga_buffer_t bg_image,
1597*4882a593Smuzhiyun                           const im_rect osd_rect,
1598*4882a593Smuzhiyun                           im_osd_t *osd_config);
1599*4882a593Smuzhiyun```
1600*4882a593Smuzhiyun
1601*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像OSD操作,用法和imosd一致。
1602*4882a593Smuzhiyun
1603*4882a593Smuzhiyun| parameter  | Description                        |
1604*4882a593Smuzhiyun| ---------- | ---------------------------------- |
1605*4882a593Smuzhiyun| job_handle | **[required]** job handle          |
1606*4882a593Smuzhiyun| OSD        | **[required]** osd block image     |
1607*4882a593Smuzhiyun| dst        | **[required]** output image        |
1608*4882a593Smuzhiyun| osd_rect   | **[required]** image region to OSD |
1609*4882a593Smuzhiyun| osd_config | **[required]** OSD function config |
1610*4882a593Smuzhiyun
1611*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS  on success or else negative error code.
1612*4882a593Smuzhiyun
1613*4882a593Smuzhiyun
1614*4882a593Smuzhiyun
1615*4882a593Smuzhiyun### NN运算点前处理(量化)
1616*4882a593Smuzhiyun
1617*4882a593Smuzhiyun#### imquantize
1618*4882a593Smuzhiyun
1619*4882a593Smuzhiyun```c++
1620*4882a593SmuzhiyunIM_STATUS imquantize(const rga_buffer_t src,
1621*4882a593Smuzhiyun                     rga_buffer_t dst,
1622*4882a593Smuzhiyun                     rga_nn_t nn_info,
1623*4882a593Smuzhiyun                     int sync = 1,
1624*4882a593Smuzhiyun                     int *release_fence_fd = NULL);
1625*4882a593Smuzhiyun```
1626*4882a593Smuzhiyun
1627*4882a593Smuzhiyun> 目前仅RV1126 / RV1109上支持。NN运算点前处理,图像RGB 三个通道可以分开单独配置offset以及scale。
1628*4882a593Smuzhiyun
1629*4882a593Smuzhiyun公式:
1630*4882a593Smuzhiyun
1631*4882a593Smuzhiyun```
1632*4882a593Smuzhiyundst = 【(src + offset) * scale 】
1633*4882a593Smuzhiyun```
1634*4882a593Smuzhiyun
1635*4882a593Smuzhiyun参数范围:
1636*4882a593Smuzhiyun
1637*4882a593Smuzhiyun| **Parameters** | **Range**  | **Description**                                              |
1638*4882a593Smuzhiyun| -------------- | ---------- | ------------------------------------------------------------ |
1639*4882a593Smuzhiyun| **scale**      | 0 ~ 3.99   | 10bit,从左往右,高位2个bit 表示整数部分,低位8bit表示小数部分 |
1640*4882a593Smuzhiyun| **offset**     | -255 ~ 255 | 9bit,从左往右,高位表示符号位,地位表示0~255的偏移量       |
1641*4882a593Smuzhiyun
1642*4882a593Smuzhiyun| parameter        | Description                                                  |
1643*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1644*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1645*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1646*4882a593Smuzhiyun| nn_info          | **[required]** rga_nn_t结构体对RGB三个通道offset及scale进行单独配置<br />typedef struct rga_nn { <br/>  int nn_flag;<br/>  int scale_r;<br/>  int scale_g;<br/>  int scale_b;<br/>  int offset_r;<br/>  int offset_g;<br/>  int offset_b;<br/>} rga_nn_t; |
1647*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1648*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1649*4882a593Smuzhiyun
1650*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1651*4882a593Smuzhiyun
1652*4882a593Smuzhiyun
1653*4882a593Smuzhiyun
1654*4882a593Smuzhiyun#### imquantizeTask
1655*4882a593Smuzhiyun
1656*4882a593Smuzhiyun```c++
1657*4882a593SmuzhiyunIM_API IM_STATUS imquantizeTask(im_job_handle_t job_handle,
1658*4882a593Smuzhiyun                                const rga_buffer_t src,
1659*4882a593Smuzhiyun                                rga_buffer_t dst,
1660*4882a593Smuzhiyun                                im_nn_t nn_info);
1661*4882a593Smuzhiyun```
1662*4882a593Smuzhiyun
1663*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像量化操作,用法和imquantize一致。
1664*4882a593Smuzhiyun
1665*4882a593Smuzhiyun| parameter  | Description                                                  |
1666*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1667*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1668*4882a593Smuzhiyun| src        | **[required]** input image                                   |
1669*4882a593Smuzhiyun| dst        | **[required]** output image                                  |
1670*4882a593Smuzhiyun| nn_info    | **[required]** rga_nn_t结构体对RGB三个通道offset及scale进行单独配置<br />typedef struct rga_nn { <br/>  int nn_flag;<br/>  int scale_r;<br/>  int scale_g;<br/>  int scale_b;<br/>  int offset_r;<br/>  int offset_g;<br/>  int offset_b;<br/>} rga_nn_t; |
1671*4882a593Smuzhiyun
1672*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1673*4882a593Smuzhiyun
1674*4882a593Smuzhiyun
1675*4882a593Smuzhiyun
1676*4882a593Smuzhiyun### 图像光栅操作 ROP
1677*4882a593Smuzhiyun
1678*4882a593Smuzhiyun#### imrop
1679*4882a593Smuzhiyun
1680*4882a593Smuzhiyun```C++
1681*4882a593SmuzhiyunIM_STATUS imrop(const rga_buffer_t src,
1682*4882a593Smuzhiyun                rga_buffer_t dst,
1683*4882a593Smuzhiyun                int rop_code,
1684*4882a593Smuzhiyun                int sync = 1,
1685*4882a593Smuzhiyun                int *release_fence_fd = NULL);
1686*4882a593Smuzhiyun```
1687*4882a593Smuzhiyun
1688*4882a593Smuzhiyun> 对两个图形做ROP运算
1689*4882a593Smuzhiyun
1690*4882a593Smuzhiyun| parameter        | Description                                                  |
1691*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1692*4882a593Smuzhiyun| src              | **[required]** input image                                   |
1693*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
1694*4882a593Smuzhiyun| rop_code         | **[required]** rop code mode <br /><br/> IM_ROP_AND : dst = dst **AND** src;<br/> IM_ROP_OR : dst = dst **OR** src <br/> IM_ROP_NOT_DST : dst = **NOT** dst<br/> IM_ROP_NOT_SRC : dst = **NOT** src<br/> IM_ROP_XOR : dst = dst **XOR** src<br/> IM_ROP_NOT_XOR : dst = **NOT** (dst **XOR** src)<br/> |
1695*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1696*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1697*4882a593Smuzhiyun
1698*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1699*4882a593Smuzhiyun
1700*4882a593Smuzhiyun
1701*4882a593Smuzhiyun
1702*4882a593Smuzhiyun#### imropTask
1703*4882a593Smuzhiyun
1704*4882a593Smuzhiyun```C++
1705*4882a593SmuzhiyunIM_API IM_STATUS imropTask(im_job_handle_t job_handle,
1706*4882a593Smuzhiyun                           const rga_buffer_t src,
1707*4882a593Smuzhiyun                           rga_buffer_t dst,
1708*4882a593Smuzhiyun                           int rop_code);
1709*4882a593Smuzhiyun```
1710*4882a593Smuzhiyun
1711*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像ROP运算操作,用法和imrop一致。
1712*4882a593Smuzhiyun
1713*4882a593Smuzhiyun| parameter  | Description                                                  |
1714*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1715*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1716*4882a593Smuzhiyun| src        | **[required]** input image                                   |
1717*4882a593Smuzhiyun| dst        | **[required]** output image                                  |
1718*4882a593Smuzhiyun| rop_code   | **[required]** rop code mode <br /><br/> IM_ROP_AND : dst = dst **AND** src;<br/> IM_ROP_OR : dst = dst **OR** src <br/> IM_ROP_NOT_DST : dst = **NOT** dst<br/> IM_ROP_NOT_SRC : dst = **NOT** src<br/> IM_ROP_XOR : dst = dst **XOR** src<br/> IM_ROP_NOT_XOR : dst = **NOT** (dst **XOR** src) |
1719*4882a593Smuzhiyun
1720*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1721*4882a593Smuzhiyun
1722*4882a593Smuzhiyun
1723*4882a593Smuzhiyun
1724*4882a593Smuzhiyun### 图像颜色填充、边框绘制
1725*4882a593Smuzhiyun
1726*4882a593Smuzhiyun#### imfill
1727*4882a593Smuzhiyun
1728*4882a593Smuzhiyun```C++
1729*4882a593SmuzhiyunIM_STATUS imfill(rga_buffer_t dst,
1730*4882a593Smuzhiyun                 im_rect rect,
1731*4882a593Smuzhiyun                 int color,
1732*4882a593Smuzhiyun                 int sync = 1,
1733*4882a593Smuzhiyun                 int *release_fence_fd = NULL);
1734*4882a593Smuzhiyun```
1735*4882a593Smuzhiyun
1736*4882a593Smuzhiyun> 对图像的指定区域rect进行颜色填充。
1737*4882a593Smuzhiyun>
1738*4882a593Smuzhiyun> color参数按照RGBA格式填写颜色值,由高到低位分别是A,B,G,R,例如,红色:color = 0x000000ff.
1739*4882a593Smuzhiyun
1740*4882a593Smuzhiyun【注意】填充区域rect宽高须大于或等于2
1741*4882a593Smuzhiyun
1742*4882a593Smuzhiyun| Parameter        | Description                                                  |
1743*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1744*4882a593Smuzhiyun| dst              | **[required]** target image                                  |
1745*4882a593Smuzhiyun| rect             | **[required]** image region to fill specified color<br/>width and height of rect must be greater than or equal to 2 |
1746*4882a593Smuzhiyun| color            | **[required]** fill with color                               |
1747*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1748*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1749*4882a593Smuzhiyun
1750*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1751*4882a593Smuzhiyun
1752*4882a593Smuzhiyun
1753*4882a593Smuzhiyun
1754*4882a593Smuzhiyun#### imfillArray
1755*4882a593Smuzhiyun
1756*4882a593Smuzhiyun```C++
1757*4882a593SmuzhiyunIM_API IM_STATUS imfillArray(rga_buffer_t dst,
1758*4882a593Smuzhiyun                             im_rect *rect_array,
1759*4882a593Smuzhiyun                             int array_size,
1760*4882a593Smuzhiyun                             uint32_t color,
1761*4882a593Smuzhiyun                             int sync = 1,
1762*4882a593Smuzhiyun                             int *release_fence_fd = NULL);
1763*4882a593Smuzhiyun```
1764*4882a593Smuzhiyun
1765*4882a593Smuzhiyun> 对图像的多个区域逐个进行颜色填充。
1766*4882a593Smuzhiyun>
1767*4882a593Smuzhiyun> color参数按照RGBA格式填写颜色值,由高到低位分别是A,B,G,R,例如,红色:color = 0x000000ff.
1768*4882a593Smuzhiyun
1769*4882a593Smuzhiyun【注意】填充区域rect宽高须大于或等于2
1770*4882a593Smuzhiyun
1771*4882a593Smuzhiyun| Parameter        | Description                                                  |
1772*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1773*4882a593Smuzhiyun| dst              | **[required]** target image                                  |
1774*4882a593Smuzhiyun| rect_array       | **[required]** image region array_ptr to fill specified color<br/>width and height of rect must be greater than or equal to 2 |
1775*4882a593Smuzhiyun| array_size       | **[required]** size of region arrays.                        |
1776*4882a593Smuzhiyun| color            | **[required]** fill with color                               |
1777*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1778*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1779*4882a593Smuzhiyun
1780*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1781*4882a593Smuzhiyun
1782*4882a593Smuzhiyun
1783*4882a593Smuzhiyun
1784*4882a593Smuzhiyun#### imfillTask
1785*4882a593Smuzhiyun
1786*4882a593Smuzhiyun```C++
1787*4882a593SmuzhiyunIM_API IM_STATUS imfillTask(im_job_handle_t job_handle,
1788*4882a593Smuzhiyun                            rga_buffer_t dst,
1789*4882a593Smuzhiyun                            im_rect rect,
1790*4882a593Smuzhiyun                            uint32_t color);
1791*4882a593Smuzhiyun```
1792*4882a593Smuzhiyun
1793*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像填充操作,用法和imfill一致。
1794*4882a593Smuzhiyun
1795*4882a593Smuzhiyun【注意】填充区域rect宽高须大于或等于2
1796*4882a593Smuzhiyun
1797*4882a593Smuzhiyun| Parameter  | Description                                                  |
1798*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1799*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1800*4882a593Smuzhiyun| dst        | **[required]** target image                                  |
1801*4882a593Smuzhiyun| rect       | **[required]** image region to fill specified color<br/>width and height of rect must be greater than or equal to 2 |
1802*4882a593Smuzhiyun| color      | **[required]** fill with color                               |
1803*4882a593Smuzhiyun
1804*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1805*4882a593Smuzhiyun
1806*4882a593Smuzhiyun
1807*4882a593Smuzhiyun
1808*4882a593Smuzhiyun#### imfillTaskArray
1809*4882a593Smuzhiyun
1810*4882a593Smuzhiyun```C++
1811*4882a593SmuzhiyunIM_API IM_STATUS imfillTaskArray(im_job_handle_t job_handle,
1812*4882a593Smuzhiyun                                 rga_buffer_t dst,
1813*4882a593Smuzhiyun                                 im_rect *rect_array,
1814*4882a593Smuzhiyun                                 int array_size,
1815*4882a593Smuzhiyun                                 uint32_t color);
1816*4882a593Smuzhiyun```
1817*4882a593Smuzhiyun
1818*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加对图像多个区域进行颜色填充的操作,用法和imfillArray一致。
1819*4882a593Smuzhiyun
1820*4882a593Smuzhiyun【注意】填充区域rect宽高须大于或等于2
1821*4882a593Smuzhiyun
1822*4882a593Smuzhiyun| Parameter  | Description                                                  |
1823*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1824*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1825*4882a593Smuzhiyun| dst        | **[required]** target image                                  |
1826*4882a593Smuzhiyun| rect_array | **[required]** image region array_ptr to fill specified color<br/>width and height of rect must be greater than or equal to 2 |
1827*4882a593Smuzhiyun| array_size | **[required]** size of region arrays.                        |
1828*4882a593Smuzhiyun| color      | **[required]** fill with color                               |
1829*4882a593Smuzhiyun
1830*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1831*4882a593Smuzhiyun
1832*4882a593Smuzhiyun
1833*4882a593Smuzhiyun
1834*4882a593Smuzhiyun#### imrectangle
1835*4882a593Smuzhiyun
1836*4882a593Smuzhiyun```C++
1837*4882a593SmuzhiyunIM_API IM_STATUS imrectangle(rga_buffer_t dst,
1838*4882a593Smuzhiyun                             im_rect rect,
1839*4882a593Smuzhiyun                             uint32_t color,
1840*4882a593Smuzhiyun                             int thickness,
1841*4882a593Smuzhiyun                             int sync = 1,
1842*4882a593Smuzhiyun                             int *release_fence_fd = NULL);
1843*4882a593Smuzhiyun```
1844*4882a593Smuzhiyun
1845*4882a593Smuzhiyun> 对图像的指定区域rect(描述为边框外径)根据指定颜色color进行绘制粗细为thickness的边框,当thickness为负时填充一个实心的矩形。
1846*4882a593Smuzhiyun>
1847*4882a593Smuzhiyun> color参数按照RGBA格式填写颜色值,由高到低位分别是A,B,G,R,例如,红色:color = 0x000000ff.
1848*4882a593Smuzhiyun
1849*4882a593Smuzhiyun【注意】填充区域rect宽高须大于或等于2
1850*4882a593Smuzhiyun
1851*4882a593Smuzhiyun| Parameter        | Description                                                  |
1852*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1853*4882a593Smuzhiyun| dst              | **[required]** target image                                  |
1854*4882a593Smuzhiyun| rect             | **[required]** image region to fill specified color<br/>width and height of rect must be greater than or equal to 2 |
1855*4882a593Smuzhiyun| color            | **[required]** fill with color                               |
1856*4882a593Smuzhiyun| thickness        | **[required]** Thickness of lines that make up the rectangle.<br/>Negative values, like -1, mean that the function has to draw a filled rectangle. |
1857*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1858*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1859*4882a593Smuzhiyun
1860*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1861*4882a593Smuzhiyun
1862*4882a593Smuzhiyun
1863*4882a593Smuzhiyun
1864*4882a593Smuzhiyun#### imrectangleArray
1865*4882a593Smuzhiyun
1866*4882a593Smuzhiyun```C++
1867*4882a593SmuzhiyunIM_API IM_STATUS imrectangleArray(rga_buffer_t dst,
1868*4882a593Smuzhiyun                                  im_rect *rect_array,
1869*4882a593Smuzhiyun                                  int array_size,
1870*4882a593Smuzhiyun                                  uint32_t color,
1871*4882a593Smuzhiyun                                  int thickness,
1872*4882a593Smuzhiyun                                  int sync = 1,
1873*4882a593Smuzhiyun                                  int *release_fence_fd = NULL);
1874*4882a593Smuzhiyun```
1875*4882a593Smuzhiyun
1876*4882a593Smuzhiyun> 对图像的多个指定区域rect(描述为边框外径)逐个根据指定颜色color进行绘制粗细为thickness的边框,当thickness为负时填充一个实心的矩形。
1877*4882a593Smuzhiyun>
1878*4882a593Smuzhiyun> color参数按照RGBA格式填写颜色值,由高到低位分别是A,B,G,R,例如,红色:color = 0x000000ff.
1879*4882a593Smuzhiyun
1880*4882a593Smuzhiyun【注意】填充区域rect宽高须大于或等于2
1881*4882a593Smuzhiyun
1882*4882a593Smuzhiyun| Parameter        | Description                                                  |
1883*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1884*4882a593Smuzhiyun| dst              | **[required]** target image                                  |
1885*4882a593Smuzhiyun| rect_array       | **[required]** image region array_ptr to fill specified color<br/>width and height of rect must be greater than or equal to 2 |
1886*4882a593Smuzhiyun| array_size       | **[required]** size of region arrays.                        |
1887*4882a593Smuzhiyun| color            | **[required]** fill with color                               |
1888*4882a593Smuzhiyun| thickness        | **[required]** Thickness of lines that make up the rectangle.<br/>Negative values, like -1, mean that the function has to draw a filled rectangle. |
1889*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1890*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
1891*4882a593Smuzhiyun
1892*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1893*4882a593Smuzhiyun
1894*4882a593Smuzhiyun
1895*4882a593Smuzhiyun
1896*4882a593Smuzhiyun#### imrectangleTask
1897*4882a593Smuzhiyun
1898*4882a593Smuzhiyun```C++
1899*4882a593SmuzhiyunIM_API IM_STATUS imrectangleTask(im_job_handle_t job_handle,
1900*4882a593Smuzhiyun                                 rga_buffer_t dst,
1901*4882a593Smuzhiyun                                 im_rect rect,
1902*4882a593Smuzhiyun                                 uint32_t color,
1903*4882a593Smuzhiyun                                 int thickness);
1904*4882a593Smuzhiyun```
1905*4882a593Smuzhiyun
1906*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像填充矩形边框操作,用法和imrectangle一致。
1907*4882a593Smuzhiyun
1908*4882a593Smuzhiyun【注意】填充区域rect宽高须大于或等于2
1909*4882a593Smuzhiyun
1910*4882a593Smuzhiyun| Parameter  | Description                                                  |
1911*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1912*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1913*4882a593Smuzhiyun| dst        | **[required]** target image                                  |
1914*4882a593Smuzhiyun| rect       | **[required]** image region to fill specified color<br/>width and height of rect must be greater than or equal to 2 |
1915*4882a593Smuzhiyun| color      | **[required]** fill with color                               |
1916*4882a593Smuzhiyun| thickness  | **[required]** Thickness of lines that make up the rectangle.<br/>Negative values, like -1, mean that the function has to draw a filled rectangle. |
1917*4882a593Smuzhiyun
1918*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1919*4882a593Smuzhiyun
1920*4882a593Smuzhiyun
1921*4882a593Smuzhiyun
1922*4882a593Smuzhiyun#### imrectangleTaskArray
1923*4882a593Smuzhiyun
1924*4882a593Smuzhiyun```C++
1925*4882a593SmuzhiyunIM_API IM_STATUS imrectangleTaskArray(im_job_handle_t job_handle,
1926*4882a593Smuzhiyun                                      rga_buffer_t dst,
1927*4882a593Smuzhiyun                                      im_rect *rect_array,
1928*4882a593Smuzhiyun                                      int array_size,
1929*4882a593Smuzhiyun                                      uint32_t color,
1930*4882a593Smuzhiyun                                      int thickness);
1931*4882a593Smuzhiyun```
1932*4882a593Smuzhiyun
1933*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加对图像绘制多个矩形边框的操作,用法和imrectangleArray一致。
1934*4882a593Smuzhiyun
1935*4882a593Smuzhiyun【注意】填充区域rect宽高须大于或等于2
1936*4882a593Smuzhiyun
1937*4882a593Smuzhiyun| Parameter  | Description                                                  |
1938*4882a593Smuzhiyun| ---------- | ------------------------------------------------------------ |
1939*4882a593Smuzhiyun| job_handle | **[required]** job handle                                    |
1940*4882a593Smuzhiyun| dst        | **[required]** target image                                  |
1941*4882a593Smuzhiyun| rect_array | **[required]** image region array_ptr to fill specified color<br/>width and height of rect must be greater than or equal to 2 |
1942*4882a593Smuzhiyun| array_size | **[required]** size of region arrays.                        |
1943*4882a593Smuzhiyun| color      | **[required]** fill with color                               |
1944*4882a593Smuzhiyun| thickness  | **[required]** Thickness of lines that make up the rectangle.<br/>Negative values, like -1, mean that the function has to draw a filled rectangle. |
1945*4882a593Smuzhiyun
1946*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1947*4882a593Smuzhiyun
1948*4882a593Smuzhiyun
1949*4882a593Smuzhiyun
1950*4882a593Smuzhiyun#### immakeBorder
1951*4882a593Smuzhiyun
1952*4882a593Smuzhiyun```C++
1953*4882a593SmuzhiyunIM_API IM_STATUS immakeBorder(rga_buffer_t src,
1954*4882a593Smuzhiyun                              rga_buffer_t dst,
1955*4882a593Smuzhiyun                              int top,
1956*4882a593Smuzhiyun                              int bottom,
1957*4882a593Smuzhiyun                              int left,
1958*4882a593Smuzhiyun                              int right,
1959*4882a593Smuzhiyun                              int border_type,
1960*4882a593Smuzhiyun                              int value = 0,
1961*4882a593Smuzhiyun                              int sync = 1,
1962*4882a593Smuzhiyun                              int acquir_fence_fd = -1,
1963*4882a593Smuzhiyun                              int *release_fence_fd = NULL);
1964*4882a593Smuzhiyun```
1965*4882a593Smuzhiyun
1966*4882a593Smuzhiyun> 根据配置的top/bottom/left/right像素数,对输入图像绘制边框后,输出到输出的目标图像缓冲区上。
1967*4882a593Smuzhiyun
1968*4882a593Smuzhiyun【注意】top/bottom/left/right值须大于或等于2
1969*4882a593Smuzhiyun
1970*4882a593Smuzhiyun| Parameter        | Description                                                  |
1971*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
1972*4882a593Smuzhiyun| src              | **[required]** input source image                            |
1973*4882a593Smuzhiyun| dst              | **[required]** output target image                           |
1974*4882a593Smuzhiyun| top              | **[required]** number of top pixels                          |
1975*4882a593Smuzhiyun| bottom           | **[required]** number of bottom pixels                       |
1976*4882a593Smuzhiyun| left             | **[required]** number of left pixels                         |
1977*4882a593Smuzhiyun| right            | **[required] **number of right pixels                        |
1978*4882a593Smuzhiyun| border_type      | **[required]** Border type<br/>IM_BORDER_CONSTANT // iiiiii abcdefgh iiiiiii with some specified value 'i' <br/>IM_BORDER_REFLECT     //fedcba abcdefgh hgfedcb<br/>IM_BORDER_WRAP         //cdefgh abcdefgh abcdefg |
1979*4882a593Smuzhiyun| value            | **[optional]** the pixel value at which the border is filled |
1980*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
1981*4882a593Smuzhiyun| acquire_fence_fd | **[required]** used in async mode, run the job after waiting foracquire_fence signal |
1982*4882a593Smuzhiyun| release_fence_fd | **[required]** used in async mode, as a parameter of imsync() |
1983*4882a593Smuzhiyun
1984*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
1985*4882a593Smuzhiyun
1986*4882a593Smuzhiyun
1987*4882a593Smuzhiyun
1988*4882a593Smuzhiyun### 图像马赛克
1989*4882a593Smuzhiyun
1990*4882a593Smuzhiyun#### immosaic
1991*4882a593Smuzhiyun
1992*4882a593Smuzhiyun```c++
1993*4882a593SmuzhiyunIM_API IM_STATUS immosaic(const rga_buffer_t image,
1994*4882a593Smuzhiyun                          im_rect rect,
1995*4882a593Smuzhiyun                          int mosaic_mode,
1996*4882a593Smuzhiyun                          int sync = 1,
1997*4882a593Smuzhiyun                          int *release_fence_fd = NULL);
1998*4882a593Smuzhiyun```
1999*4882a593Smuzhiyun
2000*4882a593Smuzhiyun> 对图像指定区域进行马赛克遮盖。
2001*4882a593Smuzhiyun
2002*4882a593Smuzhiyun| Parameter        | Description                                                  |
2003*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
2004*4882a593Smuzhiyun| image            | **[required]** target image                                  |
2005*4882a593Smuzhiyun| rect             | **[required]** image region to mosaic                        |
2006*4882a593Smuzhiyun| mosaic_mode      | **[required]** set mosaic mode<br />    IM_MOSAIC_8<br/>    IM_MOSAIC_16<br/>    IM_MOSAIC_32<br/>    IM_MOSAIC_64<br/>    IM_MOSAIC_128 |
2007*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
2008*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
2009*4882a593Smuzhiyun
2010*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
2011*4882a593Smuzhiyun
2012*4882a593Smuzhiyun
2013*4882a593Smuzhiyun
2014*4882a593Smuzhiyun#### immosaicArray
2015*4882a593Smuzhiyun
2016*4882a593Smuzhiyun```c++
2017*4882a593SmuzhiyunIM_API IM_STATUS immosaicArray(const rga_buffer_t image,
2018*4882a593Smuzhiyun                               im_rect *rect_array,
2019*4882a593Smuzhiyun                               int array_size,
2020*4882a593Smuzhiyun                               int mosaic_mode,
2021*4882a593Smuzhiyun                               int sync = 1,
2022*4882a593Smuzhiyun                               int *release_fence_fd = NULL);
2023*4882a593Smuzhiyun```
2024*4882a593Smuzhiyun
2025*4882a593Smuzhiyun> 对图像的多个区域逐个进行马赛克遮盖。
2026*4882a593Smuzhiyun
2027*4882a593Smuzhiyun| Parameter        | Description                                                  |
2028*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
2029*4882a593Smuzhiyun| image            | **[required]** target image                                  |
2030*4882a593Smuzhiyun| rect_array       | **[required]** image region array_ptr to mosaic              |
2031*4882a593Smuzhiyun| array_size       | **[required]** size of region arrays.                        |
2032*4882a593Smuzhiyun| mosaic_mode      | **[required]** set mosaic mode<br />    IM_MOSAIC_8<br/>    IM_MOSAIC_16<br/>    IM_MOSAIC_32<br/>    IM_MOSAIC_64<br/>    IM_MOSAIC_128 |
2033*4882a593Smuzhiyun| sync             | **[optional]** wait until operation complete                 |
2034*4882a593Smuzhiyun| release_fence_fd | **[optional]**Used in async mode, as a parameter of imsync() |
2035*4882a593Smuzhiyun
2036*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
2037*4882a593Smuzhiyun
2038*4882a593Smuzhiyun
2039*4882a593Smuzhiyun
2040*4882a593Smuzhiyun#### immosaicTask
2041*4882a593Smuzhiyun
2042*4882a593Smuzhiyun```c++
2043*4882a593SmuzhiyunIM_API IM_STATUS immosaicTask(im_job_handle_t job_handle,
2044*4882a593Smuzhiyun                              const rga_buffer_t image,
2045*4882a593Smuzhiyun                              im_rect rect,
2046*4882a593Smuzhiyun                              int mosaic_mode);
2047*4882a593Smuzhiyun```
2048*4882a593Smuzhiyun
2049*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加图像马赛克遮盖操作,用法和immosaic一致。
2050*4882a593Smuzhiyun
2051*4882a593Smuzhiyun| Parameter   | Description                                                  |
2052*4882a593Smuzhiyun| ----------- | ------------------------------------------------------------ |
2053*4882a593Smuzhiyun| job_handle  | **[required]** job handle                                    |
2054*4882a593Smuzhiyun| image       | **[required]** target image                                  |
2055*4882a593Smuzhiyun| rect        | **[required]** image region to mosaic                        |
2056*4882a593Smuzhiyun| mosaic_mode | **[required]** set mosaic mode<br />    IM_MOSAIC_8<br/>    IM_MOSAIC_16<br/>    IM_MOSAIC_32<br/>    IM_MOSAIC_64<br/>    IM_MOSAIC_128 |
2057*4882a593Smuzhiyun
2058*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
2059*4882a593Smuzhiyun
2060*4882a593Smuzhiyun
2061*4882a593Smuzhiyun
2062*4882a593Smuzhiyun#### immosaicTaskArray
2063*4882a593Smuzhiyun
2064*4882a593Smuzhiyun```c++
2065*4882a593SmuzhiyunIM_API IM_STATUS immosaicTaskArray(im_job_handle_t job_handle,
2066*4882a593Smuzhiyun                                   const rga_buffer_t image,
2067*4882a593Smuzhiyun                                   im_rect *rect_array,
2068*4882a593Smuzhiyun                                   int array_size,
2069*4882a593Smuzhiyun                                   int mosaic_mode);
2070*4882a593Smuzhiyun```
2071*4882a593Smuzhiyun
2072*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加对图像多个区域的马赛克遮盖操作,用法和immosaicArray一致。
2073*4882a593Smuzhiyun
2074*4882a593Smuzhiyun| Parameter   | Description                                                  |
2075*4882a593Smuzhiyun| ----------- | ------------------------------------------------------------ |
2076*4882a593Smuzhiyun| job_handle  | **[required]** job handle                                    |
2077*4882a593Smuzhiyun| image       | **[required]** target image                                  |
2078*4882a593Smuzhiyun| rect_array  | **[required]** image region array_ptr to mosaic              |
2079*4882a593Smuzhiyun| array_size  | **[required]** size of region arrays.                        |
2080*4882a593Smuzhiyun| mosaic_mode | **[required]** set mosaic mode<br />    IM_MOSAIC_8<br/>    IM_MOSAIC_16<br/>    IM_MOSAIC_32<br/>    IM_MOSAIC_64<br/>    IM_MOSAIC_128 |
2081*4882a593Smuzhiyun
2082*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
2083*4882a593Smuzhiyun
2084*4882a593Smuzhiyun
2085*4882a593Smuzhiyun
2086*4882a593Smuzhiyun### 图像处理
2087*4882a593Smuzhiyun
2088*4882a593Smuzhiyun#### improcess
2089*4882a593Smuzhiyun
2090*4882a593Smuzhiyun```C++
2091*4882a593SmuzhiyunIM_STATUS improcess(rga_buffer_t src,
2092*4882a593Smuzhiyun                    rga_buffer_t dst,
2093*4882a593Smuzhiyun                    rga_buffer_t pat,
2094*4882a593Smuzhiyun                    im_rect srect,
2095*4882a593Smuzhiyun                    im_rect drect,
2096*4882a593Smuzhiyun                    im_rect prect,
2097*4882a593Smuzhiyun                    int acquire_fence_fd,
2098*4882a593Smuzhiyun                    int *release_fence_fd,
2099*4882a593Smuzhiyun                    im_opt_t *opt,
2100*4882a593Smuzhiyun                    int usage);
2101*4882a593Smuzhiyun```
2102*4882a593Smuzhiyun
2103*4882a593Smuzhiyun> RGA 图像复合操作函数,其他API都是基于此API开发,improcess 可以实现更复杂的复合操作。
2104*4882a593Smuzhiyun>
2105*4882a593Smuzhiyun> 图像操作通过usage 的方式进行配置。
2106*4882a593Smuzhiyun
2107*4882a593Smuzhiyunusage 参照定义:
2108*4882a593Smuzhiyun
2109*4882a593Smuzhiyun```c++
2110*4882a593Smuzhiyuntypedef enum {
2111*4882a593Smuzhiyun    /* Rotation */
2112*4882a593Smuzhiyun    IM_HAL_TRANSFORM_ROT_90     = 1 << 0,
2113*4882a593Smuzhiyun    IM_HAL_TRANSFORM_ROT_180    = 1 << 1,
2114*4882a593Smuzhiyun    IM_HAL_TRANSFORM_ROT_270    = 1 << 2,
2115*4882a593Smuzhiyun    IM_HAL_TRANSFORM_FLIP_H     = 1 << 3,
2116*4882a593Smuzhiyun    IM_HAL_TRANSFORM_FLIP_V     = 1 << 4,
2117*4882a593Smuzhiyun    IM_HAL_TRANSFORM_FLIP_H_V   = 1 << 5,
2118*4882a593Smuzhiyun    IM_HAL_TRANSFORM_MASK       = 0x3f,
2119*4882a593Smuzhiyun
2120*4882a593Smuzhiyun    /*
2121*4882a593Smuzhiyun     * Blend
2122*4882a593Smuzhiyun     * Additional blend usage, can be used with both source and target configs.
2123*4882a593Smuzhiyun     * If none of the below is set, the default "SRC over DST" is applied.
2124*4882a593Smuzhiyun     */
2125*4882a593Smuzhiyun    IM_ALPHA_BLEND_SRC_OVER     = 1 << 6,     /* Default, Porter-Duff "SRC over DST" */
2126*4882a593Smuzhiyun    IM_ALPHA_BLEND_SRC          = 1 << 7,     /* Porter-Duff "SRC" */
2127*4882a593Smuzhiyun    IM_ALPHA_BLEND_DST          = 1 << 8,     /* Porter-Duff "DST" */
2128*4882a593Smuzhiyun    IM_ALPHA_BLEND_SRC_IN       = 1 << 9,     /* Porter-Duff "SRC in DST" */
2129*4882a593Smuzhiyun    IM_ALPHA_BLEND_DST_IN       = 1 << 10,    /* Porter-Duff "DST in SRC" */
2130*4882a593Smuzhiyun    IM_ALPHA_BLEND_SRC_OUT      = 1 << 11,    /* Porter-Duff "SRC out DST" */
2131*4882a593Smuzhiyun    IM_ALPHA_BLEND_DST_OUT      = 1 << 12,    /* Porter-Duff "DST out SRC" */
2132*4882a593Smuzhiyun    IM_ALPHA_BLEND_DST_OVER     = 1 << 13,    /* Porter-Duff "DST over SRC" */
2133*4882a593Smuzhiyun    IM_ALPHA_BLEND_SRC_ATOP     = 1 << 14,    /* Porter-Duff "SRC ATOP" */
2134*4882a593Smuzhiyun    IM_ALPHA_BLEND_DST_ATOP     = 1 << 15,    /* Porter-Duff "DST ATOP" */
2135*4882a593Smuzhiyun    IM_ALPHA_BLEND_XOR          = 1 << 16,    /* Xor */
2136*4882a593Smuzhiyun    IM_ALPHA_BLEND_MASK         = 0x1ffc0,
2137*4882a593Smuzhiyun
2138*4882a593Smuzhiyun    IM_ALPHA_COLORKEY_NORMAL    = 1 << 17,
2139*4882a593Smuzhiyun    IM_ALPHA_COLORKEY_INVERTED  = 1 << 18,
2140*4882a593Smuzhiyun    IM_ALPHA_COLORKEY_MASK      = 0x60000,
2141*4882a593Smuzhiyun
2142*4882a593Smuzhiyun    IM_SYNC                     = 1 << 19,
2143*4882a593Smuzhiyun    IM_ASYNC                    = 1 << 26,
2144*4882a593Smuzhiyun    IM_CROP                     = 1 << 20,    /* Unused */
2145*4882a593Smuzhiyun    IM_COLOR_FILL               = 1 << 21,
2146*4882a593Smuzhiyun    IM_COLOR_PALETTE            = 1 << 22,
2147*4882a593Smuzhiyun    IM_NN_QUANTIZE              = 1 << 23,
2148*4882a593Smuzhiyun    IM_ROP                      = 1 << 24,
2149*4882a593Smuzhiyun    IM_ALPHA_BLEND_PRE_MUL      = 1 << 25,
2150*4882a593Smuzhiyun} IM_USAGE;
2151*4882a593Smuzhiyun```
2152*4882a593Smuzhiyun
2153*4882a593Smuzhiyun| Parameter        | Description                                                  |
2154*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
2155*4882a593Smuzhiyun| src              | **[required]** input imageA                                  |
2156*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
2157*4882a593Smuzhiyun| pat              | **[required]** input imageB                                  |
2158*4882a593Smuzhiyun| srect            | **[required]** src crop region                               |
2159*4882a593Smuzhiyun| drect            | **[required]** dst crop region                               |
2160*4882a593Smuzhiyun| prect            | **[required]** pat crop region                               |
2161*4882a593Smuzhiyun| acquire_fence_fd | **[required]** Used in async mode, run the job after waiting foracquire_fence signal |
2162*4882a593Smuzhiyun| release_fence_fd | **[required]** Used in async mode, as a parameter of imsync() |
2163*4882a593Smuzhiyun| opt              | **[required]** operation options<br/>typedef struct im_opt {<br/>    int color;<br/>    im_colorkey_range colorkey_range; <br/>    im_nn_t nn;<br/>    int rop_code;<br/>     <br/>    int priority;<br/>    int core;<br/>} im_opt_t; |
2164*4882a593Smuzhiyun| usage            | **[required]** image operation usage                         |
2165*4882a593Smuzhiyun
2166*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
2167*4882a593Smuzhiyun
2168*4882a593Smuzhiyun
2169*4882a593Smuzhiyun
2170*4882a593Smuzhiyun#### improcessTask
2171*4882a593Smuzhiyun
2172*4882a593Smuzhiyun```C++
2173*4882a593SmuzhiyunIM_API IM_STATUS improcessTask(im_job_handle_t job_handle,
2174*4882a593Smuzhiyun                               rga_buffer_t src,
2175*4882a593Smuzhiyun                               rga_buffer_t dst,
2176*4882a593Smuzhiyun                               rga_buffer_t pat,
2177*4882a593Smuzhiyun                               im_rect srect,
2178*4882a593Smuzhiyun                               im_rect drect,
2179*4882a593Smuzhiyun                               im_rect prect,
2180*4882a593Smuzhiyun                               im_opt_t *opt_ptr,
2181*4882a593Smuzhiyun                               int usage);
2182*4882a593Smuzhiyun```
2183*4882a593Smuzhiyun
2184*4882a593Smuzhiyun> 通过job_handle向指定的任务中添加复合图像处理操作,用法和improcess一致。
2185*4882a593Smuzhiyun
2186*4882a593Smuzhiyun| Parameter        | Description                                                  |
2187*4882a593Smuzhiyun| ---------------- | ------------------------------------------------------------ |
2188*4882a593Smuzhiyun| job_handle       | **[required]** job handle                                    |
2189*4882a593Smuzhiyun| src              | **[required]** input imageA                                  |
2190*4882a593Smuzhiyun| dst              | **[required]** output image                                  |
2191*4882a593Smuzhiyun| pat              | **[required]** input imageB                                  |
2192*4882a593Smuzhiyun| srect            | **[required]** src crop region                               |
2193*4882a593Smuzhiyun| drect            | **[required]** dst crop region                               |
2194*4882a593Smuzhiyun| prect            | **[required]** pat crop region                               |
2195*4882a593Smuzhiyun| acquire_fence_fd | **[required]** Used in async mode, run the job after waiting foracquire_fence signal |
2196*4882a593Smuzhiyun| release_fence_fd | **[required]** Used in async mode, as a parameter of imsync() |
2197*4882a593Smuzhiyun| opt              | **[required]** operation options<br/>typedef struct im_opt {<br/>    int color;<br/>    im_colorkey_range colorkey_range; <br/>    im_nn_t nn;<br/>    int rop_code;<br/>     <br/>    int priority;<br/>    int core;<br/>} im_opt_t; |
2198*4882a593Smuzhiyun| usage            | **[required]** image operation usage                         |
2199*4882a593Smuzhiyun
2200*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
2201*4882a593Smuzhiyun
2202*4882a593Smuzhiyun
2203*4882a593Smuzhiyun
2204*4882a593Smuzhiyun### 参数校验
2205*4882a593Smuzhiyun
2206*4882a593Smuzhiyun#### imcheck
2207*4882a593Smuzhiyun
2208*4882a593Smuzhiyun```c++
2209*4882a593SmuzhiyunIM_API IM_STATUS imcheck(const rga_buffer_t src, const rga_buffer_t dst,
2210*4882a593Smuzhiyun                         const im_rect src_rect, const im_rect dst_rect,
2211*4882a593Smuzhiyun                         const int mode_usage);
2212*4882a593SmuzhiyunIM_API IM_STATUS imcheck_composite(const rga_buffer_t src, const rga_buffer_t dst, const rga_buffer_t pat,
2213*4882a593Smuzhiyun                                   const im_rect src_rect, const im_rect dst_rect, const im_rect pat_rect,
2214*4882a593Smuzhiyun                                   const int mode_usage);
2215*4882a593Smuzhiyun```
2216*4882a593Smuzhiyun
2217*4882a593Smuzhiyun> 在配置完毕RGA任务参数后,可以通过该接口校验当前参数是否合法,并根据当前硬件情况判断硬件是否支持。
2218*4882a593Smuzhiyun>
2219*4882a593Smuzhiyun> 建议该接口仅在开发调试阶段使用,避免多次校验导致性能损耗。
2220*4882a593Smuzhiyun
2221*4882a593Smuzhiyun| Parameter | Description                          |
2222*4882a593Smuzhiyun| --------- | ------------------------------------ |
2223*4882a593Smuzhiyun| src       | **[required]** input imageA          |
2224*4882a593Smuzhiyun| dst       | **[required]** output image          |
2225*4882a593Smuzhiyun| pat       | **[optional]** input imageB          |
2226*4882a593Smuzhiyun| srect     | **[required]** src crop region       |
2227*4882a593Smuzhiyun| drect     | **[required]** dst crop region       |
2228*4882a593Smuzhiyun| prect     | **[optional]** pat crop region       |
2229*4882a593Smuzhiyun| usage     | **[optional]** image operation usage |
2230*4882a593Smuzhiyun
2231*4882a593Smuzhiyun**Return** IM_STATUS_NOERROR on success or else negative error code.
2232*4882a593Smuzhiyun
2233*4882a593Smuzhiyun
2234*4882a593Smuzhiyun
2235*4882a593Smuzhiyun### 同步操作
2236*4882a593Smuzhiyun
2237*4882a593Smuzhiyun#### imsync
2238*4882a593Smuzhiyun
2239*4882a593Smuzhiyun```C++
2240*4882a593SmuzhiyunIM_STATUS imsync(int fence_fd);
2241*4882a593Smuzhiyun```
2242*4882a593Smuzhiyun
2243*4882a593Smuzhiyun> RGA异步模式需要调用该接口等待操作完成,将返回的release_fence_fd作为传入参数。
2244*4882a593Smuzhiyun>
2245*4882a593Smuzhiyun> 其他API 将 形参sync 设置为0时,使能异步调用模式,效果相当于opengl中的 glFlush,如果进一步调用imsync 可以达到glFinish的效果。
2246*4882a593Smuzhiyun
2247*4882a593Smuzhiyun| Parameter | Description                     |
2248*4882a593Smuzhiyun| --------- | ------------------------------- |
2249*4882a593Smuzhiyun| fence_fd  | **[required]** fence_fd to wait |
2250*4882a593Smuzhiyun
2251*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code.
2252*4882a593Smuzhiyun
2253*4882a593Smuzhiyun
2254*4882a593Smuzhiyun
2255*4882a593Smuzhiyun### 线程上下文配置
2256*4882a593Smuzhiyun
2257*4882a593Smuzhiyun#### imconfig
2258*4882a593Smuzhiyun
2259*4882a593Smuzhiyun```C++
2260*4882a593SmuzhiyunIM_STATUS  imconfig(IM_CONFIG_NAME name, uint64_t value);
2261*4882a593Smuzhiyun```
2262*4882a593Smuzhiyun
2263*4882a593Smuzhiyun> 通过不同的配置名对当前线程的上下文进行配置,该上下文将作为该线程的默认配置。
2264*4882a593Smuzhiyun>
2265*4882a593Smuzhiyun> 线程上下文的配置优先级低于接口的传参配置。如果接口传参配置未配置相关参数,则本地调用使用上下文默认配置完成本地调用;如果接口传参配置相关参数,以接口传参的配置完成本次调用。
2266*4882a593Smuzhiyun
2267*4882a593Smuzhiyun| parameter | Description                                                  |
2268*4882a593Smuzhiyun| --------- | ------------------------------------------------------------ |
2269*4882a593Smuzhiyun| name      | **[required]** context config name:<br/>IM_CONFIG_SCHEDULER_CORE —— 指定任务处理核心<br/>IM_CONFIG_PRIORITY                  —— 任务优先级<br/>IM_CHECK_CONFIG                      —— 校验使能 |
2270*4882a593Smuzhiyun| value     | **[required]** config value<br/>IM_CONFIG_SCHEDULER_CORE :<br/>    IM_SCHEDULER_RGA3_CORE0<br/>    IM_SCHEDULER_RGA3_CORE1<br/>    IM_SCHEDULER_RGA2_CORE0<br/>    IM_SCHEDULER_RGA3_DEFAULT<br/>    IM_SCHEDULER_RGA2_DEFAULT<br/>IM_CONFIG_PRIORITY:<br/>    0 ~ 6<br/>IM_CHECK_CONFIG:<br/>    TRUE<br/>    FALSE |
2271*4882a593Smuzhiyun
2272*4882a593Smuzhiyun> 注意:priority、core权限极高,操作不当可能导致系统崩溃或死锁,建议仅用于开发调试阶段,极度不建议在实际产品场景进行配置。
2273*4882a593Smuzhiyun
2274*4882a593Smuzhiyun**Return** IM_STATUS_SUCCESS on success or else negative error code
2275*4882a593Smuzhiyun
2276*4882a593Smuzhiyun
2277*4882a593Smuzhiyun
2278*4882a593Smuzhiyun---
2279*4882a593Smuzhiyun
2280*4882a593Smuzhiyun## 数据结构
2281*4882a593Smuzhiyun
2282*4882a593Smuzhiyun本章节将详细描述应用接口中涉及的数据结构。
2283*4882a593Smuzhiyun
2284*4882a593Smuzhiyun### 概述
2285*4882a593Smuzhiyun
2286*4882a593Smuzhiyun| 数据结构            | 说明                     |
2287*4882a593Smuzhiyun| ------------------- | ------------------------ |
2288*4882a593Smuzhiyun| rga_buffer_t        | 描述图像缓冲区信息       |
2289*4882a593Smuzhiyun| im_rect             | 描述图像实际操作区域     |
2290*4882a593Smuzhiyun| im_opt_t            | 描述图像操作选项         |
2291*4882a593Smuzhiyun| im_job_handle_t     | RGA任务句柄              |
2292*4882a593Smuzhiyun| rga_buffer_handle_t | RGA驱动图像缓冲区句柄    |
2293*4882a593Smuzhiyun| im_handle_param_t   | 描述待导入图像缓冲区属性 |
2294*4882a593Smuzhiyun| im_context_t        | 当前线程默认上下文       |
2295*4882a593Smuzhiyun| im_nn_t             | 描述运算点前处理参数     |
2296*4882a593Smuzhiyun| im_colorkey_range   | Colorkey关键色范围       |
2297*4882a593Smuzhiyun
2298*4882a593Smuzhiyun
2299*4882a593Smuzhiyun
2300*4882a593Smuzhiyun### 详细描述
2301*4882a593Smuzhiyun
2302*4882a593Smuzhiyun#### rga_buffer_t
2303*4882a593Smuzhiyun
2304*4882a593Smuzhiyun- **说明**
2305*4882a593Smuzhiyun
2306*4882a593Smuzhiyun描述单一通道的图像缓冲区信息。
2307*4882a593Smuzhiyun
2308*4882a593Smuzhiyun- **路径**
2309*4882a593Smuzhiyun
2310*4882a593Smuzhiyunim2d_api/im2d_type.h
2311*4882a593Smuzhiyun
2312*4882a593Smuzhiyun- **定义**
2313*4882a593Smuzhiyun
2314*4882a593Smuzhiyun```c++
2315*4882a593Smuzhiyuntypedef struct {
2316*4882a593Smuzhiyun    void* vir_addr;                     /* virtual address */
2317*4882a593Smuzhiyun    void* phy_addr;                     /* physical address */
2318*4882a593Smuzhiyun    int fd;                             /* shared fd */
2319*4882a593Smuzhiyun    rga_buffer_handle_t handle;         /* buffer handle */
2320*4882a593Smuzhiyun
2321*4882a593Smuzhiyun    int width;                          /* width */
2322*4882a593Smuzhiyun    int height;                         /* height */
2323*4882a593Smuzhiyun    int wstride;                        /* wstride */
2324*4882a593Smuzhiyun    int hstride;                        /* hstride */
2325*4882a593Smuzhiyun    int format;                         /* format */
2326*4882a593Smuzhiyun
2327*4882a593Smuzhiyun    int color_space_mode;               /* color_space_mode */
2328*4882a593Smuzhiyun    int global_alpha;                   /* global_alpha */
2329*4882a593Smuzhiyun    int rd_mode;
2330*4882a593Smuzhiyun} rga_buffer_t;
2331*4882a593Smuzhiyun```
2332*4882a593Smuzhiyun
2333*4882a593Smuzhiyun| 成员参数         | 描述                                    |
2334*4882a593Smuzhiyun| ---------------- | --------------------------------------- |
2335*4882a593Smuzhiyun| vir_addr         | 图像缓冲区虚拟地址。                    |
2336*4882a593Smuzhiyun| phy_addr         | 图像缓冲区连续的物理地址。              |
2337*4882a593Smuzhiyun| fd               | 图像缓冲区DMA的文件描述符。             |
2338*4882a593Smuzhiyun| handle           | 导入RGA驱动的图像缓冲区对应的内存句柄。 |
2339*4882a593Smuzhiyun| width            | 图像实际操作区域的宽度,以像素为单位。  |
2340*4882a593Smuzhiyun| height           | 图像实际操作区域的高度,以像素为单位。  |
2341*4882a593Smuzhiyun| wstride          | 图像宽度的步幅,以像素为单位。          |
2342*4882a593Smuzhiyun| hstride          | 图像高度的步幅,以像素为单位。          |
2343*4882a593Smuzhiyun| format           | 图像格式。                              |
2344*4882a593Smuzhiyun| color_space_mode | 图像色域空间。                          |
2345*4882a593Smuzhiyun| global_alpha     | 全局Alpha配置。                         |
2346*4882a593Smuzhiyun| rd_mode          | 当前通道读取数据模式。                  |
2347*4882a593Smuzhiyun
2348*4882a593Smuzhiyun- **注意事项**
2349*4882a593Smuzhiyun
2350*4882a593Smuzhiyunvir_addr、phy_addr、fd、handle只需选择其一作为图像缓冲区的描述即可,如多项赋值,则只会根据默认优先级选择其一作为图像缓冲区描述,优先级如下:handle > phy_addr > fd > vir_addr。
2351*4882a593Smuzhiyun
2352*4882a593Smuzhiyun
2353*4882a593Smuzhiyun
2354*4882a593Smuzhiyun#### im_rect
2355*4882a593Smuzhiyun
2356*4882a593Smuzhiyun- **说明**
2357*4882a593Smuzhiyun
2358*4882a593Smuzhiyun描述单一通道的图形实际操作区域。
2359*4882a593Smuzhiyun
2360*4882a593Smuzhiyun- **路径**
2361*4882a593Smuzhiyun
2362*4882a593Smuzhiyunim2d_api/im2d_type.h
2363*4882a593Smuzhiyun
2364*4882a593Smuzhiyun- **定义**
2365*4882a593Smuzhiyun
2366*4882a593Smuzhiyun```c++
2367*4882a593Smuzhiyuntypedef struct {
2368*4882a593Smuzhiyun    int x;        /* upper-left x */
2369*4882a593Smuzhiyun    int y;        /* upper-left y */
2370*4882a593Smuzhiyun    int width;    /* width */
2371*4882a593Smuzhiyun    int height;   /* height */
2372*4882a593Smuzhiyun} im_rect;
2373*4882a593Smuzhiyun```
2374*4882a593Smuzhiyun
2375*4882a593Smuzhiyun| 成员参数 | 描述                                         |
2376*4882a593Smuzhiyun| -------- | -------------------------------------------- |
2377*4882a593Smuzhiyun| x        | 图像实际操作区域的起始横坐标,以像素为单位。 |
2378*4882a593Smuzhiyun| y        | 图像实际操作区域的起始纵坐标,以像素为单位。 |
2379*4882a593Smuzhiyun| width    | 图像实际操作区域的宽度,以像素为单位。       |
2380*4882a593Smuzhiyun| height   | 图像实际操作区域的高度,以像素为单位。       |
2381*4882a593Smuzhiyun
2382*4882a593Smuzhiyun- **注意事项**
2383*4882a593Smuzhiyun
2384*4882a593Smuzhiyun实际操作区域不能超出图像大小,即(x + width)<= wstride, (y + height) <= hstride。
2385*4882a593Smuzhiyun
2386*4882a593Smuzhiyun
2387*4882a593Smuzhiyun
2388*4882a593Smuzhiyun#### im_opt_t
2389*4882a593Smuzhiyun
2390*4882a593Smuzhiyun- **说明**
2391*4882a593Smuzhiyun
2392*4882a593Smuzhiyun描述当前任务图像操作选项。
2393*4882a593Smuzhiyun
2394*4882a593Smuzhiyun- **路径**
2395*4882a593Smuzhiyun
2396*4882a593Smuzhiyunim2d_api/im2d_type.h
2397*4882a593Smuzhiyun
2398*4882a593Smuzhiyun- **定义**
2399*4882a593Smuzhiyun
2400*4882a593Smuzhiyun```c++
2401*4882a593Smuzhiyuntypedef struct im_opt {
2402*4882a593Smuzhiyun    im_api_version_t version DEFAULT_INITIALIZER(RGA_CURRENT_API_HEADER_VERSION);
2403*4882a593Smuzhiyun    int color;                          /* color, used by color fill */
2404*4882a593Smuzhiyun    im_colorkey_range colorkey_range;   /* range value of color key */
2405*4882a593Smuzhiyun    im_nn_t nn;
2406*4882a593Smuzhiyun    int rop_code;
2407*4882a593Smuzhiyun    int priority;
2408*4882a593Smuzhiyun    int core;
2409*4882a593Smuzhiyun    int mosaic_mode;
2410*4882a593Smuzhiyun    im_osd_t osd_config;
2411*4882a593Smuzhiyun    im_intr_config_t intr_config;
2412*4882a593Smuzhiyun    char reserve[128];
2413*4882a593Smuzhiyun} im_opt_t;
2414*4882a593Smuzhiyun```
2415*4882a593Smuzhiyun
2416*4882a593Smuzhiyun| 成员参数       | 描述                       |
2417*4882a593Smuzhiyun| -------------- | -------------------------- |
2418*4882a593Smuzhiyun| version        | 当前头文件版本             |
2419*4882a593Smuzhiyun| color          | 填充图像颜色配置。         |
2420*4882a593Smuzhiyun| colorkey_range | Colorkey关键色范围配置。   |
2421*4882a593Smuzhiyun| nn             | 运算点前处理(量化)配置。 |
2422*4882a593Smuzhiyun| rop_code       | 光栅操作ROP操作码配置。    |
2423*4882a593Smuzhiyun| priority       | 当前任务优先级配置。       |
2424*4882a593Smuzhiyun| core           | 当前任务指定硬件核心。     |
2425*4882a593Smuzhiyun| mosaic_mode    | 马赛克模式配置。           |
2426*4882a593Smuzhiyun| osd_config     | osd字幕叠加反色/统计配置。 |
2427*4882a593Smuzhiyun| intr_config    | 提前中断模式配置。         |
2428*4882a593Smuzhiyun| reserve        | 预留位。                   |
2429*4882a593Smuzhiyun
2430*4882a593Smuzhiyun- **注意事项**
2431*4882a593Smuzhiyun
2432*4882a593Smuzhiyunpriority、core权限极高,操作不当可能导致系统崩溃或死锁,建议仅用于开发调试阶段,极度不建议在实际产品场景进行配置。
2433*4882a593Smuzhiyun
2434*4882a593Smuzhiyun
2435*4882a593Smuzhiyun
2436*4882a593Smuzhiyun#### im_job_handle_t
2437*4882a593Smuzhiyun
2438*4882a593Smuzhiyun- **说明**
2439*4882a593Smuzhiyun
2440*4882a593SmuzhiyunRGA任务句柄,用于标识当前配置的RGA任务。
2441*4882a593Smuzhiyun
2442*4882a593Smuzhiyun- **路径**
2443*4882a593Smuzhiyun
2444*4882a593Smuzhiyunim2d_api/im2d_type.h
2445*4882a593Smuzhiyun
2446*4882a593Smuzhiyun- **定义**
2447*4882a593Smuzhiyun
2448*4882a593Smuzhiyun```c++
2449*4882a593Smuzhiyuntypedef uint32_t im_job_handle_t;
2450*4882a593Smuzhiyun```
2451*4882a593Smuzhiyun
2452*4882a593Smuzhiyun- **注意事项**
2453*4882a593Smuzhiyun
2454*4882a593Smuzhiyun配置失败后须使用 imcancelJob 释放当前任务句柄,避免内存泄漏。
2455*4882a593Smuzhiyun
2456*4882a593Smuzhiyun
2457*4882a593Smuzhiyun
2458*4882a593Smuzhiyun#### rga_buffer_handle_t
2459*4882a593Smuzhiyun
2460*4882a593Smuzhiyun- **说明**
2461*4882a593Smuzhiyun
2462*4882a593SmuzhiyunRGA驱动图像缓冲区句柄。
2463*4882a593Smuzhiyun
2464*4882a593Smuzhiyun- **路径**
2465*4882a593Smuzhiyun
2466*4882a593Smuzhiyunim2d_api/im2d_type.h
2467*4882a593Smuzhiyun
2468*4882a593Smuzhiyun- **定义**
2469*4882a593Smuzhiyun
2470*4882a593Smuzhiyun```c++
2471*4882a593Smuzhiyuntypedef int rga_buffer_handle_t;
2472*4882a593Smuzhiyun```
2473*4882a593Smuzhiyun
2474*4882a593Smuzhiyun- **注意事项**
2475*4882a593Smuzhiyun
2476*4882a593Smuzhiyun当该内存使用完毕后须使用 releasebuffer_handle 释放内存,避免内存泄漏。
2477*4882a593Smuzhiyun
2478*4882a593Smuzhiyun
2479*4882a593Smuzhiyun
2480*4882a593Smuzhiyun#### im_handle_param_t
2481*4882a593Smuzhiyun
2482*4882a593Smuzhiyun- **说明**
2483*4882a593Smuzhiyun
2484*4882a593Smuzhiyun描述待导入的图像缓冲区描述参数。
2485*4882a593Smuzhiyun
2486*4882a593Smuzhiyun- **路径**
2487*4882a593Smuzhiyun
2488*4882a593Smuzhiyunim2d_api/im2d_type.h
2489*4882a593Smuzhiyun
2490*4882a593Smuzhiyun- **定义**
2491*4882a593Smuzhiyun
2492*4882a593Smuzhiyun```c++
2493*4882a593Smuzhiyuntypedef struct im_handle_param {
2494*4882a593Smuzhiyun    uint32_t width;
2495*4882a593Smuzhiyun    uint32_t height;
2496*4882a593Smuzhiyun    uint32_t format;
2497*4882a593Smuzhiyun} im_handle_param_t;
2498*4882a593Smuzhiyun```
2499*4882a593Smuzhiyun
2500*4882a593Smuzhiyun| 成员参数      | 描述                                               |
2501*4882a593Smuzhiyun| ------------- | -------------------------------------------------- |
2502*4882a593Smuzhiyun| width_stride  | 描述待导入图像缓冲区的水平方向步幅,以像素为单位。 |
2503*4882a593Smuzhiyun| height_stride | 描述待导入图像缓冲区的垂直方向步幅,以像素为单位。 |
2504*4882a593Smuzhiyun| format        | 描述待导入图像缓冲区的格式。                       |
2505*4882a593Smuzhiyun
2506*4882a593Smuzhiyun- **注意事项**
2507*4882a593Smuzhiyun
2508*4882a593Smuzhiyun该结构描述为缓冲区内存开辟大小,如若实际开辟内存大小小于该结构配置大小,会导致 importbuffer_T 接口错误。
2509*4882a593Smuzhiyun
2510*4882a593Smuzhiyun
2511*4882a593Smuzhiyun
2512*4882a593Smuzhiyun#### im_nn_t
2513*4882a593Smuzhiyun
2514*4882a593Smuzhiyun- **说明**
2515*4882a593Smuzhiyun
2516*4882a593Smuzhiyun描述运算点前处理(量化)的参数。
2517*4882a593Smuzhiyun
2518*4882a593Smuzhiyun- **路径**
2519*4882a593Smuzhiyun
2520*4882a593Smuzhiyunim2d_api/im2d_type.h
2521*4882a593Smuzhiyun
2522*4882a593Smuzhiyun- **定义**
2523*4882a593Smuzhiyun
2524*4882a593Smuzhiyun```c++
2525*4882a593Smuzhiyuntypedef struct im_nn {
2526*4882a593Smuzhiyun    int scale_r;                /* scaling factor on R channal */
2527*4882a593Smuzhiyun    int scale_g;                /* scaling factor on G channal */
2528*4882a593Smuzhiyun    int scale_b;                /* scaling factor on B channal */
2529*4882a593Smuzhiyun    int offset_r;               /* offset on R channal */
2530*4882a593Smuzhiyun    int offset_g;               /* offset on G channal */
2531*4882a593Smuzhiyun    int offset_b;               /* offset on B channal */
2532*4882a593Smuzhiyun} im_nn_t;
2533*4882a593Smuzhiyun```
2534*4882a593Smuzhiyun
2535*4882a593Smuzhiyun| 成员参数 | 描述                |
2536*4882a593Smuzhiyun| -------- | ------------------- |
2537*4882a593Smuzhiyun| scale_r  | red分量缩放系数。   |
2538*4882a593Smuzhiyun| scale_g  | green分量缩放系数。 |
2539*4882a593Smuzhiyun| scale_b  | blue分量缩放系数。  |
2540*4882a593Smuzhiyun| offset_r | red分量偏移值。     |
2541*4882a593Smuzhiyun| offset_g | green分量偏移值。   |
2542*4882a593Smuzhiyun| offset_b | blue分量偏移值。    |
2543*4882a593Smuzhiyun
2544*4882a593Smuzhiyun- **注意事项**
2545*4882a593Smuzhiyun
2546*4882a593Smuzhiyun2547*4882a593Smuzhiyun
2548*4882a593Smuzhiyun
2549*4882a593Smuzhiyun
2550*4882a593Smuzhiyun#### im_colorkey_range
2551*4882a593Smuzhiyun
2552*4882a593Smuzhiyun- **说明**
2553*4882a593Smuzhiyun
2554*4882a593SmuzhiyunColorkey关键色范围。
2555*4882a593Smuzhiyun
2556*4882a593Smuzhiyun- **路径**
2557*4882a593Smuzhiyun
2558*4882a593Smuzhiyunim2d_api/im2d_type.h
2559*4882a593Smuzhiyun
2560*4882a593Smuzhiyun- **定义**
2561*4882a593Smuzhiyun
2562*4882a593Smuzhiyun```c++
2563*4882a593Smuzhiyuntypedef struct {
2564*4882a593Smuzhiyun    int max;                    /* The Maximum value of the color key */
2565*4882a593Smuzhiyun    int min;                    /* The minimum value of the color key */
2566*4882a593Smuzhiyun} im_colorkey_range;
2567*4882a593Smuzhiyun```
2568*4882a593Smuzhiyun
2569*4882a593Smuzhiyun| 成员参数 | 描述               |
2570*4882a593Smuzhiyun| -------- | ------------------ |
2571*4882a593Smuzhiyun| max      | 关键色范围最大值。 |
2572*4882a593Smuzhiyun| min      | 关键色范围最小值。 |
2573*4882a593Smuzhiyun
2574*4882a593Smuzhiyun- **注意事项**
2575*4882a593Smuzhiyun
2576*4882a593Smuzhiyun2577*4882a593Smuzhiyun
2578*4882a593Smuzhiyun
2579*4882a593Smuzhiyun
2580*4882a593Smuzhiyun#### im_osd_block_t
2581*4882a593Smuzhiyun
2582*4882a593Smuzhiyun- **说明**
2583*4882a593Smuzhiyun
2584*4882a593SmuzhiyunOSD字块描述参数配置。
2585*4882a593Smuzhiyun
2586*4882a593Smuzhiyun- **路径**
2587*4882a593Smuzhiyun
2588*4882a593Smuzhiyunim2d_api/im2d_type.h
2589*4882a593Smuzhiyun
2590*4882a593Smuzhiyun- **定义**
2591*4882a593Smuzhiyun
2592*4882a593Smuzhiyun```c++
2593*4882a593Smuzhiyuntypedef struct im_osd_block {
2594*4882a593Smuzhiyun    int width_mode;                 // normal or different
2595*4882a593Smuzhiyun                                    //   IM_OSD_BLOCK_MODE_NORMAL
2596*4882a593Smuzhiyun                                    //   IM_OSD_BLOCK_MODE_DIFFERENT
2597*4882a593Smuzhiyun    union {
2598*4882a593Smuzhiyun        int width;                  // normal_mode block width
2599*4882a593Smuzhiyun        int width_index;            // different_mode block width index in RAM
2600*4882a593Smuzhiyun    };
2601*4882a593Smuzhiyun
2602*4882a593Smuzhiyun    int block_count;                // block count
2603*4882a593Smuzhiyun
2604*4882a593Smuzhiyun    int background_config;          // background config is bright or dark
2605*4882a593Smuzhiyun                                    //   IM_OSD_BACKGROUND_DEFAULT_BRIGHT
2606*4882a593Smuzhiyun                                    //   IM_OSD_BACKGROUND_DEFAULT_DARK
2607*4882a593Smuzhiyun
2608*4882a593Smuzhiyun    int direction;                  // osd block direction
2609*4882a593Smuzhiyun                                    //   IM_OSD_MODE_HORIZONTAL
2610*4882a593Smuzhiyun                                    //   IM_OSD_MODE_VERTICAL
2611*4882a593Smuzhiyun
2612*4882a593Smuzhiyun    int color_mode;                 // using src1 color or config color
2613*4882a593Smuzhiyun                                    //   IM_OSD_COLOR_PIXEL
2614*4882a593Smuzhiyun                                    //   IM_OSD_COLOR_EXTERNAL
2615*4882a593Smuzhiyun    im_color_t normal_color;        // config color: normal
2616*4882a593Smuzhiyun    im_color_t invert_color;        // config color: invert
2617*4882a593Smuzhiyun} im_osd_block_t;
2618*4882a593Smuzhiyun```
2619*4882a593Smuzhiyun
2620*4882a593Smuzhiyun| 成员参数          | 描述                                                         |
2621*4882a593Smuzhiyun| ----------------- | ------------------------------------------------------------ |
2622*4882a593Smuzhiyun| width_mode        | 字块宽度模式配置:<br />    字块宽度相同:IM_OSD_BLOCK_MODE_NORMAL<br />    字块宽度不同:IM_OSD_BLOCK_MODE_DIFFERENT |
2623*4882a593Smuzhiyun| width/width_index | width:字块宽度相同模式时使用,标识当前task OSD字块宽度。<br />width_index:字块宽度不同模式时使用,标识当前使用RAM内部的宽度配置表的索引。 |
2624*4882a593Smuzhiyun| block_count       | 字块数量                                                     |
2625*4882a593Smuzhiyun| background_config | 文字背景亮度描述:<br />    白底黑字:IM_OSD_BACKGROUND_DEFAULT_BRIGHT<br />    黑底白字:IM_OSD_BACKGROUND_DEFAULT_DARK |
2626*4882a593Smuzhiyun| direction         | OSD方向:<br />    垂直方向:IM_OSD_MODE_VERTICAL<br />    水平方向:IM_OSD_MODE_HORIZONTAL |
2627*4882a593Smuzhiyun| color_mode        | OSD字块颜色模式:<br />    像素颜色:IM_OSD_COLOR_PIXEL<br />    外部指导颜色:IM_OSD_COLOR_EXTERNAL |
2628*4882a593Smuzhiyun| normal_color      | 外部指导颜色:正常时(非反色状态)字块颜色。                 |
2629*4882a593Smuzhiyun| invert_color      | 外部指导颜色:反色时字块颜色。                               |
2630*4882a593Smuzhiyun
2631*4882a593Smuzhiyun- **注意事项**
2632*4882a593Smuzhiyun
2633*4882a593Smuzhiyun2634*4882a593Smuzhiyun
2635*4882a593Smuzhiyun
2636*4882a593Smuzhiyun
2637*4882a593Smuzhiyun#### im_osd_invert_factor_t
2638*4882a593Smuzhiyun
2639*4882a593Smuzhiyun- **说明**
2640*4882a593Smuzhiyun
2641*4882a593SmuzhiyunOSD反色公式配置。
2642*4882a593Smuzhiyun
2643*4882a593Smuzhiyun- **路径**
2644*4882a593Smuzhiyun
2645*4882a593Smuzhiyunim2d_api/im2d_type.h
2646*4882a593Smuzhiyun
2647*4882a593Smuzhiyun- **定义**
2648*4882a593Smuzhiyun
2649*4882a593Smuzhiyun```c++
2650*4882a593Smuzhiyuntypedef struct im_osd_invert_factor {
2651*4882a593Smuzhiyun    uint8_t alpha_max;
2652*4882a593Smuzhiyun    uint8_t alpha_min;
2653*4882a593Smuzhiyun    uint8_t yg_max;
2654*4882a593Smuzhiyun    uint8_t yg_min;
2655*4882a593Smuzhiyun    uint8_t crb_max;
2656*4882a593Smuzhiyun    uint8_t crb_min;
2657*4882a593Smuzhiyun} im_osd_invert_factor_t;
2658*4882a593Smuzhiyun```
2659*4882a593Smuzhiyun
2660*4882a593Smuzhiyun计算公式如下:
2661*4882a593Smuzhiyun
2662*4882a593Smuzhiyun​		**MAX**(channel_min_factor, channel_max_factor - channel_value)
2663*4882a593Smuzhiyun
2664*4882a593Smuzhiyun
2665*4882a593Smuzhiyun- **注意事项**
2666*4882a593Smuzhiyun
2667*4882a593Smuzhiyun2668*4882a593Smuzhiyun
2669*4882a593Smuzhiyun
2670*4882a593Smuzhiyun
2671*4882a593Smuzhiyun#### im_osd_invert_t
2672*4882a593Smuzhiyun
2673*4882a593Smuzhiyun- **说明**
2674*4882a593Smuzhiyun
2675*4882a593SmuzhiyunOSD反色功能配置。
2676*4882a593Smuzhiyun
2677*4882a593Smuzhiyun- **路径**
2678*4882a593Smuzhiyun
2679*4882a593Smuzhiyunim2d_api/im2d_type.h
2680*4882a593Smuzhiyun
2681*4882a593Smuzhiyun- **定义**
2682*4882a593Smuzhiyun
2683*4882a593Smuzhiyun```c++
2684*4882a593Smuzhiyuntypedef struct im_osd_invert {
2685*4882a593Smuzhiyun    int invert_channel;         // invert channel config:
2686*4882a593Smuzhiyun                                //   IM_OSD_INVERT_CHANNEL_NONE
2687*4882a593Smuzhiyun                                //   IM_OSD_INVERT_CHANNEL_Y_G
2688*4882a593Smuzhiyun                                //   IM_OSD_INVERT_CHANNEL_C_RB
2689*4882a593Smuzhiyun                                //   IM_OSD_INVERT_CHANNEL_ALPHA
2690*4882a593Smuzhiyun                                //   IM_OSD_INVERT_CHANNEL_COLOR
2691*4882a593Smuzhiyun                                //   IM_OSD_INVERT_CHANNEL_BOTH
2692*4882a593Smuzhiyun    int flags_mode;             // use external or inertnal RAM invert flags
2693*4882a593Smuzhiyun                                //   IM_OSD_FLAGS_EXTERNAL
2694*4882a593Smuzhiyun                                //   IM_OSD_FLAGS_INTERNAL
2695*4882a593Smuzhiyun    int flags_index;            // flags index when using internal RAM invert flags
2696*4882a593Smuzhiyun
2697*4882a593Smuzhiyun    uint64_t invert_flags;      // external invert flags
2698*4882a593Smuzhiyun    uint64_t current_flags;     // current flags
2699*4882a593Smuzhiyun
2700*4882a593Smuzhiyun    int invert_mode;            // invert use swap or factor
2701*4882a593Smuzhiyun                                //   IM_OSD_INVERT_USE_FACTOR
2702*4882a593Smuzhiyun                                //   IM_OSD_INVERT_USE_SWAP
2703*4882a593Smuzhiyun    im_osd_invert_factor_t factor;
2704*4882a593Smuzhiyun
2705*4882a593Smuzhiyun    int threash;
2706*4882a593Smuzhiyun} im_osd_invert_t;
2707*4882a593Smuzhiyun```
2708*4882a593Smuzhiyun
2709*4882a593Smuzhiyun| 成员参数       | 描述                                                         |
2710*4882a593Smuzhiyun| -------------- | ------------------------------------------------------------ |
2711*4882a593Smuzhiyun| invert_channel | 反色通道配置:<br />    默认无通道反色使能:IM_OSD_INVERT_CHANNEL_NONE<br />    Y/G分量反色使能:IM_OSD_INVERT_CHANNEL_Y_G<br />    C(UV)/RB分量反色使能:IM_OSD_INVERT_CHANNEL_C_RB<br />    Alpha分量反色使能:IM_OSD_INVERT_CHANNEL_ALPHA<br />    颜色值反色使能:IM_OSD_INVERT_CHANNEL_COLOR<br />                                   即(IM_OSD_INVERT_CHANNEL_Y_G \| IM_OSD_INVERT_CHANNEL_C_RB)。<br />    全部通道反色使能:IM_OSD_INVERT_CHANNEL_BOTH<br />                                       即(IM_OSD_INVERT_CHANNEL_COLOR \| IM_OSD_INVERT_CHANNEL_ALPHA)。 |
2712*4882a593Smuzhiyun| flags_mode     | 反色指导模式:<br />    内部指导:IM_OSD_FLAGS_EXTERNAL,使用内部RAM统计的反色flag指导反色功能。<br />    外部指导:IM_OSD_FLAGS_INTERNAL,由外部指导反色功能。 |
2713*4882a593Smuzhiyun| flags_index    | 当前使用RAM内部的反色指导flag表的索引。                      |
2714*4882a593Smuzhiyun| invert_flags   | 外部指导反色配置表,共64个bit。                              |
2715*4882a593Smuzhiyun| current_flags  | 当前task统计的反色配置表,共64个bit,task执行结束后读取。    |
2716*4882a593Smuzhiyun| invert_mode    | 反色模式:<br />    自定义公式:IM_OSD_INVERT_USE_FACTOR<br />    默认公式:IM_OSD_INVERT_USE_SWAP,YUV格式对U、V分量进行交换,RGB格式对R、B分量进行交换。 |
2717*4882a593Smuzhiyun| factor         | 反色公式配置。                                               |
2718*4882a593Smuzhiyun| threash        | 反色阈值。                                                   |
2719*4882a593Smuzhiyun
2720*4882a593Smuzhiyun- **注意事项**
2721*4882a593Smuzhiyun
2722*4882a593Smuzhiyun2723*4882a593Smuzhiyun
2724*4882a593Smuzhiyun
2725*4882a593Smuzhiyun
2726*4882a593Smuzhiyun#### im_osd_bpp2_t
2727*4882a593Smuzhiyun
2728*4882a593Smuzhiyun- **说明**
2729*4882a593Smuzhiyun
2730*4882a593SmuzhiyunOSD BPP2 RGB格式映射配置。
2731*4882a593Smuzhiyun
2732*4882a593Smuzhiyun- **路径**
2733*4882a593Smuzhiyun
2734*4882a593Smuzhiyunim2d_api/im2d_type.h
2735*4882a593Smuzhiyun
2736*4882a593Smuzhiyun- **定义**
2737*4882a593Smuzhiyun
2738*4882a593Smuzhiyun```c++
2739*4882a593Smuzhiyuntypedef struct im_osd_bpp2 {
2740*4882a593Smuzhiyun    uint8_t  ac_swap;       // ac swap flag
2741*4882a593Smuzhiyun                            // 0: CA
2742*4882a593Smuzhiyun                            // 1: AC
2743*4882a593Smuzhiyun    uint8_t  endian_swap;   // rgba2bpp endian swap
2744*4882a593Smuzhiyun                            // 0: Big endian
2745*4882a593Smuzhiyun                            // 1: Little endian
2746*4882a593Smuzhiyun    im_color_t color0;
2747*4882a593Smuzhiyun    im_color_t color1;
2748*4882a593Smuzhiyun} im_osd_bpp2_t;
2749*4882a593Smuzhiyun```
2750*4882a593Smuzhiyun
2751*4882a593Smuzhiyun| 成员参数    | 描述                     |
2752*4882a593Smuzhiyun| ----------- | ------------------------ |
2753*4882a593Smuzhiyun| ac_swap     | AC排布模式。             |
2754*4882a593Smuzhiyun| endian_swap | 大小端配置。             |
2755*4882a593Smuzhiyun| color0      | color值为0时映射的颜色。 |
2756*4882a593Smuzhiyun| color1      | color值为1时映射的颜色。 |
2757*4882a593Smuzhiyun
2758*4882a593Smuzhiyun- **注意事项**
2759*4882a593Smuzhiyun
2760*4882a593Smuzhiyun2761*4882a593Smuzhiyun
2762*4882a593Smuzhiyun
2763*4882a593Smuzhiyun
2764*4882a593Smuzhiyun#### im_osd_t
2765*4882a593Smuzhiyun
2766*4882a593Smuzhiyun- **说明**
2767*4882a593Smuzhiyun
2768*4882a593SmuzhiyunOSD功能配置。
2769*4882a593Smuzhiyun
2770*4882a593Smuzhiyun- **路径**
2771*4882a593Smuzhiyun
2772*4882a593Smuzhiyunim2d_api/im2d_type.h
2773*4882a593Smuzhiyun
2774*4882a593Smuzhiyun- **定义**
2775*4882a593Smuzhiyun
2776*4882a593Smuzhiyun```c++
2777*4882a593Smuzhiyuntypedef struct im_osd {
2778*4882a593Smuzhiyun
2779*4882a593Smuzhiyun  int osd_mode;            		// osd mode: statistics or auto_invert
2780*4882a593Smuzhiyun  im_osd_block_t block_parm;    // osd block info config
2781*4882a593Smuzhiyun  im_osd_invert_t invert_config;
2782*4882a593Smuzhiyun  im_osd_bpp2_t bpp2_info;
2783*4882a593Smuzhiyun} im_osd_t;
2784*4882a593Smuzhiyun```
2785*4882a593Smuzhiyun
2786*4882a593Smuzhiyun| 成员参数      | 描述                                                         |
2787*4882a593Smuzhiyun| ------------- | ------------------------------------------------------------ |
2788*4882a593Smuzhiyun| osd_mode      | OSD模式:<br />    统计模式:IM_OSD_MODE_STATISTICS<br />    反色模式:IM_OSD_MODE_AUTO_INVERT |
2789*4882a593Smuzhiyun| block_parm    | OSD block参数配置。                                          |
2790*4882a593Smuzhiyun| invert_config | 反色功能配置。                                               |
2791*4882a593Smuzhiyun| bpp2_info     | bpp2-rgb格式配置。                                           |
2792*4882a593Smuzhiyun
2793*4882a593Smuzhiyun- **注意事项**
2794*4882a593Smuzhiyun
2795*4882a593Smuzhiyun2796*4882a593Smuzhiyun
2797*4882a593Smuzhiyun
2798*4882a593Smuzhiyun
2799*4882a593Smuzhiyun---
2800*4882a593Smuzhiyun
2801*4882a593Smuzhiyun## 测试用例及调试方法
2802*4882a593Smuzhiyun
2803*4882a593Smuzhiyun> 为了让开发者更加快捷的上手上述的新接口,这里通过运行demo和对demo源码的解析以加速开发者对API的理解和运用。
2804*4882a593Smuzhiyun
2805*4882a593Smuzhiyun
2806*4882a593Smuzhiyun
2807*4882a593Smuzhiyun### 测试文件说明
2808*4882a593Smuzhiyun
2809*4882a593Smuzhiyun> 用于测试的输入与输出二进制文件需提前准备好,在/sample/sample_file目录下,存放着默认的RGBA8888格式的源图像文件可以直接使用。
2810*4882a593Smuzhiyun>
2811*4882a593Smuzhiyun> Android系统须将源图片存储在设备/data/目录下,Linux系统须将源图储存在设备/usr/data目录下,文件命名规则如下:
2812*4882a593Smuzhiyun
2813*4882a593Smuzhiyun```
2814*4882a593Smuzhiyunin%dw%d-h%d-%s.bin
2815*4882a593Smuzhiyunout%dw%d-h%d-%s.bin
2816*4882a593Smuzhiyun
2817*4882a593Smuzhiyun示例:
2818*4882a593Smuzhiyun1280×720 RGBA8888的输入图像: in0w1280-h720-rgba8888.bin
2819*4882a593Smuzhiyun1280×720 RGBA8888的输出图像: out0w1280-h720-rgba8888.bin
2820*4882a593Smuzhiyun```
2821*4882a593Smuzhiyun
2822*4882a593Smuzhiyun参数解释如下:
2823*4882a593Smuzhiyun
2824*4882a593Smuzhiyun> 输入文件为 in , 输出文件为 out
2825*4882a593Smuzhiyun> --->第一个%d 是文件的索引, 一般为 0, 用于区别格式及宽高完全相同的文件
2826*4882a593Smuzhiyun> --->第二个%d 是宽的意思, 这里的宽一般指虚宽
2827*4882a593Smuzhiyun> --->第三个%d 是高的意思, 这里的高一般指虚高
2828*4882a593Smuzhiyun> --->第四个%s 是格式的名字。
2829*4882a593Smuzhiyun>
2830*4882a593Smuzhiyun>  预置测试的部分常用图像格式如下,其他格式对应字符串名可以查看rgaUtils.cpp中查看:
2831*4882a593Smuzhiyun
2832*4882a593Smuzhiyun| format(Android)                 | format(Linux)            | name        |
2833*4882a593Smuzhiyun| :-------------------------------- | -------------------------- | ----------- |
2834*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_RGB_565          | RK_FORMAT_RGB_565          | "rgb565"    |
2835*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_RGB_888          | RK_FORMAT_RGB_888          | "rgb888"    |
2836*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_RGBA_8888        | RK_FORMAT_RGBA_8888        | "rgba8888"  |
2837*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_RGBX_8888        | RK_FORMAT_RGBX_8888        | "rgbx8888"  |
2838*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_BGRA_8888        | RK_FORMAT_BGRA_8888        | "bgra8888"  |
2839*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_YCrCb_420_SP     | RK_FORMAT_YCrCb_420_SP     | "crcb420sp" |
2840*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_YCrCb_NV12       | RK_FORMAT_YCbCr_420_SP     | "nv12"      |
2841*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_YCrCb_NV12_VIDEO | /                          | "nv12"      |
2842*4882a593Smuzhiyun| HAL_PIXEL_FORMAT_YCrCb_NV12_10    | RK_FORMAT_YCbCr_420_SP_10B | "nv12_10"   |
2843*4882a593Smuzhiyun
2844*4882a593Smuzhiyun> demo中默认的输入图像文件分辨率为1280x720,格式为RGBA8888, 则须在/data或/usr/data目录下提前准备好名为in0w1280-h720-rgba8888.bin的源图像文件,图像合成模式还须额外在/data或/usr/data目录下提前准备好名为in1w1280-h720-rgba8888.bin的源图像文件。
2845*4882a593Smuzhiyun
2846*4882a593Smuzhiyun
2847*4882a593Smuzhiyun
2848*4882a593Smuzhiyun### 调试方法说明
2849*4882a593Smuzhiyun
2850*4882a593Smuzhiyun> 运行demo后打印日志如下(以图像拷贝为例):
2851*4882a593Smuzhiyun>
2852*4882a593Smuzhiyun> Android中打印日志如下:
2853*4882a593Smuzhiyun
2854*4882a593Smuzhiyun```C++
2855*4882a593Smuzhiyun# rgaImDemo --copy
2856*4882a593Smuzhiyun
2857*4882a593Smuzhiyunlibrga:RGA_GET_VERSION:3.02,3.020000					//RGA版本
2858*4882a593Smuzhiyunctx=0x7ba35c1520,ctx->rgaFd=3							//RGA上下文
2859*4882a593SmuzhiyunStart selecting mode
2860*4882a593Smuzhiyunim2d copy ..											//RGA运行模式
2861*4882a593SmuzhiyunGraphicBuffer check ok
2862*4882a593SmuzhiyunGraphicBuffer check ok
2863*4882a593Smuzhiyunlock buffer ok
2864*4882a593Smuzhiyunopen file ok											//src文件的状态,如果/data/目录下没有对应文件这里会报错
2865*4882a593Smuzhiyununlock buffer ok
2866*4882a593Smuzhiyunlock buffer ok
2867*4882a593Smuzhiyununlock buffer ok
2868*4882a593Smuzhiyuncopying .... successfully								//标志运行成功
2869*4882a593Smuzhiyunopen /data/out0w1280-h720-rgba8888.bin and write ok		//输出文件名以及目录
2870*4882a593Smuzhiyun```
2871*4882a593Smuzhiyun
2872*4882a593Smuzhiyun> Linux系统中打印日志如下:
2873*4882a593Smuzhiyun
2874*4882a593Smuzhiyun```C++
2875*4882a593Smuzhiyun# rgaImDemo --copy
2876*4882a593Smuzhiyun
2877*4882a593Smuzhiyunlibrga:RGA_GET_VERSION:3.02,3.020000					//RGA版本
2878*4882a593Smuzhiyunctx=0x2b070,ctx->rgaFd=3								//RGA上下文
2879*4882a593SmuzhiyunRga built version:version:1.00
2880*4882a593SmuzhiyunStart selecting mode
2881*4882a593Smuzhiyunim2d copy ..											//RGA运行模式
2882*4882a593Smuzhiyunopen file												//src文件的状态,如果/usr/data/目录下没有对应文件这里会报错
2883*4882a593Smuzhiyuncopying .... Run successfully							//标志运行成功
2884*4882a593Smuzhiyunopen /usr/data/out0w1280-h720-rgba8888.bin and write ok	//输出文件名以及目录
2885*4882a593Smuzhiyun```
2886*4882a593Smuzhiyun
2887*4882a593Smuzhiyun> 当需要查看RGA运行更加详细的日志时,Android系统可以通过设置属性vendor.rga.log(Android 8及以下是sys.rga.log)来打开RGA配置log打印:
2888*4882a593Smuzhiyun
2889*4882a593Smuzhiyun```
2890*4882a593Smuzhiyunsetprop vendor.rga.log 1		打开RGA log打印
2891*4882a593Smuzhiyunlogcat -s librga				开启并过滤log打印
2892*4882a593Smuzhiyunsetprop vendor.rga.log 0		关闭RGA log打印
2893*4882a593Smuzhiyun```
2894*4882a593Smuzhiyun
2895*4882a593Smuzhiyun> Linux系统中需要打开代码core/NormalRgaContext.h,将__DEBUG设置为1,重新编译即可
2896*4882a593Smuzhiyun
2897*4882a593Smuzhiyun```
2898*4882a593Smuzhiyun#ifdef LINUX
2899*4882a593Smuzhiyun
2900*4882a593Smuzhiyun-#define __DEBUG 0
2901*4882a593Smuzhiyun+#define __DEBUG 1
2902*4882a593Smuzhiyun```
2903*4882a593Smuzhiyun
2904*4882a593Smuzhiyun> 一般打印log如下,可将此log上传至RedMine,由RK有关工程师分析:
2905*4882a593Smuzhiyun>
2906*4882a593Smuzhiyun> Android系统中打印日志如下:
2907*4882a593Smuzhiyun
2908*4882a593Smuzhiyun```
2909*4882a593Smuzhiyun D librga  : <<<<-------- print rgaLog -------->>>>
2910*4882a593Smuzhiyun D librga  : src->hnd = 0x0 , dst->hnd = 0x0
2911*4882a593Smuzhiyun D librga  : srcFd = 11 , phyAddr = 0x0 , virAddr = 0x0
2912*4882a593Smuzhiyun D librga  : dstFd = 15 , phyAddr = 0x0 , virAddr = 0x0
2913*4882a593Smuzhiyun D librga  : srcBuf = 0x0 , dstBuf = 0x0
2914*4882a593Smuzhiyun D librga  : blend = 0 , perpixelAlpha = 1
2915*4882a593Smuzhiyun D librga  : scaleMode = 0 , stretch = 0;
2916*4882a593Smuzhiyun D librga  : rgaVersion = 3.020000  , ditherEn =0
2917*4882a593Smuzhiyun D librga  : srcMmuFlag = 1 , dstMmuFlag = 1 , rotateMode = 0
2918*4882a593Smuzhiyun D librga  : <<<<-------- rgaReg -------->>>>
2919*4882a593Smuzhiyun D librga  : render_mode=0 rotate_mode=0
2920*4882a593Smuzhiyun D librga  : src:[b,0,e1000],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=0
2921*4882a593Smuzhiyun D librga  : dst:[f,0,e1000],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=0
2922*4882a593Smuzhiyun D librga  : pat:[0,0,0],x-y[0,0],w-h[0,0],vw-vh[0,0],f=0
2923*4882a593Smuzhiyun D librga  : ROP:[0,0,0],LUT[0]
2924*4882a593Smuzhiyun D librga  : color:[0,0,0,0,0]
2925*4882a593Smuzhiyun D librga  : MMU:[1,0,80000521]
2926*4882a593Smuzhiyun D librga  : mode[0,0,0,0]
2927*4882a593Smuzhiyun```
2928*4882a593Smuzhiyun
2929*4882a593Smuzhiyun> Linux系统打印日志如下:
2930*4882a593Smuzhiyun
2931*4882a593Smuzhiyun```C++
2932*4882a593Smuzhiyunrender_mode=0 rotate_mode=0
2933*4882a593Smuzhiyunsrc:[0,a681a008,a68fb008],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=0
2934*4882a593Smuzhiyundst:[0,a6495008,a6576008],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=0
2935*4882a593Smuzhiyunpat:[0,0,0],x-y[0,0],w-h[0,0],vw-vh[0,0],f=0
2936*4882a593SmuzhiyunROP:[0,0,0],LUT[0]
2937*4882a593Smuzhiyuncolor:[0,0,0,0,0]
2938*4882a593SmuzhiyunMMU:[1,0,80000521]
2939*4882a593Smuzhiyunmode[0,0,0,0,0]
2940*4882a593Smuzhiyungr_color_x [0, 0, 0]
2941*4882a593Smuzhiyungr_color_x [0, 0, 0]
2942*4882a593Smuzhiyun```
2943*4882a593Smuzhiyun
2944*4882a593Smuzhiyun
2945*4882a593Smuzhiyun
2946*4882a593Smuzhiyun### 测试用例说明
2947*4882a593Smuzhiyun
2948*4882a593Smuzhiyun- 测试路径位于librga源码目录下 sample/im2d_api_demo ,开发者可以根据需求修改demo的配置,建议第一次运行demo使用默认配置。
2949*4882a593Smuzhiyun- 测试用例的编译不同的平台编译是不同的,Android平台可以使用 ‘mm’ 命令进行编译,linux平台上在使用cmake编译librga.so时会在同目录下生成对应的测试用例。
2950*4882a593Smuzhiyun
2951*4882a593Smuzhiyun- 将对应的测试用例编译后生成的可执行文件通过adb传入设备,添加执行权限,执行demo,查看打印log。
2952*4882a593Smuzhiyun- 查看输出文件,检查是否与预期相符。
2953*4882a593Smuzhiyun
2954*4882a593Smuzhiyun
2955*4882a593Smuzhiyun
2956*4882a593Smuzhiyun#### 申请图像缓冲
2957*4882a593Smuzhiyun
2958*4882a593Smuzhiyun> demo中提供了两种buffer用于RGA合成——Graphicbuffer、AHardwareBuffer。这两种buffer通过宏USE_AHARDWAREBUFFER区分。
2959*4882a593Smuzhiyun
2960*4882a593Smuzhiyun```c++
2961*4882a593Smuzhiyun目录:librga/samples/im2d_api_demo/Android.mk
2962*4882a593Smuzhiyun(line +15)
2963*4882a593Smuzhiyun
2964*4882a593Smuzhiyunifeq (1,$(strip $(shell expr $(PLATFORM_SDK_VERSION) \> 25)))
2965*4882a593Smuzhiyun/*USE_AHARDWAREBUFFER为1则使用AHardwareBuffer,为0使用Graphicbuffer*/
2966*4882a593SmuzhiyunLOCAL_CFLAGS += -DUSE_AHARDWAREBUFFER=1
2967*4882a593Smuzhiyunendif
2968*4882a593Smuzhiyun```
2969*4882a593Smuzhiyun
2970*4882a593Smuzhiyun
2971*4882a593Smuzhiyun
2972*4882a593Smuzhiyun##### Graphicbuffer
2973*4882a593Smuzhiyun
2974*4882a593Smuzhiyun> 主要通过三个函数完成Graphicbuffer的初始化、填充/清空、填充rga_buffer_t结构体。
2975*4882a593Smuzhiyun
2976*4882a593Smuzhiyun```c++
2977*4882a593Smuzhiyun	/*传入src/dst的宽、高、图像格式,初始化Graphicbuffer*/
2978*4882a593Smuzhiyun	src_buf = GraphicBuffer_Init(SRC_WIDTH, SRC_HEIGHT, SRC_FORMAT);
2979*4882a593Smuzhiyun	dst_buf = GraphicBuffer_Init(DST_WIDTH, DST_HEIGHT, DST_FORMAT);
2980*4882a593Smuzhiyun
2981*4882a593Smuzhiyun	/*通过枚举值FILL_BUFF/EMPTY_BUFF,执行填充/清空Graphicbuffer*/
2982*4882a593Smuzhiyun	GraphicBuffer_Fill(src_buf, FILL_BUFF, 0);
2983*4882a593Smuzhiyun	if(MODE == MODE_BLEND)
2984*4882a593Smuzhiyun		GraphicBuffer_Fill(dst_buf, FILL_BUFF, 1);
2985*4882a593Smuzhiyun	else
2986*4882a593Smuzhiyun		GraphicBuffer_Fill(dst_buf, EMPTY_BUFF, 1);
2987*4882a593Smuzhiyun
2988*4882a593Smuzhiyun	/*填充rga_buffer_t结构体:src、dst*/
2989*4882a593Smuzhiyun	src = wrapbuffer_GraphicBuffer(src_buf);
2990*4882a593Smuzhiyun	dst = wrapbuffer_GraphicBuffer(dst_buf);
2991*4882a593Smuzhiyun```
2992*4882a593Smuzhiyun
2993*4882a593Smuzhiyun
2994*4882a593Smuzhiyun
2995*4882a593Smuzhiyun##### AHardwareBuffer
2996*4882a593Smuzhiyun
2997*4882a593Smuzhiyun> 主要通过三个函数完成AHardwareBuffer的初始化、填充/清空、填充rga_buffer_t结构体。
2998*4882a593Smuzhiyun
2999*4882a593Smuzhiyun```c++
3000*4882a593Smuzhiyun	/*传入src/dst的宽、高、图像格式,初始化AHardwareBuffer*/
3001*4882a593Smuzhiyun	AHardwareBuffer_Init(SRC_WIDTH, SRC_HEIGHT, SRC_FORMAT, &src_buf);
3002*4882a593Smuzhiyun	AHardwareBuffer_Init(DST_WIDTH, DST_HEIGHT, DST_FORMAT, &dst_buf);
3003*4882a593Smuzhiyun
3004*4882a593Smuzhiyun	/*通过枚举值FILL_BUFF/EMPTY_BUFF,执行填充/清空AHardwareBuffer*/
3005*4882a593Smuzhiyun	AHardwareBuffer_Fill(&src_buf, FILL_BUFF, 0);
3006*4882a593Smuzhiyun	if(MODE == MODE_BLEND)
3007*4882a593Smuzhiyun		AHardwareBuffer_Fill(&dst_buf, FILL_BUFF, 1);
3008*4882a593Smuzhiyun	else
3009*4882a593Smuzhiyun		AHardwareBuffer_Fill(&dst_buf, EMPTY_BUFF, 1);
3010*4882a593Smuzhiyun
3011*4882a593Smuzhiyun	/*填充rga_buffer_t结构体:src、dst*/
3012*4882a593Smuzhiyun	src = wrapbuffer_AHardwareBuffer(src_buf);
3013*4882a593Smuzhiyun	dst = wrapbuffer_AHardwareBuffer(dst_buf);
3014*4882a593Smuzhiyun```
3015*4882a593Smuzhiyun
3016*4882a593Smuzhiyun
3017*4882a593Smuzhiyun
3018*4882a593Smuzhiyun#### 查看帮助信息
3019*4882a593Smuzhiyun
3020*4882a593Smuzhiyun> 使用如下命令获取测试用例帮助信息
3021*4882a593Smuzhiyun
3022*4882a593Smuzhiyun```
3023*4882a593SmuzhiyunrgaImDemo -h
3024*4882a593SmuzhiyunrgaImDemo --help
3025*4882a593SmuzhiyunrgaImDemo
3026*4882a593Smuzhiyun```
3027*4882a593Smuzhiyun
3028*4882a593Smuzhiyun> 运行成功后,便可以根据帮助信息使用demo,打印信息如下:
3029*4882a593Smuzhiyun
3030*4882a593Smuzhiyun```
3031*4882a593Smuzhiyunrk3399_Android10:/ # rgaImDemo
3032*4882a593Smuzhiyunlibrga:RGA_GET_VERSION:3.02,3.020000
3033*4882a593Smuzhiyunctx=0x7864d7c520,ctx->rgaFd=3
3034*4882a593Smuzhiyun
3035*4882a593Smuzhiyun=============================================================================================
3036*4882a593Smuzhiyun   usage: rgaImDemo [--help/-h] [--while/-w=(time)] [--querystring/--querystring=<options>]
3037*4882a593Smuzhiyun                    [--copy] [--resize=<up/down>] [--crop] [--rotate=90/180/270]
3038*4882a593Smuzhiyun                    [--flip=H/V] [--translate] [--blend] [--cvtcolor]
3039*4882a593Smuzhiyun                    [--fill=blue/green/red]
3040*4882a593Smuzhiyun         --help/-h     Call help
3041*4882a593Smuzhiyun         --while/w     Set the loop mode. Users can set the number of cycles by themselves.
3042*4882a593Smuzhiyun         --querystring You can print the version or support information corresponding to the current version of RGA according to the options.
3043*4882a593Smuzhiyun                       If there is no input options, all versions and support information of the current version of RGA will be printed.
3044*4882a593Smuzhiyun                       <options>:
3045*4882a593Smuzhiyun                       vendor           Print vendor information.
3046*4882a593Smuzhiyun                       version          Print RGA version, and librga/im2d_api version.
3047*4882a593Smuzhiyun                       maxinput         Print max input resolution.
3048*4882a593Smuzhiyun                       maxoutput        Print max output resolution.
3049*4882a593Smuzhiyun                       scalelimit       Print scale limit.
3050*4882a593Smuzhiyun                       inputformat      Print supported input formats.
3051*4882a593Smuzhiyun                       outputformat     Print supported output formats.
3052*4882a593Smuzhiyun                       expected         Print expected performance.
3053*4882a593Smuzhiyun                       all              Print all information.
3054*4882a593Smuzhiyun         --copy        Copy the image by RGA.The default is 720p to 720p.
3055*4882a593Smuzhiyun         --resize      resize the image by RGA.You can choose to up(720p->1080p) or down(720p->480p).
3056*4882a593Smuzhiyun         --crop        Crop the image by RGA.By default, a picture of 300*300 size is cropped from (100,100).
3057*4882a593Smuzhiyun         --rotate      Rotate the image by RGA.You can choose to rotate 90/180/270 degrees.
3058*4882a593Smuzhiyun
3059*4882a593Smuzhiyun         --flip        Flip the image by RGA.You can choice of horizontal flip or vertical flip.
3060*4882a593Smuzhiyun         --translate   Translate the image by RGA.Default translation (300,300).
3061*4882a593Smuzhiyun         --blend       Blend the image by RGA.Default, Porter-Duff 'SRC over DST'.
3062*4882a593Smuzhiyun         --cvtcolor    Modify the image format and color space by RGA.The default is RGBA8888 to NV12.
3063*4882a593Smuzhiyun         --fill        Fill the image by RGA to blue, green, red, when you set the option to the corresponding color.
3064*4882a593Smuzhiyun=============================================================================================
3065*4882a593Smuzhiyun```
3066*4882a593Smuzhiyun
3067*4882a593Smuzhiyun> 所有的参数解析在目录/librga/demo/im2d_api_demo/args.cpp中。
3068*4882a593Smuzhiyun
3069*4882a593Smuzhiyun
3070*4882a593Smuzhiyun
3071*4882a593Smuzhiyun#### 循环执行demo
3072*4882a593Smuzhiyun
3073*4882a593Smuzhiyun> 使用如下命令循环执行示例demo,循环命令必须在所有参数之前,循环次数为int型,默认每次循环间隔200ms。
3074*4882a593Smuzhiyun
3075*4882a593Smuzhiyun```
3076*4882a593SmuzhiyunrgaImDemo -w6 --copy
3077*4882a593SmuzhiyunrgaImDemo --while=6 --copy
3078*4882a593Smuzhiyun```
3079*4882a593Smuzhiyun
3080*4882a593Smuzhiyun
3081*4882a593Smuzhiyun
3082*4882a593Smuzhiyun#### 获取RGA版本及支持信息
3083*4882a593Smuzhiyun
3084*4882a593Smuzhiyun> 使用如下命令获取版本及支持信息:
3085*4882a593Smuzhiyun
3086*4882a593Smuzhiyun```
3087*4882a593SmuzhiyunrgaImDemo --querystring
3088*4882a593SmuzhiyunrgaImDemo --querystring=<options>
3089*4882a593Smuzhiyun```
3090*4882a593Smuzhiyun
3091*4882a593Smuzhiyun> 该命令有可选options,没有options则默认视为选择=all,可选options如下:
3092*4882a593Smuzhiyun
3093*4882a593Smuzhiyun```
3094*4882a593Smuzhiyunoptions:
3095*4882a593Smuzhiyun	=vendor				打印厂商信息
3096*4882a593Smuzhiyun	=version			打印版本信息
3097*4882a593Smuzhiyun	=maxinput			打印支持的最大输入分辨率
3098*4882a593Smuzhiyun	=maxoutput			打印支持的最大输出分辨率
3099*4882a593Smuzhiyun	=scalelimit			打印支持的缩放倍数
3100*4882a593Smuzhiyun	=inputformat		打印支持的输入格式
3101*4882a593Smuzhiyun	=outputformat		打印支持的输出格式
3102*4882a593Smuzhiyun	=expected			打印预期性能
3103*4882a593Smuzhiyun	=all				打印所有信息
3104*4882a593Smuzhiyun```
3105*4882a593Smuzhiyun
3106*4882a593Smuzhiyun##### 代码解析
3107*4882a593Smuzhiyun
3108*4882a593Smuzhiyun> 根据main()传参决定打印出的不同信息。
3109*4882a593Smuzhiyun
3110*4882a593Smuzhiyun```c++
3111*4882a593Smuzhiyun	/*将main()传参转化为QUERYSTRING_INFO枚举值*/
3112*4882a593Smuzhiyun	IM_INFO = (QUERYSTRING_INFO)parm_data[MODE_QUERYSTRING];
3113*4882a593Smuzhiyun	/*打印querystring()返回的字符串,即所需要的信息*/
3114*4882a593Smuzhiyun	printf("\n%s\n", querystring(IM_INFO));
3115*4882a593Smuzhiyun```
3116*4882a593Smuzhiyun
3117*4882a593Smuzhiyun
3118*4882a593Smuzhiyun
3119*4882a593Smuzhiyun#### 图像缩放
3120*4882a593Smuzhiyun
3121*4882a593Smuzhiyun> 使用如下命令进行图像缩放测试
3122*4882a593Smuzhiyun
3123*4882a593Smuzhiyun```
3124*4882a593SmuzhiyunrgaImDemo --resize=up
3125*4882a593SmuzhiyunrgaImDemo --resize=down
3126*4882a593Smuzhiyun```
3127*4882a593Smuzhiyun
3128*4882a593Smuzhiyun> 该功能必须填入可选options,可选options如下:
3129*4882a593Smuzhiyun
3130*4882a593Smuzhiyun```
3131*4882a593Smuzhiyunoptions:
3132*4882a593Smuzhiyun	=up					图像分辨率放大至1920x1080
3133*4882a593Smuzhiyun	=down 				图像分辨率缩小至720x480
3134*4882a593Smuzhiyun```
3135*4882a593Smuzhiyun
3136*4882a593Smuzhiyun##### 代码解析
3137*4882a593Smuzhiyun
3138*4882a593Smuzhiyun> 根据main()传参(up/down)决定放大或是缩小,即针对不同场景,重新初始化、清空buffer,填充rga_buffer_t结构体,并将最终的存储src、dst图像数据的rga_buffer_t结构体传入imresize()。
3139*4882a593Smuzhiyun
3140*4882a593Smuzhiyun```c++
3141*4882a593Smuzhiyun	switch(parm_data[MODE_RESIZE])
3142*4882a593Smuzhiyun	{
3143*4882a593Smuzhiyun        /*放大图像*/
3144*4882a593Smuzhiyun		case IM_UP_SCALE :
3145*4882a593Smuzhiyun            /*重新初始化Graphicbuffer为分辨率1920x1080对应大小*/
3146*4882a593Smuzhiyun			dst_buf = GraphicBuffer_Init(1920, 1080, DST_FORMAT);
3147*4882a593Smuzhiyun            /*清空buffer*/
3148*4882a593Smuzhiyun			GraphicBuffer_Fill(dst_buf, EMPTY_BUFF, 1);
3149*4882a593Smuzhiyun            /*重新填充存储dst数据的rga_buffer_t结构体*/
3150*4882a593Smuzhiyun			dst = wrapbuffer_GraphicBuffer(dst_buf);
3151*4882a593Smuzhiyun			break;
3152*4882a593Smuzhiyun
3153*4882a593Smuzhiyun		case IM_DOWN_SCALE :
3154*4882a593Smuzhiyun            /*重新初始化Graphicbuffer为分辨率1920x1080对应大小*/
3155*4882a593Smuzhiyun			dst_buf = GraphicBuffer_Init(720, 480, DST_FORMAT);
3156*4882a593Smuzhiyun            /*清空buffer*/
3157*4882a593Smuzhiyun			GraphicBuffer_Fill(dst_buf, EMPTY_BUFF, 1);
3158*4882a593Smuzhiyun            /*重新填充存储dst数据的rga_buffer_t结构体*/
3159*4882a593Smuzhiyun			dst = wrapbuffer_GraphicBuffer(dst_buf);
3160*4882a593Smuzhiyun			break;
3161*4882a593Smuzhiyun	}
3162*4882a593Smuzhiyun	/*将rga_buffer_t格式的结构体src、dst传入imresize()*/
3163*4882a593Smuzhiyun	STATUS = imresize(src, dst);
3164*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3165*4882a593Smuzhiyun	printf("resizing .... %s\n", imStrError(STATUS));
3166*4882a593Smuzhiyun```
3167*4882a593Smuzhiyun
3168*4882a593Smuzhiyun
3169*4882a593Smuzhiyun
3170*4882a593Smuzhiyun#### 图像裁剪
3171*4882a593Smuzhiyun
3172*4882a593Smuzhiyun> 使用如下命令测试图像裁剪
3173*4882a593Smuzhiyun
3174*4882a593Smuzhiyun```
3175*4882a593SmuzhiyunrgaImDemo --crop
3176*4882a593Smuzhiyun```
3177*4882a593Smuzhiyun
3178*4882a593Smuzhiyun> 该功能无可选options,默认裁剪坐标LT(100,100),RT(400,100),LB(100,400),RB(400,400)内的图像。
3179*4882a593Smuzhiyun
3180*4882a593Smuzhiyun##### 代码解析
3181*4882a593Smuzhiyun
3182*4882a593Smuzhiyun> 将需要裁剪的大小在存储src矩形数据的im_rect结构体中赋值,并将存储src、dst图像数据的rga_buffer_t结构体传入imcrop()。
3183*4882a593Smuzhiyun
3184*4882a593Smuzhiyun```c++
3185*4882a593Smuzhiyun	/*这里通过x、y确定裁剪顶点的坐标,width、height确定裁剪区域大小*/
3186*4882a593Smuzhiyun	src_rect.x      = 100;
3187*4882a593Smuzhiyun	src_rect.y      = 100;
3188*4882a593Smuzhiyun	src_rect.width  = 300;
3189*4882a593Smuzhiyun	src_rect.height = 300;
3190*4882a593Smuzhiyun
3191*4882a593Smuzhiyun	/*将im_rect格式的结构体src_rect与rga_buffer_t格式的结构体src、dst传入imcrop()*/
3192*4882a593Smuzhiyun	STATUS = imcrop(src, dst, src_rect);
3193*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3194*4882a593Smuzhiyun	printf("cropping .... %s\n", imStrError(STATUS));
3195*4882a593Smuzhiyun```
3196*4882a593Smuzhiyun
3197*4882a593Smuzhiyun
3198*4882a593Smuzhiyun
3199*4882a593Smuzhiyun#### 图像旋转
3200*4882a593Smuzhiyun
3201*4882a593Smuzhiyun> 使用如下命令测试图像旋转
3202*4882a593Smuzhiyun
3203*4882a593Smuzhiyun```
3204*4882a593SmuzhiyunrgaImDemo --rotate=90
3205*4882a593SmuzhiyunrgaImDemo --rotate=180
3206*4882a593SmuzhiyunrgaImDemo --rotate=270
3207*4882a593Smuzhiyun```
3208*4882a593Smuzhiyun
3209*4882a593Smuzhiyun> 该功能必须填入可选options,可选options如下:
3210*4882a593Smuzhiyun
3211*4882a593Smuzhiyun```
3212*4882a593Smuzhiyunoptions:
3213*4882a593Smuzhiyun	=90					图像旋转90° ,输出图像分辨率宽高交换
3214*4882a593Smuzhiyun	=180 				图像旋转180°,输出图像分辨率不变
3215*4882a593Smuzhiyun	=270 				图像旋转270°,输出图像分辨率宽高交换
3216*4882a593Smuzhiyun```
3217*4882a593Smuzhiyun
3218*4882a593Smuzhiyun##### 代码解析
3219*4882a593Smuzhiyun
3220*4882a593Smuzhiyun> 根据main()传参(90/180/270)决定旋转角度,并将传参转化为IM_USAGE枚举值,与存储src、dst图像数据的rga_buffer_t结构体一同传入imrotate()。
3221*4882a593Smuzhiyun
3222*4882a593Smuzhiyun```c++
3223*4882a593Smuzhiyun	/*将main()传参转化为IM_USAGE枚举值*/
3224*4882a593Smuzhiyun	ROTATE = (IM_USAGE)parm_data[MODE_ROTATE];
3225*4882a593Smuzhiyun
3226*4882a593Smuzhiyun	/*将标识旋转角度的IM_USAGE枚举值与rga_buffer_t格式的结构体src、dst一同传入imrotate()*/
3227*4882a593Smuzhiyun	STATUS = imrotate(src, dst, ROTATE);
3228*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3229*4882a593Smuzhiyun	printf("rotating .... %s\n", imStrError(STATUS));
3230*4882a593Smuzhiyun```
3231*4882a593Smuzhiyun
3232*4882a593Smuzhiyun
3233*4882a593Smuzhiyun
3234*4882a593Smuzhiyun#### 图像镜像翻转
3235*4882a593Smuzhiyun
3236*4882a593Smuzhiyun> 使用如下命令测试镜像翻转
3237*4882a593Smuzhiyun
3238*4882a593Smuzhiyun```
3239*4882a593SmuzhiyunrgaImDemo --flip=H
3240*4882a593SmuzhiyunrgaImDemo --flip=V
3241*4882a593Smuzhiyun```
3242*4882a593Smuzhiyun
3243*4882a593Smuzhiyun> 该功能必须填入可选options,可选options如下:
3244*4882a593Smuzhiyun
3245*4882a593Smuzhiyun```
3246*4882a593Smuzhiyunoptions:
3247*4882a593Smuzhiyun	=H					图像水平镜像翻转
3248*4882a593Smuzhiyun	=V 					图像垂直镜像翻转
3249*4882a593Smuzhiyun```
3250*4882a593Smuzhiyun
3251*4882a593Smuzhiyun##### 代码解析
3252*4882a593Smuzhiyun
3253*4882a593Smuzhiyun> 根据main函数传参(H/V)决定镜像翻转方向,并将传参转化为IM_USAGE枚举值,与存储src、dst图像数据的rga_buffer_t结构体一同传入imflip()。
3254*4882a593Smuzhiyun
3255*4882a593Smuzhiyun```c++
3256*4882a593Smuzhiyun	/*将main()传参转化为IM_USAGE枚举值*/
3257*4882a593Smuzhiyun	FLIP = (IM_USAGE)parm_data[MODE_FLIP];
3258*4882a593Smuzhiyun
3259*4882a593Smuzhiyun	/*将标识镜像反转方向的IM_USAGE枚举值与rga_buffer_t格式的结构体src、dst一同传入imflip()*/
3260*4882a593Smuzhiyun	STATUS = imflip(src, dst, FLIP);
3261*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3262*4882a593Smuzhiyun	printf("flipping .... %s\n", imStrError(STATUS));
3263*4882a593Smuzhiyun```
3264*4882a593Smuzhiyun
3265*4882a593Smuzhiyun
3266*4882a593Smuzhiyun
3267*4882a593Smuzhiyun#### 图像颜色填充
3268*4882a593Smuzhiyun
3269*4882a593Smuzhiyun> 使用如下命令测试颜色填充
3270*4882a593Smuzhiyun
3271*4882a593Smuzhiyun```
3272*4882a593SmuzhiyunrgaImDemo --fill=blue
3273*4882a593SmuzhiyunrgaImDemo --fill=green
3274*4882a593SmuzhiyunrgaImDemo --fill=red
3275*4882a593Smuzhiyun```
3276*4882a593Smuzhiyun
3277*4882a593Smuzhiyun该功能必须填入可选options,默认填充颜色在坐标LT(100,100),RT(400,100),LB(100,400),RB(400,400)内的图像,可选options如下:
3278*4882a593Smuzhiyun
3279*4882a593Smuzhiyun```
3280*4882a593Smuzhiyunoptions:
3281*4882a593Smuzhiyun	=blue				图像颜色填充为蓝色
3282*4882a593Smuzhiyun	=green				图像颜色填充为绿色
3283*4882a593Smuzhiyun	=red				图像颜色填充为红色
3284*4882a593Smuzhiyun```
3285*4882a593Smuzhiyun
3286*4882a593Smuzhiyun##### 代码解析
3287*4882a593Smuzhiyun
3288*4882a593Smuzhiyun> 根据main函数传参(bule/green/red)决定填充颜色,将需要填充的大小在存储dst矩形数据的im_rect结构体中赋值,并将传参转化为对应颜色的16进制数,与存储dst图像数据的rga_buffer_t结构体一同传入imfill()。
3289*4882a593Smuzhiyun
3290*4882a593Smuzhiyun```c++
3291*4882a593Smuzhiyun	/*将main()传参转化为对应颜色的16进制数*/
3292*4882a593Smuzhiyun	COLOR = parm_data[MODE_FILL];
3293*4882a593Smuzhiyun
3294*4882a593Smuzhiyun	/*这里通过x、y确定裁剪顶点的坐标,width、height确定填充颜色区域大小*/
3295*4882a593Smuzhiyun	dst_rect.x      = 100;
3296*4882a593Smuzhiyun	dst_rect.y      = 100;
3297*4882a593Smuzhiyun	dst_rect.width  = 300;
3298*4882a593Smuzhiyun	dst_rect.height = 300;
3299*4882a593Smuzhiyun
3300*4882a593Smuzhiyun	/*将im_rect格式的结构体dst_rect、对应颜色的16进制数与rga_buffer_t格式的结构体src、dst一同传入imfill()*/
3301*4882a593Smuzhiyun	STATUS = imfill(dst, dst_rect, COLOR);
3302*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3303*4882a593Smuzhiyun	printf("filling .... %s\n", imStrError(STATUS));
3304*4882a593Smuzhiyun```
3305*4882a593Smuzhiyun
3306*4882a593Smuzhiyun
3307*4882a593Smuzhiyun
3308*4882a593Smuzhiyun#### 图像平移
3309*4882a593Smuzhiyun
3310*4882a593Smuzhiyun> 使用如下命令测试图像平移操作
3311*4882a593Smuzhiyun
3312*4882a593Smuzhiyun```
3313*4882a593SmuzhiyunrgaImDemo --translate
3314*4882a593Smuzhiyun```
3315*4882a593Smuzhiyun
3316*4882a593Smuzhiyun> 该功能无可选options,默认顶点(左上角坐标)平移至(300,300),即向右平移300个像素,再向下平移300个像素。
3317*4882a593Smuzhiyun
3318*4882a593Smuzhiyun##### 代码解析
3319*4882a593Smuzhiyun
3320*4882a593Smuzhiyun> 将需要平移的偏移量在存储src矩形数据的im_rect结构体中赋值,并将存储src、dst图像数据的rga_buffer_t结构体传入imtranslate()。
3321*4882a593Smuzhiyun
3322*4882a593Smuzhiyun```c++
3323*4882a593Smuzhiyun	/*这里通过x、y确定平移后图像的顶点的坐标*/
3324*4882a593Smuzhiyun	src_rect.x = 300;
3325*4882a593Smuzhiyun	src_rect.y = 300;
3326*4882a593Smuzhiyun
3327*4882a593Smuzhiyun	/*将im_rect格式的结构体src_rect与rga_buffer_t格式的结构体src、dst一同传入imtranslate()*/
3328*4882a593Smuzhiyun	STATUS = imtranslate(src, dst, src_rect.x, src_rect.y);
3329*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3330*4882a593Smuzhiyun	printf("translating .... %s\n", imStrError(STATUS));
3331*4882a593Smuzhiyun```
3332*4882a593Smuzhiyun
3333*4882a593Smuzhiyun
3334*4882a593Smuzhiyun
3335*4882a593Smuzhiyun#### 图像拷贝
3336*4882a593Smuzhiyun
3337*4882a593Smuzhiyun> 使用如下命令测试图像拷贝
3338*4882a593Smuzhiyun
3339*4882a593Smuzhiyun```
3340*4882a593SmuzhiyunrgaImDemo --copy
3341*4882a593Smuzhiyun```
3342*4882a593Smuzhiyun
3343*4882a593Smuzhiyun> 该功能无可选options,默认拷贝分辨率为1280x720,格式为RGBA8888的图像。
3344*4882a593Smuzhiyun
3345*4882a593Smuzhiyun##### 代码解析
3346*4882a593Smuzhiyun
3347*4882a593Smuzhiyun> 将存储src、dst图像数据的rga_buffer_t结构体传入imcopy()。
3348*4882a593Smuzhiyun
3349*4882a593Smuzhiyun```c++
3350*4882a593Smuzhiyun	/*rga_buffer_t格式的结构体src、dst传入imcopy()*/
3351*4882a593Smuzhiyun	STATUS = imcopy(src, dst);
3352*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3353*4882a593Smuzhiyun	printf("copying .... %s\n", imStrError(STATUS));
3354*4882a593Smuzhiyun```
3355*4882a593Smuzhiyun
3356*4882a593Smuzhiyun
3357*4882a593Smuzhiyun
3358*4882a593Smuzhiyun#### 图像合成
3359*4882a593Smuzhiyun
3360*4882a593Smuzhiyun> 使用如下命令测试图像合成
3361*4882a593Smuzhiyun
3362*4882a593Smuzhiyun```
3363*4882a593SmuzhiyunrgaImDemo --blend
3364*4882a593Smuzhiyun```
3365*4882a593Smuzhiyun
3366*4882a593Smuzhiyun> 该功能无可选options,默认合成模式为 IM_ALPHA_BLEND_DST 模式。
3367*4882a593Smuzhiyun
3368*4882a593Smuzhiyun##### 代码解析
3369*4882a593Smuzhiyun
3370*4882a593Smuzhiyun> 将存储src、dst图像数据的rga_buffer_t结构体传入imblend()。
3371*4882a593Smuzhiyun
3372*4882a593Smuzhiyun```c++
3373*4882a593Smuzhiyun	/*rga_buffer_t格式的结构体src、dst传入imblend()*/
3374*4882a593Smuzhiyun	STATUS = imblend(src, dst);
3375*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3376*4882a593Smuzhiyun	printf("blending .... %s\n", imStrError(STATUS));
3377*4882a593Smuzhiyun```
3378*4882a593Smuzhiyun
3379*4882a593Smuzhiyun
3380*4882a593Smuzhiyun
3381*4882a593Smuzhiyun#### 图像格式转换
3382*4882a593Smuzhiyun
3383*4882a593Smuzhiyun> 使用如下命令测试图像格式转换
3384*4882a593Smuzhiyun
3385*4882a593Smuzhiyun```
3386*4882a593SmuzhiyunrgaImDemo --cvtcolor
3387*4882a593Smuzhiyun```
3388*4882a593Smuzhiyun
3389*4882a593Smuzhiyun> 该功能无可选options,默认将分辨率为1280x720的图像从RGBA8888格式转换为NV12格式。
3390*4882a593Smuzhiyun
3391*4882a593Smuzhiyun##### 代码解析
3392*4882a593Smuzhiyun
3393*4882a593Smuzhiyun将需要转换的格式在rga_buffer_t的成员变量format中赋值,并将存储src、dst图像数据的rga_buffer_t结构体传入imcvtcolor()。
3394*4882a593Smuzhiyun
3395*4882a593Smuzhiyun```c++
3396*4882a593Smuzhiyun	/*将转换前后的格式赋值给对应的rga_buffer_t结构体的成员变量format*/
3397*4882a593Smuzhiyun	src.format = HAL_PIXEL_FORMAT_RGBA_8888;
3398*4882a593Smuzhiyun	dst.format = HAL_PIXEL_FORMAT_YCrCb_NV12;
3399*4882a593Smuzhiyun
3400*4882a593Smuzhiyun	/*将需要转换的格式与rga_buffer_t格式的结构体src、dst一同传入imcvtcolor()*/
3401*4882a593Smuzhiyun	STATUS = imcvtcolor(src, dst, src.format, dst.format);
3402*4882a593Smuzhiyun	/*根据返回的IM_STATUS枚举值打印运行状态*/
3403*4882a593Smuzhiyun	printf("cvtcolor .... %s\n", imStrError(STATUS));
3404*4882a593Smuzhiyun```
3405