1 /* 2 * Copyright (C) 2020 Rockchip Electronics Co., Ltd. 3 * Authors: 4 * PutinLee <putin.lee@rock-chips.com> 5 * Cerf Yu <cerf.yu@rock-chips.com> 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 #ifndef _im2d_hpp_ 20 #define _im2d_hpp_ 21 22 #include "im2d.h" 23 #include "RgaUtils.h" 24 25 #ifdef ANDROID 26 27 #include <ui/GraphicBuffer.h> 28 29 using namespace android; 30 #endif 31 32 /* 33 * Import external buffers into RGA driver. 34 * 35 * @param fd/va/pa 36 * Select dma_fd/virtual_address/physical_address by buffer type 37 * @param size 38 * Describes the size of the image buffer 39 * 40 * @return rga_buffer_handle_t 41 */ 42 IM_API rga_buffer_handle_t importbuffer_fd(int fd, int size); 43 IM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int size); 44 IM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int size); 45 46 /* 47 * Import external buffers into RGA driver. 48 * 49 * @param fd/va/pa 50 * Select dma_fd/virtual_address/physical_address by buffer type 51 * @param width 52 * Describes the pixel width stride of the image buffer 53 * @param height 54 * Describes the pixel height stride of the image buffer 55 * @param format 56 * Describes the pixel format of the image buffer 57 * 58 * @return rga_buffer_handle_t 59 */ 60 IM_API rga_buffer_handle_t importbuffer_fd(int fd, int width, int height, int format); 61 IM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int width, int height, int format); 62 IM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int width, int height, int format); 63 64 #undef wrapbuffer_handle 65 IM_API rga_buffer_t wrapbuffer_handle(rga_buffer_handle_t handle, 66 int width, int height, int format, 67 int wstride, int hstride); 68 IM_API rga_buffer_t wrapbuffer_handle(rga_buffer_handle_t handle, 69 int width, int height, 70 int format); 71 72 #if ANDROID 73 IM_API rga_buffer_handle_t importbuffer_GraphicBuffer_handle(buffer_handle_t hnd); 74 IM_API rga_buffer_handle_t importbuffer_GraphicBuffer(sp<GraphicBuffer> buf); 75 76 IM_API rga_buffer_t wrapbuffer_handle(buffer_handle_t hnd); 77 IM_API rga_buffer_t wrapbuffer_GraphicBuffer(sp<GraphicBuffer> buf); 78 79 #if USE_AHARDWAREBUFFER 80 #include <android/hardware_buffer.h> 81 IM_API rga_buffer_handle_t importbuffer_AHardwareBuffer(AHardwareBuffer *buf); 82 IM_API rga_buffer_t wrapbuffer_AHardwareBuffer(AHardwareBuffer *buf); 83 84 #endif /* USE_AHARDWAREBUFFER */ 85 #endif /* ANDROID */ 86 87 /* 88 * Resize 89 * 90 * @param src 91 * @param dst 92 * @param fx 93 * @param fy 94 * @param interpolation 95 * @param sync 96 * wait until operation complete 97 * 98 * @returns success or else negative error code. 99 */ 100 #undef imresize 101 IM_API IM_STATUS imresize(const rga_buffer_t src, rga_buffer_t dst, double fx = 0, double fy = 0, int interpolation = 0, int sync = 1, int *release_fence_fd = NULL); 102 103 /* 104 * Crop 105 * 106 * @param src 107 * @param dst 108 * @param rect 109 * @param sync 110 * wait until operation complete 111 * 112 * @returns success or else negative error code. 113 */ 114 #undef imcrop 115 IM_API IM_STATUS imcrop(const rga_buffer_t src, rga_buffer_t dst, im_rect rect, int sync = 1, int *release_fence_fd = NULL); 116 117 /* 118 * rotation 119 * 120 * @param src 121 * @param dst 122 * @param rotation 123 * IM_HAL_TRANSFORM_ROT_90 124 * IM_HAL_TRANSFORM_ROT_180 125 * IM_HAL_TRANSFORM_ROT_270 126 * @param sync 127 * wait until operation complete 128 * 129 * @returns success or else negative error code. 130 */ 131 #undef imrotate 132 IM_API IM_STATUS imrotate(const rga_buffer_t src, rga_buffer_t dst, int rotation, int sync = 1, int *release_fence_fd = NULL); 133 134 /* 135 * flip 136 * 137 * @param src 138 * @param dst 139 * @param mode 140 * IM_HAL_TRANSFORM_FLIP_H 141 * IM_HAL_TRANSFORM_FLIP_V 142 * @param sync 143 * wait until operation complete 144 * 145 * @returns success or else negative error code. 146 */ 147 #undef imflip 148 IM_API IM_STATUS imflip(const rga_buffer_t src, rga_buffer_t dst, int mode, int sync = 1, int *release_fence_fd = NULL); 149 150 /* 151 * fill/reset/draw 152 * 153 * @param src 154 * @param dst 155 * @param rect 156 * @param color 157 * @param sync 158 * wait until operation complete 159 * 160 * @returns success or else negative error code. 161 */ 162 #undef imfill 163 IM_API IM_STATUS imfill(rga_buffer_t dst, im_rect rect, int color, int sync = 1, int *release_fence_fd = NULL); 164 165 /* 166 * palette 167 * 168 * @param src 169 * @param dst 170 * @param lut 171 * @param sync 172 * wait until operation complete 173 * 174 * @returns success or else negative error code. 175 */ 176 #undef impalette 177 IM_API IM_STATUS impalette(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t lut, int sync = 1, int *release_fence_fd = NULL); 178 179 /* 180 * translate 181 * 182 * @param src 183 * @param dst 184 * @param x 185 * @param y 186 * @param sync 187 * wait until operation complete 188 * 189 * @returns success or else negative error code. 190 */ 191 #undef imtranslate 192 IM_API IM_STATUS imtranslate(const rga_buffer_t src, rga_buffer_t dst, int x, int y, int sync = 1, int *release_fence_fd = NULL); 193 194 /* 195 * copy 196 * 197 * @param src 198 * @param dst 199 * @param sync 200 * wait until operation complete 201 * 202 * @returns success or else negative error code. 203 */ 204 #undef imcopy 205 IM_API IM_STATUS imcopy(const rga_buffer_t src, rga_buffer_t dst, int sync = 1, int *release_fence_fd = NULL); 206 207 /* 208 * blend (SRC + DST -> DST or SRCA + SRCB -> DST) 209 * 210 * @param srcA 211 * @param srcB can be NULL. 212 * @param dst 213 * @param mode 214 * IM_ALPHA_BLEND_MODE 215 * @param sync 216 * wait until operation complete 217 * 218 * @returns success or else negative error code. 219 */ 220 #undef imblend 221 IM_API IM_STATUS imblend(const rga_buffer_t src, rga_buffer_t dst, int mode = IM_ALPHA_BLEND_SRC_OVER, int sync = 1, int *release_fence_fd = NULL); 222 #undef imcomposite 223 IM_API IM_STATUS imcomposite(const rga_buffer_t srcA, const rga_buffer_t srcB, rga_buffer_t dst, int mode = IM_ALPHA_BLEND_SRC_OVER, int sync = 1, int *release_fence_fd = NULL); 224 225 /* 226 * color key 227 * 228 * @param src 229 * @param dst 230 * @param colorkey_range 231 * max color 232 * min color 233 * @param sync 234 * wait until operation complete 235 * 236 * @returns success or else negative error code. 237 */ 238 #undef imcolorkey 239 IM_API IM_STATUS imcolorkey(const rga_buffer_t src, rga_buffer_t dst, im_colorkey_range range, int mode = IM_ALPHA_COLORKEY_NORMAL, int sync = 1, int *release_fence_fd = NULL); 240 241 /* 242 * format convert 243 * 244 * @param src 245 * @param dst 246 * @param sfmt 247 * @param dfmt 248 * @param mode 249 * color space mode: IM_COLOR_SPACE_MODE 250 * @param sync 251 * wait until operation complete 252 * 253 * @returns success or else negative error code. 254 */ 255 #undef imcvtcolor 256 IM_API IM_STATUS imcvtcolor(rga_buffer_t src, rga_buffer_t dst, int sfmt, int dfmt, int mode = IM_COLOR_SPACE_DEFAULT, int sync = 1, int *release_fence_fd = NULL); 257 258 /* 259 * nn quantize 260 * 261 * @param src 262 * @param dst 263 * @param nninfo 264 * @param sync 265 * wait until operation complete 266 * 267 * @returns success or else negative error code. 268 */ 269 #undef imquantize 270 IM_API IM_STATUS imquantize(const rga_buffer_t src, rga_buffer_t dst, im_nn_t nn_info, int sync = 1, int *release_fence_fd = NULL); 271 272 /* 273 * ROP 274 * 275 * @param src 276 * @param dst 277 * @param rop_code 278 * @param sync 279 * wait until operation complete 280 * 281 * @returns success or else negative error code. 282 */ 283 #undef imrop 284 IM_API IM_STATUS imrop(const rga_buffer_t src, rga_buffer_t dst, int rop_code, int sync = 1, int *release_fence_fd = NULL); 285 286 /* 287 * MOSAIC 288 * 289 * @param src 290 * @param dst 291 * @param mosaic_mode 292 * @param sync 293 * wait until operation complete 294 * 295 * @returns success or else negative error code. 296 */ 297 IM_API IM_STATUS immosaic(const rga_buffer_t image, im_rect rect, int mosaic_mode, int sync = 1, int *release_fence_fd = NULL); 298 299 /* 300 * OSD 301 * 302 * @param osd 303 * osd block 304 * @param dst 305 * background image 306 * @param osd_rect 307 * @param osd_config 308 * osd mode config 309 * @param sync 310 * wait until operation complete 311 * 312 * @returns success or else negative error code. 313 */ 314 IM_API IM_STATUS imosd(const rga_buffer_t osd,const rga_buffer_t dst, 315 const im_rect osd_rect, im_osd_t *osd_config, 316 int sync = 1, int *release_fence_fd = NULL); 317 318 /* 319 * process 320 * 321 * @param src 322 * @param dst 323 * @param pat 324 * @param srect 325 * @param drect 326 * @param prect 327 * @param acquire_fence_fd 328 * @param release_fence_fd 329 * @param opt 330 * @param usage 331 * 332 * @returns success or else negative error code. 333 */ 334 IM_API IM_STATUS improcess(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t pat, 335 im_rect srect, im_rect drect, im_rect prect, 336 int acquire_fence_fd, int *release_fence_fd, im_opt_t *opt_ptr, int usage); 337 IM_API IM_STATUS improcess(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t pat, 338 im_rect srect, im_rect drect, im_rect prect, 339 int acquire_fence_fd, int *release_fence_fd, im_opt_t *opt, int usage, im_ctx_id_t ctx_id); 340 341 #endif /* _im2d_hpp_ */ 342 343