Clean up included header files
[platform/core/api/media-content.git] / src / media_face.c
1 /*
2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17
18 #include <media_info_private.h>
19
20 static int __media_face_check_media_id(const char *media_id)
21 {
22         int ret = MEDIA_CONTENT_ERROR_NONE;
23         char *query_str = NULL;
24         sqlite3_stmt *stmt = NULL;
25         int item_count = 0;
26
27         media_content_retvm_if(!STRING_VALID(media_id), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media_id");
28
29         query_str = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_MEDIA_BY_ID, media_id);
30         ret = _content_query_prepare(&stmt, query_str, NULL, NULL);
31         SQLITE3_SAFE_FREE(query_str);
32         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
33
34         while (sqlite3_step(stmt) == SQLITE_ROW)
35                 item_count = (int)sqlite3_column_int(stmt, 0);
36
37         SQLITE3_FINALIZE(stmt);
38
39         media_content_retvm_if(item_count == 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_id");
40
41         return MEDIA_CONTENT_ERROR_NONE;
42 }
43
44 int media_face_destroy(media_face_h face)
45 {
46         media_face_s *_face = (media_face_s*)face;
47
48         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
49
50         SAFE_FREE(_face->face_id);
51         SAFE_FREE(_face->media_id);
52         SAFE_FREE(_face->face_tag);
53         SAFE_FREE(_face);
54
55         return MEDIA_CONTENT_ERROR_NONE;
56 }
57
58 int media_face_clone(media_face_h *dst, media_face_h src)
59 {
60         media_face_s *_src = (media_face_s*)src;
61
62         media_content_retvm_if(src == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid src handle");
63
64         media_face_s *_dst = (media_face_s *)calloc(1, sizeof(media_face_s));
65         media_content_retvm_if(_dst == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
66
67         if (STRING_VALID(_src->face_id)) {
68                 _dst->face_id = strdup(_src->face_id);
69                 if (_dst->face_id == NULL) {
70                         media_face_destroy((media_face_h)_dst);
71                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
72                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
73                 }
74         }
75
76         if (STRING_VALID(_src->media_id)) {
77                 _dst->media_id = strdup(_src->media_id);
78                 if (_dst->media_id == NULL) {
79                         media_face_destroy((media_face_h)_dst);
80                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
81                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
82                 }
83         }
84
85         _dst->face_rect_x = _src->face_rect_x;
86         _dst->face_rect_y = _src->face_rect_y;
87         _dst->face_rect_w = _src->face_rect_w;
88         _dst->face_rect_h = _src->face_rect_h;
89         _dst->orientation = _src->orientation;
90
91         if (STRING_VALID(_src->face_tag)) {
92                 _dst->face_tag = strdup(_src->face_tag);
93                 if (_dst->face_tag == NULL) {
94                         media_face_destroy((media_face_h)_dst);
95                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
96                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
97                 }
98         }
99
100         *dst = (media_face_h)_dst;
101
102         return MEDIA_CONTENT_ERROR_NONE;
103 }
104
105 int media_face_get_face_id(media_face_h face, char **face_id)
106 {
107         media_face_s* _face = (media_face_s*)face;
108
109         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
110
111         if (STRING_VALID(_face->face_id)) {
112                 *face_id = strdup(_face->face_id);
113                 media_content_retvm_if(*face_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "Out of memory");
114         } else {
115                 *face_id = NULL;
116         }
117
118         return MEDIA_CONTENT_ERROR_NONE;
119 }
120
121 int media_face_get_media_id(media_face_h face, char **media_id)
122 {
123         media_face_s* _face = (media_face_s*)face;
124
125         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
126
127         if (STRING_VALID(_face->media_id)) {
128                 *media_id = strdup(_face->media_id);
129                 media_content_retvm_if(*media_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "Out of memory");
130         } else {
131                 *media_id = NULL;
132         }
133
134         return MEDIA_CONTENT_ERROR_NONE;
135 }
136
137 int media_face_get_face_rect(media_face_h face, unsigned int *rect_x, unsigned int *rect_y, unsigned int *rect_w, unsigned int *rect_h)
138 {
139         media_face_s* _face = (media_face_s*)face;
140
141         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
142         media_content_retvm_if(!(rect_x && rect_y && rect_w && rect_h), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid rect");
143
144         *rect_x = _face->face_rect_x;
145         *rect_y = _face->face_rect_y;
146         *rect_w = _face->face_rect_w;
147         *rect_h = _face->face_rect_h;
148
149         return MEDIA_CONTENT_ERROR_NONE;
150 }
151
152 int media_face_get_orientation(media_face_h face, media_content_orientation_e *orientation)
153 {
154         media_face_s* _face = (media_face_s*)face;
155
156         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
157         media_content_retvm_if(orientation == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid orientation");
158
159         *orientation = _face->orientation;
160
161         return MEDIA_CONTENT_ERROR_NONE;
162 }
163
164 int media_face_get_tag(media_face_h face, char **tag)
165 {
166         media_face_s* _face = (media_face_s*)face;
167
168         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
169
170         if (STRING_VALID(_face->face_tag)) {
171                 *tag = strdup(_face->face_tag);
172                 media_content_retvm_if(*tag == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "Out of memory");
173         } else {
174                 *tag = NULL;
175         }
176
177         return MEDIA_CONTENT_ERROR_NONE;
178 }
179
180 int media_face_create(const char *media_id, media_face_h *face)
181 {
182         int ret = MEDIA_CONTENT_ERROR_NONE;
183
184         media_content_retvm_if(!STRING_VALID(media_id), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media_id");
185         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
186
187         ret = __media_face_check_media_id(media_id);
188         media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Not exist media_id");
189
190         media_face_s* _face = calloc(1, sizeof(media_face_s));
191         media_content_retvm_if(_face == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "Out of memory");
192
193         _face->media_id = strdup(media_id);
194
195         *face = (media_face_h)_face;
196
197         return MEDIA_CONTENT_ERROR_NONE;
198 }
199
200 int media_face_set_face_rect(media_face_h face, unsigned int rect_x, unsigned int rect_y, unsigned int rect_w, unsigned int rect_h)
201 {
202         media_face_s* _face = (media_face_s*)face;
203
204         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
205         media_content_retvm_if(rect_w == 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid rect_w");
206         media_content_retvm_if(rect_h == 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid rect_h");
207
208         _face->face_rect_x = rect_x;
209         _face->face_rect_y = rect_y;
210         _face->face_rect_w = rect_w;
211         _face->face_rect_h = rect_h;
212
213         return MEDIA_CONTENT_ERROR_NONE;
214 }
215
216 int media_face_set_orientation(media_face_h face, media_content_orientation_e orientation)
217 {
218         media_face_s* _face = (media_face_s*)face;
219
220         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
221
222         _face->orientation = orientation;
223
224         return MEDIA_CONTENT_ERROR_NONE;
225 }
226
227 int media_face_set_tag(media_face_h face, const char *tag)
228 {
229         media_face_s* _face = (media_face_s*)face;
230
231         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
232
233         if (STRING_VALID(tag))
234                 _face->face_tag = strdup(tag);
235         else
236                 _face->face_tag = NULL;
237
238         return MEDIA_CONTENT_ERROR_NONE;
239 }
240
241 int media_face_insert_to_db(media_face_h face)
242 {
243         int ret = MEDIA_CONTENT_ERROR_NONE;
244         char *query_str = NULL;
245         char *face_uuid = NULL;
246
247         media_face_s* _face = (media_face_s*)face;
248
249         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
250         media_content_retvm_if(_face->media_id == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_id");
251         media_content_retvm_if(_face->face_rect_w == 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid rect_w");
252         media_content_retvm_if(_face->face_rect_h == 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid rect_h");
253
254         ret = media_svc_generate_uuid(&face_uuid);
255         media_content_retvm_if(ret != MS_MEDIA_ERR_NONE, MEDIA_CONTENT_ERROR_INVALID_OPERATION, "Fail to generate face_id");
256
257         SAFE_FREE(_face->face_id);
258         _face->face_id = strdup(face_uuid);
259         SAFE_FREE(face_uuid);
260
261         query_str = sqlite3_mprintf(INSERT_FACE_TO_FACE, _face->face_id, _face->media_id, _face->face_rect_x, _face->face_rect_y, _face->face_rect_w, _face->face_rect_h, _face->orientation, _face->face_tag);
262
263         ret = _content_query_sql(query_str);
264         SQLITE3_SAFE_FREE(query_str);
265
266         return ret;
267 }
268
269 int media_face_update_to_db(media_face_h face)
270 {
271         int ret = MEDIA_CONTENT_ERROR_NONE;
272         char *query_str = NULL;
273
274         media_face_s* _face = (media_face_s*)face;
275
276         media_content_retvm_if(face == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
277         media_content_retvm_if(_face->face_id == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid face_id");
278         media_content_retvm_if(_face->media_id == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_id");
279         media_content_retvm_if(_face->face_rect_w == 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid rect_w");
280         media_content_retvm_if(_face->face_rect_h == 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid rect_h");
281
282         query_str = sqlite3_mprintf(UPDATE_FACE_TO_FACE, _face->face_rect_x, _face->face_rect_y, _face->face_rect_w, _face->face_rect_h, _face->orientation, _face->face_tag, _face->face_id);
283
284         ret = _content_query_sql(query_str);
285         SQLITE3_SAFE_FREE(query_str);
286
287         return ret;
288 }
289
290 int media_face_delete_from_db(const char *face_id)
291 {
292         int ret = MEDIA_CONTENT_ERROR_NONE;
293         char *query_str = NULL;
294
295         media_content_retvm_if(!STRING_VALID(face_id), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid face_id");
296
297         query_str = sqlite3_mprintf(DELETE_FACE_FROM_FACE, face_id);
298
299         ret = _content_query_sql(query_str);
300         SQLITE3_SAFE_FREE(query_str);
301
302         return ret;
303 }