xref: /OK3568_Linux_fs/external/linux-rga/im2d_api/im2d_common.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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