13d0407baSopenharmony_ci/* 23d0407baSopenharmony_ci * Copyright (C) 2020 Rockchip Electronics Co., Ltd. 33d0407baSopenharmony_ci * Authors: 43d0407baSopenharmony_ci * PutinLee <putin.lee@rock-chips.com> 53d0407baSopenharmony_ci * Cerf Yu <cerf.yu@rock-chips.com> 63d0407baSopenharmony_ci * 73d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 83d0407baSopenharmony_ci * you may not use this file except in compliance with the License. 93d0407baSopenharmony_ci * You may obtain a copy of the License at 103d0407baSopenharmony_ci * 113d0407baSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 123d0407baSopenharmony_ci * 133d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 143d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 153d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163d0407baSopenharmony_ci * See the License for the specific language governing permissions and 173d0407baSopenharmony_ci * limitations under the License. 183d0407baSopenharmony_ci */ 193d0407baSopenharmony_ci#ifndef _im2d_hpp_ 203d0407baSopenharmony_ci#define _im2d_hpp_ 213d0407baSopenharmony_ci 223d0407baSopenharmony_ci#include "im2d.h" 233d0407baSopenharmony_ci#include "RgaUtils.h" 243d0407baSopenharmony_ci 253d0407baSopenharmony_ci#ifdef ANDROID 263d0407baSopenharmony_ci 273d0407baSopenharmony_ci#include <ui/GraphicBuffer.h> 283d0407baSopenharmony_ci 293d0407baSopenharmony_ciusing namespace android; 303d0407baSopenharmony_ci#endif 313d0407baSopenharmony_ci 323d0407baSopenharmony_ci/* 333d0407baSopenharmony_ci * Import external buffers into RGA driver. 343d0407baSopenharmony_ci * 353d0407baSopenharmony_ci * @param fd/va/pa 363d0407baSopenharmony_ci * Select dma_fd/virtual_address/physical_address by buffer type 373d0407baSopenharmony_ci * @param size 383d0407baSopenharmony_ci * Describes the size of the image buffer 393d0407baSopenharmony_ci * 403d0407baSopenharmony_ci * @return rga_buffer_handle_t 413d0407baSopenharmony_ci */ 423d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_fd(int fd, int size); 433d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int size); 443d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int size); 453d0407baSopenharmony_ci 463d0407baSopenharmony_ci/* 473d0407baSopenharmony_ci * Import external buffers into RGA driver. 483d0407baSopenharmony_ci * 493d0407baSopenharmony_ci * @param fd/va/pa 503d0407baSopenharmony_ci * Select dma_fd/virtual_address/physical_address by buffer type 513d0407baSopenharmony_ci * @param width 523d0407baSopenharmony_ci * Describes the pixel width stride of the image buffer 533d0407baSopenharmony_ci * @param height 543d0407baSopenharmony_ci * Describes the pixel height stride of the image buffer 553d0407baSopenharmony_ci * @param format 563d0407baSopenharmony_ci * Describes the pixel format of the image buffer 573d0407baSopenharmony_ci * 583d0407baSopenharmony_ci * @return rga_buffer_handle_t 593d0407baSopenharmony_ci */ 603d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_fd(int fd, int width, int height, int format); 613d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int width, int height, int format); 623d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int width, int height, int format); 633d0407baSopenharmony_ci 643d0407baSopenharmony_ci#undef wrapbuffer_handle 653d0407baSopenharmony_ciIM_API rga_buffer_t wrapbuffer_handle(rga_buffer_handle_t handle, 663d0407baSopenharmony_ci int width, int height, int format, 673d0407baSopenharmony_ci int wstride, int hstride); 683d0407baSopenharmony_ciIM_API rga_buffer_t wrapbuffer_handle(rga_buffer_handle_t handle, 693d0407baSopenharmony_ci int width, int height, 703d0407baSopenharmony_ci int format); 713d0407baSopenharmony_ci 723d0407baSopenharmony_ci#if ANDROID 733d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_GraphicBuffer_handle(buffer_handle_t hnd); 743d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_GraphicBuffer(sp<GraphicBuffer> buf); 753d0407baSopenharmony_ci 763d0407baSopenharmony_ciIM_API rga_buffer_t wrapbuffer_handle(buffer_handle_t hnd); 773d0407baSopenharmony_ciIM_API rga_buffer_t wrapbuffer_GraphicBuffer(sp<GraphicBuffer> buf); 783d0407baSopenharmony_ci 793d0407baSopenharmony_ci#if USE_AHARDWAREBUFFER 803d0407baSopenharmony_ci#include <android/hardware_buffer.h> 813d0407baSopenharmony_ciIM_API rga_buffer_handle_t importbuffer_AHardwareBuffer(AHardwareBuffer *buf); 823d0407baSopenharmony_ciIM_API rga_buffer_t wrapbuffer_AHardwareBuffer(AHardwareBuffer *buf); 833d0407baSopenharmony_ci 843d0407baSopenharmony_ci#endif /* USE_AHARDWAREBUFFER */ 853d0407baSopenharmony_ci#endif /* ANDROID */ 863d0407baSopenharmony_ci 873d0407baSopenharmony_ci/* 883d0407baSopenharmony_ci * Resize 893d0407baSopenharmony_ci * 903d0407baSopenharmony_ci * @param src 913d0407baSopenharmony_ci * @param dst 923d0407baSopenharmony_ci * @param fx 933d0407baSopenharmony_ci * @param fy 943d0407baSopenharmony_ci * @param interpolation 953d0407baSopenharmony_ci * @param sync 963d0407baSopenharmony_ci * wait until operation complete 973d0407baSopenharmony_ci * 983d0407baSopenharmony_ci * @returns success or else negative error code. 993d0407baSopenharmony_ci */ 1003d0407baSopenharmony_ci#undef imresize 1013d0407baSopenharmony_ciIM_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); 1023d0407baSopenharmony_ci 1033d0407baSopenharmony_ci/* 1043d0407baSopenharmony_ci * Crop 1053d0407baSopenharmony_ci * 1063d0407baSopenharmony_ci * @param src 1073d0407baSopenharmony_ci * @param dst 1083d0407baSopenharmony_ci * @param rect 1093d0407baSopenharmony_ci * @param sync 1103d0407baSopenharmony_ci * wait until operation complete 1113d0407baSopenharmony_ci * 1123d0407baSopenharmony_ci * @returns success or else negative error code. 1133d0407baSopenharmony_ci */ 1143d0407baSopenharmony_ci#undef imcrop 1153d0407baSopenharmony_ciIM_API IM_STATUS imcrop(const rga_buffer_t src, rga_buffer_t dst, im_rect rect, int sync = 1, int *release_fence_fd = NULL); 1163d0407baSopenharmony_ci 1173d0407baSopenharmony_ci/* 1183d0407baSopenharmony_ci * rotation 1193d0407baSopenharmony_ci * 1203d0407baSopenharmony_ci * @param src 1213d0407baSopenharmony_ci * @param dst 1223d0407baSopenharmony_ci * @param rotation 1233d0407baSopenharmony_ci * IM_HAL_TRANSFORM_ROT_90 1243d0407baSopenharmony_ci * IM_HAL_TRANSFORM_ROT_180 1253d0407baSopenharmony_ci * IM_HAL_TRANSFORM_ROT_270 1263d0407baSopenharmony_ci * @param sync 1273d0407baSopenharmony_ci * wait until operation complete 1283d0407baSopenharmony_ci * 1293d0407baSopenharmony_ci * @returns success or else negative error code. 1303d0407baSopenharmony_ci */ 1313d0407baSopenharmony_ci#undef imrotate 1323d0407baSopenharmony_ciIM_API IM_STATUS imrotate(const rga_buffer_t src, rga_buffer_t dst, int rotation, int sync = 1, int *release_fence_fd = NULL); 1333d0407baSopenharmony_ci 1343d0407baSopenharmony_ci/* 1353d0407baSopenharmony_ci * flip 1363d0407baSopenharmony_ci * 1373d0407baSopenharmony_ci * @param src 1383d0407baSopenharmony_ci * @param dst 1393d0407baSopenharmony_ci * @param mode 1403d0407baSopenharmony_ci * IM_HAL_TRANSFORM_FLIP_H 1413d0407baSopenharmony_ci * IM_HAL_TRANSFORM_FLIP_V 1423d0407baSopenharmony_ci * @param sync 1433d0407baSopenharmony_ci * wait until operation complete 1443d0407baSopenharmony_ci * 1453d0407baSopenharmony_ci * @returns success or else negative error code. 1463d0407baSopenharmony_ci */ 1473d0407baSopenharmony_ci#undef imflip 1483d0407baSopenharmony_ciIM_API IM_STATUS imflip(const rga_buffer_t src, rga_buffer_t dst, int mode, int sync = 1, int *release_fence_fd = NULL); 1493d0407baSopenharmony_ci 1503d0407baSopenharmony_ci/* 1513d0407baSopenharmony_ci * fill/reset/draw 1523d0407baSopenharmony_ci * 1533d0407baSopenharmony_ci * @param src 1543d0407baSopenharmony_ci * @param dst 1553d0407baSopenharmony_ci * @param rect 1563d0407baSopenharmony_ci * @param color 1573d0407baSopenharmony_ci * @param sync 1583d0407baSopenharmony_ci * wait until operation complete 1593d0407baSopenharmony_ci * 1603d0407baSopenharmony_ci * @returns success or else negative error code. 1613d0407baSopenharmony_ci */ 1623d0407baSopenharmony_ci#undef imfill 1633d0407baSopenharmony_ciIM_API IM_STATUS imfill(rga_buffer_t dst, im_rect rect, int color, int sync = 1, int *release_fence_fd = NULL); 1643d0407baSopenharmony_ci 1653d0407baSopenharmony_ci/* 1663d0407baSopenharmony_ci * palette 1673d0407baSopenharmony_ci * 1683d0407baSopenharmony_ci * @param src 1693d0407baSopenharmony_ci * @param dst 1703d0407baSopenharmony_ci * @param lut 1713d0407baSopenharmony_ci * @param sync 1723d0407baSopenharmony_ci * wait until operation complete 1733d0407baSopenharmony_ci * 1743d0407baSopenharmony_ci * @returns success or else negative error code. 1753d0407baSopenharmony_ci */ 1763d0407baSopenharmony_ci#undef impalette 1773d0407baSopenharmony_ciIM_API IM_STATUS impalette(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t lut, int sync = 1, int *release_fence_fd = NULL); 1783d0407baSopenharmony_ci 1793d0407baSopenharmony_ci/* 1803d0407baSopenharmony_ci * translate 1813d0407baSopenharmony_ci * 1823d0407baSopenharmony_ci * @param src 1833d0407baSopenharmony_ci * @param dst 1843d0407baSopenharmony_ci * @param x 1853d0407baSopenharmony_ci * @param y 1863d0407baSopenharmony_ci * @param sync 1873d0407baSopenharmony_ci * wait until operation complete 1883d0407baSopenharmony_ci * 1893d0407baSopenharmony_ci * @returns success or else negative error code. 1903d0407baSopenharmony_ci */ 1913d0407baSopenharmony_ci#undef imtranslate 1923d0407baSopenharmony_ciIM_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); 1933d0407baSopenharmony_ci 1943d0407baSopenharmony_ci/* 1953d0407baSopenharmony_ci * copy 1963d0407baSopenharmony_ci * 1973d0407baSopenharmony_ci * @param src 1983d0407baSopenharmony_ci * @param dst 1993d0407baSopenharmony_ci * @param sync 2003d0407baSopenharmony_ci * wait until operation complete 2013d0407baSopenharmony_ci * 2023d0407baSopenharmony_ci * @returns success or else negative error code. 2033d0407baSopenharmony_ci */ 2043d0407baSopenharmony_ci#undef imcopy 2053d0407baSopenharmony_ciIM_API IM_STATUS imcopy(const rga_buffer_t src, rga_buffer_t dst, int sync = 1, int *release_fence_fd = NULL); 2063d0407baSopenharmony_ci 2073d0407baSopenharmony_ci/* 2083d0407baSopenharmony_ci * blend (SRC + DST -> DST or SRCA + SRCB -> DST) 2093d0407baSopenharmony_ci * 2103d0407baSopenharmony_ci * @param srcA 2113d0407baSopenharmony_ci * @param srcB can be NULL. 2123d0407baSopenharmony_ci * @param dst 2133d0407baSopenharmony_ci * @param mode 2143d0407baSopenharmony_ci * IM_ALPHA_BLEND_MODE 2153d0407baSopenharmony_ci * @param sync 2163d0407baSopenharmony_ci * wait until operation complete 2173d0407baSopenharmony_ci * 2183d0407baSopenharmony_ci * @returns success or else negative error code. 2193d0407baSopenharmony_ci */ 2203d0407baSopenharmony_ci#undef imblend 2213d0407baSopenharmony_ciIM_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); 2223d0407baSopenharmony_ci#undef imcomposite 2233d0407baSopenharmony_ciIM_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); 2243d0407baSopenharmony_ci 2253d0407baSopenharmony_ci/* 2263d0407baSopenharmony_ci * color key 2273d0407baSopenharmony_ci * 2283d0407baSopenharmony_ci * @param src 2293d0407baSopenharmony_ci * @param dst 2303d0407baSopenharmony_ci * @param colorkey_range 2313d0407baSopenharmony_ci * max color 2323d0407baSopenharmony_ci * min color 2333d0407baSopenharmony_ci * @param sync 2343d0407baSopenharmony_ci * wait until operation complete 2353d0407baSopenharmony_ci * 2363d0407baSopenharmony_ci * @returns success or else negative error code. 2373d0407baSopenharmony_ci */ 2383d0407baSopenharmony_ci#undef imcolorkey 2393d0407baSopenharmony_ciIM_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); 2403d0407baSopenharmony_ci 2413d0407baSopenharmony_ci/* 2423d0407baSopenharmony_ci * format convert 2433d0407baSopenharmony_ci * 2443d0407baSopenharmony_ci * @param src 2453d0407baSopenharmony_ci * @param dst 2463d0407baSopenharmony_ci * @param sfmt 2473d0407baSopenharmony_ci * @param dfmt 2483d0407baSopenharmony_ci * @param mode 2493d0407baSopenharmony_ci * color space mode: IM_COLOR_SPACE_MODE 2503d0407baSopenharmony_ci * @param sync 2513d0407baSopenharmony_ci * wait until operation complete 2523d0407baSopenharmony_ci * 2533d0407baSopenharmony_ci * @returns success or else negative error code. 2543d0407baSopenharmony_ci */ 2553d0407baSopenharmony_ci#undef imcvtcolor 2563d0407baSopenharmony_ciIM_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); 2573d0407baSopenharmony_ci 2583d0407baSopenharmony_ci/* 2593d0407baSopenharmony_ci * nn quantize 2603d0407baSopenharmony_ci * 2613d0407baSopenharmony_ci * @param src 2623d0407baSopenharmony_ci * @param dst 2633d0407baSopenharmony_ci * @param nninfo 2643d0407baSopenharmony_ci * @param sync 2653d0407baSopenharmony_ci * wait until operation complete 2663d0407baSopenharmony_ci * 2673d0407baSopenharmony_ci * @returns success or else negative error code. 2683d0407baSopenharmony_ci */ 2693d0407baSopenharmony_ci#undef imquantize 2703d0407baSopenharmony_ciIM_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); 2713d0407baSopenharmony_ci 2723d0407baSopenharmony_ci/* 2733d0407baSopenharmony_ci * ROP 2743d0407baSopenharmony_ci * 2753d0407baSopenharmony_ci * @param src 2763d0407baSopenharmony_ci * @param dst 2773d0407baSopenharmony_ci * @param rop_code 2783d0407baSopenharmony_ci * @param sync 2793d0407baSopenharmony_ci * wait until operation complete 2803d0407baSopenharmony_ci * 2813d0407baSopenharmony_ci * @returns success or else negative error code. 2823d0407baSopenharmony_ci */ 2833d0407baSopenharmony_ci#undef imrop 2843d0407baSopenharmony_ciIM_API IM_STATUS imrop(const rga_buffer_t src, rga_buffer_t dst, int rop_code, int sync = 1, int *release_fence_fd = NULL); 2853d0407baSopenharmony_ci 2863d0407baSopenharmony_ci/* 2873d0407baSopenharmony_ci * MOSAIC 2883d0407baSopenharmony_ci * 2893d0407baSopenharmony_ci * @param src 2903d0407baSopenharmony_ci * @param dst 2913d0407baSopenharmony_ci * @param mosaic_mode 2923d0407baSopenharmony_ci * @param sync 2933d0407baSopenharmony_ci * wait until operation complete 2943d0407baSopenharmony_ci * 2953d0407baSopenharmony_ci * @returns success or else negative error code. 2963d0407baSopenharmony_ci */ 2973d0407baSopenharmony_ciIM_API IM_STATUS immosaic(const rga_buffer_t image, im_rect rect, int mosaic_mode, int sync = 1, int *release_fence_fd = NULL); 2983d0407baSopenharmony_ci 2993d0407baSopenharmony_ci/* 3003d0407baSopenharmony_ci * OSD 3013d0407baSopenharmony_ci * 3023d0407baSopenharmony_ci * @param osd 3033d0407baSopenharmony_ci * osd block 3043d0407baSopenharmony_ci * @param dst 3053d0407baSopenharmony_ci * background image 3063d0407baSopenharmony_ci * @param osd_rect 3073d0407baSopenharmony_ci * @param osd_config 3083d0407baSopenharmony_ci * osd mode config 3093d0407baSopenharmony_ci * @param sync 3103d0407baSopenharmony_ci * wait until operation complete 3113d0407baSopenharmony_ci * 3123d0407baSopenharmony_ci * @returns success or else negative error code. 3133d0407baSopenharmony_ci */ 3143d0407baSopenharmony_ciIM_API IM_STATUS imosd(const rga_buffer_t osd,const rga_buffer_t dst, 3153d0407baSopenharmony_ci const im_rect osd_rect, im_osd_t *osd_config, 3163d0407baSopenharmony_ci int sync = 1, int *release_fence_fd = NULL); 3173d0407baSopenharmony_ci 3183d0407baSopenharmony_ci/* 3193d0407baSopenharmony_ci * process 3203d0407baSopenharmony_ci * 3213d0407baSopenharmony_ci * @param src 3223d0407baSopenharmony_ci * @param dst 3233d0407baSopenharmony_ci * @param pat 3243d0407baSopenharmony_ci * @param srect 3253d0407baSopenharmony_ci * @param drect 3263d0407baSopenharmony_ci * @param prect 3273d0407baSopenharmony_ci * @param acquire_fence_fd 3283d0407baSopenharmony_ci * @param release_fence_fd 3293d0407baSopenharmony_ci * @param opt 3303d0407baSopenharmony_ci * @param usage 3313d0407baSopenharmony_ci * 3323d0407baSopenharmony_ci * @returns success or else negative error code. 3333d0407baSopenharmony_ci */ 3343d0407baSopenharmony_ciIM_API IM_STATUS improcess(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t pat, 3353d0407baSopenharmony_ci im_rect srect, im_rect drect, im_rect prect, 3363d0407baSopenharmony_ci int acquire_fence_fd, int *release_fence_fd, im_opt_t *opt_ptr, int usage); 3373d0407baSopenharmony_ciIM_API IM_STATUS improcess(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t pat, 3383d0407baSopenharmony_ci im_rect srect, im_rect drect, im_rect prect, 3393d0407baSopenharmony_ci int acquire_fence_fd, int *release_fence_fd, im_opt_t *opt, int usage, im_ctx_id_t ctx_id); 3403d0407baSopenharmony_ci 3413d0407baSopenharmony_ci#endif /* _im2d_hpp_ */ 3423d0407baSopenharmony_ci 343