123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940 |
- /*
- * Copyright (C) 2022 Rockchip Electronics Co., Ltd.
- * Authors:
- * Cerf Yu <cerf.yu@rock-chips.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef _im2d_single_h_
- #define _im2d_single_h_
- #include "im2d_type.h"
- #ifdef __cplusplus
- /**
- * copy
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imcopy(const rga_buffer_t src, rga_buffer_t dst, int sync = 1, int *release_fence_fd = NULL);
- /**
- * Resize
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param fx
- * X-direction resize factor.
- * @param fy
- * X-direction resize factor.
- * @param interpolation
- * Interpolation formula(Only RGA1 support).
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * Crop
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param rect
- * The rectangle on the source image that needs to be cropped.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * translate
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param x
- * Output the coordinates of the starting point in the X-direction of the destination image.
- * @param y
- * Output the coordinates of the starting point in the Y-direction of the destination image.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * format convert
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param sfmt
- * The source image format.
- * @param dfmt
- * The destination image format.
- * @param mode
- * color space mode:
- * IM_YUV_TO_RGB_BT601_LIMIT
- * IM_YUV_TO_RGB_BT601_FULL
- * IM_YUV_TO_RGB_BT709_LIMIT
- * IM_RGB_TO_YUV_BT601_FULL
- * IM_RGB_TO_YUV_BT601_LIMIT
- * IM_RGB_TO_YUV_BT709_LIMIT
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * rotation
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param rotation
- * IM_HAL_TRANSFORM_ROT_90
- * IM_HAL_TRANSFORM_ROT_180
- * IM_HAL_TRANSFORM_ROT_270
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imrotate(const rga_buffer_t src, rga_buffer_t dst, int rotation, int sync = 1, int *release_fence_fd = NULL);
- /**
- * flip
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param mode
- * IM_HAL_TRANSFORM_FLIP_H
- * IM_HAL_TRANSFORM_FLIP_V
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imflip(const rga_buffer_t src, rga_buffer_t dst, int mode, int sync = 1, int *release_fence_fd = NULL);
- /**
- * 2-channel blend (SRC + DST -> DST or SRCA + SRCB -> DST)
- *
- * @param fg_image
- * The foreground image.
- * @param bg_image
- * The background image, which is also the output destination image.
- * @param mode
- * Port-Duff mode:
- * IM_ALPHA_BLEND_SRC
- * IM_ALPHA_BLEND_DST
- * IM_ALPHA_BLEND_SRC_OVER
- * IM_ALPHA_BLEND_DST_OVER
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imblend(const rga_buffer_t fd_image, rga_buffer_t bg_image, int mode = IM_ALPHA_BLEND_SRC_OVER, int sync = 1, int *release_fence_fd = NULL);
- /**
- * 3-channel blend (SRC + DST -> DST or SRCA + SRCB -> DST)
- *
- * @param fg_image
- * The foreground image.
- * @param bg_image
- * The background image.
- * @param output_image
- * The output destination image.
- * @param mode
- * Port-Duff mode:
- * IM_ALPHA_BLEND_SRC
- * IM_ALPHA_BLEND_DST
- * IM_ALPHA_BLEND_SRC_OVER
- * IM_ALPHA_BLEND_DST_OVER
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- * @param release_fence_fd
- * When 'sync == 0', the fence_fd used to identify the current job state
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * color key
- *
- * @param fg_image
- * The foreground image.
- * @param bg_image
- * The background image, which is also the output destination image.
- * @param colorkey_range
- * The range of color key.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * OSD
- *
- * @param osd
- * The osd text block.
- * @param dst
- * The background image.
- * @param osd_rect
- * The rectangle on the source image that needs to be OSD.
- * @param osd_config
- * osd mode configuration.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imosd(const rga_buffer_t osd,const rga_buffer_t dst,
- const im_rect osd_rect, im_osd_t *osd_config,
- int sync = 1, int *release_fence_fd = NULL);
- /**
- * nn quantize
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param nninfo
- * nn configuration
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * ROP
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param rop_code
- * The ROP opcode.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * fill/reset/draw
- *
- * @param dst
- * The output destination image.
- * @param rect
- * The rectangle on the source image that needs to be filled with color.
- * @param color
- * The fill color value.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imfill(rga_buffer_t dst, im_rect rect, int color, int sync = 1, int *release_fence_fd = NULL);
- /**
- * fill array
- *
- * @param dst
- * The output destination image.
- * @param rect_array
- * The rectangle arrays on the source image that needs to be filled with color.
- * @param array_size
- * The size of rectangular area arrays.
- * @param color
- * The fill color value.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imfillArray(rga_buffer_t dst, im_rect *rect_array, int array_size, uint32_t color, int sync = 1, int *release_fence_fd = NULL);
- /**
- * fill rectangle
- *
- * @param dst
- * The output destination image.
- * @param rect
- * The rectangle on the source image that needs to be filled with color.
- * @param color
- * The fill color value.
- * @param thickness
- * Thickness of lines that make up the rectangle. Negative values, like -1,
- * mean that the function has to draw a filled rectangle.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imrectangle(rga_buffer_t dst, im_rect rect,
- uint32_t color, int thickness,
- int sync = 1, int *release_fence_fd = NULL);
- /**
- * fill rectangle array
- *
- * @param dst
- * The output destination image.
- * @param rect_array
- * The rectangle arrays on the source image that needs to be filled with color.
- * @param array_size
- * The size of rectangular area arrays.
- * @param color
- * The fill color value.
- * @param thickness
- * Thickness of lines that make up the rectangle. Negative values, like -1,
- * mean that the function has to draw a filled rectangle.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS imrectangleArray(rga_buffer_t dst, im_rect *rect_array, int array_size,
- uint32_t color, int thickness,
- int sync = 1, int *release_fence_fd = NULL);
- /**
- * MOSAIC
- *
- * @param image
- * The output destination image.
- * @param rect
- * The rectangle on the source image that needs to be mosaicked.
- * @param mosaic_mode
- * mosaic block width configuration:
- * IM_MOSAIC_8
- * IM_MOSAIC_16
- * IM_MOSAIC_32
- * IM_MOSAIC_64
- * IM_MOSAIC_128
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS immosaic(const rga_buffer_t image, im_rect rect, int mosaic_mode, int sync = 1, int *release_fence_fd = NULL);
- /**
- * MOSAIC array
- *
- * @param image
- * The output destination image.
- * @param rect_array
- * The rectangle arrays on the source image that needs to be filled with color.
- * @param array_size
- * The size of rectangular area arrays.
- * @param mosaic_mode
- * mosaic block width configuration:
- * IM_MOSAIC_8
- * IM_MOSAIC_16
- * IM_MOSAIC_32
- * IM_MOSAIC_64
- * IM_MOSAIC_128
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS immosaicArray(const rga_buffer_t image, im_rect *rect_array, int array_size, int mosaic_mode, int sync = 1, int *release_fence_fd = NULL);
- /**
- * palette
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param lut
- * The LUT table.
- * @param sync
- * When 'sync == 1', wait for the operation to complete and return, otherwise return directly.
- *
- * @returns success or else negative error code.
- */
- 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);
- /**
- * process for single task mode
- *
- * @param src
- * The input source image and is also the foreground image in blend.
- * @param dst
- * The output destination image and is also the foreground image in blend.
- * @param pat
- * The foreground image, or a LUT table.
- * @param srect
- * The rectangle on the src channel image that needs to be processed.
- * @param drect
- * The rectangle on the dst channel image that needs to be processed.
- * @param prect
- * The rectangle on the pat channel image that needs to be processed.
- * @param opt
- * The image processing options configuration.
- * @param usage
- * The image processing usage.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS improcess(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t pat,
- im_rect srect, im_rect drect, im_rect prect,
- int acquire_fence_fd, int *release_fence_fd,
- im_opt_t *opt_ptr, int usage);
- /**
- * make border
- *
- * @param src
- * The input source image.
- * @param dst
- * The output destination image.
- * @param top
- * the top pixels
- * @param bottom
- * the bottom pixels
- * @param left
- * the left pixels
- * @param right
- * the right pixels
- * @param border_type
- * Border type.
- * @param value
- * The pixel value at which the border is filled.
- *
- * @returns success or else negative error code.
- */
- IM_API IM_STATUS immakeBorder(rga_buffer_t src, rga_buffer_t dst,
- int top, int bottom, int left, int right,
- int border_type, int value = 0,
- int sync = 1, int acquir_fence_fd = -1, int *release_fence_fd = NULL);
- #endif /* #ifdef __cplusplus */
- IM_C_API IM_STATUS immosaic(const rga_buffer_t image, im_rect rect, int mosaic_mode, int sync);
- IM_C_API IM_STATUS imosd(const rga_buffer_t osd,const rga_buffer_t dst,
- const im_rect osd_rect, im_osd_t *osd_config, int sync);
- IM_C_API IM_STATUS improcess(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t pat,
- im_rect srect, im_rect drect, im_rect prect, int usage);
- /* Start: Symbols reserved for compatibility with macro functions */
- IM_C_API IM_STATUS imcopy_t(const rga_buffer_t src, rga_buffer_t dst, int sync);
- IM_C_API IM_STATUS imresize_t(const rga_buffer_t src, rga_buffer_t dst, double fx, double fy, int interpolation, int sync);
- IM_C_API IM_STATUS imcrop_t(const rga_buffer_t src, rga_buffer_t dst, im_rect rect, int sync);
- IM_C_API IM_STATUS imtranslate_t(const rga_buffer_t src, rga_buffer_t dst, int x, int y, int sync);
- IM_C_API IM_STATUS imcvtcolor_t(rga_buffer_t src, rga_buffer_t dst, int sfmt, int dfmt, int mode, int sync);
- IM_C_API IM_STATUS imrotate_t(const rga_buffer_t src, rga_buffer_t dst, int rotation, int sync);
- IM_C_API IM_STATUS imflip_t (const rga_buffer_t src, rga_buffer_t dst, int mode, int sync);
- IM_C_API IM_STATUS imblend_t(const rga_buffer_t srcA, const rga_buffer_t srcB, rga_buffer_t dst, int mode, int sync);
- IM_C_API IM_STATUS imcolorkey_t(const rga_buffer_t src, rga_buffer_t dst, im_colorkey_range range, int mode, int sync);
- IM_C_API IM_STATUS imquantize_t(const rga_buffer_t src, rga_buffer_t dst, im_nn_t nn_info, int sync);
- IM_C_API IM_STATUS imrop_t(const rga_buffer_t src, rga_buffer_t dst, int rop_code, int sync);
- IM_C_API IM_STATUS imfill_t(rga_buffer_t dst, im_rect rect, int color, int sync);
- IM_C_API IM_STATUS impalette_t(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t lut, int sync);
- /* End: Symbols reserved for compatibility with macro functions */
- #ifndef __cplusplus
- #define RGA_GET_MIN(n1, n2) ((n1) < (n2) ? (n1) : (n2))
- /**
- * copy
- *
- * @param src
- * @param dst
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imcopy(src, dst, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imcopy_t(src, dst, 1); \
- } else if (__argc == 1){ \
- __ret = imcopy_t(src, dst, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * Resize
- *
- * @param src
- * @param dst
- * @param fx
- * @param fy
- * @param interpolation
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imresize(src, dst, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- double __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(double); \
- if (__argc == 0) { \
- __ret = imresize_t(src, dst, 0, 0, INTER_LINEAR, 1); \
- } else if (__argc == 2){ \
- __ret = imresize_t(src, dst, __args[RGA_GET_MIN(__argc, 0)], __args[RGA_GET_MIN(__argc, 1)], INTER_LINEAR, 1); \
- } else if (__argc == 3){ \
- __ret = imresize_t(src, dst, __args[RGA_GET_MIN(__argc, 0)], __args[RGA_GET_MIN(__argc, 1)], (int)__args[RGA_GET_MIN(__argc, 2)], 1); \
- } else if (__argc == 4){ \
- __ret = imresize_t(src, dst, __args[RGA_GET_MIN(__argc, 0)], __args[RGA_GET_MIN(__argc, 1)], (int)__args[RGA_GET_MIN(__argc, 2)], (int)__args[RGA_GET_MIN(__argc, 3)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- #define impyramid(src, dst, direction) \
- imresize_t(src, \
- dst, \
- direction == IM_UP_SCALE ? 0.5 : 2, \
- direction == IM_UP_SCALE ? 0.5 : 2, \
- INTER_LINEAR, 1)
- /**
- * format convert
- *
- * @param src
- * @param dst
- * @param sfmt
- * @param dfmt
- * @param mode
- * color space mode: IM_COLOR_SPACE_MODE
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imcvtcolor(src, dst, sfmt, dfmt, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imcvtcolor_t(src, dst, sfmt, dfmt, IM_COLOR_SPACE_DEFAULT, 1); \
- } else if (__argc == 1){ \
- __ret = imcvtcolor_t(src, dst, sfmt, dfmt, (int)__args[RGA_GET_MIN(__argc, 0)], 1); \
- } else if (__argc == 2){ \
- __ret = imcvtcolor_t(src, dst, sfmt, dfmt, (int)__args[RGA_GET_MIN(__argc, 0)], (int)__args[RGA_GET_MIN(__argc, 1)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * Crop
- *
- * @param src
- * @param dst
- * @param rect
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imcrop(src, dst, rect, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imcrop_t(src, dst, rect, 1); \
- } else if (__argc == 1){ \
- __ret = imcrop_t(src, dst, rect, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * translate
- *
- * @param src
- * @param dst
- * @param x
- * @param y
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imtranslate(src, dst, x, y, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imtranslate_t(src, dst, x, y, 1); \
- } else if (__argc == 1){ \
- __ret = imtranslate_t(src, dst, x, y, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * rotation
- *
- * @param src
- * @param dst
- * @param rotation
- * IM_HAL_TRANSFORM_ROT_90
- * IM_HAL_TRANSFORM_ROT_180
- * IM_HAL_TRANSFORM_ROT_270
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imrotate(src, dst, rotation, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imrotate_t(src, dst, rotation, 1); \
- } else if (__argc == 1){ \
- __ret = imrotate_t(src, dst, rotation, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * flip
- *
- * @param src
- * @param dst
- * @param mode
- * IM_HAL_TRANSFORM_FLIP_H
- * IM_HAL_TRANSFORM_FLIP_V
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imflip(src, dst, mode, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imflip_t(src, dst, mode, 1); \
- } else if (__argc == 1){ \
- __ret = imflip_t(src, dst, mode, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * blend (SRC + DST -> DST or SRCA + SRCB -> DST)
- *
- * @param srcA
- * @param srcB can be NULL.
- * @param dst
- * @param mode
- * IM_ALPHA_BLEND_MODE
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imblend(srcA, dst, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- rga_buffer_t srcB; \
- memset(&srcB, 0x00, sizeof(rga_buffer_t)); \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imblend_t(srcA, srcB, dst, IM_ALPHA_BLEND_SRC_OVER, 1); \
- } else if (__argc == 1){ \
- __ret = imblend_t(srcA, srcB, dst, (int)__args[RGA_GET_MIN(__argc, 0)], 1); \
- } else if (__argc == 2){ \
- __ret = imblend_t(srcA, srcB, dst, (int)__args[RGA_GET_MIN(__argc, 0)], (int)__args[RGA_GET_MIN(__argc, 1)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- #define imcomposite(srcA, srcB, dst, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imblend_t(srcA, srcB, dst, IM_ALPHA_BLEND_SRC_OVER, 1); \
- } else if (__argc == 1){ \
- __ret = imblend_t(srcA, srcB, dst, (int)__args[RGA_GET_MIN(__argc, 0)], 1); \
- } else if (__argc == 2){ \
- __ret = imblend_t(srcA, srcB, dst, (int)__args[RGA_GET_MIN(__argc, 0)], (int)__args[RGA_GET_MIN(__argc, 1)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * color key
- *
- * @param src
- * @param dst
- * @param colorkey_range
- * max color
- * min color
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imcolorkey(src, dst, range, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imcolorkey_t(src, dst, range, IM_ALPHA_COLORKEY_NORMAL, 1); \
- } else if (__argc == 1){ \
- __ret = imcolorkey_t(src, dst, range, (int)__args[RGA_GET_MIN(__argc, 0)], 1); \
- } else if (__argc == 2){ \
- __ret = imcolorkey_t(src, dst, range, (int)__args[RGA_GET_MIN(__argc, 0)], (int)__args[RGA_GET_MIN(__argc, 1)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * nn quantize
- *
- * @param src
- * @param dst
- * @param nninfo
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imquantize(src, dst, nn_info, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imquantize_t(src, dst, nn_info, 1); \
- } else if (__argc == 1){ \
- __ret = imquantize_t(src, dst, nn_info, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * ROP
- *
- * @param src
- * @param dst
- * @param rop_code
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imrop(src, dst, rop_code, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imrop_t(src, dst, rop_code, 1); \
- } else if (__argc == 1){ \
- __ret = imrop_t(src, dst, rop_code, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * fill/reset/draw
- *
- * @param src
- * @param dst
- * @param rect
- * @param color
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define imfill(buf, rect, color, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imfill_t(buf, rect, color, 1); \
- } else if (__argc == 1){ \
- __ret = imfill_t(buf, rect, color, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- #define imreset(buf, rect, color, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imfill_t(buf, rect, color, 1); \
- } else if (__argc == 1){ \
- __ret = imfill_t(buf, rect, color, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- #define imdraw(buf, rect, color, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = imfill_t(buf, rect, color, 1); \
- } else if (__argc == 1){ \
- __ret = imfill_t(buf, rect, color, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /**
- * palette
- *
- * @param src
- * @param dst
- * @param lut
- * @param sync
- * wait until operation complete
- *
- * @returns success or else negative error code.
- */
- #define impalette(src, dst, lut, ...) \
- ({ \
- IM_STATUS __ret = IM_STATUS_SUCCESS; \
- int __args[] = {__VA_ARGS__}; \
- int __argc = sizeof(__args)/sizeof(int); \
- if (__argc == 0) { \
- __ret = impalette_t(src, dst, lut, 1); \
- } else if (__argc == 1){ \
- __ret = impalette_t(src, dst, lut, (int)__args[RGA_GET_MIN(__argc, 0)]); \
- } else { \
- __ret = IM_STATUS_INVALID_PARAM; \
- printf("invalid parameter\n"); \
- } \
- __ret; \
- })
- /* End define IM2D macro API */
- #endif
- #endif /* #ifndef _im2d_single_h_ */
|