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