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