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