1 /**************************************************************************
5 Copyright 2014 Samsung Electronics co., Ltd. All Rights Reserved.
7 Contact: SooChan Lim <sc1.lim@samsung.com>, Sangjin Lee <lsj119@samsung.com>
8 Inpyo Kang <mantiger@samsung.com>, Dongyeon Kim <dy5.kim@samsung.com>
9 Boram Park <boram1288.park@samsung.com>, Changyeon Lee <cyeon.lee@samsung.com>
11 Permission is hereby granted, free of charge, to any person obtaining a
12 copy of this software and associated documentation files (the
13 "Software"), to deal in the Software without restriction, including
14 without limitation the rights to use, copy, modify, merge, publish,
15 distribute, sub license, and/or sell copies of the Software, and to
16 permit persons to whom the Software is furnished to do so, subject to
17 the following conditions:
19 The above copyright notice and this permission notice (including the
20 next paragraph) shall be included in all copies or substantial portions
23 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
26 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
27 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
28 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
29 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 **************************************************************************/
33 #ifndef _TBM_SURFACE_INTERNAL_H_
34 #define _TBM_SURFACE_INTERNAL_H_
36 #include <tbm_bufmgr.h>
43 * @brief Queries formats which the system can support.
44 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
45 * @remarks The formats must be released using free().
46 * @param[in] bufmgr : the buffer manager
47 * @param[out] *formats : format array which the system can support. This pointer has to be freed by user.
48 * @param[out] num : the number of formats.
49 * @return a tbm_surface_h if this function succeeds, otherwise NULL
52 #include <tbm_surface.h>
53 #include <tbm_surface_internal.h>
59 bufmgr = tbm_bufmgr_create (-1);
60 ret = tbm_surface_internal_query_surpported_foramts (bufmgr, &formats, &format_num);
65 tbm_surface_bufmgr_deinit (bufmgr);
68 int tbm_surface_internal_query_supported_formats (uint32_t **formats, uint32_t *num);
71 * @brief Creates the tbm_surface with memory type.
72 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
74 * #TBM_BO_DEFAULT is default memory: it depends on the backend\n
75 * #TBM_BO_SCANOUT is scanout memory\n
76 * #TBM_BO_NONCACHABLE is non-cachable memory\n
77 * #TBM_BO_WC is write-combine memory\n
78 * #TBM_BO_VENDOR vendor specific memory: it depends on the tbm backend\n
79 * @param[in] bufmgr : the buffer manager
80 * @param[in] width : the width of surface
81 * @param[in] height : the height of surface
82 * @param[in] format : the format of surface
83 * @param[in] flags : the flags of memory type
84 * @return a tbm_surface_h if this function succeeds, otherwise NULL
85 * @retval #tbm_surface_h
88 #include <tbm_surface.h>
89 #include <tbm_surface_internal.h>
93 tbm_surface_h surface;
97 bufmgr = tbm_bufmgr_create (bufmgr_fd);
98 surface = tbm_surface_internal_create_with_flags (128, 128, TBM_FORMAT_YUV420, TBM_BO_DEFAULT);
102 tbm_surface_destroy (surface);
103 tbm_surface_bufmgr_deinit (bufmgr);
106 tbm_surface_h tbm_surface_internal_create_with_flags (int width, int height, int format, int flags);
109 * @brief Creates the tbm_surface with buffer objects.
110 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
111 * @param[in] bufmgr : the buffer manager
112 * @param[in] width : the width of surface
113 * @param[in] height : the height of surface
114 * @param[in] format : the format of surface
115 * @param[in] *bos : the array pointer of buffer objects
116 * @param[in] num : the number of buffer objects
117 * @return a tbm_surface_h if this function succeeds, otherwise NULL
118 * @retval #tbm_surface_h
121 #include <tbm_bufmgr.h>
122 #include <tbm_surface.h>
123 #include <tbm_surface_internal.h>
127 tbm_surface_h surface;
128 tbm_surface_info_s info;
133 bufmgr = tbm_bufmgr_init (bufmgr_fd);
134 bo[0] = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
138 info.format = TBM_FORMAT_ARGB8888;
142 info.planes[0].size = 65536;
143 info.planes[0].offset = 0;
144 info.planes[0].stride = 512;
146 surface = tbm_surface_internal_create_with_bos (&info, bo, 1);
150 tbm_surface_destroy (surface);
151 tbm_surface_bufmgr_deinit (bufmgr);
154 tbm_surface_h tbm_surface_internal_create_with_bos (tbm_surface_info_s *info, tbm_bo *bos, int num);
158 * @brief Destroy the tbm surface
161 void tbm_surface_internal_destroy (tbm_surface_h surface);
164 * @brief Gets the number of buffer objects associated with the tbm_surface.
165 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
166 * @param[in] surface : the tbm_surface_h
167 * @return the number of buffer objects associated with the tbm_surface_h, otherwise -1.
170 #include <tbm_surface.h>
171 #include <tbm_surface_internal.h>
173 tbm_surface_h surface;
176 surface = tbm_surface_create (128, 128, TBM_FORMAT_YUV420);
177 num_bos = tbm_surface_internal_get_num_bos (surface);
181 tbm_surface_destroy (surface);
184 int tbm_surface_internal_get_num_bos (tbm_surface_h surface);
187 * @brief Gets the buffor object by the bo_index.
188 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
189 * @param[in] surface : the tbm_surface_h
190 * @param[in] bo_idx : the bo index in the the tbm_surface
191 * @return the buffer object, otherwise NULL.
195 #include <tbm_surface.h>
196 #include <tbm_surface_internal.h>
198 tbm_surface_h surface;
202 surface = tbm_surface_create (128, 128, TBM_FORMAT_YUV420);
203 num_bos = tbm_surface_internal_get_num_bos (surface);
205 for (i=0 ; i < num_bos ; i++)
207 bo = tbm_surface_internal_get_bo (surface, i);
211 tbm_surface_destroy (surface);
214 tbm_bo tbm_surface_internal_get_bo (tbm_surface_h surface, int bo_idx);
217 * @brief Gets the size of the surface.
218 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
219 * @param[in] surface : the tbm_surface_h
220 * @return the size of tbm_surface, otherwise -1.
223 #include <tbm_surface.h>
224 #include <tbm_surface_internal.h>
226 tbm_surface_h surface;
229 surface = tbm_surface_create (128, 128, TBM_FORMAT_YUV420);
230 size = tbm_surface_internal_get_size (surface);
232 tbm_surface_destroy (surface);
235 int tbm_surface_internal_get_size (tbm_surface_h surface);
238 * @brief Gets size, offset and pitch data of plane by the plane_index.
239 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
240 * @param[in] surface : the tbm_surface_h
241 * @param[in] plane_idx : the bo index in the the tbm_surface
242 * @param[out] size : the size of plan in tbm_surface
243 * @param[out] offset : the offset of plan in tbm_surface
244 * @param[out] pitch : the pitch of plan in tbm_surface
245 * @return 1 if this function succeeds, otherwise 0.
248 #include <tbm_surface.h>
249 #include <tbm_surface_internal.h>
251 tbm_surface_h surface;
252 uint32_t size, offset, pitch;
255 surface = tbm_surfacel_create (128, 128, TBM_FORMAT_YUV420);
256 ret = tbm_surface_internal_get_plane_data (surface, 1, &size, &offset, &pitch);
260 tbm_surface_destroy (surface);
263 int tbm_surface_internal_get_plane_data (tbm_surface_h surface, int plane_idx, uint32_t *size, uint32_t *offset, uint32_t *pitch);
266 * @brief Gets number of planes by the format.
267 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
268 * @param[in] format : the format of surface
269 * @return number of planes by the format, otherwise 0.
272 #include <tbm_surface.h>
273 #include <tbm_surface_internal.h>
277 num = tbm_surface_internal_get_num_planes (TBM_FORMAT_YUV420);
283 int tbm_surface_internal_get_num_planes (tbm_format format);
286 * @brief Gets bpp by the format.
287 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
288 * @param[in] format : the format of surface
289 * @return bpp by the format, otherwise 0.
292 #include <tbm_surface.h>
293 #include <tbm_surface_internal.h>
297 bpp = tbm_surface_internal_get_bpp (TBM_FORMAT_YUV420);
303 int tbm_surface_internal_get_bpp (tbm_format format);
306 * @brief Gets bo index of plane.
307 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
308 * @param[in] surface : the tbm_surface_h
309 * @param[in] plane_idx : the bo index in the the tbm_surface
310 * @return bo index of plane, otherwise -1.
313 #include <tbm_surface.h>
314 #include <tbm_surface_internal.h>
317 tbm_surface_h surface;
319 surface = tbm_surfacel_create (128, 128, TBM_FORMAT_YUV420);
320 bo_idx = tbm_surface_internal_get_plane_bo_idx (surface, 0);
326 int tbm_surface_internal_get_plane_bo_idx (tbm_surface_h surface, int plane_idx);
332 #endif /* _TBM_SURFACE_INTERNAL_H_ */