xref: /OK3568_Linux_fs/external/rknpu2/examples/3rdparty/rga/RV110X/include/im2d.hpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2020 Rockchip Electronics Co., Ltd.
3*4882a593Smuzhiyun  * Authors:
4*4882a593Smuzhiyun  *  PutinLee <putin.lee@rock-chips.com>
5*4882a593Smuzhiyun  *  Cerf Yu <cerf.yu@rock-chips.com>
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Licensed under the Apache License, Version 2.0 (the "License");
8*4882a593Smuzhiyun  * you may not use this file except in compliance with the License.
9*4882a593Smuzhiyun  * You may obtain a copy of the License at
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  *      http://www.apache.org/licenses/LICENSE-2.0
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  * Unless required by applicable law or agreed to in writing, software
14*4882a593Smuzhiyun  * distributed under the License is distributed on an "AS IS" BASIS,
15*4882a593Smuzhiyun  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*4882a593Smuzhiyun  * See the License for the specific language governing permissions and
17*4882a593Smuzhiyun  * limitations under the License.
18*4882a593Smuzhiyun  */
19*4882a593Smuzhiyun #ifndef _im2d_hpp_
20*4882a593Smuzhiyun #define _im2d_hpp_
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #include "im2d.h"
23*4882a593Smuzhiyun #include "RgaUtils.h"
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #ifdef ANDROID
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #include <ui/GraphicBuffer.h>
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun using namespace android;
30*4882a593Smuzhiyun #endif
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun /*
33*4882a593Smuzhiyun  * Import external buffers into RGA driver.
34*4882a593Smuzhiyun  *
35*4882a593Smuzhiyun  * @param fd/va/pa
36*4882a593Smuzhiyun  *      Select dma_fd/virtual_address/physical_address by buffer type
37*4882a593Smuzhiyun  * @param size
38*4882a593Smuzhiyun  *      Describes the size of the image buffer
39*4882a593Smuzhiyun  *
40*4882a593Smuzhiyun  * @return rga_buffer_handle_t
41*4882a593Smuzhiyun  */
42*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_fd(int fd, int size);
43*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int size);
44*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int size);
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /*
47*4882a593Smuzhiyun  * Import external buffers into RGA driver.
48*4882a593Smuzhiyun  *
49*4882a593Smuzhiyun  * @param fd/va/pa
50*4882a593Smuzhiyun  *      Select dma_fd/virtual_address/physical_address by buffer type
51*4882a593Smuzhiyun  * @param width
52*4882a593Smuzhiyun  *      Describes the pixel width stride of the image buffer
53*4882a593Smuzhiyun  * @param height
54*4882a593Smuzhiyun  *      Describes the pixel height stride of the image buffer
55*4882a593Smuzhiyun  * @param format
56*4882a593Smuzhiyun  *      Describes the pixel format of the image buffer
57*4882a593Smuzhiyun  *
58*4882a593Smuzhiyun  * @return rga_buffer_handle_t
59*4882a593Smuzhiyun  */
60*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_fd(int fd, int width, int height, int format);
61*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int width, int height, int format);
62*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int width, int height, int format);
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun #undef wrapbuffer_handle
65*4882a593Smuzhiyun IM_API rga_buffer_t wrapbuffer_handle(rga_buffer_handle_t  handle,
66*4882a593Smuzhiyun                                       int width, int height,
67*4882a593Smuzhiyun                                       int wstride, int hstride,
68*4882a593Smuzhiyun                                       int format);
69*4882a593Smuzhiyun IM_API rga_buffer_t wrapbuffer_handle(rga_buffer_handle_t  handle,
70*4882a593Smuzhiyun                                       int width, int height,
71*4882a593Smuzhiyun                                       int format);
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun #if ANDROID
74*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_GraphicBuffer_handle(buffer_handle_t hnd);
75*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_GraphicBuffer(sp<GraphicBuffer> buf);
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun IM_API rga_buffer_t wrapbuffer_handle(buffer_handle_t hnd);
78*4882a593Smuzhiyun IM_API rga_buffer_t wrapbuffer_GraphicBuffer(sp<GraphicBuffer> buf);
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun #if USE_AHARDWAREBUFFER
81*4882a593Smuzhiyun #include <android/hardware_buffer.h>
82*4882a593Smuzhiyun IM_API rga_buffer_handle_t importbuffer_AHardwareBuffer(AHardwareBuffer *buf);
83*4882a593Smuzhiyun IM_API rga_buffer_t wrapbuffer_AHardwareBuffer(AHardwareBuffer *buf);
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #endif /* USE_AHARDWAREBUFFER */
86*4882a593Smuzhiyun #endif /* ANDROID */
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun /*
89*4882a593Smuzhiyun  * Resize
90*4882a593Smuzhiyun  *
91*4882a593Smuzhiyun  * @param src
92*4882a593Smuzhiyun  * @param dst
93*4882a593Smuzhiyun  * @param fx
94*4882a593Smuzhiyun  * @param fy
95*4882a593Smuzhiyun  * @param interpolation
96*4882a593Smuzhiyun  * @param sync
97*4882a593Smuzhiyun  *      wait until operation complete
98*4882a593Smuzhiyun  *
99*4882a593Smuzhiyun  * @returns success or else negative error code.
100*4882a593Smuzhiyun  */
101*4882a593Smuzhiyun #undef imresize
102*4882a593Smuzhiyun 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);
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun /*
105*4882a593Smuzhiyun  * Crop
106*4882a593Smuzhiyun  *
107*4882a593Smuzhiyun  * @param src
108*4882a593Smuzhiyun  * @param dst
109*4882a593Smuzhiyun  * @param rect
110*4882a593Smuzhiyun  * @param sync
111*4882a593Smuzhiyun  *      wait until operation complete
112*4882a593Smuzhiyun  *
113*4882a593Smuzhiyun  * @returns success or else negative error code.
114*4882a593Smuzhiyun  */
115*4882a593Smuzhiyun #undef imcrop
116*4882a593Smuzhiyun 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);
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun /*
119*4882a593Smuzhiyun  * rotation
120*4882a593Smuzhiyun  *
121*4882a593Smuzhiyun  * @param src
122*4882a593Smuzhiyun  * @param dst
123*4882a593Smuzhiyun  * @param rotation
124*4882a593Smuzhiyun  *      IM_HAL_TRANSFORM_ROT_90
125*4882a593Smuzhiyun  *      IM_HAL_TRANSFORM_ROT_180
126*4882a593Smuzhiyun  *      IM_HAL_TRANSFORM_ROT_270
127*4882a593Smuzhiyun  * @param sync
128*4882a593Smuzhiyun  *      wait until operation complete
129*4882a593Smuzhiyun  *
130*4882a593Smuzhiyun  * @returns success or else negative error code.
131*4882a593Smuzhiyun  */
132*4882a593Smuzhiyun #undef imrotate
133*4882a593Smuzhiyun IM_API IM_STATUS imrotate(const rga_buffer_t src, rga_buffer_t dst, int rotation, int sync = 1, int *release_fence_fd = NULL);
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun /*
136*4882a593Smuzhiyun  * flip
137*4882a593Smuzhiyun  *
138*4882a593Smuzhiyun  * @param src
139*4882a593Smuzhiyun  * @param dst
140*4882a593Smuzhiyun  * @param mode
141*4882a593Smuzhiyun  *      IM_HAL_TRANSFORM_FLIP_H
142*4882a593Smuzhiyun  *      IM_HAL_TRANSFORM_FLIP_V
143*4882a593Smuzhiyun  * @param sync
144*4882a593Smuzhiyun  *      wait until operation complete
145*4882a593Smuzhiyun  *
146*4882a593Smuzhiyun  * @returns success or else negative error code.
147*4882a593Smuzhiyun  */
148*4882a593Smuzhiyun #undef imflip
149*4882a593Smuzhiyun IM_API IM_STATUS imflip(const rga_buffer_t src, rga_buffer_t dst, int mode, int sync = 1, int *release_fence_fd = NULL);
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun /*
152*4882a593Smuzhiyun  * fill/reset/draw
153*4882a593Smuzhiyun  *
154*4882a593Smuzhiyun  * @param src
155*4882a593Smuzhiyun  * @param dst
156*4882a593Smuzhiyun  * @param rect
157*4882a593Smuzhiyun  * @param color
158*4882a593Smuzhiyun  * @param sync
159*4882a593Smuzhiyun  *      wait until operation complete
160*4882a593Smuzhiyun  *
161*4882a593Smuzhiyun  * @returns success or else negative error code.
162*4882a593Smuzhiyun  */
163*4882a593Smuzhiyun #undef imfill
164*4882a593Smuzhiyun IM_API IM_STATUS imfill(rga_buffer_t dst, im_rect rect, int color, int sync = 1, int *release_fence_fd = NULL);
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /*
167*4882a593Smuzhiyun  * palette
168*4882a593Smuzhiyun  *
169*4882a593Smuzhiyun  * @param src
170*4882a593Smuzhiyun  * @param dst
171*4882a593Smuzhiyun  * @param lut
172*4882a593Smuzhiyun  * @param sync
173*4882a593Smuzhiyun  *      wait until operation complete
174*4882a593Smuzhiyun  *
175*4882a593Smuzhiyun  * @returns success or else negative error code.
176*4882a593Smuzhiyun  */
177*4882a593Smuzhiyun #undef impalette
178*4882a593Smuzhiyun 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);
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /*
181*4882a593Smuzhiyun  * translate
182*4882a593Smuzhiyun  *
183*4882a593Smuzhiyun  * @param src
184*4882a593Smuzhiyun  * @param dst
185*4882a593Smuzhiyun  * @param x
186*4882a593Smuzhiyun  * @param y
187*4882a593Smuzhiyun  * @param sync
188*4882a593Smuzhiyun  *      wait until operation complete
189*4882a593Smuzhiyun  *
190*4882a593Smuzhiyun  * @returns success or else negative error code.
191*4882a593Smuzhiyun  */
192*4882a593Smuzhiyun #undef imtranslate
193*4882a593Smuzhiyun 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);
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun /*
196*4882a593Smuzhiyun  * copy
197*4882a593Smuzhiyun  *
198*4882a593Smuzhiyun  * @param src
199*4882a593Smuzhiyun  * @param dst
200*4882a593Smuzhiyun  * @param sync
201*4882a593Smuzhiyun  *      wait until operation complete
202*4882a593Smuzhiyun  *
203*4882a593Smuzhiyun  * @returns success or else negative error code.
204*4882a593Smuzhiyun  */
205*4882a593Smuzhiyun #undef imcopy
206*4882a593Smuzhiyun IM_API IM_STATUS imcopy(const rga_buffer_t src, rga_buffer_t dst, int sync = 1, int *release_fence_fd = NULL);
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun /*
209*4882a593Smuzhiyun  * blend (SRC + DST -> DST or SRCA + SRCB -> DST)
210*4882a593Smuzhiyun  *
211*4882a593Smuzhiyun  * @param srcA
212*4882a593Smuzhiyun  * @param srcB can be NULL.
213*4882a593Smuzhiyun  * @param dst
214*4882a593Smuzhiyun  * @param mode
215*4882a593Smuzhiyun  *      IM_ALPHA_BLEND_MODE
216*4882a593Smuzhiyun  * @param sync
217*4882a593Smuzhiyun  *      wait until operation complete
218*4882a593Smuzhiyun  *
219*4882a593Smuzhiyun  * @returns success or else negative error code.
220*4882a593Smuzhiyun  */
221*4882a593Smuzhiyun #undef imblend
222*4882a593Smuzhiyun IM_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);
223*4882a593Smuzhiyun #undef imcomposite
224*4882a593Smuzhiyun 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);
225*4882a593Smuzhiyun 
226*4882a593Smuzhiyun /*
227*4882a593Smuzhiyun  * color key
228*4882a593Smuzhiyun  *
229*4882a593Smuzhiyun  * @param src
230*4882a593Smuzhiyun  * @param dst
231*4882a593Smuzhiyun  * @param colorkey_range
232*4882a593Smuzhiyun  *      max color
233*4882a593Smuzhiyun  *      min color
234*4882a593Smuzhiyun  * @param sync
235*4882a593Smuzhiyun  *      wait until operation complete
236*4882a593Smuzhiyun  *
237*4882a593Smuzhiyun  * @returns success or else negative error code.
238*4882a593Smuzhiyun  */
239*4882a593Smuzhiyun #undef imcolorkey
240*4882a593Smuzhiyun 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);
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun /*
243*4882a593Smuzhiyun  * format convert
244*4882a593Smuzhiyun  *
245*4882a593Smuzhiyun  * @param src
246*4882a593Smuzhiyun  * @param dst
247*4882a593Smuzhiyun  * @param sfmt
248*4882a593Smuzhiyun  * @param dfmt
249*4882a593Smuzhiyun  * @param mode
250*4882a593Smuzhiyun  *      color space mode: IM_COLOR_SPACE_MODE
251*4882a593Smuzhiyun  * @param sync
252*4882a593Smuzhiyun  *      wait until operation complete
253*4882a593Smuzhiyun  *
254*4882a593Smuzhiyun  * @returns success or else negative error code.
255*4882a593Smuzhiyun  */
256*4882a593Smuzhiyun #undef imcvtcolor
257*4882a593Smuzhiyun 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);
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun /*
260*4882a593Smuzhiyun  * nn quantize
261*4882a593Smuzhiyun  *
262*4882a593Smuzhiyun  * @param src
263*4882a593Smuzhiyun  * @param dst
264*4882a593Smuzhiyun  * @param nninfo
265*4882a593Smuzhiyun  * @param sync
266*4882a593Smuzhiyun  *      wait until operation complete
267*4882a593Smuzhiyun  *
268*4882a593Smuzhiyun  * @returns success or else negative error code.
269*4882a593Smuzhiyun  */
270*4882a593Smuzhiyun #undef imquantize
271*4882a593Smuzhiyun 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);
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun /*
274*4882a593Smuzhiyun  * ROP
275*4882a593Smuzhiyun  *
276*4882a593Smuzhiyun  * @param src
277*4882a593Smuzhiyun  * @param dst
278*4882a593Smuzhiyun  * @param rop_code
279*4882a593Smuzhiyun  * @param sync
280*4882a593Smuzhiyun  *      wait until operation complete
281*4882a593Smuzhiyun  *
282*4882a593Smuzhiyun  * @returns success or else negative error code.
283*4882a593Smuzhiyun  */
284*4882a593Smuzhiyun #undef imrop
285*4882a593Smuzhiyun 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);
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun /*
288*4882a593Smuzhiyun  * MOSAIC
289*4882a593Smuzhiyun  *
290*4882a593Smuzhiyun  * @param src
291*4882a593Smuzhiyun  * @param dst
292*4882a593Smuzhiyun  * @param mosaic_mode
293*4882a593Smuzhiyun  * @param sync
294*4882a593Smuzhiyun  *      wait until operation complete
295*4882a593Smuzhiyun  *
296*4882a593Smuzhiyun  * @returns success or else negative error code.
297*4882a593Smuzhiyun  */
298*4882a593Smuzhiyun IM_API IM_STATUS immosaic(const rga_buffer_t image, im_rect rect, int mosaic_mode, int sync = 1, int *release_fence_fd = NULL);
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun /*
301*4882a593Smuzhiyun  * OSD
302*4882a593Smuzhiyun  *
303*4882a593Smuzhiyun  * @param osd
304*4882a593Smuzhiyun  *      osd block
305*4882a593Smuzhiyun  * @param dst
306*4882a593Smuzhiyun  *      background image
307*4882a593Smuzhiyun  * @param osd_rect
308*4882a593Smuzhiyun  * @param osd_config
309*4882a593Smuzhiyun  *      osd mode config
310*4882a593Smuzhiyun  * @param sync
311*4882a593Smuzhiyun  *      wait until operation complete
312*4882a593Smuzhiyun  *
313*4882a593Smuzhiyun  * @returns success or else negative error code.
314*4882a593Smuzhiyun  */
315*4882a593Smuzhiyun IM_API IM_STATUS imosd(const rga_buffer_t osd,const rga_buffer_t dst,
316*4882a593Smuzhiyun                        const im_rect osd_rect, im_osd_t *osd_config,
317*4882a593Smuzhiyun                        int sync = 1, int *release_fence_fd = NULL);
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun /*
320*4882a593Smuzhiyun  * process
321*4882a593Smuzhiyun  *
322*4882a593Smuzhiyun  * @param src
323*4882a593Smuzhiyun  * @param dst
324*4882a593Smuzhiyun  * @param pat
325*4882a593Smuzhiyun  * @param srect
326*4882a593Smuzhiyun  * @param drect
327*4882a593Smuzhiyun  * @param prect
328*4882a593Smuzhiyun  * @param acquire_fence_fd
329*4882a593Smuzhiyun  * @param release_fence_fd
330*4882a593Smuzhiyun  * @param opt
331*4882a593Smuzhiyun  * @param usage
332*4882a593Smuzhiyun  *
333*4882a593Smuzhiyun  * @returns success or else negative error code.
334*4882a593Smuzhiyun  */
335*4882a593Smuzhiyun IM_API IM_STATUS improcess(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t pat,
336*4882a593Smuzhiyun                            im_rect srect, im_rect drect, im_rect prect,
337*4882a593Smuzhiyun                            int acquire_fence_fd, int *release_fence_fd, im_opt_t *opt_ptr, int usage);
338*4882a593Smuzhiyun IM_API IM_STATUS improcess(rga_buffer_t src, rga_buffer_t dst, rga_buffer_t pat,
339*4882a593Smuzhiyun                            im_rect srect, im_rect drect, im_rect prect,
340*4882a593Smuzhiyun                            int acquire_fence_fd, int *release_fence_fd, im_opt_t *opt, int usage, im_ctx_id_t ctx_id);
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun #endif /* _im2d_hpp_ */
343*4882a593Smuzhiyun 
344