surface: add _tbm_set_last_result()
[platform/core/uifw/libtbm.git] / src / tbm_surface.c
1 /**************************************************************************
2
3 libtbm
4
5 Copyright 2014 Samsung Electronics co., Ltd. All Rights Reserved.
6
7 Contact: SooChan Lim <sc1.lim@samsung.com>, Sangjin Lee <lsj119@samsung.com>
8 Boram Park <boram1288.park@samsung.com>, Changyeon Lee <cyeon.lee@samsung.com>
9
10 Permission is hereby granted, free of charge, to any person obtaining a
11 copy of this software and associated documentation files (the
12 "Software"), to deal in the Software without restriction, including
13 without limitation the rights to use, copy, modify, merge, publish,
14 distribute, sub license, and/or sell copies of the Software, and to
15 permit persons to whom the Software is furnished to do so, subject to
16 the following conditions:
17
18 The above copyright notice and this permission notice (including the
19 next paragraph) shall be included in all copies or substantial portions
20 of the Software.
21
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
25 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
30 **************************************************************************/
31
32 #include "config.h"
33
34 #include "tbm_bufmgr.h"
35 #include "tbm_bufmgr_int.h"
36 #include "tbm_surface_internal.h"
37
38 int
39 tbm_surface_query_formats(uint32_t **formats, uint32_t *num)
40 {
41         TBM_TRACE_SURFACE("\n");
42
43         if (!tbm_surface_internal_query_supported_formats(formats, num))
44                 return tbm_get_last_error();
45
46         return TBM_SURFACE_ERROR_NONE;
47 }
48
49 tbm_surface_h
50 tbm_surface_create(int width, int height, tbm_format format)
51 {
52         TBM_TRACE_SURFACE("width(%d) height(%d)\n", width, height);
53
54         _tbm_set_last_result(TBM_ERROR_NONE);
55
56         if (!(width > 0) || !(height > 0)) {
57 #ifdef HAVE_CAPI_0_1_1
58                 set_last_result(TBM_SURFACE_ERROR_INVALID_PARAMETER);
59 #endif
60                 _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
61                 return NULL;
62         }
63
64         struct _tbm_surface *surf = NULL;
65
66         surf = tbm_surface_internal_create_with_flags(width, height, format,
67                                                       TBM_BO_DEFAULT);
68         if (!surf) {
69 #ifdef HAVE_CAPI_0_1_1
70                 set_last_result(TBM_SURFACE_ERROR_INVALID_OPERATION);
71 #endif
72                 return NULL;
73         }
74
75 #ifdef HAVE_CAPI_0_1_1
76         set_last_result(TBM_SURFACE_ERROR_NONE);
77 #endif
78
79         return surf;
80 }
81
82 int
83 tbm_surface_destroy(tbm_surface_h surface)
84 {
85         TBM_TRACE_SURFACE("tbm_surface(%p)\n", surface);
86
87         TBM_RETURN_VAL_IF_FAIL(surface, TBM_SURFACE_ERROR_INVALID_PARAMETER);
88
89         tbm_surface_internal_destroy(surface);
90
91         return tbm_get_last_error();
92 }
93
94 int
95 tbm_surface_map(tbm_surface_h surface, int opt, tbm_surface_info_s *info)
96 {
97         TBM_TRACE_SURFACE("tbm_surface(%p)\n", surface);
98
99         TBM_RETURN_VAL_IF_FAIL(surface, TBM_SURFACE_ERROR_INVALID_PARAMETER);
100         TBM_RETURN_VAL_IF_FAIL(info != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
101
102         int ret = 0;
103
104         ret = tbm_surface_internal_get_info(surface, opt, info, 1);
105         if (ret == 0)
106                 return tbm_get_last_error();
107
108         return TBM_SURFACE_ERROR_NONE;
109 }
110
111 int
112 tbm_surface_unmap(tbm_surface_h surface)
113 {
114         TBM_TRACE_SURFACE("tbm_surface(%p)\n", surface);
115
116         TBM_RETURN_VAL_IF_FAIL(surface, TBM_SURFACE_ERROR_INVALID_PARAMETER);
117
118         tbm_surface_internal_unmap(surface);
119
120         return tbm_get_last_error();
121 }
122
123 int
124 tbm_surface_get_info(tbm_surface_h surface, tbm_surface_info_s *info)
125 {
126         TBM_TRACE_SURFACE("tbm_surface(%p)\n", surface);
127
128         TBM_RETURN_VAL_IF_FAIL(surface, TBM_SURFACE_ERROR_INVALID_PARAMETER);
129         TBM_RETURN_VAL_IF_FAIL(info != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
130
131         int ret = 0;
132
133         ret = tbm_surface_internal_get_info(surface, 0, info, 0);
134         if (ret == 0)
135                 return tbm_get_last_error();
136
137         return TBM_SURFACE_ERROR_NONE;
138 }
139
140 int
141 tbm_surface_get_width(tbm_surface_h surface)
142 {
143         TBM_TRACE_SURFACE("tbm_surface(%p)\n", surface);
144
145         _tbm_set_last_result(TBM_ERROR_NONE);
146
147         if (!surface) {
148 #ifdef HAVE_CAPI_0_1_1
149                 set_last_result(TBM_SURFACE_ERROR_INVALID_PARAMETER);
150 #endif
151                 _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
152                 return 0;
153         }
154
155 #ifdef HAVE_CAPI_0_1_1
156         set_last_result(TBM_SURFACE_ERROR_NONE);
157 #endif
158
159         return tbm_surface_internal_get_width(surface);
160 }
161
162 int
163 tbm_surface_get_height(tbm_surface_h surface)
164 {
165         TBM_TRACE_SURFACE("tbm_surface(%p)\n", surface);
166
167         _tbm_set_last_result(TBM_ERROR_NONE);
168
169         if (!surface) {
170 #ifdef HAVE_CAPI_0_1_1
171                 set_last_result(TBM_SURFACE_ERROR_INVALID_PARAMETER);
172 #endif
173                 _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
174                 return 0;
175         }
176
177 #ifdef HAVE_CAPI_0_1_1
178         set_last_result(TBM_SURFACE_ERROR_NONE);
179 #endif
180
181         return tbm_surface_internal_get_height(surface);
182 }
183
184 tbm_format
185 tbm_surface_get_format(tbm_surface_h surface)
186 {
187         TBM_TRACE_SURFACE("tbm_surface(%p)\n", surface);
188
189         _tbm_set_last_result(TBM_ERROR_NONE);
190
191         if (!surface) {
192 #ifdef HAVE_CAPI_0_1_1
193                 set_last_result(TBM_SURFACE_ERROR_INVALID_PARAMETER);
194 #endif
195                 _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
196                 return 0;
197         }
198
199 #ifdef HAVE_CAPI_0_1_1
200         set_last_result(TBM_SURFACE_ERROR_NONE);
201 #endif
202
203         return tbm_surface_internal_get_format(surface);
204 }