1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 2022 Rockchip Electronics Co., Ltd. 3*4882a593Smuzhiyun * Authors: 4*4882a593Smuzhiyun * Cerf Yu <cerf.yu@rock-chips.com> 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License"); 7*4882a593Smuzhiyun * you may not use this file except in compliance with the License. 8*4882a593Smuzhiyun * You may obtain a copy of the License at 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software 13*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS, 14*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*4882a593Smuzhiyun * See the License for the specific language governing permissions and 16*4882a593Smuzhiyun * limitations under the License. 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun #ifndef _im2d_common_h_ 19*4882a593Smuzhiyun #define _im2d_common_h_ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #include "im2d_type.h" 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /** 24*4882a593Smuzhiyun * Query RGA basic information, supported resolution, supported format, etc. 25*4882a593Smuzhiyun * 26*4882a593Smuzhiyun * @param name 27*4882a593Smuzhiyun * RGA_VENDOR 28*4882a593Smuzhiyun * RGA_VERSION 29*4882a593Smuzhiyun * RGA_MAX_INPUT 30*4882a593Smuzhiyun * RGA_MAX_OUTPUT 31*4882a593Smuzhiyun * RGA_INPUT_FORMAT 32*4882a593Smuzhiyun * RGA_OUTPUT_FORMAT 33*4882a593Smuzhiyun * RGA_EXPECTED 34*4882a593Smuzhiyun * RGA_ALL 35*4882a593Smuzhiyun * 36*4882a593Smuzhiyun * @returns a string describing properties of RGA. 37*4882a593Smuzhiyun */ 38*4882a593Smuzhiyun IM_EXPORT_API const char* querystring(int name); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /** 41*4882a593Smuzhiyun * String to output the error message 42*4882a593Smuzhiyun * 43*4882a593Smuzhiyun * @param status 44*4882a593Smuzhiyun * process result value. 45*4882a593Smuzhiyun * 46*4882a593Smuzhiyun * @returns error message. 47*4882a593Smuzhiyun */ 48*4882a593Smuzhiyun #define imStrError(...) \ 49*4882a593Smuzhiyun ({ \ 50*4882a593Smuzhiyun const char* im2d_api_err; \ 51*4882a593Smuzhiyun int __args[] = {__VA_ARGS__}; \ 52*4882a593Smuzhiyun int __argc = sizeof(__args)/sizeof(int); \ 53*4882a593Smuzhiyun if (__argc == 0) { \ 54*4882a593Smuzhiyun im2d_api_err = imStrError_t(IM_STATUS_INVALID_PARAM); \ 55*4882a593Smuzhiyun } else if (__argc == 1){ \ 56*4882a593Smuzhiyun im2d_api_err = imStrError_t((IM_STATUS)__args[0]); \ 57*4882a593Smuzhiyun } else { \ 58*4882a593Smuzhiyun im2d_api_err = ("Fatal error, imStrError() too many parameters\n"); \ 59*4882a593Smuzhiyun printf("Fatal error, imStrError() too many parameters\n"); \ 60*4882a593Smuzhiyun } \ 61*4882a593Smuzhiyun im2d_api_err; \ 62*4882a593Smuzhiyun }) 63*4882a593Smuzhiyun IM_C_API const char* imStrError_t(IM_STATUS status); 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /** 66*4882a593Smuzhiyun * check im2d api header file 67*4882a593Smuzhiyun * 68*4882a593Smuzhiyun * @param header_version 69*4882a593Smuzhiyun * Default is RGA_CURRENT_API_HEADER_VERSION, no need to change if there are no special cases. 70*4882a593Smuzhiyun * 71*4882a593Smuzhiyun * @returns no error or else negative error code. 72*4882a593Smuzhiyun */ 73*4882a593Smuzhiyun #ifdef __cplusplus 74*4882a593Smuzhiyun IM_API IM_STATUS imcheckHeader(im_api_version_t header_version = RGA_CURRENT_API_HEADER_VERSION); 75*4882a593Smuzhiyun #endif 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /** 78*4882a593Smuzhiyun * check RGA basic information, supported resolution, supported format, etc. 79*4882a593Smuzhiyun * 80*4882a593Smuzhiyun * @param src 81*4882a593Smuzhiyun * @param dst 82*4882a593Smuzhiyun * @param pat 83*4882a593Smuzhiyun * @param src_rect 84*4882a593Smuzhiyun * @param dst_rect 85*4882a593Smuzhiyun * @param pat_rect 86*4882a593Smuzhiyun * @param mode_usage 87*4882a593Smuzhiyun * 88*4882a593Smuzhiyun * @returns no error or else negative error code. 89*4882a593Smuzhiyun */ 90*4882a593Smuzhiyun #define imcheck(src, dst, src_rect, dst_rect, ...) \ 91*4882a593Smuzhiyun ({ \ 92*4882a593Smuzhiyun IM_STATUS __ret = IM_STATUS_NOERROR; \ 93*4882a593Smuzhiyun rga_buffer_t __pat; \ 94*4882a593Smuzhiyun im_rect __pat_rect; \ 95*4882a593Smuzhiyun memset(&__pat, 0, sizeof(rga_buffer_t)); \ 96*4882a593Smuzhiyun memset(&__pat_rect, 0, sizeof(im_rect)); \ 97*4882a593Smuzhiyun int __args[] = {__VA_ARGS__}; \ 98*4882a593Smuzhiyun int __argc = sizeof(__args)/sizeof(int); \ 99*4882a593Smuzhiyun if (__argc == 0) { \ 100*4882a593Smuzhiyun __ret = imcheck_t(src, dst, __pat, src_rect, dst_rect, __pat_rect, 0); \ 101*4882a593Smuzhiyun } else if (__argc == 1){ \ 102*4882a593Smuzhiyun __ret = imcheck_t(src, dst, __pat, src_rect, dst_rect, __pat_rect, __args[0]); \ 103*4882a593Smuzhiyun } else { \ 104*4882a593Smuzhiyun __ret = IM_STATUS_FAILED; \ 105*4882a593Smuzhiyun printf("check failed\n"); \ 106*4882a593Smuzhiyun } \ 107*4882a593Smuzhiyun __ret; \ 108*4882a593Smuzhiyun }) 109*4882a593Smuzhiyun #define imcheck_composite(src, dst, pat, src_rect, dst_rect, pat_rect, ...) \ 110*4882a593Smuzhiyun ({ \ 111*4882a593Smuzhiyun IM_STATUS __ret = IM_STATUS_NOERROR; \ 112*4882a593Smuzhiyun int __args[] = {__VA_ARGS__}; \ 113*4882a593Smuzhiyun int __argc = sizeof(__args)/sizeof(int); \ 114*4882a593Smuzhiyun if (__argc == 0) { \ 115*4882a593Smuzhiyun __ret = imcheck_t(src, dst, pat, src_rect, dst_rect, pat_rect, 0); \ 116*4882a593Smuzhiyun } else if (__argc == 1){ \ 117*4882a593Smuzhiyun __ret = imcheck_t(src, dst, pat, src_rect, dst_rect, pat_rect, __args[0]); \ 118*4882a593Smuzhiyun } else { \ 119*4882a593Smuzhiyun __ret = IM_STATUS_FAILED; \ 120*4882a593Smuzhiyun printf("check failed\n"); \ 121*4882a593Smuzhiyun } \ 122*4882a593Smuzhiyun __ret; \ 123*4882a593Smuzhiyun }) 124*4882a593Smuzhiyun IM_C_API IM_STATUS imcheck_t(const rga_buffer_t src, const rga_buffer_t dst, const rga_buffer_t pat, 125*4882a593Smuzhiyun const im_rect src_rect, const im_rect dst_rect, const im_rect pat_rect, const int mode_usage); 126*4882a593Smuzhiyun /* Compatible with the legacy symbol */ 127*4882a593Smuzhiyun IM_C_API void rga_check_perpare(rga_buffer_t *src, rga_buffer_t *dst, rga_buffer_t *pat, 128*4882a593Smuzhiyun im_rect *src_rect, im_rect *dst_rect, im_rect *pat_rect, int mode_usage); 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun /** 131*4882a593Smuzhiyun * block until all execution is complete 132*4882a593Smuzhiyun * 133*4882a593Smuzhiyun * @param release_fence_fd 134*4882a593Smuzhiyun * RGA job release fence fd 135*4882a593Smuzhiyun * 136*4882a593Smuzhiyun * @returns success or else negative error code. 137*4882a593Smuzhiyun */ 138*4882a593Smuzhiyun IM_EXPORT_API IM_STATUS imsync(int release_fence_fd); 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun /** 141*4882a593Smuzhiyun * config 142*4882a593Smuzhiyun * 143*4882a593Smuzhiyun * @param name 144*4882a593Smuzhiyun * enum IM_CONFIG_NAME 145*4882a593Smuzhiyun * @param value 146*4882a593Smuzhiyun * 147*4882a593Smuzhiyun * @returns success or else negative error code. 148*4882a593Smuzhiyun */ 149*4882a593Smuzhiyun IM_EXPORT_API IM_STATUS imconfig(IM_CONFIG_NAME name, uint64_t value); 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #endif /* #ifndef _im2d_common_h_ */ 152