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*4882a593Smuzhiyun无 2547*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*4882a593Smuzhiyun无 2577*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*4882a593Smuzhiyun无 2634*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*4882a593Smuzhiyun无 2668*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*4882a593Smuzhiyun无 2723*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*4882a593Smuzhiyun无 2761*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*4882a593Smuzhiyun无 2796*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