[ACR-1163] Add synchronous API to create thumbnails
[platform/core/api/media-content.git] / src / media_info.c
1 /*
2 * Copyright (c) 2011 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 #include <media_info.h>
18 #include <media-thumbnail.h>
19 #include <media-util-dcm.h>
20 #include <media_info_private.h>
21 #include <media_util_private.h>
22 #include <system_info.h>
23
24
25 static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data);
26 static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data);
27 static void __media_info_face_completed_cb(int error, const int face_count, void *user_data);
28 static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array, unsigned int array_length, media_insert_completed_cb completed_cb, void *user_data);
29 static int __media_info_set_str_data(media_info_h media, media_info_item_e data_type, const char *str_data);
30 static int __media_info_check_file_validity(const char *path);
31
32 static int __media_info_get_media_path_by_id_from_db(const char *media_id, char **path)
33 {
34         int ret = MEDIA_CONTENT_ERROR_NONE;
35         sqlite3_stmt *stmt = NULL;
36         char *select_query = NULL;
37
38         media_content_retvm_if(!STRING_VALID(media_id), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media_id");
39
40         select_query = sqlite3_mprintf(SELECT_MEDIA_PATH_BY_ID, media_id);
41
42         ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
43         SQLITE3_SAFE_FREE(select_query);
44         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
45
46         if (sqlite3_step(stmt) == SQLITE_ROW) {
47                 *path = g_strdup((const char *)sqlite3_column_text(stmt, 0));
48         } else {
49                 media_content_error("There's no media with this ID : %s", media_id);
50                 *path = NULL;
51                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
52         }
53
54         SQLITE3_FINALIZE(stmt);
55
56         return ret;
57 }
58
59 static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data)
60 {
61         int ret = MEDIA_CONTENT_ERROR_NONE;
62         media_insert_cb_s *_cb_data = (media_insert_cb_s *)user_data;
63
64         if (_cb_data) {
65                 if (result)
66                         ret = _content_error_capi(MEDIA_CONTENT_TYPE, result->result);
67
68                 if (_cb_data->insert_completed_cb) {
69                         media_content_debug("User callback is being called now");
70                         _cb_data->insert_completed_cb(ret, _cb_data->user_data);
71                 }
72
73                 if (STRING_VALID(_cb_data->insert_list_path)) {
74                         if (unlink(_cb_data->insert_list_path) < 0)
75                                 media_content_stderror("failed to delete");
76                         SAFE_FREE(_cb_data->insert_list_path);
77                 }
78         }
79
80         SAFE_FREE(_cb_data);
81
82         return;
83 }
84
85 static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data)
86 {
87         int error_value = MEDIA_CONTENT_ERROR_NONE;
88
89         media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s *)user_data;
90         media_info_s *media = NULL;
91
92         if (_thumb_cb != NULL) {
93                 media = _thumb_cb->handle;
94
95                 if (media != NULL) {
96                         if (media->thumbnail_path != NULL)
97                                 SAFE_FREE(media->thumbnail_path);
98
99                         if (STRING_VALID(path))
100                                 media->thumbnail_path = g_strdup(path);
101                         else
102                                 media->thumbnail_path = g_strdup(EMPTY_STR);
103                 }
104
105                 media_content_debug("error [%d], thumbnail_path [%s]", error, path);
106                 error_value = _content_error_capi(MEDIA_THUMBNAIL_TYPE, error);
107                 if (_thumb_cb->thumbnail_completed_cb)
108                         _thumb_cb->thumbnail_completed_cb(error_value, path, _thumb_cb->user_data);
109         }
110
111         SAFE_FREE(_thumb_cb);
112
113         return;
114 }
115
116 static bool __media_info_isFaceRecognition_feature_supported()
117 {
118         bool isFaceRecognitionSupported = false;
119
120         const int nRetVal = system_info_get_platform_bool("http://tizen.org/feature/vision.face_recognition", &isFaceRecognitionSupported);
121
122         if (nRetVal != SYSTEM_INFO_ERROR_NONE) {
123                 media_content_debug("SYSTEM_INFO_ERROR: vision.face_recognition [%d]", nRetVal);
124                 return false;
125         }
126
127         return isFaceRecognitionSupported;
128 }
129
130 static void __media_info_face_completed_cb(int error, const int face_count, void *user_data)
131 {
132         int error_value = MEDIA_CONTENT_ERROR_NONE;
133
134         media_face_cb_s *_face_cb = (media_face_cb_s *)user_data;
135
136         if (_face_cb != NULL) {
137                 media_content_debug("error [%d], face_count [%d]", error, face_count);
138                 error_value = _content_error_capi(MEDIA_THUMBNAIL_TYPE, error);
139                 if (_face_cb->face_completed_cb)
140                         _face_cb->face_completed_cb(error_value, face_count, _face_cb->user_data);
141         }
142
143         SAFE_FREE(_face_cb);
144
145         return;
146 }
147
148 static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array,
149                                         unsigned int array_length,
150                                         media_insert_completed_cb completed_cb,
151                                         void *user_data)
152 {
153         int ret = MEDIA_CONTENT_ERROR_NONE;
154         FILE *fp = NULL;
155         char list_path[255] = {0, };
156         unsigned int idx = 0;
157         int nwrites = 0;
158
159         for (idx = 0; idx < BATCH_REQUEST_MAX; idx++) {
160                 snprintf(list_path, sizeof(list_path), "%s/request-%ld-%d", MEDIA_CONTENT_INSERT_FILES_PATH, media_content_gettid(), idx);
161
162                 if (g_file_test(list_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
163                         memset(list_path, 0x00, sizeof(list_path));
164                         continue;
165                 } else {
166                         media_content_debug("The request file list path : %s", list_path);
167                         break;
168                 }
169         }
170
171         if (idx == BATCH_REQUEST_MAX) {
172                 media_content_error("Too many batch request for one thread");
173                 return MEDIA_CONTENT_ERROR_DB_BUSY;
174         }
175
176         fp = fopen(list_path, "w");
177         if (fp == NULL) {
178                 media_content_error("failed to open file : [%s]", list_path);
179                 media_content_stderror("failed to open file");
180                 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
181         }
182
183         for (idx = 0; idx < array_length; idx++) {
184                 if (STRING_VALID(path_array[idx])) {
185                         int size = strlen(path_array[idx]);
186
187                         ret = __media_info_check_file_validity(path_array[idx]);
188                         if (ret != MEDIA_CONTENT_ERROR_NONE) {
189                                 fclose(fp);
190                                 if (unlink(list_path) < 0)
191                                         media_content_stderror("failed to delete");
192                                 return ret;
193                         }
194
195                         if (!_media_util_check_support_media_type(path_array[idx])) {
196                                 fclose(fp);
197                                 if (unlink(list_path) < 0)
198                                         media_content_stderror("failed to delete");
199                                 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED;
200                         }
201
202                         nwrites = fwrite(path_array[idx], 1, size, fp);
203                         if (nwrites != size) {
204                                 media_content_stderror("failed to write");
205                                 fclose(fp);
206                                 if (unlink(list_path) < 0)
207                                         media_content_stderror("failed to delete");
208                                 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
209                         }
210
211                         nwrites = fwrite("\n", 1, 1, fp);
212                         if (nwrites != 1) {
213                                 media_content_stderror("failed to write");
214                                 fclose(fp);
215                                 if (unlink(list_path) < 0)
216                                         media_content_stderror("failed to delete");
217                                 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
218                         }
219                 } else {
220                         media_content_error("path[%d] is invalid string", idx);
221                 }
222         }
223
224         fclose(fp);
225
226         media_insert_cb_s *_cb_data = (media_insert_cb_s *)calloc(1, sizeof(media_insert_cb_s));
227         media_content_retvm_if(_cb_data == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
228
229         _cb_data->insert_completed_cb = completed_cb;
230         _cb_data->user_data = user_data;
231         _cb_data->insert_list_path = g_strdup(list_path);
232
233         if (insert_type == MEDIA_BATCH_INSERT_NORMAL)
234                 ret = media_files_register(list_path, __media_info_insert_completed_cb, _cb_data, _content_get_uid());
235         else if (insert_type == MEDIA_BATCH_INSERT_BURSTSHOT)
236                 ret = media_burstshot_register(list_path, __media_info_insert_completed_cb, _cb_data, _content_get_uid());
237         else
238                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
239
240         if (ret != MEDIA_CONTENT_ERROR_NONE) {
241                 media_content_error("media_files_register failed : %d", ret);
242                 if (unlink(list_path) < 0)
243                         media_content_stderror("failed to delete");
244                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
245         }
246
247         return ret;
248 }
249
250 int __media_info_get_storage_list_to_remove(const char *condition_query, GArray **storage_list)
251 {
252         int ret = MEDIA_CONTENT_ERROR_NONE;
253         char *query_string = NULL;
254         sqlite3_stmt *stmt = NULL;
255
256         media_content_retv_if(storage_list == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
257         media_content_retv_if(!STRING_VALID(condition_query), MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
258
259         query_string = sqlite3_mprintf(SELECT_STORAGE_BY_FILTER, condition_query);
260
261         ret = _content_query_prepare(&stmt, query_string, NULL, NULL);
262         SQLITE3_SAFE_FREE(query_string);
263
264         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
265
266         *storage_list = g_array_new(FALSE, FALSE, sizeof(media_storage_s *));
267
268         while (sqlite3_step(stmt) == SQLITE_ROW) {
269                 media_storage_s *storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
270                 if (storage == NULL) {
271                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
272                         SQLITE3_FINALIZE(stmt);
273                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
274                 }
275                 storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
276                 storage->storage_type = (int)sqlite3_column_int(stmt, 1);
277
278                 g_array_append_val(*storage_list, storage);
279         }
280
281         SQLITE3_FINALIZE(stmt);
282
283         return ret;
284 }
285
286 int __media_info_get_thumbnail_to_remove(const char *condition_query, const char *storage_id, int storage_type, GArray **thumb_list)
287 {
288         int ret = MEDIA_CONTENT_ERROR_NONE;
289         char *query_string = NULL;
290         char *thumbnail_path = NULL;
291         sqlite3_stmt *stmt = NULL;
292
293         media_content_retv_if(thumb_list == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
294         media_content_retv_if(storage_id == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
295         media_content_retv_if(!STRING_VALID(condition_query), MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
296
297         query_string = sqlite3_mprintf(SELECT_THUMBNAIL_BY_FILTER, storage_id, condition_query, storage_type);
298
299         ret = _content_query_prepare(&stmt, query_string, NULL, NULL);
300         SQLITE3_SAFE_FREE(query_string);
301
302         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
303
304         *thumb_list = g_array_new(FALSE, FALSE, sizeof(char*));
305
306         while (sqlite3_step(stmt) == SQLITE_ROW) {
307                 thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 0));
308                 if (STRING_VALID(thumbnail_path))
309                         g_array_append_val(*thumb_list, thumbnail_path);
310                 else
311                         SAFE_FREE(thumbnail_path);
312         }
313
314         SQLITE3_FINALIZE(stmt);
315
316         return ret;
317 }
318
319 static int __media_info_check_file_validity(const char *path)
320 {
321         bool ignore = FALSE;
322         char *folder_path = NULL;
323         int ret = MEDIA_CONTENT_ERROR_NONE;
324
325         media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid path");
326
327         ret = _media_util_check_ignore_file(path, &ignore);
328         media_content_retvm_if(ignore == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid ignore path");
329
330         ret = _media_util_check_file_exist(path);
331         media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "invalid path");
332
333         folder_path = g_path_get_dirname(path);
334         ret = _media_util_check_ignore_dir(folder_path, &ignore);
335         SAFE_FREE(folder_path);
336         media_content_retvm_if(ignore == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid folder path");
337
338         return MEDIA_CONTENT_ERROR_NONE;
339 }
340
341 void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media)
342 {
343         media_info_s *_media = (media_info_s*)media;
344
345         char *tmp_path = NULL;
346         char repl_path[MAX_PATH_LEN] = {0, };
347
348         _media->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_UUID));
349
350         tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PATH));
351         _media_content_rollback_path(tmp_path, repl_path);
352         _media->file_path = g_strdup(repl_path);
353         SAFE_FREE(tmp_path);
354
355         _media->display_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_FILE_NAME));
356         _media->media_type = (int)sqlite3_column_int(stmt, MEDIA_INFO_TYPE);
357         _media->mime_type = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_MIME_TYPE));
358         _media->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_INFO_SIZE);
359         _media->added_time = (int)sqlite3_column_int(stmt, MEDIA_INFO_ADDED_TIME);
360         _media->modified_time = (int)sqlite3_column_int(stmt, MEDIA_INFO_MODIFIED_TIME);
361         _media->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_THUMBNAIL_PATH));
362         _media->description = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DESCRIPTION));
363         _media->rating = (int)sqlite3_column_int(stmt, MEDIA_INFO_RATING);
364         _media->favourite = (int)sqlite3_column_int(stmt, MEDIA_INFO_FAVOURITE);
365         _media->author = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AUTHOR));
366         _media->provider = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PROVIDER));
367         _media->content_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CONTENT_NAME));
368         _media->category = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CATEGORY));
369         _media->location_tag = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_LOCATION_TAG));
370         _media->age_rating = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AGE_RATING));
371         _media->keyword = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_KEYWORD));
372         _media->is_drm = (int)sqlite3_column_int(stmt, MEDIA_INFO_IS_DRM);
373         _media->storage_type = (int)sqlite3_column_int(stmt, MEDIA_INFO_STORAGE_TYPE);
374         _media->longitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_LONGITUDE);
375         _media->latitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_LATITUDE);
376         _media->altitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_ALTITUDE);
377         _media->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT);
378         _media->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME);
379         _media->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION);
380         _media->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
381         _media->timeline = (double)sqlite3_column_double(stmt, MEDIA_INFO_TIMELINE);
382         _media->weather = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER));
383         _media->sync_status = (int)sqlite3_column_int(stmt, MEDIA_INFO_SYNC_STATUS);
384         _media->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_STORAGE_UUID));
385         _media->is_360 = (int)sqlite3_column_int(stmt, MEDIA_INFO_IS_360);
386 #ifdef _USE_TVPD_MODE
387         _media->stitched_info = (int)sqlite3_column_int(stmt, MEDIA_INFO_STITCHED_INFO);
388 #endif
389
390         if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE) {
391                 _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
392                 if (_media->image_meta) {
393                         _media->image_meta->media_id = g_strdup(_media->media_id);
394                         _media->image_meta->width = sqlite3_column_int(stmt, MEDIA_INFO_WIDTH);
395                         _media->image_meta->height = sqlite3_column_int(stmt, MEDIA_INFO_HEIGHT);
396                         _media->image_meta->fnumber = (double)sqlite3_column_double(stmt, MEDIA_INFO_FNUMBER);
397                         _media->image_meta->iso = sqlite3_column_int(stmt, MEDIA_INFO_ISO);
398                         _media->image_meta->date_taken = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DATETAKEN));
399                         _media->image_meta->orientation = sqlite3_column_int(stmt, MEDIA_INFO_ORIENTATION);
400                         _media->image_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
401                         _media->image_meta->burst_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_BURST_ID));
402                         _media->image_meta->exposure_time = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_EXPOSURE_TIME));
403                         _media->image_meta->model = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_MODEL));
404                 }
405         } else if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
406                 _media->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
407                 if (_media->video_meta) {
408                         _media->video_meta->media_id = g_strdup(_media->media_id);
409                         _media->video_meta->width = sqlite3_column_int(stmt, MEDIA_INFO_WIDTH);
410                         _media->video_meta->height = sqlite3_column_int(stmt, MEDIA_INFO_HEIGHT);
411                         _media->video_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
412                         _media->video_meta->album = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM));
413                         _media->video_meta->artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST));
414                         _media->video_meta->album_artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST));
415                         _media->video_meta->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE));
416                         _media->video_meta->composer = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER));
417                         _media->video_meta->year = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR));
418                         _media->video_meta->recorded_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE));
419                         _media->video_meta->copyright = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT));
420                         _media->video_meta->track_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM));
421                         _media->video_meta->bitrate = sqlite3_column_int(stmt, MEDIA_INFO_BITRATE);
422                         _media->video_meta->duration = sqlite3_column_int(stmt, MEDIA_INFO_DURATION);
423                         _media->video_meta->rotation = sqlite3_column_int(stmt, MEDIA_INFO_ORIENTATION);
424                 }
425
426         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
427                 _media->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
428                 if (_media->audio_meta) {
429                         _media->audio_meta->media_id = g_strdup(_media->media_id);
430                         _media->audio_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
431                         _media->audio_meta->album = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM));
432                         _media->audio_meta->artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST));
433                         _media->audio_meta->album_artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST));
434                         _media->audio_meta->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE));
435                         _media->audio_meta->composer = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER));
436                         _media->audio_meta->year = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR));
437                         _media->audio_meta->recorded_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE));
438                         _media->audio_meta->copyright = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT));
439                         _media->audio_meta->track_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM));
440                         _media->audio_meta->bitrate = sqlite3_column_int(stmt, MEDIA_INFO_BITRATE);
441                         _media->audio_meta->bitpersample = sqlite3_column_int(stmt, MEDIA_INFO_BITPERSAMPLE);
442                         _media->audio_meta->duration = sqlite3_column_int(stmt, MEDIA_INFO_DURATION);
443                         _media->audio_meta->samplerate = sqlite3_column_int(stmt, MEDIA_INFO_SAMPLERATE);
444                         _media->audio_meta->channel = sqlite3_column_int(stmt, MEDIA_INFO_CHANNEL);
445                 }
446         }
447 }
448
449 int _media_info_get_media_info_from_db(const char *path, const char *storage_id, media_info_h media)
450 {
451         int ret = MEDIA_CONTENT_ERROR_NONE;
452         sqlite3_stmt *stmt = NULL;
453         char *select_query = NULL;
454         media_info_s *_media = (media_info_s*)media;
455
456         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media");
457
458         select_query = sqlite3_mprintf(SELECT_MEDIA_BY_PATH, storage_id, path);
459
460         ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
461         SQLITE3_SAFE_FREE(select_query);
462         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
463
464         if (sqlite3_step(stmt) == SQLITE_ROW) {
465                 _media_info_item_get_detail(stmt, (media_info_h)_media);
466         } else {
467                 media_content_error("There's no media!!");
468                 media_content_error("%s", path);
469                 media_content_error("%s", storage_id);
470                 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
471         }
472
473         SQLITE3_FINALIZE(stmt);
474
475         return ret;
476 }
477
478 int media_info_insert_to_db(const char *path, media_info_h *info)
479 {
480         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
481         char repl_path[MAX_PATH_LEN] = {0, };
482         int ret = MEDIA_CONTENT_ERROR_NONE;
483
484         media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid path");
485         media_content_retvm_if(info == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid info");
486         memset(repl_path, 0, sizeof(repl_path));
487         ret = _media_content_replace_path(path, repl_path);
488         media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
489
490         ret = __media_info_check_file_validity(repl_path);
491         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
492
493         memset(storage_id, 0x00, sizeof(storage_id));
494         ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id, _content_get_uid());
495         if (ret != MS_MEDIA_ERR_NONE) {
496                 media_content_error("media_svc_get_storage_id failed : %d", ret);
497                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
498         }
499
500         ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), storage_id, repl_path);
501         if (ret == MS_MEDIA_ERR_DB_NO_RECORD) {
502                 media_content_sec_debug("media_svc_check_item_exist_by_path : no record : %s", repl_path);
503                 media_content_retvm_if(!_media_util_check_support_media_type(repl_path), MEDIA_CONTENT_ERROR_NOT_SUPPORTED, "Unsupported media type");
504                 media_svc_storage_type_e storage_type = 0;
505
506                 ret = media_svc_get_storage_type(repl_path, &storage_type, _content_get_uid());
507                 if (ret != MS_MEDIA_ERR_NONE) {
508                         media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
509                         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
510                 }
511
512                 ret = media_svc_insert_item_immediately(_content_get_db_handle(), storage_id, storage_type, repl_path, _content_get_uid());
513
514                 if (ret != MS_MEDIA_ERR_NONE) {
515                         if (ret == MS_MEDIA_ERR_DB_CONSTRAINT_FAIL) {
516                                 media_content_sec_error("This item is already inserted. This may be normal operation because other process already did this (%s)", repl_path);
517                                 ret = MEDIA_CONTENT_ERROR_NONE;
518                         } else {
519                                 media_content_sec_error("media_svc_insert_item_immediately failed : %d (%s)", ret, repl_path);
520                         }
521
522                         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
523                 }
524         } else if (ret != MS_MEDIA_ERR_NONE) {
525                 media_content_sec_error("media_svc_check_item_exist_by_path failed : %d (%s)", ret, repl_path);
526                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
527         }
528
529         media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
530         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
531
532         if (STRING_VALID(storage_id))
533                 ret = _media_info_get_media_info_from_db(repl_path, storage_id, (media_info_h)_media);
534         else
535                 ret = _media_info_get_media_info_from_db(repl_path, DEFAULT_MEDIA_STORAGE_ID, (media_info_h)_media);
536
537         *info = (media_info_h)_media;
538         return ret;
539 }
540
541 int media_info_insert_batch_to_db(const char **path_array, unsigned int array_length, media_insert_completed_cb completed_cb, void *user_data)
542 {
543         char **repl_path_array = NULL;
544         int idx = 0;
545         int ret = MS_MEDIA_ERR_NONE;
546         char repl_path[MAX_PATH_LEN] = {0, };
547
548         media_content_retvm_if(path_array == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path_array");
549         media_content_retvm_if(array_length <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid array_length");
550
551         repl_path_array = calloc(1, sizeof(char *) * array_length);
552         media_content_retvm_if(repl_path_array == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
553
554         for (idx = 0; idx < array_length; idx++) {
555                 if (STRING_VALID(path_array[idx])) {
556                         memset(repl_path, 0, sizeof(repl_path));
557                         _media_content_replace_path(path_array[idx], repl_path);
558                         repl_path_array[idx] = strndup(repl_path, strlen(repl_path));
559                 } else {
560                         media_content_error("path[%d] is invalid string", idx);
561                 }
562         }
563
564         ret = __media_info_insert_batch(MEDIA_BATCH_INSERT_NORMAL, (const char **)repl_path_array, array_length, completed_cb, user_data);
565         for (idx = 0; idx < array_length; idx++)
566                 SAFE_FREE(repl_path_array[idx]);
567
568         SAFE_FREE(repl_path_array);
569
570         return ret;
571 }
572
573 int media_info_insert_burst_shot_to_db(const char **path_array, unsigned int array_length, media_insert_burst_shot_completed_cb callback, void *user_data)
574 {
575         char **repl_path_array = NULL;
576         int idx = 0;
577         int ret = MS_MEDIA_ERR_NONE;
578         char repl_path[MAX_PATH_LEN] = {0, };
579
580         media_content_warn("DEPRECATION WARNING: media_info_insert_burst_shot_to_db() is deprecated and will be removed from next release.");
581
582         media_content_retvm_if(path_array == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path_array");
583         media_content_retvm_if(array_length <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid array_length");
584
585         repl_path_array = calloc(1, sizeof(char *) * array_length);
586         media_content_retvm_if(repl_path_array == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
587
588         for (idx = 0; idx < array_length; idx++) {
589                 if (STRING_VALID(path_array[idx])) {
590                         memset(repl_path, 0, sizeof(repl_path));
591                         _media_content_replace_path(path_array[idx], repl_path);
592                         repl_path_array[idx] = strndup(repl_path, strlen(repl_path));
593                 } else {
594                         media_content_error("path[%d] is invalid string", idx);
595                 }
596         }
597
598         ret = __media_info_insert_batch(MEDIA_BATCH_INSERT_BURSTSHOT, (const char **)repl_path_array, array_length, callback, user_data);
599         for (idx = 0; idx < array_length; idx++)
600                 SAFE_FREE(repl_path_array[idx]);
601
602         SAFE_FREE(repl_path_array);
603
604         return ret;
605 }
606
607 #ifdef _USE_TVPD_MODE
608 int media_info_get_media_info_by_path_from_db(const char* path, media_info_h* media)
609 {
610         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0,};
611         int ret = MEDIA_CONTENT_ERROR_NONE;
612         media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid path");
613         media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid info");
614
615         memset(storage_id, 0x00, sizeof(storage_id));
616         ret = media_svc_get_storage_id(_content_get_db_handle(), path, storage_id, tzplatform_getuid(TZ_USER_NAME));
617         if (ret != MS_MEDIA_ERR_NONE) {
618                 media_content_error("media_svc_get_storage_id failed : %d", ret);
619                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
620         }
621
622         media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
623         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
624
625         ret =  _media_info_get_media_info_from_db(path, storage_id, (media_info_h)_media);
626         *media = (media_info_h)_media;
627
628         return ret;
629 }
630 #endif
631
632 #ifdef _USE_SENIOR_MODE
633 int media_info_set_contact(media_info_h media, const char *contact)
634 {
635         return __media_info_set_str_data(media, MEDIA_INFO_CONTACT, contact);
636 }
637
638 int media_info_set_app_data(media_info_h media, const char *app_data)
639 {
640         return __media_info_set_str_data(media, MEDIA_INFO_APP_DATA, app_data);
641 }
642
643 int media_info_insert_to_db_with_contact_data(const char *path, const char* contact, const char* app_data, media_info_h *info)
644 {
645         int ret = media_info_insert_to_db(path, info);
646         media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_insert_to_db [%s] failed", path);
647
648         ret = media_info_set_contact(*info, contact);
649         if (ret != MEDIA_CONTENT_ERROR_NONE) {
650                 media_content_error("media_info_set_contact [%s] failed", contact);
651
652                 media_info_s* _media_info = (media_info_s*)*info;
653                 ret = media_info_delete_from_db(_media_info->media_id);
654                 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
655
656                 media_info_destroy(*info);
657                 return ret;
658         }
659
660         ret = media_info_set_app_data(*info, app_data);
661         if (ret != MEDIA_CONTENT_ERROR_NONE) {
662                 media_content_error("media_info_set_app_data [%s] failed", app_data);
663
664                 media_info_s* _media_info = (media_info_s*)*info;
665                 ret = media_info_delete_from_db(_media_info->media_id);
666                 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
667
668                 media_info_destroy(*info);
669                 return ret;
670         }
671
672         ret = media_info_update_to_db(*info);
673         if (ret != MEDIA_CONTENT_ERROR_NONE) {
674                 media_content_error("media_info_update_to_db [] failed");
675
676                 media_info_s* _media_info = (media_info_s*)*info;
677                 ret = media_info_delete_from_db(_media_info->media_id);
678                 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
679
680                 media_info_destroy(*info);
681                 return ret;
682         }
683
684         return ret;
685 }
686
687 int media_info_delete_contact_from_db(const char* contact, const char* storage_id)
688 {
689         return -1;
690 }
691
692 int media_info_delete_item(const char *media_id)
693 {
694         int ret = MEDIA_CONTENT_ERROR_NONE;
695         char *path = NULL;
696         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0,};
697
698         if (!STRING_VALID(media_id)) {
699                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
700                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
701         }
702
703         memset(storage_id, 0x00, sizeof(storage_id));
704
705         ret = __media_info_get_media_path_by_id_from_db(media_id, &path);
706         if (ret != MEDIA_CONTENT_ERROR_NONE) {
707                 media_content_error("__media_info_get_media_path_by_id_from_db failed : %d", ret);
708                 SAFE_FREE(path);
709                 return ret;
710         }
711
712         ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
713         if (ret != MEDIA_CONTENT_ERROR_NONE) {
714                 media_content_error("_media_db_get_storage_id_by_media_id failed : %d", ret);
715                 SAFE_FREE(path);
716                 return ret;
717         }
718
719         ret = media_svc_delete_item_by_path(_content_get_db_handle(), storage_id, path, tzplatform_getuid(TZ_USER_NAME));
720         if (ret != MEDIA_CONTENT_ERROR_NONE) {
721                 media_content_error("remove from DB failed : %d", ret);
722                 SAFE_FREE(path);
723                 return ret;
724         }
725
726         ret = media_svc_remove_file(path);
727         SAFE_FREE(path);
728         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
729 }
730
731 #endif
732
733 int media_info_delete_from_db(const char *media_id)
734 {
735         int ret = MEDIA_CONTENT_ERROR_NONE;
736         char *path = NULL;
737         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
738
739         if (!STRING_VALID(media_id)) {
740                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
741                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
742         }
743
744         memset(storage_id, 0x00, sizeof(storage_id));
745
746         ret = __media_info_get_media_path_by_id_from_db(media_id, &path);
747         if (ret != MEDIA_CONTENT_ERROR_NONE) {
748                 media_content_error("__media_info_get_media_path_by_id_from_db failed : %d", ret);
749                 SAFE_FREE(path);
750                 return ret;
751         }
752
753         ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
754         if (ret != MEDIA_CONTENT_ERROR_NONE) {
755                 media_content_error("_media_db_get_storage_id_by_media_id failed : %d", ret);
756                 SAFE_FREE(path);
757                 return ret;
758         }
759
760         ret = media_svc_delete_item_by_path(_content_get_db_handle(), storage_id, path, _content_get_uid());
761         SAFE_FREE(path);
762
763         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
764 }
765
766 static int __media_info_delete_thumb_from_list(GArray *thumb_list)
767 {
768         int i = 0;
769         int list_len = 0;
770         char *thumb_path = NULL;
771
772         if (thumb_list != NULL) {
773                 list_len = thumb_list->len;
774                 for (i = 0; i < list_len; i++) {
775                         thumb_path = g_array_index(thumb_list, char*, i);
776                         media_content_debug("thumb path [%s]", thumb_path);
777                         if (unlink(thumb_path) < 0)
778                                 media_content_stderror("failed to delete");
779                 }
780         }
781         return MEDIA_CONTENT_ERROR_NONE;
782 }
783
784 static int __media_info_release_thumb_list(GArray *thumb_list)
785 {
786         int i = 0;
787         int list_len = 0;
788         char *thumb_path = NULL;
789
790         if (thumb_list != NULL) {
791                 list_len = thumb_list->len;
792                 for (i = 0; i < list_len; i++) {
793                         thumb_path = g_array_index(thumb_list, char*, 0);
794                         g_array_remove_index(thumb_list, 0);
795                         SAFE_FREE(thumb_path);
796                 }
797
798                 g_array_free(thumb_list, FALSE);
799         }
800
801         return MEDIA_CONTENT_ERROR_NONE;
802 }
803
804 static int __media_info_release_storage_list(GArray *storage_list)
805 {
806         int i = 0;
807         int list_len = 0;
808         media_storage_s *storage = NULL;
809
810         if (storage_list != NULL) {
811                 list_len = storage_list->len;
812                 for (i = 0; i < list_len; i++) {
813                         storage = g_array_index(storage_list, media_storage_s *, 0);
814                         g_array_remove_index(storage_list, 0);
815                         SAFE_FREE(storage->storage_id);
816                         SAFE_FREE(storage);
817                 }
818
819                 g_array_free(storage_list, FALSE);
820         }
821
822         return MEDIA_CONTENT_ERROR_NONE;
823 }
824
825 int media_info_delete_batch_from_db(filter_h filter)
826 {
827         int ret = MEDIA_CONTENT_ERROR_NONE;
828         char *query_string = NULL;
829         filter_s *_filter = NULL;
830         attribute_h attr;
831         char *condition_query = NULL;
832         GArray *storage_list = NULL;
833         GArray *thumb_list = NULL;
834         int idx = 0;
835         media_storage_s *storage_item = NULL;
836
837         media_content_warn("DEPRECATION WARNING: media_info_delete_batch_from_db() is deprecated and will be removed from next release.");
838
839         media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid filter");
840
841         _filter = (filter_s*)filter;
842
843         media_content_retvm_if(_filter->condition == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid condition");
844
845         attr = _content_get_attirbute_handle();
846
847         ret = _media_filter_attribute_generate(attr, filter, &condition_query);
848         media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "Invalid condition");
849
850         ret = __media_info_get_storage_list_to_remove(condition_query, &storage_list);
851         if (ret != MEDIA_CONTENT_ERROR_NONE) {
852                 SAFE_FREE(condition_query);
853                 __media_info_release_storage_list(storage_list);
854
855                 return ret;
856         }
857
858         for (idx = 0; idx < storage_list->len; idx++) {
859                 storage_item = g_array_index(storage_list, media_storage_s *, idx);
860                 /*media_content_debug("storage_id[%s] storage_type[%d]", storage_item->storage_id, storage_item->storage_type);*/
861
862                 ret = __media_info_get_thumbnail_to_remove(condition_query, storage_item->storage_id, storage_item->storage_type, &thumb_list);
863                 if (ret != MEDIA_CONTENT_ERROR_NONE) {
864                         SAFE_FREE(condition_query);
865                         __media_info_release_storage_list(storage_list);
866                         __media_info_release_thumb_list(thumb_list);
867
868                         return ret;
869                 }
870
871                 query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, storage_item->storage_id, condition_query, storage_item->storage_type);
872
873                 ret = _content_query_sql(query_string);
874                 SQLITE3_SAFE_FREE(query_string);
875
876                 if (ret == MEDIA_CONTENT_ERROR_NONE) {
877                         media_content_debug("Batch deletion succeeded. Send notification for this");
878                         if (storage_item->storage_type == MEDIA_CONTENT_STORAGE_INTERNAL) {
879                                 media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_ROOT_PATH_INTERNAL, -1, NULL, NULL);
880                         } else {
881                                 char *storage_path = NULL;
882                                 media_svc_get_storage_path(_content_get_db_handle(), storage_item->storage_id, &storage_path);
883                                 if (STRING_VALID(storage_path))
884                                         media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, storage_path, -1, NULL, NULL);
885
886                                 SAFE_FREE(storage_path);
887                         }
888                         __media_info_delete_thumb_from_list(thumb_list);
889                 }
890                 __media_info_release_thumb_list(thumb_list);
891
892         }
893
894         SAFE_FREE(condition_query);
895         __media_info_release_storage_list(storage_list);
896
897         return ret;
898 }
899
900 int media_info_destroy(media_info_h media)
901 {
902         int ret = MEDIA_CONTENT_ERROR_NONE;
903         media_info_s *_media = (media_info_s*)media;
904
905         if (_media) {
906                 SAFE_FREE(_media->media_id);
907                 SAFE_FREE(_media->file_path);
908                 SAFE_FREE(_media->display_name);
909                 SAFE_FREE(_media->mime_type);
910                 SAFE_FREE(_media->thumbnail_path);
911                 SAFE_FREE(_media->description);
912                 SAFE_FREE(_media->author);
913                 SAFE_FREE(_media->provider);
914                 SAFE_FREE(_media->content_name);
915                 SAFE_FREE(_media->category);
916                 SAFE_FREE(_media->location_tag);
917                 SAFE_FREE(_media->age_rating);
918                 SAFE_FREE(_media->keyword);
919                 SAFE_FREE(_media->title);
920 #ifdef _USE_TVPD_MODE
921                 SAFE_FREE(_media->modified_month);
922 #endif
923                 SAFE_FREE(_media->weather);
924                 SAFE_FREE(_media->storage_uuid);
925 #ifdef _USE_SENIOR_MODE
926                 SAFE_FREE(_media->contact);
927                 SAFE_FREE(_media->app_data);
928 #endif
929
930                 if (_media->image_meta) {
931                         SAFE_FREE(_media->image_meta->media_id);
932                         SAFE_FREE(_media->image_meta->date_taken);
933                         SAFE_FREE(_media->image_meta->burst_id);
934                         SAFE_FREE(_media->image_meta->exposure_time);
935                         SAFE_FREE(_media->image_meta->model);
936                         SAFE_FREE(_media->image_meta->title);
937
938                         SAFE_FREE(_media->image_meta);
939                 }
940
941                 if (_media->video_meta) {
942                         SAFE_FREE(_media->video_meta->media_id);
943                         SAFE_FREE(_media->video_meta->title);
944                         SAFE_FREE(_media->video_meta->album);
945                         SAFE_FREE(_media->video_meta->artist);
946                         SAFE_FREE(_media->video_meta->album_artist);
947                         SAFE_FREE(_media->video_meta->genre);
948                         SAFE_FREE(_media->video_meta->composer);
949                         SAFE_FREE(_media->video_meta->year);
950                         SAFE_FREE(_media->video_meta->recorded_date);
951                         SAFE_FREE(_media->video_meta->copyright);
952                         SAFE_FREE(_media->video_meta->track_num);
953
954                         SAFE_FREE(_media->video_meta);
955                 }
956
957                 if (_media->audio_meta) {
958                         SAFE_FREE(_media->audio_meta->media_id);
959                         SAFE_FREE(_media->audio_meta->title);
960                         SAFE_FREE(_media->audio_meta->album);
961                         SAFE_FREE(_media->audio_meta->artist);
962                         SAFE_FREE(_media->audio_meta->album_artist);
963                         SAFE_FREE(_media->audio_meta->genre);
964                         SAFE_FREE(_media->audio_meta->composer);
965                         SAFE_FREE(_media->audio_meta->year);
966                         SAFE_FREE(_media->audio_meta->recorded_date);
967                         SAFE_FREE(_media->audio_meta->copyright);
968                         SAFE_FREE(_media->audio_meta->track_num);
969
970                         SAFE_FREE(_media->audio_meta);
971                 }
972
973                 SAFE_FREE(_media);
974
975                 ret = MEDIA_CONTENT_ERROR_NONE;
976         } else {
977                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
978                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
979         }
980
981         return ret;
982 }
983
984 int media_info_clone(media_info_h *dst, media_info_h src)
985 {
986         int ret = MEDIA_CONTENT_ERROR_NONE;
987         media_info_s *_src = (media_info_s*)src;
988
989         if (_src != NULL) {
990                 media_info_s *_dst = (media_info_s*)calloc(1, sizeof(media_info_s));
991                 media_content_retvm_if(_dst == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
992
993                 if (_src->media_id) {
994                         _dst->media_id = g_strdup(_src->media_id);
995                         if (_dst->media_id == NULL) {
996                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
997                                 media_info_destroy((media_info_h)_dst);
998                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
999                         }
1000                 }
1001                 if (_src->file_path) {
1002                         _dst->file_path = g_strdup(_src->file_path);
1003                         if (_dst->file_path == NULL) {
1004                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1005                                 media_info_destroy((media_info_h)_dst);
1006                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1007                         }
1008                 }
1009                 if (_src->display_name != NULL) {
1010                         _dst->display_name = g_strdup(_src->display_name);
1011                         if (_dst->display_name == NULL) {
1012                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1013                                 media_info_destroy((media_info_h)_dst);
1014                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1015                         }
1016                 }
1017                 if (_src->mime_type) {
1018                         _dst->mime_type = g_strdup(_src->mime_type);
1019                         if (_dst->mime_type == NULL) {
1020                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1021                                 media_info_destroy((media_info_h)_dst);
1022                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1023                         }
1024                 }
1025                 if (_src->thumbnail_path != NULL) {
1026                         _dst->thumbnail_path = g_strdup(_src->thumbnail_path);
1027                         if (_dst->thumbnail_path == NULL) {
1028                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1029                                 media_info_destroy((media_info_h)_dst);
1030                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1031                         }
1032                 }
1033                 if (_src->description != NULL) {
1034                         _dst->description = g_strdup(_src->description);
1035                         if (_dst->description == NULL) {
1036                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1037                                 media_info_destroy((media_info_h)_dst);
1038                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1039                         }
1040                 }
1041
1042                 if (_src->weather != NULL) {
1043                         _dst->weather = g_strdup(_src->weather);
1044                         if (_dst->weather == NULL) {
1045                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1046                                 media_info_destroy((media_info_h)_dst);
1047                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1048                         }
1049                 }
1050
1051                 if (_src->title != NULL) {
1052                         _dst->title = g_strdup(_src->title);
1053                         if (_dst->title == NULL) {
1054                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1055                                 media_info_destroy((media_info_h)_dst);
1056                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1057                         }
1058                 }
1059                 if (_src->author != NULL) {
1060                         _dst->author = g_strdup(_src->author);
1061                         if (_dst->author == NULL) {
1062                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1063                                 media_info_destroy((media_info_h)_dst);
1064                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1065                         }
1066                 }
1067                 if (_src->provider != NULL) {
1068                         _dst->provider = g_strdup(_src->provider);
1069                         if (_dst->provider == NULL) {
1070                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1071                                 media_info_destroy((media_info_h)_dst);
1072                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1073                         }
1074                 }
1075                 if (_src->content_name != NULL) {
1076                         _dst->content_name = g_strdup(_src->content_name);
1077                         if (_dst->content_name == NULL) {
1078                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1079                                 media_info_destroy((media_info_h)_dst);
1080                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1081                         }
1082                 }
1083                 if (_src->category != NULL) {
1084                         _dst->category = g_strdup(_src->category);
1085                         if (_dst->category == NULL) {
1086                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1087                                 media_info_destroy((media_info_h)_dst);
1088                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1089                         }
1090                 }
1091                 if (_src->location_tag != NULL) {
1092                         _dst->location_tag = g_strdup(_src->location_tag);
1093                         if (_dst->location_tag == NULL) {
1094                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1095                                 media_info_destroy((media_info_h)_dst);
1096                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1097                         }
1098                 }
1099                 if (_src->age_rating != NULL) {
1100                         _dst->age_rating = g_strdup(_src->age_rating);
1101                         if (_dst->age_rating == NULL) {
1102                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1103                                 media_info_destroy((media_info_h)_dst);
1104                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1105                         }
1106                 }
1107                 if (_src->keyword != NULL) {
1108                         _dst->keyword = g_strdup(_src->keyword);
1109                         if (_dst->keyword == NULL) {
1110                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1111                                 media_info_destroy((media_info_h)_dst);
1112                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1113                         }
1114                 }
1115
1116                 if (_src->storage_uuid != NULL) {
1117                         _dst->storage_uuid = g_strdup(_src->storage_uuid);
1118                         if (_dst->storage_uuid == NULL) {
1119                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1120                                 media_info_destroy((media_info_h)_dst);
1121                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1122                         }
1123                 }
1124 #ifdef _USE_TVPD_MODE
1125                 if (STRING_VALID(_src->modified_month)) {
1126                         _dst->modified_month = strdup(_src->modified_month);
1127                         if (_dst->modified_month == NULL) {
1128                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1129                                 media_info_destroy((media_info_h)_dst);
1130                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1131                         }
1132                 }
1133 #endif
1134 #ifdef _USE_SENIOR_MODE
1135                 if (STRING_VALID(_src->contact)) {
1136                         _dst->contact = strdup(_src->contact);
1137                         if (_dst->contact == NULL) {
1138                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1139                                 media_info_destroy((media_info_h)_dst);
1140                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1141                         }
1142                 }
1143
1144                 if (STRING_VALID(_src->app_data)) {
1145                         _dst->app_data = strdup(_src->app_data);
1146                         if (_dst->app_data == NULL) {
1147                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1148                                 media_info_destroy((media_info_h)_dst);
1149                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1150                         }
1151                 }
1152 #endif
1153
1154                 _dst->media_type = _src->media_type;
1155                 _dst->size = _src->size;
1156                 _dst->added_time = _src->added_time;
1157                 _dst->modified_time = _src->modified_time;
1158                 _dst->timeline = _src->timeline;
1159                 _dst->longitude = _src->longitude;
1160                 _dst->latitude = _src->latitude;
1161                 _dst->altitude = _src->altitude;
1162                 _dst->rating = _src->rating;
1163                 _dst->favourite = _src->favourite;
1164                 _dst->is_drm = _src->is_drm;
1165                 _dst->storage_type = _src->storage_type;
1166                 _dst->played_count = _src->played_count;
1167                 _dst->played_time = _src->played_time;
1168                 _dst->played_position = _src->played_position;
1169                 _dst->sync_status = _src->sync_status;
1170                 _dst->request_id = _src->request_id;
1171                 _dst->face_request_id = _src->face_request_id;
1172                 _dst->is_360 = _src->is_360;
1173 #ifdef _USE_TVPD_MODE
1174                 _dst->stitched_info = _src->stitched_info;
1175                 _dst->extract_flag = _src->extract_flag;
1176 #endif
1177
1178                 if (_src->media_type == MEDIA_CONTENT_TYPE_IMAGE && _src->image_meta) {
1179                         _dst->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
1180                         if (_dst->image_meta == NULL) {
1181                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1182                                 media_info_destroy((media_info_h)_dst);
1183                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1184                         }
1185
1186                         if (_src->image_meta->media_id != NULL) {
1187                                 _dst->image_meta->media_id = g_strdup(_src->image_meta->media_id);
1188                                 if (_dst->image_meta->media_id == NULL) {
1189                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1190                                         media_info_destroy((media_info_h)_dst);
1191                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1192                                 }
1193                         }
1194
1195                         if (_src->image_meta->date_taken != NULL) {
1196                                 _dst->image_meta->date_taken = g_strdup(_src->image_meta->date_taken);
1197                                 if (_dst->image_meta->date_taken == NULL) {
1198                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1199                                         media_info_destroy((media_info_h)_dst);
1200                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1201                                 }
1202                         }
1203
1204                         if (_src->image_meta->burst_id != NULL) {
1205                                 _dst->image_meta->burst_id = g_strdup(_src->image_meta->burst_id);
1206                                 if (_dst->image_meta->burst_id == NULL) {
1207                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1208                                         media_info_destroy((media_info_h)_dst);
1209                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1210                                 }
1211                         }
1212
1213                         if (_src->image_meta->exposure_time != NULL) {
1214                                 _dst->image_meta->exposure_time = g_strdup(_src->image_meta->exposure_time);
1215                                 if (_dst->image_meta->exposure_time == NULL) {
1216                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1217                                         media_info_destroy((media_info_h)_dst);
1218                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1219                                 }
1220                         }
1221
1222                         if (_src->image_meta->model != NULL) {
1223                                 _dst->image_meta->model = g_strdup(_src->image_meta->model);
1224                                 if (_dst->image_meta->model == NULL) {
1225                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1226                                         media_info_destroy((media_info_h)_dst);
1227                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1228                                 }
1229                         }
1230
1231                         _dst->image_meta->fnumber = _src->image_meta->fnumber;
1232                         _dst->image_meta->iso = _src->image_meta->iso;
1233                         _dst->image_meta->width = _src->image_meta->width;
1234                         _dst->image_meta->height = _src->image_meta->height;
1235                         _dst->image_meta->orientation = _src->image_meta->orientation;
1236
1237                 } else if (_src->media_type == MEDIA_CONTENT_TYPE_VIDEO && _src->video_meta) {
1238                         _dst->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
1239                         if (_dst->video_meta == NULL) {
1240                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1241                                 media_info_destroy((media_info_h)_dst);
1242                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1243                         }
1244
1245                         if (_src->video_meta->media_id != NULL) {
1246                                 _dst->video_meta->media_id = g_strdup(_src->video_meta->media_id);
1247                                 if (_dst->video_meta->media_id == NULL) {
1248                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1249                                         media_info_destroy((media_info_h)_dst);
1250                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1251                                 }
1252                         }
1253                         if (_src->video_meta->title != NULL) {
1254                                 _dst->video_meta->title = g_strdup(_src->video_meta->title);
1255                                 if (_dst->video_meta->title == NULL) {
1256                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1257                                         media_info_destroy((media_info_h)_dst);
1258                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1259                                 }
1260                         }
1261                         if (_src->video_meta->album != NULL) {
1262                                 _dst->video_meta->album = g_strdup(_src->video_meta->album);
1263                                 if (_dst->video_meta->album == NULL) {
1264                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1265                                         media_info_destroy((media_info_h)_dst);
1266                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1267                                 }
1268                         }
1269                         if (_src->video_meta->artist != NULL) {
1270                                 _dst->video_meta->artist = g_strdup(_src->video_meta->artist);
1271                                 if (_dst->video_meta->artist == NULL) {
1272                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1273                                         media_info_destroy((media_info_h)_dst);
1274                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1275                                 }
1276                         }
1277                         if (_src->video_meta->album_artist != NULL) {
1278                                 _dst->video_meta->album_artist = g_strdup(_src->video_meta->album_artist);
1279                                 if (_dst->video_meta->album_artist == NULL) {
1280                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1281                                         media_info_destroy((media_info_h)_dst);
1282                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1283                                 }
1284                         }
1285                         if (_src->video_meta->genre != NULL) {
1286                                 _dst->video_meta->genre = g_strdup(_src->video_meta->genre);
1287                                 if (_dst->video_meta->genre == NULL) {
1288                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1289                                         media_info_destroy((media_info_h)_dst);
1290                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1291                                 }
1292                         }
1293                         if (_src->video_meta->composer != NULL) {
1294                                 _dst->video_meta->composer = g_strdup(_src->video_meta->composer);
1295                                 if (_dst->video_meta->composer == NULL) {
1296                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1297                                         media_info_destroy((media_info_h)_dst);
1298                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1299                                 }
1300                         }
1301                         if (_src->video_meta->year != NULL) {
1302                                 _dst->video_meta->year = g_strdup(_src->video_meta->year);
1303                                 if (_dst->video_meta->year == NULL) {
1304                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1305                                         media_info_destroy((media_info_h)_dst);
1306                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1307                                 }
1308                         }
1309                         if (_src->video_meta->recorded_date != NULL) {
1310                                 _dst->video_meta->recorded_date = g_strdup(_src->video_meta->recorded_date);
1311                                 if (_dst->video_meta->recorded_date == NULL) {
1312                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1313                                         media_info_destroy((media_info_h)_dst);
1314                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1315                                 }
1316                         }
1317                         if (_src->video_meta->copyright != NULL) {
1318                                 _dst->video_meta->copyright = g_strdup(_src->video_meta->copyright);
1319                                 if (_dst->video_meta->copyright == NULL) {
1320                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1321                                         media_info_destroy((media_info_h)_dst);
1322                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1323                                 }
1324                         }
1325                         if (_src->video_meta->track_num != NULL) {
1326                                 _dst->video_meta->track_num = g_strdup(_src->video_meta->track_num);
1327                                 if (_dst->video_meta->track_num == NULL) {
1328                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1329                                         media_info_destroy((media_info_h)_dst);
1330                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1331                                 }
1332                         }
1333
1334                         _dst->video_meta->width = _src->video_meta->width;
1335                         _dst->video_meta->height = _src->video_meta->height;
1336                         _dst->video_meta->duration = _src->video_meta->duration;
1337                         _dst->video_meta->bitrate = _src->video_meta->bitrate;
1338                         _dst->video_meta->rotation = _src->video_meta->rotation;
1339
1340                 } else if ((_src->media_type == MEDIA_CONTENT_TYPE_MUSIC || _src->media_type == MEDIA_CONTENT_TYPE_SOUND) && _src->audio_meta) {
1341                         _dst->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
1342                         if (_dst->audio_meta == NULL) {
1343                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1344                                 media_info_destroy((media_info_h)_dst);
1345                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1346                         }
1347
1348                         if (_src->audio_meta->media_id != NULL) {
1349                                 _dst->audio_meta->media_id = g_strdup(_src->audio_meta->media_id);
1350                                 if (_dst->audio_meta->media_id == NULL) {
1351                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1352                                         media_info_destroy((media_info_h)_dst);
1353                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1354                                 }
1355                         }
1356                         if (_src->audio_meta->title != NULL) {
1357                                 _dst->audio_meta->title = g_strdup(_src->audio_meta->title);
1358                                 if (_dst->audio_meta->title == NULL) {
1359                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1360                                         media_info_destroy((media_info_h)_dst);
1361                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1362                                 }
1363                         }
1364                         if (_src->audio_meta->album != NULL) {
1365                                 _dst->audio_meta->album = g_strdup(_src->audio_meta->album);
1366                                 if (_dst->audio_meta->album == NULL) {
1367                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1368                                         media_info_destroy((media_info_h)_dst);
1369                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1370                                 }
1371                         }
1372                         if (_src->audio_meta->artist != NULL) {
1373                                 _dst->audio_meta->artist = g_strdup(_src->audio_meta->artist);
1374                                 if (_dst->audio_meta->artist == NULL) {
1375                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1376                                         media_info_destroy((media_info_h)_dst);
1377                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1378                                 }
1379                         }
1380                         if (_src->audio_meta->album_artist != NULL) {
1381                                 _dst->audio_meta->album_artist = g_strdup(_src->audio_meta->album_artist);
1382                                 if (_dst->audio_meta->album_artist == NULL) {
1383                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1384                                         media_info_destroy((media_info_h)_dst);
1385                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1386                                 }
1387                         }
1388                         if (_src->audio_meta->genre != NULL) {
1389                                 _dst->audio_meta->genre = g_strdup(_src->audio_meta->genre);
1390                                 if (_dst->audio_meta->genre == NULL) {
1391                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1392                                         media_info_destroy((media_info_h)_dst);
1393                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1394                                 }
1395                         }
1396                         if (_src->audio_meta->composer != NULL) {
1397                                 _dst->audio_meta->composer = g_strdup(_src->audio_meta->composer);
1398                                 if (_dst->audio_meta->composer == NULL) {
1399                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1400                                         media_info_destroy((media_info_h)_dst);
1401                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1402                                 }
1403                         }
1404                         if (_src->audio_meta->year != NULL) {
1405                                 _dst->audio_meta->year = g_strdup(_src->audio_meta->year);
1406                                 if (_dst->audio_meta->year == NULL) {
1407                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1408                                         media_info_destroy((media_info_h)_dst);
1409                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1410                                 }
1411                         }
1412                         if (_src->audio_meta->recorded_date != NULL) {
1413                                 _dst->audio_meta->recorded_date = g_strdup(_src->audio_meta->recorded_date);
1414                                 if (_dst->audio_meta->recorded_date == NULL) {
1415                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1416                                         media_info_destroy((media_info_h)_dst);
1417                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1418                                 }
1419                         }
1420                         if (_src->audio_meta->copyright != NULL) {
1421                                 _dst->audio_meta->copyright = g_strdup(_src->audio_meta->copyright);
1422                                 if (_dst->audio_meta->copyright == NULL) {
1423                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1424                                         media_info_destroy((media_info_h)_dst);
1425                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1426                                 }
1427                         }
1428                         if (_src->audio_meta->track_num != NULL) {
1429                                 _dst->audio_meta->track_num = g_strdup(_src->audio_meta->track_num);
1430                                 if (_dst->audio_meta->track_num == NULL) {
1431                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1432                                         media_info_destroy((media_info_h)_dst);
1433                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1434                                 }
1435                         }
1436
1437                         _dst->audio_meta->channel = _src->audio_meta->channel;
1438                         _dst->audio_meta->samplerate = _src->audio_meta->samplerate;
1439                         _dst->audio_meta->duration = _src->audio_meta->duration;
1440                         _dst->audio_meta->bitrate = _src->audio_meta->bitrate;
1441                         _dst->audio_meta->bitpersample = _src->audio_meta->bitpersample;
1442                 }
1443                 *dst = (media_info_h)_dst;
1444
1445                 ret = MEDIA_CONTENT_ERROR_NONE;
1446         } else {
1447                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1448                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1449         }
1450
1451         return ret;
1452 }
1453
1454 int media_info_get_media_count_from_db(filter_h filter, int *media_count)
1455 {
1456         int ret = MEDIA_CONTENT_ERROR_NONE;
1457
1458         if (media_count == NULL) {
1459                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1460                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1461
1462                 return ret;
1463         }
1464
1465         ret = _media_db_get_group_item_count(NULL, filter, MEDIA_GROUP_NONE, media_count);
1466
1467         return ret;
1468 }
1469
1470 int media_info_foreach_media_from_db(filter_h filter, media_info_cb callback, void *user_data)
1471 {
1472         int ret = MEDIA_CONTENT_ERROR_NONE;
1473
1474         media_content_retvm_if(callback == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid callback");
1475
1476         ret = _media_db_get_group_item(NULL, filter, callback, user_data, MEDIA_GROUP_NONE);
1477
1478         return ret;
1479 }
1480
1481 int media_info_get_tag_count_from_db(const char *media_id, filter_h filter, int *tag_count)
1482 {
1483         int ret = MEDIA_CONTENT_ERROR_NONE;
1484
1485         if (STRING_VALID(media_id) && tag_count) {
1486                 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_TAG_BY_MEDIA_ID, tag_count);
1487         } else {
1488                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1489                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1490         }
1491
1492         return ret;
1493 }
1494
1495 int media_info_foreach_tag_from_db(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
1496 {
1497         int ret = MEDIA_CONTENT_ERROR_NONE;
1498
1499         if ((callback != NULL) && STRING_VALID(media_id)) {
1500                 ret = _media_db_get_tag(media_id, filter, callback, user_data);
1501         } else {
1502                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1503                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1504         }
1505
1506         return ret;
1507 }
1508
1509 int media_info_get_bookmark_count_from_db(const char *media_id, filter_h filter, int *bookmark_count)
1510 {
1511         int ret = MEDIA_CONTENT_ERROR_NONE;
1512
1513         if (STRING_VALID(media_id) && bookmark_count) {
1514                 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID, bookmark_count);
1515         } else {
1516                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1517                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1518         }
1519
1520         return ret;
1521 }
1522
1523 int media_info_foreach_bookmark_from_db(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
1524 {
1525         int ret = MEDIA_CONTENT_ERROR_NONE;
1526
1527         if ((callback != NULL) && STRING_VALID(media_id)) {
1528                 ret = _media_db_get_bookmark(media_id, filter, callback, user_data);
1529         } else {
1530                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1531                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1532         }
1533
1534         return ret;
1535 }
1536
1537 int media_info_get_face_count_from_db(const char *media_id, filter_h filter, int *face_count)
1538 {
1539         int ret = MEDIA_CONTENT_ERROR_NONE;
1540
1541         if (STRING_VALID(media_id) && face_count) {
1542                 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_FACE_BY_MEDIA_ID, face_count);
1543         } else {
1544                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1545                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1546         }
1547
1548         return ret;
1549 }
1550
1551 int media_info_foreach_face_from_db(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
1552 {
1553         int ret = MEDIA_CONTENT_ERROR_NONE;
1554
1555         if ((callback != NULL) && STRING_VALID(media_id)) {
1556                 ret = _media_db_get_face(media_id, filter, callback, user_data);
1557         } else {
1558                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1559                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1560         }
1561
1562         return ret;
1563 }
1564
1565 int media_info_get_image(media_info_h media, image_meta_h *image)
1566 {
1567         int ret = MEDIA_CONTENT_ERROR_NONE;
1568
1569         media_info_s *_media = (media_info_s*)media;
1570
1571         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1572         media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_IMAGE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1573         media_content_retvm_if(_media->image_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid image_meta");
1574
1575         image_meta_s *_image = (image_meta_s*)calloc(1, sizeof(image_meta_s));
1576         media_content_retvm_if(_image == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1577
1578         _image->media_id = g_strdup(_media->media_id);
1579         _image->width = _media->image_meta->width;
1580         _image->height = _media->image_meta->height;
1581         _image->orientation = _media->image_meta->orientation;
1582         _image->fnumber = _media->image_meta->fnumber;
1583         _image->iso = _media->image_meta->iso;
1584         _image->date_taken = g_strdup(_media->image_meta->date_taken);
1585         _image->title = g_strdup(_media->image_meta->title);
1586         _image->burst_id = g_strdup(_media->image_meta->burst_id);
1587         _image->exposure_time = g_strdup(_media->image_meta->exposure_time);
1588         _image->model = g_strdup(_media->image_meta->model);
1589
1590         *image = (image_meta_h)_image;
1591
1592         return ret;
1593 }
1594
1595 int media_info_get_video(media_info_h media, video_meta_h *video)
1596 {
1597         int ret = MEDIA_CONTENT_ERROR_NONE;
1598
1599         media_info_s *_media = (media_info_s*)media;
1600
1601         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1602         media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_VIDEO, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1603         media_content_retvm_if(_media->video_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid video_meta");
1604
1605         video_meta_s *_video = (video_meta_s*)calloc(1, sizeof(video_meta_s));
1606         media_content_retvm_if(_video == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1607
1608         _video->media_id = g_strdup(_media->media_id);
1609         _video->title = g_strdup(_media->video_meta->title);
1610         _video->album = g_strdup(_media->video_meta->album);
1611         _video->artist = g_strdup(_media->video_meta->artist);
1612         _video->album_artist = g_strdup(_media->video_meta->album_artist);
1613         _video->genre = g_strdup(_media->video_meta->genre);
1614         _video->composer = g_strdup(_media->video_meta->composer);
1615         _video->year = g_strdup(_media->video_meta->year);
1616         _video->recorded_date = g_strdup(_media->video_meta->recorded_date);
1617         _video->copyright = g_strdup(_media->video_meta->copyright);
1618         _video->track_num = g_strdup(_media->video_meta->track_num);
1619
1620         _video->width = _media->video_meta->width;
1621         _video->height = _media->video_meta->height;
1622         _video->duration = _media->video_meta->duration;
1623         _video->bitrate = _media->video_meta->bitrate;
1624         _video->rotation = _media->video_meta->rotation;
1625
1626         *video = (video_meta_h)_video;
1627
1628         return ret;
1629 }
1630
1631 int media_info_get_audio(media_info_h media, audio_meta_h *audio)
1632 {
1633         int ret = MEDIA_CONTENT_ERROR_NONE;
1634
1635         media_info_s *_media = (media_info_s*)media;
1636
1637         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1638         media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_MUSIC && _media->media_type != MEDIA_CONTENT_TYPE_SOUND, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1639         media_content_retvm_if(_media->audio_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid audio_meta");
1640
1641         audio_meta_s *_audio = (audio_meta_s*)calloc(1, sizeof(audio_meta_s));
1642         media_content_retvm_if(_audio == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1643
1644         _audio->media_id = g_strdup(_media->media_id);
1645         _audio->title = g_strdup(_media->audio_meta->title);
1646         _audio->album = g_strdup(_media->audio_meta->album);
1647         _audio->artist = g_strdup(_media->audio_meta->artist);
1648         _audio->album_artist = g_strdup(_media->audio_meta->album_artist);
1649         _audio->genre = g_strdup(_media->audio_meta->genre);
1650         _audio->composer = g_strdup(_media->audio_meta->composer);
1651         _audio->year = g_strdup(_media->audio_meta->year);
1652         _audio->recorded_date = g_strdup(_media->audio_meta->recorded_date);
1653         _audio->copyright = g_strdup(_media->audio_meta->copyright);
1654         _audio->track_num = g_strdup(_media->audio_meta->track_num);
1655
1656         _audio->duration = _media->audio_meta->duration;
1657         _audio->bitrate = _media->audio_meta->bitrate;
1658         _audio->bitpersample = _media->audio_meta->bitpersample;
1659         _audio->samplerate = _media->audio_meta->samplerate;
1660         _audio->channel = _media->audio_meta->channel;
1661
1662         *audio = (audio_meta_h)_audio;
1663
1664         return ret;
1665 }
1666
1667 int media_info_get_media_id(media_info_h media, char **media_id)
1668 {
1669         int ret = MEDIA_CONTENT_ERROR_NONE;
1670         media_info_s *_media = (media_info_s*)media;
1671
1672         if (_media && media_id) {
1673                 if (STRING_VALID(_media->media_id)) {
1674                         *media_id = strdup(_media->media_id);
1675                         media_content_retvm_if(*media_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1676                 } else {
1677                         *media_id = NULL;
1678                 }
1679                 ret = MEDIA_CONTENT_ERROR_NONE;
1680         } else {
1681                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1682                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1683         }
1684
1685         return ret;
1686 }
1687
1688 int media_info_get_file_path(media_info_h media, char **path)
1689 {
1690         int ret = MEDIA_CONTENT_ERROR_NONE;
1691         media_info_s *_media = (media_info_s*)media;
1692
1693         if (_media && path) {
1694                 if (STRING_VALID(_media->file_path)) {
1695                         *path = strdup(_media->file_path);
1696                         media_content_retvm_if(*path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1697                 } else {
1698                         *path = NULL;
1699                 }
1700                 ret = MEDIA_CONTENT_ERROR_NONE;
1701
1702         } else {
1703                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1704                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1705         }
1706
1707         return ret;
1708 }
1709
1710 int media_info_get_display_name(media_info_h media, char **name)
1711 {
1712         int ret = MEDIA_CONTENT_ERROR_NONE;
1713         media_info_s *_media = (media_info_s*)media;
1714         if (_media && name) {
1715                 if (_media->display_name != NULL) {
1716                         *name = g_strdup(_media->display_name);
1717                         media_content_retvm_if(*name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1718                 } else {
1719                         *name = NULL;
1720                 }
1721                 ret = MEDIA_CONTENT_ERROR_NONE;
1722
1723         } else {
1724                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1725                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1726         }
1727
1728         return ret;
1729 }
1730
1731 int media_info_get_media_type(media_info_h media, media_content_type_e *type)
1732 {
1733         int ret = MEDIA_CONTENT_ERROR_NONE;
1734         media_info_s *_media = (media_info_s*)media;
1735         if (_media && type) {
1736                 *type = _media->media_type;
1737                 ret = MEDIA_CONTENT_ERROR_NONE;
1738         } else {
1739                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1740                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1741         }
1742
1743         return ret;
1744 }
1745
1746 int media_info_get_mime_type(media_info_h media, char **mime_type)
1747 {
1748         int ret = MEDIA_CONTENT_ERROR_NONE;
1749         media_info_s *_media = (media_info_s*)media;
1750
1751         if (_media && mime_type) {
1752                 if (STRING_VALID(_media->mime_type)) {
1753                         *mime_type = strdup(_media->mime_type);
1754                         media_content_retvm_if(*mime_type == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1755                 } else {
1756                         *mime_type = NULL;
1757                 }
1758                 ret = MEDIA_CONTENT_ERROR_NONE;
1759         } else {
1760                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1761                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1762         }
1763
1764         return ret;
1765 }
1766
1767 int media_info_get_size(media_info_h media, unsigned long long *size)
1768 {
1769         int ret = MEDIA_CONTENT_ERROR_NONE;
1770         media_info_s *_media = (media_info_s*)media;
1771
1772         if (_media && size) {
1773                 *size = _media->size;
1774                 ret = MEDIA_CONTENT_ERROR_NONE;
1775         } else {
1776                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1777                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1778         }
1779
1780         return ret;
1781 }
1782
1783 int media_info_get_added_time(media_info_h media, time_t *added_time)
1784 {
1785         int ret = MEDIA_CONTENT_ERROR_NONE;
1786         media_info_s *_media = (media_info_s*)media;
1787         if (_media && added_time) {
1788                 *added_time = _media->added_time;
1789                 ret = MEDIA_CONTENT_ERROR_NONE;
1790         } else {
1791                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1792                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1793         }
1794
1795         return ret;
1796 }
1797
1798 int media_info_get_modified_time(media_info_h media, time_t* time)
1799 {
1800         int ret = MEDIA_CONTENT_ERROR_NONE;
1801         media_info_s *_media = (media_info_s*)media;
1802         if (_media && time) {
1803                 *time = _media->modified_time;
1804                 ret = MEDIA_CONTENT_ERROR_NONE;
1805         } else {
1806                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1807                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1808         }
1809
1810         return ret;
1811 }
1812
1813 int media_info_get_timeline(media_info_h media, time_t* time)
1814 {
1815         int ret = MEDIA_CONTENT_ERROR_NONE;
1816         media_info_s *_media = (media_info_s*)media;
1817         if (_media && time) {
1818                 *time = _media->timeline;
1819                 ret = MEDIA_CONTENT_ERROR_NONE;
1820         } else {
1821                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1822                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1823         }
1824
1825         return ret;
1826 }
1827
1828 int media_info_get_thumbnail_path(media_info_h media, char **path)
1829 {
1830         int ret = MEDIA_CONTENT_ERROR_NONE;
1831         media_info_s *_media = (media_info_s*)media;
1832         if (_media && path) {
1833                 if (_media->thumbnail_path != NULL) {
1834                         *path = g_strdup(_media->thumbnail_path);
1835                         media_content_retvm_if(*path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1836                 } else {
1837                         *path = NULL;
1838                 }
1839                 ret = MEDIA_CONTENT_ERROR_NONE;
1840
1841         } else {
1842                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1843                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1844         }
1845
1846         return ret;
1847 }
1848
1849 int media_info_get_title(media_info_h media, char **title)
1850 {
1851         int ret = MEDIA_CONTENT_ERROR_NONE;
1852         media_info_s *_media = (media_info_s*)media;
1853
1854         if (_media && title)    { /*title can be empty string*/
1855                 if (_media->title != NULL) {
1856                         *title = g_strdup(_media->title);
1857                         media_content_retvm_if(*title == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1858                 } else {
1859                         *title = NULL;
1860                 }
1861                 ret = MEDIA_CONTENT_ERROR_NONE;
1862         } else {
1863                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1864                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1865         }
1866
1867         return ret;
1868 }
1869 #ifdef _USE_TVPD_MODE
1870 int media_info_get_extract_flag(media_info_h media, int *extract_flag)
1871 {
1872         int ret = MEDIA_CONTENT_ERROR_NONE;
1873         media_info_s *_media = (media_info_s *)media;
1874
1875         if (_media && extract_flag) {
1876                 *extract_flag = _media->extract_flag;
1877                 ret = MEDIA_CONTENT_ERROR_NONE;
1878         } else {
1879                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1880                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1881         }
1882
1883         return ret;
1884 }
1885 #endif
1886
1887 int media_info_get_description(media_info_h media, char **description)
1888 {
1889         int ret = MEDIA_CONTENT_ERROR_NONE;
1890         media_info_s *_media = (media_info_s*)media;
1891
1892         if (_media && description) {
1893                 if (_media->description != NULL) {      /*description can be empty string*/
1894                         *description = g_strdup(_media->description);
1895                         media_content_retvm_if(*description == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1896                 } else {
1897                         *description = NULL;
1898                 }
1899                 ret = MEDIA_CONTENT_ERROR_NONE;
1900         } else {
1901                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1902                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1903         }
1904
1905         return ret;
1906 }
1907
1908 int media_info_get_longitude(media_info_h media, double* longitude)
1909 {
1910         int ret = MEDIA_CONTENT_ERROR_NONE;
1911         media_info_s *_media = (media_info_s*)media;
1912
1913         if (_media && longitude) {
1914                 *longitude = _media->longitude;
1915                 ret = MEDIA_CONTENT_ERROR_NONE;
1916         } else {
1917                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1918                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1919         }
1920
1921         return ret;
1922 }
1923 int media_info_get_latitude(media_info_h media, double* latitude)
1924 {
1925         int ret = MEDIA_CONTENT_ERROR_NONE;
1926         media_info_s *_media = (media_info_s*)media;
1927
1928         if (_media && latitude) {
1929                 *latitude = _media->latitude;
1930                 ret = MEDIA_CONTENT_ERROR_NONE;
1931         } else {
1932                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1933                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1934         }
1935
1936         return ret;
1937 }
1938
1939 int media_info_get_altitude(media_info_h media, double *altitude)
1940 {
1941         int ret = MEDIA_CONTENT_ERROR_NONE;
1942         media_info_s *_media = (media_info_s*)media;
1943
1944         if (_media && altitude) {
1945                 *altitude = _media->altitude;
1946                 ret = MEDIA_CONTENT_ERROR_NONE;
1947         } else {
1948                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1949                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1950         }
1951
1952         return ret;
1953 }
1954
1955 int media_info_get_weather(media_info_h media, char **weather)
1956 {
1957         int ret = MEDIA_CONTENT_ERROR_NONE;
1958         media_content_warn("DEPRECATION WARNING: media_info_get_weather() is deprecated and will be removed from next release.");
1959         media_info_s *_media = (media_info_s*)media;
1960
1961         if (_media && weather) {
1962                 if (_media->weather != NULL) {
1963                         *weather = strdup(_media->weather);
1964                         media_content_retvm_if(*weather == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1965                 } else {
1966                         *weather = NULL;
1967                 }
1968                 ret = MEDIA_CONTENT_ERROR_NONE;
1969         } else {
1970                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1971                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1972         }
1973
1974         return ret;
1975 }
1976
1977 int media_info_get_rating(media_info_h media, int *rating)
1978 {
1979         int ret = MEDIA_CONTENT_ERROR_NONE;
1980         media_info_s *_media = (media_info_s*)media;
1981
1982         if (_media && rating) {
1983                 *rating = _media->rating;
1984                 ret = MEDIA_CONTENT_ERROR_NONE;
1985         } else {
1986                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1987                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1988         }
1989
1990         return ret;
1991 }
1992
1993 int media_info_get_favorite(media_info_h media, bool* favorite)
1994 {
1995         int ret = MEDIA_CONTENT_ERROR_NONE;
1996         media_info_s *_media = (media_info_s*)media;
1997
1998         if (_media && favorite) {
1999                 *favorite = _media->favourite;
2000                 ret = MEDIA_CONTENT_ERROR_NONE;
2001         } else {
2002                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2003                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2004         }
2005
2006         return ret;
2007 }
2008
2009 int media_info_get_author(media_info_h media, char **author)
2010 {
2011         int ret = MEDIA_CONTENT_ERROR_NONE;
2012         media_content_warn("DEPRECATION WARNING: media_info_get_author() is deprecated and will be removed from next release.");
2013         media_info_s *_media = (media_info_s*)media;
2014
2015         if (_media && author) {
2016                 if (_media->author != NULL) {
2017                         *author = strdup(_media->author);
2018                         media_content_retvm_if(*author == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2019                 } else {
2020                         *author = NULL;
2021                 }
2022                 ret = MEDIA_CONTENT_ERROR_NONE;
2023         } else {
2024                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2025                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2026         }
2027
2028         return ret;
2029 }
2030
2031 int media_info_get_provider(media_info_h media, char **provider)
2032 {
2033         int ret = MEDIA_CONTENT_ERROR_NONE;
2034         media_content_warn("DEPRECATION WARNING: media_info_get_provider() is deprecated and will be removed from next release.");
2035         media_info_s *_media = (media_info_s*)media;
2036
2037         if (_media && provider) {
2038                 if (_media->provider != NULL) {
2039                         *provider = strdup(_media->provider);
2040                         media_content_retvm_if(*provider == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2041                 } else {
2042                         *provider = NULL;
2043                 }
2044                 ret = MEDIA_CONTENT_ERROR_NONE;
2045         } else {
2046                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2047                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2048         }
2049
2050         return ret;
2051 }
2052
2053 int media_info_get_content_name(media_info_h media, char **content_name)
2054 {
2055         int ret = MEDIA_CONTENT_ERROR_NONE;
2056         media_content_warn("DEPRECATION WARNING: media_info_get_content_name() is deprecated and will be removed from next release.");
2057         media_info_s *_media = (media_info_s*)media;
2058
2059         if (_media && content_name) {
2060                 if (_media->content_name != NULL) {
2061                         *content_name = strdup(_media->content_name);
2062                         media_content_retvm_if(*content_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2063                 } else {
2064                         *content_name = NULL;
2065                 }
2066                 ret = MEDIA_CONTENT_ERROR_NONE;
2067         } else {
2068                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2069                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2070         }
2071
2072         return ret;
2073 }
2074
2075 int media_info_get_category(media_info_h media, char **category)
2076 {
2077         int ret = MEDIA_CONTENT_ERROR_NONE;
2078         media_content_warn("DEPRECATION WARNING: media_info_get_category() is deprecated and will be removed from next release.");
2079         media_info_s *_media = (media_info_s*)media;
2080
2081         if (_media && category) {
2082                 if (_media->category != NULL) {
2083                         *category = strdup(_media->category);
2084                         media_content_retvm_if(*category == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2085                 } else {
2086                         *category = NULL;
2087                 }
2088                 ret = MEDIA_CONTENT_ERROR_NONE;
2089         } else {
2090                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2091                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2092         }
2093
2094         return ret;
2095 }
2096
2097 int media_info_get_location_tag(media_info_h media, char **location_tag)
2098 {
2099         int ret = MEDIA_CONTENT_ERROR_NONE;
2100         media_content_warn("DEPRECATION WARNING: media_info_get_location_tag() is deprecated and will be removed from next release.");
2101         media_info_s *_media = (media_info_s*)media;
2102
2103         if (_media && location_tag) {
2104                 if (_media->location_tag != NULL) {
2105                         *location_tag = strdup(_media->location_tag);
2106                         media_content_retvm_if(*location_tag == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2107                 } else {
2108                         *location_tag = NULL;
2109                 }
2110                 ret = MEDIA_CONTENT_ERROR_NONE;
2111         } else {
2112                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2113                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2114         }
2115
2116         return ret;
2117 }
2118
2119 int media_info_get_age_rating(media_info_h media, char **age_rating)
2120 {
2121         int ret = MEDIA_CONTENT_ERROR_NONE;
2122         media_content_warn("DEPRECATION WARNING: media_info_get_age_rating() is deprecated and will be removed from next release.");
2123         media_info_s *_media = (media_info_s*)media;
2124
2125         if (_media && age_rating) {
2126                 if (_media->age_rating != NULL) {
2127                         *age_rating = strdup(_media->age_rating);
2128                         media_content_retvm_if(*age_rating == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2129                 } else {
2130                         *age_rating = NULL;
2131                 }
2132                 ret = MEDIA_CONTENT_ERROR_NONE;
2133         } else {
2134                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2135                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2136         }
2137
2138         return ret;
2139 }
2140
2141 int media_info_get_keyword(media_info_h media, char **keyword)
2142 {
2143         int ret = MEDIA_CONTENT_ERROR_NONE;
2144         media_content_warn("DEPRECATION WARNING: media_info_get_keyword() is deprecated and will be removed from next release.");
2145         media_info_s *_media = (media_info_s*)media;
2146
2147         if (_media && keyword) {
2148                 if (_media->keyword != NULL) {
2149                         *keyword = strdup(_media->keyword);
2150                         media_content_retvm_if(*keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2151                 } else {
2152                         *keyword = NULL;
2153                 }
2154                 ret = MEDIA_CONTENT_ERROR_NONE;
2155         } else {
2156                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2157                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2158         }
2159
2160         return ret;
2161 }
2162
2163 int media_info_get_storage_id(media_info_h media, char **storage_id)
2164 {
2165         int ret = MEDIA_CONTENT_ERROR_NONE;
2166         media_info_s *_media = (media_info_s*)media;
2167
2168         if (_media && storage_id) {
2169                 if (STRING_VALID(_media->storage_uuid)) {
2170                         *storage_id = strdup(_media->storage_uuid);
2171                         media_content_retvm_if(*storage_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2172                 } else {
2173                         *storage_id = NULL;
2174                         ret = MEDIA_CONTENT_ERROR_DB_FAILED;
2175                 }
2176                 ret = MEDIA_CONTENT_ERROR_NONE;
2177         } else {
2178                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2179                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2180         }
2181
2182         return ret;
2183 }
2184
2185 int media_info_is_drm(media_info_h media, bool *is_drm)
2186 {
2187         int ret = MEDIA_CONTENT_ERROR_NONE;
2188         media_info_s *_media = (media_info_s*)media;
2189
2190         if (_media) {
2191                 *is_drm = _media->is_drm;
2192                 ret = MEDIA_CONTENT_ERROR_NONE;
2193         } else {
2194                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2195                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2196         }
2197
2198         return ret;
2199 }
2200
2201 int media_info_is_360_content(media_info_h media, bool *is_360)
2202 {
2203         int ret = MEDIA_CONTENT_ERROR_NONE;
2204         media_info_s *_media = (media_info_s*)media;
2205
2206         if (_media) {
2207                 *is_360 = _media->is_360;
2208                 ret = MEDIA_CONTENT_ERROR_NONE;
2209         } else {
2210                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2211                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2212         }
2213
2214         return ret;
2215 }
2216
2217 #ifdef _USE_TVPD_MODE
2218 int media_info_get_stitched_state(media_info_h media, int *stitched_info)
2219 {
2220         int ret = MEDIA_CONTENT_ERROR_NONE;
2221         media_info_s *_media = (media_info_s*)media;
2222
2223         if (_media) {
2224                 *stitched_info = (_media->stitched_info & 0xFFFF0000) >> 16;
2225                 ret = MEDIA_CONTENT_ERROR_NONE;
2226         } else {
2227                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2228                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2229         }
2230
2231         return ret;
2232 }
2233
2234 int media_info_get_stitched_engine(media_info_h media, int *stitched_info)
2235 {
2236         int ret = MEDIA_CONTENT_ERROR_NONE;
2237         media_info_s *_media = (media_info_s*)media;
2238
2239         if (_media) {
2240                 *stitched_info = _media->stitched_info & 0x0000FFFF;
2241                 ret = MEDIA_CONTENT_ERROR_NONE;
2242         } else {
2243                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2244                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2245         }
2246
2247         return ret;
2248 }
2249 #endif
2250
2251 int media_info_get_storage_type(media_info_h media, media_content_storage_e *storage_type)
2252 {
2253         int ret = MEDIA_CONTENT_ERROR_NONE;
2254         media_info_s *_media = (media_info_s*)media;
2255
2256         if (_media && storage_type) {
2257                 *storage_type = _media->storage_type;
2258                 ret = MEDIA_CONTENT_ERROR_NONE;
2259         } else {
2260                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2261                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2262         }
2263
2264         return ret;
2265 }
2266
2267 #ifdef _USE_TVPD_MODE
2268 int media_info_get_played_position(media_info_h media, int *played_position)
2269 {
2270         int ret = MEDIA_CONTENT_ERROR_NONE;
2271         media_info_s *_media = (media_info_s*)media;
2272
2273         if (_media) {
2274                 *played_position = _media->played_position;
2275                 ret = MEDIA_CONTENT_ERROR_NONE;
2276         } else {
2277                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2278                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2279         }
2280
2281         return ret;
2282 }
2283 #endif
2284
2285 int media_info_get_played_count(media_info_h media, int *played_count)
2286 {
2287         int ret = MEDIA_CONTENT_ERROR_NONE;
2288         media_content_warn("DEPRECATION WARNING: media_info_get_played_count() is deprecated and will be removed from next release.");
2289         media_info_s *_media = (media_info_s*)media;
2290
2291         if (_media) {
2292                 *played_count = _media->played_count;
2293                 ret = MEDIA_CONTENT_ERROR_NONE;
2294         } else {
2295                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2296                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2297         }
2298
2299         return ret;
2300 }
2301
2302 int media_info_get_played_time(media_info_h media, time_t* played_time)
2303 {
2304         int ret = MEDIA_CONTENT_ERROR_NONE;
2305         media_content_warn("DEPRECATION WARNING: media_info_get_played_time() is deprecated and will be removed from next release.");
2306         media_info_s *_media = (media_info_s*)media;
2307
2308         if (_media) {
2309                 *played_time = _media->played_time;
2310                 ret = MEDIA_CONTENT_ERROR_NONE;
2311         } else {
2312                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2313                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2314         }
2315
2316         return ret;
2317 }
2318
2319 int media_info_increase_played_count(media_info_h media)
2320 {
2321         int ret = MEDIA_CONTENT_ERROR_NONE;
2322         media_content_warn("DEPRECATION WARNING: media_info_increase_played_count() is deprecated and will be removed from next release.");
2323
2324         media_info_s *_media = (media_info_s*)media;
2325
2326         if (_media) {
2327                 _media->played_count += 1;
2328         } else {
2329                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2330                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2331         }
2332
2333         return ret;
2334 }
2335
2336 #ifdef _USE_TVPD_MODE
2337 int media_info_get_modified_month(media_info_h media, char **modified_month)
2338 {
2339         int ret = MEDIA_CONTENT_ERROR_NONE;
2340         media_info_s *_media = (media_info_s*)media;
2341
2342         if (_media && modified_month) {
2343                 if (STRING_VALID(_media->modified_month)) {
2344                         *modified_month = strdup(_media->modified_month);
2345                         if (*modified_month == NULL) {
2346                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2347                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2348                         }
2349                 } else {
2350                         *modified_month = NULL;
2351                 }
2352                 ret = MEDIA_CONTENT_ERROR_NONE;
2353         } else {
2354                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2355                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2356         }
2357
2358         return ret;
2359 }
2360 #endif
2361 #ifdef _USE_SENIOR_MODE
2362 int media_info_get_contact(media_info_h media, char **contact)
2363 {
2364         int ret = MEDIA_CONTENT_ERROR_NONE;
2365         media_info_s *_media = (media_info_s*)media;
2366
2367         if (_media && contact) {
2368                 if (STRING_VALID(_media->contact)) {
2369                         *contact = strdup(_media->contact);
2370                         if (*contact == NULL) {
2371                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2372                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2373                         }
2374                 } else {
2375                         *contact = NULL;
2376                 }
2377                 ret = MEDIA_CONTENT_ERROR_NONE;
2378         } else {
2379                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2380                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2381         }
2382
2383         return ret;
2384 }
2385
2386 int media_info_get_app_data(media_info_h media, char **app_data)
2387 {
2388         int ret = MEDIA_CONTENT_ERROR_NONE;
2389         media_info_s *_media = (media_info_s*)media;
2390
2391         if (_media && app_data) {
2392                 if (STRING_VALID(_media->app_data)) {
2393                         *app_data = strdup(_media->app_data);
2394                         if (*app_data == NULL) {
2395                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2396                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2397                         }
2398                 } else {
2399                         *app_data = NULL;
2400                 }
2401                 ret = MEDIA_CONTENT_ERROR_NONE;
2402         } else {
2403                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2404                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2405         }
2406
2407         return ret;
2408 }
2409 #endif
2410 #ifdef _USE_TVPD_MODE
2411 int media_info_set_played_count(media_info_h media, int played_count)
2412 {
2413         int ret = MEDIA_CONTENT_ERROR_NONE;
2414
2415         media_info_s *_media = (media_info_s*)media;
2416
2417         if (_media) {
2418                 _media->played_count = played_count;
2419         } else {
2420                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2421                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2422         }
2423
2424         return ret;
2425 }
2426 #endif
2427
2428 int media_info_set_played_time(media_info_h media)
2429 {
2430         int ret = MEDIA_CONTENT_ERROR_NONE;
2431         media_content_warn("DEPRECATION WARNING: media_info_set_played_time() is deprecated and will be removed from next release.");
2432         time_t current_time;
2433
2434         media_info_s *_media = (media_info_s*)media;
2435
2436         if (_media != NULL) {
2437                 time(&current_time);
2438                 _media->played_time = current_time;
2439         } else {
2440                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2441                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2442         }
2443
2444         return ret;
2445 }
2446 #ifdef _USE_TVPD_MODE
2447 int media_info_set_played_position(media_info_h media, int played_position)
2448 {
2449         int ret = MEDIA_CONTENT_ERROR_NONE;
2450         media_info_s *_media = (media_info_s*)media;
2451
2452         if ((_media != NULL) && (played_position >= 0)) {
2453                 _media->played_position = played_position;
2454         } else {
2455                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2456                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2457         }
2458
2459         return ret;
2460 }
2461 #endif
2462
2463 int media_info_get_media_from_db(const char *media_id, media_info_h *media)
2464 {
2465         int ret = MEDIA_CONTENT_ERROR_NONE;
2466         char select_query[DEFAULT_QUERY_SIZE] = {0, };
2467         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
2468         sqlite3_stmt *stmt = NULL;
2469
2470         if (!STRING_VALID(media_id) || (media == NULL)) {
2471                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2472                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2473         }
2474
2475         memset(select_query, 0x00, sizeof(select_query));
2476         memset(storage_id, 0x00, sizeof(storage_id));
2477
2478         ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
2479         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2480
2481         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_MEDIA, storage_id, media_id);
2482
2483         ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
2484         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2485
2486         media_info_s *_media = NULL;
2487
2488         while (sqlite3_step(stmt) == SQLITE_ROW) {
2489                 if (_media)
2490                         media_info_destroy((media_info_h)_media);
2491
2492                 _media = (media_info_s*)calloc(1, sizeof(media_info_s));
2493
2494                 if (_media == NULL) {
2495                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2496                         SQLITE3_FINALIZE(stmt);
2497                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2498                 }
2499
2500                 _media_info_item_get_detail(stmt, (media_info_h)_media);
2501
2502                 *media = (media_info_h)_media;
2503         }
2504
2505         SQLITE3_FINALIZE(stmt);
2506
2507         return ret;
2508 }
2509
2510 int media_info_set_display_name(media_info_h media, const char *display_name)
2511 {
2512         int ret = MEDIA_CONTENT_ERROR_NONE;
2513         media_content_warn("DEPRECATION WARNING: media_info_set_display_name() is deprecated and will be removed from next release.");
2514         media_info_s *_media = (media_info_s*)media;
2515
2516         if (_media != NULL && STRING_VALID(display_name)) {
2517                 SAFE_FREE(_media->display_name);
2518
2519                 _media->display_name = strdup(display_name);
2520                 media_content_retvm_if(_media->display_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2521         } else {
2522                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2523                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2524         }
2525
2526         return ret;
2527 }
2528
2529 int media_info_set_description(media_info_h media, const char *description)
2530 {
2531         int ret = MEDIA_CONTENT_ERROR_NONE;
2532         media_content_warn("DEPRECATION WARNING: media_info_set_description() is deprecated and will be removed from next release.");
2533         media_info_s *_media = (media_info_s*)media;
2534
2535         if (_media != NULL) {
2536                 SAFE_FREE(_media->description);
2537
2538                 if (STRING_VALID(description)) {
2539                         _media->description = strdup(description);
2540                         media_content_retvm_if(_media->description == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2541                 } else {
2542                         _media->description = NULL;
2543                 }
2544         } else {
2545                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2546                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2547         }
2548
2549         return ret;
2550 }
2551
2552 int media_info_set_longitude(media_info_h media, double longitude)
2553 {
2554         int ret = MEDIA_CONTENT_ERROR_NONE;
2555         media_content_warn("DEPRECATION WARNING: media_info_set_longitude() is deprecated and will be removed from next release.");
2556         media_info_s *_media = (media_info_s*)media;
2557
2558         if (_media != NULL) {
2559                 _media->longitude = longitude;
2560         } else {
2561                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2562                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2563         }
2564
2565         return ret;
2566 }
2567
2568 int media_info_set_latitude(media_info_h media, double latitude)
2569 {
2570         int ret = MEDIA_CONTENT_ERROR_NONE;
2571         media_content_warn("DEPRECATION WARNING: media_info_set_latitude() is deprecated and will be removed from next release.");
2572         media_info_s *_media = (media_info_s*)media;
2573
2574         if (_media != NULL) {
2575                 _media->latitude = latitude;
2576         } else {
2577                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2578                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2579         }
2580
2581         return ret;
2582 }
2583
2584 int media_info_set_altitude(media_info_h media, double altitude)
2585 {
2586         int ret = MEDIA_CONTENT_ERROR_NONE;
2587         media_content_warn("DEPRECATION WARNING: media_info_set_altitude() is deprecated and will be removed from next release.");
2588         media_info_s *_media = (media_info_s*)media;
2589
2590         if (_media != NULL) {
2591                 _media->altitude = altitude;
2592         } else {
2593                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2594                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2595         }
2596
2597         return ret;
2598 }
2599
2600 int media_info_set_weather(media_info_h media, const char *weather)
2601 {
2602         int ret = MEDIA_CONTENT_ERROR_NONE;
2603         media_content_warn("DEPRECATION WARNING: media_info_set_weather() is deprecated and will be removed from next release.");
2604         media_info_s *_media = (media_info_s*)media;
2605
2606         if (_media != NULL) {
2607                 SAFE_FREE(_media->weather);
2608
2609                 if (STRING_VALID(weather)) {
2610                         _media->weather = strdup(weather);
2611                         media_content_retvm_if(_media->weather == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2612                 } else {
2613                         _media->weather = NULL;
2614                 }
2615         } else {
2616                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2617                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2618         }
2619
2620         return ret;
2621 }
2622
2623 int media_info_set_rating(media_info_h media, int rating)
2624 {
2625         int ret = MEDIA_CONTENT_ERROR_NONE;
2626         media_content_warn("DEPRECATION WARNING: media_info_set_rating() is deprecated and will be removed from next release.");
2627         media_info_s *_media = (media_info_s*)media;
2628
2629         if (_media != NULL) {
2630                 _media->rating = rating;
2631         } else {
2632                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2633                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2634         }
2635
2636         return ret;
2637 }
2638
2639 int media_info_set_added_time(media_info_h media, time_t added_time)
2640 {
2641         int ret = MEDIA_CONTENT_ERROR_NONE;
2642         media_content_warn("DEPRECATION WARNING: media_info_set_added_time() is deprecated and will be removed from next release.");
2643
2644         media_info_s *_media = (media_info_s*)media;
2645
2646         if ((_media != NULL) && (added_time >= 0)) {
2647                 _media->added_time = added_time;
2648         } else {
2649                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2650                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2651         }
2652
2653         return ret;
2654 }
2655
2656 int media_info_set_favorite(media_info_h media, bool favorite)
2657 {
2658         int ret = MEDIA_CONTENT_ERROR_NONE;
2659         media_info_s *_media = (media_info_s*)media;
2660
2661         if (_media != NULL) {
2662                 if (favorite == TRUE)
2663                         time(&_media->favourite);
2664                 else
2665                         _media->favourite = 0;
2666         } else {
2667                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2668                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2669         }
2670
2671         return ret;
2672 }
2673
2674 int media_info_set_author(media_info_h media, const char *author)
2675 {
2676         int ret = MEDIA_CONTENT_ERROR_NONE;
2677         media_content_warn("DEPRECATION WARNING: media_info_set_author() is deprecated and will be removed from next release.");
2678         media_info_s *_media = (media_info_s*)media;
2679
2680         if (_media != NULL) {
2681                 if (STRING_VALID(author)) {
2682                         _media->author = strdup(author);
2683                         media_content_retvm_if(_media->author == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2684                 } else {
2685                         _media->author = NULL;
2686                 }
2687         } else {
2688                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2689                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2690         }
2691
2692         return ret;
2693 }
2694
2695 int media_info_set_provider(media_info_h media, const char *provider)
2696 {
2697         int ret = MEDIA_CONTENT_ERROR_NONE;
2698         media_content_warn("DEPRECATION WARNING: media_info_set_provider() is deprecated and will be removed from next release.");
2699         media_info_s *_media = (media_info_s*)media;
2700
2701         if (_media != NULL) {
2702                 SAFE_FREE(_media->provider);
2703
2704                 if (STRING_VALID(provider)) {
2705                         _media->provider = strdup(provider);
2706                         media_content_retvm_if(_media->provider == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2707                 } else {
2708                         _media->provider = NULL;
2709                 }
2710         } else {
2711                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2712                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2713         }
2714
2715         return ret;
2716 }
2717
2718 int media_info_set_content_name(media_info_h media, const char *content_name)
2719 {
2720         int ret = MEDIA_CONTENT_ERROR_NONE;
2721         media_content_warn("DEPRECATION WARNING: media_info_set_content_name() is deprecated and will be removed from next release.");
2722         media_info_s *_media = (media_info_s*)media;
2723
2724         if (_media != NULL) {
2725                 SAFE_FREE(_media->content_name);
2726
2727                 if (STRING_VALID(content_name)) {
2728                         _media->content_name = strdup(content_name);
2729                         media_content_retvm_if(_media->content_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2730                 } else {
2731                         _media->content_name = NULL;
2732                 }
2733         } else {
2734                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2735                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2736         }
2737
2738         return ret;
2739 }
2740
2741 int media_info_set_category(media_info_h media, const char *category)
2742 {
2743         int ret = MEDIA_CONTENT_ERROR_NONE;
2744         media_content_warn("DEPRECATION WARNING: media_info_set_category() is deprecated and will be removed from next release.");
2745         media_info_s *_media = (media_info_s*)media;
2746
2747         if (_media != NULL) {
2748                 SAFE_FREE(_media->category);
2749
2750                 if (STRING_VALID(category)) {
2751                         _media->category = strdup(category);
2752                         media_content_retvm_if(_media->category == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2753                 } else {
2754                         _media->category = NULL;
2755                 }
2756         } else {
2757                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2758                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2759         }
2760
2761         return ret;
2762 }
2763
2764 int media_info_set_location_tag(media_info_h media, const char *location_tag)
2765 {
2766         int ret = MEDIA_CONTENT_ERROR_NONE;
2767         media_content_warn("DEPRECATION WARNING: media_info_set_location_tag() is deprecated and will be removed from next release.");
2768         media_info_s *_media = (media_info_s*)media;
2769
2770         if (_media != NULL) {
2771                 SAFE_FREE(_media->location_tag);
2772
2773                 if (STRING_VALID(location_tag)) {
2774                         _media->location_tag = strdup(location_tag);
2775                         media_content_retvm_if(_media->location_tag == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2776                 } else {
2777                         _media->location_tag = NULL;
2778                 }
2779         } else {
2780                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2781                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2782         }
2783
2784         return ret;
2785 }
2786
2787 int media_info_set_age_rating(media_info_h media, const char *age_rating)
2788 {
2789         int ret = MEDIA_CONTENT_ERROR_NONE;
2790         media_content_warn("DEPRECATION WARNING: media_info_set_age_rating() is deprecated and will be removed from next release.");
2791         media_info_s *_media = (media_info_s*)media;
2792
2793         if (_media != NULL) {
2794                 SAFE_FREE(_media->age_rating);
2795
2796                 if (STRING_VALID(age_rating)) {
2797                         _media->age_rating = strdup(age_rating);
2798                         media_content_retvm_if(_media->age_rating == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2799                 } else {
2800                         _media->age_rating = NULL;
2801                 }
2802         } else {
2803                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2804                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2805         }
2806
2807         return ret;
2808 }
2809
2810 int media_info_set_keyword(media_info_h media, const char *keyword)
2811 {
2812         int ret = MEDIA_CONTENT_ERROR_NONE;
2813         media_content_warn("DEPRECATION WARNING: media_info_set_keyword() is deprecated and will be removed from next release.");
2814         media_info_s *_media = (media_info_s*)media;
2815
2816         if (_media != NULL) {
2817                 SAFE_FREE(_media->keyword);
2818
2819                 if (STRING_VALID(keyword)) {
2820                         _media->keyword = strdup(keyword);
2821                         media_content_retvm_if(_media->keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2822                 } else {
2823                         _media->keyword = NULL;
2824                 }
2825         } else {
2826                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2827                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2828         }
2829
2830         return ret;
2831 }
2832
2833 int media_info_update_to_db(media_info_h media)
2834 {
2835         int ret = MEDIA_CONTENT_ERROR_NONE;
2836         media_info_s *_media = (media_info_s*)media;
2837         char *set_sql = NULL;
2838         char *sql = NULL;
2839
2840         if (_media != NULL && STRING_VALID(_media->media_id)) {
2841                 /* This sql is due to sqlite3_mprintf's wrong operation when using floating point in the text format */
2842                 /* This code will be removed when sqlite3_mprintf works clearly */
2843                 char *test_sql = sqlite3_mprintf("%f, %f, %f", _media->longitude, _media->latitude, _media->altitude);
2844                 SQLITE3_SAFE_FREE(test_sql);
2845
2846                 /*Update Pinyin If Support Pinyin*/
2847                 char *file_name_pinyin = NULL;
2848                 char *description_pinyin = NULL;
2849                 char *author_pinyin = NULL;
2850                 char *provider_pinyin = NULL;
2851                 char *content_name_pinyin = NULL;
2852                 char *category_pinyin = NULL;
2853                 char *location_tag_pinyin = NULL;
2854                 char *age_rating_pinyin = NULL;
2855                 char *keyword_pinyin = NULL;
2856                 bool pinyin_support = FALSE;
2857
2858                 /*Update Pinyin If Support Pinyin*/
2859                 media_svc_check_pinyin_support(&pinyin_support);
2860                 if (pinyin_support) {
2861                         if (STRING_VALID(_media->display_name))
2862                                 media_svc_get_pinyin(_media->display_name, &file_name_pinyin);
2863                         if (STRING_VALID(_media->description))
2864                                 media_svc_get_pinyin(_media->description, &description_pinyin);
2865                         if (STRING_VALID(_media->author))
2866                                 media_svc_get_pinyin(_media->author, &author_pinyin);
2867                         if (STRING_VALID(_media->provider))
2868                                 media_svc_get_pinyin(_media->provider, &provider_pinyin);
2869                         if (STRING_VALID(_media->content_name))
2870                                 media_svc_get_pinyin(_media->content_name, &content_name_pinyin);
2871                         if (STRING_VALID(_media->category))
2872                                 media_svc_get_pinyin(_media->category, &category_pinyin);
2873                         if (STRING_VALID(_media->location_tag))
2874                                 media_svc_get_pinyin(_media->location_tag, &location_tag_pinyin);
2875                         if (STRING_VALID(_media->age_rating))
2876                                 media_svc_get_pinyin(_media->age_rating, &age_rating_pinyin);
2877                         if (STRING_VALID(_media->keyword))
2878                                 media_svc_get_pinyin(_media->keyword, &keyword_pinyin);
2879                 }
2880
2881                 char *album = NULL;
2882                 char *artist = NULL;
2883                 char *genre = NULL;
2884                 char *recorded_date = NULL;
2885
2886                 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
2887                         if (_media->video_meta->album != NULL)
2888                                 album = strdup(_media->video_meta->album);
2889                         if (_media->video_meta->artist != NULL)
2890                                 artist = strdup(_media->video_meta->artist);
2891                         if (_media->video_meta->genre != NULL)
2892                                 genre = strdup(_media->video_meta->genre);
2893                         if (_media->video_meta->recorded_date != NULL)
2894                                 recorded_date = strdup(_media->video_meta->recorded_date);
2895                 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
2896                         if (_media->audio_meta->album != NULL)
2897                                 album = strdup(_media->audio_meta->album);
2898                         if (_media->audio_meta->artist != NULL)
2899                                 artist = strdup(_media->audio_meta->artist);
2900                         if (_media->audio_meta->genre != NULL)
2901                                 genre = strdup(_media->audio_meta->genre);
2902                         if (_media->audio_meta->recorded_date != NULL)
2903                                 recorded_date = strdup(_media->audio_meta->recorded_date);
2904                 }
2905
2906 #ifdef _USE_SENIOR_MODE
2907                 if (_media_content_is_support_senior_mode()) {
2908                         set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2909                                 played_count=%d, last_played_time=%d, last_played_position=%d, \
2910                                 rating=%d, favourite=%d, author=%Q, provider=%Q, content_name=%Q, category=%Q, location_tag=%Q, age_rating=%Q, keyword=%Q, weather=%Q, sync_status=%d, \
2911                                 file_name_pinyin=%Q, description_pinyin=%Q, author_pinyin=%Q, provider_pinyin=%Q, content_name_pinyin=%Q, category_pinyin=%Q, location_tag_pinyin=%Q, age_rating_pinyin=%Q, keyword_pinyin=%Q, title=%Q, contact=%Q, app_data=%Q",
2912                                 _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->played_count, _media->played_time, _media->played_position, _media->rating, _media->favourite,
2913                                 _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword, _media->weather, _media->sync_status,
2914                                 file_name_pinyin, description_pinyin, author_pinyin, provider_pinyin, content_name_pinyin, category_pinyin, location_tag_pinyin, age_rating_pinyin, keyword_pinyin, _media->title, _media->contact, _media->app_data);
2915                 } else
2916 #endif
2917                 {
2918                         set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2919                                 played_count=%d, last_played_time=%d, last_played_position=%d, \
2920                                 rating=%d, favourite=%d, author=%Q, provider=%Q, content_name=%Q, category=%Q, location_tag=%Q, age_rating=%Q, keyword=%Q, weather=%Q, sync_status=%d, \
2921                                 file_name_pinyin=%Q, description_pinyin=%Q, author_pinyin=%Q, provider_pinyin=%Q, content_name_pinyin=%Q, category_pinyin=%Q, location_tag_pinyin=%Q, age_rating_pinyin=%Q, keyword_pinyin=%Q, title=%Q, \
2922                                 album=%Q, artist=%Q, genre=%Q, recorded_date=%Q",
2923                                 _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->played_count, _media->played_time, _media->played_position, _media->rating, _media->favourite,
2924                                 _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword, _media->weather, _media->sync_status,
2925                                 file_name_pinyin, description_pinyin, author_pinyin, provider_pinyin, content_name_pinyin, category_pinyin, location_tag_pinyin, age_rating_pinyin, keyword_pinyin, _media->title,
2926                                 album, artist, genre, recorded_date);
2927                 }
2928
2929                 sql = sqlite3_mprintf("UPDATE %Q SET %s WHERE media_uuid=%Q", _media->storage_uuid, set_sql, _media->media_id);
2930
2931                 ret = _content_query_sql(sql);
2932                 SQLITE3_SAFE_FREE(set_sql);
2933                 SQLITE3_SAFE_FREE(sql);
2934
2935                 SAFE_FREE(file_name_pinyin);
2936                 SAFE_FREE(description_pinyin);
2937                 SAFE_FREE(author_pinyin);
2938                 SAFE_FREE(provider_pinyin);
2939                 SAFE_FREE(content_name_pinyin);
2940                 SAFE_FREE(category_pinyin);
2941                 SAFE_FREE(location_tag_pinyin);
2942                 SAFE_FREE(age_rating_pinyin);
2943                 SAFE_FREE(keyword_pinyin);
2944
2945                 SAFE_FREE(album);
2946                 SAFE_FREE(artist);
2947                 SAFE_FREE(genre);
2948                 SAFE_FREE(recorded_date);
2949
2950                 if (ret == MEDIA_CONTENT_ERROR_NONE) {
2951                         /* Send notification for this update */
2952                         media_content_debug("Update is successfull. Send notification for this");
2953                         if (_media->file_path && _media->mime_type)
2954                                 media_svc_publish_noti(MS_MEDIA_ITEM_FILE, MS_MEDIA_ITEM_UPDATE, _media->file_path, _media->media_type, _media->media_id, _media->mime_type);
2955                         else
2956                                 media_content_error("Can't Send Noti : path or mime type is NULL");
2957                 }
2958         } else {
2959                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2960                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2961         }
2962
2963         return ret;
2964 }
2965
2966 int media_info_refresh_metadata_to_db(const char *media_id)
2967 {
2968         int ret = MEDIA_CONTENT_ERROR_NONE;
2969         media_content_warn("DEPRECATION WARNING: media_info_refresh_metadata_to_db() is deprecated and will be removed from next release.");
2970         media_info_h media = NULL;
2971         char *file_path = NULL;
2972         media_content_storage_e storage_type = 0;
2973         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
2974         char repl_path[MAX_PATH_LEN] = {0, };
2975
2976         if (!STRING_VALID(media_id)) {
2977                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2978                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2979         }
2980
2981         ret = media_info_get_media_from_db(media_id, &media);
2982         if (ret != MEDIA_CONTENT_ERROR_NONE) {
2983                 media_info_destroy(media);
2984                 return ret;
2985         }
2986
2987         ret = media_info_get_storage_type(media, &storage_type);
2988         if (ret != MEDIA_CONTENT_ERROR_NONE) {
2989                 media_info_destroy(media);
2990                 return ret;
2991         }
2992
2993         ret = media_info_get_file_path(media, &file_path);
2994         if (ret != MEDIA_CONTENT_ERROR_NONE) {
2995                 media_info_destroy(media);
2996                 return ret;
2997         }
2998         memset(repl_path, 0, sizeof(repl_path));
2999         ret = _media_content_replace_path(file_path, repl_path);
3000
3001         ret = _media_util_check_file_exist(repl_path);
3002         if (ret != MEDIA_CONTENT_ERROR_NONE) {
3003                 SAFE_FREE(file_path);
3004                 media_info_destroy(media);
3005                 return ret;
3006         }
3007
3008         memset(storage_id, 0x00, sizeof(storage_id));
3009         ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id, _content_get_uid());
3010         if (ret != MS_MEDIA_ERR_NONE) {
3011                 media_content_error("media_svc_get_storage_id failed : %d", ret);
3012                 SAFE_FREE(file_path);
3013                 media_info_destroy(media);
3014                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3015         }
3016
3017         ret = media_svc_refresh_item(_content_get_db_handle(), storage_id, storage_type, repl_path, _content_get_uid());
3018         if (ret != MS_MEDIA_ERR_NONE)
3019                 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3020
3021         SAFE_FREE(file_path);
3022         media_info_destroy(media);
3023
3024         return ret;
3025 }
3026
3027 int media_info_move_to_db(media_info_h media, const char* dst_path)
3028 {
3029         int ret = MEDIA_CONTENT_ERROR_NONE;
3030         media_svc_storage_type_e src_storage_type = 0;
3031         media_svc_storage_type_e dst_storage_type = 0;
3032         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
3033         char repl_path[MAX_PATH_LEN] = {0, };
3034         char org_repl_path[MAX_PATH_LEN] = {0, };
3035
3036         media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media");
3037         media_content_retvm_if(!STRING_VALID(dst_path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid dst_path");
3038         memset(repl_path, 0, sizeof(repl_path));
3039         memset(org_repl_path, 0, sizeof(org_repl_path));
3040         ret = _media_content_replace_path(dst_path, repl_path);
3041         media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3042
3043         media_info_s *_media = (media_info_s*)media;
3044
3045         ret = _media_content_replace_path(_media->file_path, org_repl_path);
3046         media_content_retvm_if(!STRING_VALID(org_repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3047
3048         /* If the two paths are the same, do nothing */
3049         media_content_retvm_if(g_strcmp0(repl_path, org_repl_path) == 0, MEDIA_CONTENT_ERROR_NONE, "Same path");
3050
3051         ret = __media_info_check_file_validity(repl_path);
3052         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
3053
3054         ret = media_svc_get_storage_type(org_repl_path, &src_storage_type, _content_get_uid());
3055         if (ret != MS_MEDIA_ERR_NONE) {
3056                 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
3057                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3058         }
3059
3060         ret = media_svc_get_storage_type(repl_path, &dst_storage_type, _content_get_uid());
3061         if (ret != MS_MEDIA_ERR_NONE) {
3062                 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
3063                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3064         }
3065
3066         if (src_storage_type == MEDIA_SVC_STORAGE_EXTERNAL_USB || dst_storage_type == MEDIA_SVC_STORAGE_EXTERNAL_USB) {
3067                 media_content_sec_error("Unsupported storage type src[%d] dst[%d]", src_storage_type, dst_storage_type);
3068                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3069         }
3070
3071         memset(storage_id, 0x00, sizeof(storage_id));
3072         ret = media_svc_get_storage_id(_content_get_db_handle(), org_repl_path, storage_id, _content_get_uid());
3073         if (ret != MS_MEDIA_ERR_NONE) {
3074                 media_content_error("media_svc_get_storage_id failed : %d", ret);
3075                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3076         }
3077
3078         /*Delete the media info of the dest_path if it already exists.*/
3079         ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), storage_id, repl_path);
3080         if (ret == MS_MEDIA_ERR_NONE) {
3081                 /* Exists */
3082                 ret = media_svc_delete_item_by_path(_content_get_db_handle(), storage_id, repl_path, _content_get_uid());
3083                 if (ret != MS_MEDIA_ERR_NONE) {
3084                         media_content_error("media_svc_delete_item_by_path failed : %d", ret);
3085                         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3086                 }
3087         } else if (ret != MS_MEDIA_ERR_NONE && ret != MS_MEDIA_ERR_DB_NO_RECORD) {
3088                 media_content_error("media_svc_check_item_exist_by_path failed : %d", ret);
3089                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3090         }
3091
3092         ret = media_svc_move_item(_content_get_db_handle(), storage_id, src_storage_type, org_repl_path, dst_storage_type, repl_path, _content_get_uid());
3093         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3094 }
3095
3096 int media_info_create_thumbnail(media_info_h media, media_thumbnail_completed_cb callback, void *user_data)
3097 {
3098         int ret = MEDIA_CONTENT_ERROR_NONE;
3099         media_content_warn("DEPRECATION WARNING: media_info_create_thumbnail() is deprecated and will be removed from next release. Use media_info_generate_thumbnail() instead.");
3100         static unsigned int req_id = 0;
3101         char repl_path[MAX_PATH_LEN] = {0, };
3102         media_info_s *_media = (media_info_s*)media;
3103
3104         if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path)) {
3105                 memset(repl_path, 0, sizeof(repl_path));
3106                 ret = _media_content_replace_path(_media->file_path, repl_path);
3107                 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3108
3109                 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s*)calloc(1, sizeof(media_thumbnail_cb_s));
3110                 media_content_retvm_if(_thumb_cb == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3111                 req_id++;
3112                 _media->request_id = req_id;
3113
3114                 _thumb_cb->handle = _media;
3115                 _thumb_cb->user_data = user_data;
3116                 _thumb_cb->thumbnail_completed_cb = callback;
3117
3118                 ret = thumbnail_request_from_db_async(_media->request_id, repl_path, (ThumbFunc)__media_info_thumbnail_completed_cb, (void *)_thumb_cb, _content_get_uid());
3119                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3120         } else {
3121                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3122                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3123         }
3124
3125         return ret;
3126 }
3127
3128 int media_info_generate_thumbnail(media_info_h media)
3129 {
3130         int ret = MEDIA_CONTENT_ERROR_NONE;
3131         char repl_path[MAX_PATH_LEN] = {0, };
3132         char *thumb_path = NULL;
3133         media_info_s *_media = (media_info_s*)media;
3134
3135         if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path)) {
3136                 /* Already exists */
3137                 if (STRING_VALID(_media->thumbnail_path))
3138                         return MEDIA_CONTENT_ERROR_NONE;
3139
3140                 memset(repl_path, 0, sizeof(repl_path));
3141                 ret = _media_content_replace_path(_media->file_path, repl_path);
3142                 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3143
3144                 ret = media_svc_create_thumbnail(repl_path, _media->media_type, _content_get_uid(), &thumb_path);
3145                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3146                 if (ret == MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT)
3147                         return ret;
3148
3149                 /* thumb_path is not NULL except #MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT */
3150                 _media->thumbnail_path = g_strdup(thumb_path);
3151                 SAFE_FREE(thumb_path);
3152                 if (_media->thumbnail_path == NULL)
3153                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3154         } else {
3155                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3156                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3157         }
3158
3159         return ret;
3160 }
3161
3162 int media_info_cancel_thumbnail(media_info_h media)
3163 {
3164         int ret = MEDIA_CONTENT_ERROR_NONE;
3165         media_content_warn("DEPRECATION WARNING: media_info_cancel_thumbnail() is deprecated and will be removed from next release.");
3166         media_info_s *_media = (media_info_s*)media;
3167
3168         if (_media != NULL && STRING_VALID(_media->media_id) && _media->request_id > 0) {
3169                 ret = thumbnail_request_cancel_media(_media->request_id);
3170                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3171         } else {
3172                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3173                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3174         }
3175
3176         return ret;
3177 }
3178
3179 int media_info_start_face_detection(media_info_h media, media_face_detection_completed_cb callback, void *user_data)
3180 {
3181         int ret = MEDIA_CONTENT_ERROR_NONE;
3182         static unsigned int req_id = 0;
3183         media_info_s *_media = (media_info_s*)media;
3184         char repl_path[MAX_PATH_LEN] = {0, };
3185
3186         if (!__media_info_isFaceRecognition_feature_supported()) {
3187                 media_content_error("NOT_SUPPORTED(0x%08x)", MEDIA_CONTENT_ERROR_NOT_SUPPORTED);
3188                 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED;
3189         }
3190
3191         if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path)) {
3192                 memset(repl_path, 0, sizeof(repl_path));
3193                 ret = _media_content_replace_path(_media->file_path, repl_path);
3194                 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3195                 media_face_cb_s *_face_cb = (media_face_cb_s*)calloc(1, sizeof(media_face_cb_s));
3196                 media_content_retvm_if(_face_cb == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3197                 req_id++;
3198                 _media->face_request_id = req_id;
3199
3200                 _face_cb->user_data = user_data;
3201                 _face_cb->face_completed_cb = callback;
3202
3203                 ret = dcm_request_extract_face_async(_media->face_request_id, repl_path, (FaceFunc)__media_info_face_completed_cb, (void *)_face_cb, _content_get_uid());
3204                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3205         } else {
3206                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3207                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3208         }
3209
3210         return ret;
3211 }
3212
3213 int media_info_cancel_face_detection(media_info_h media)
3214 {
3215         int ret = MEDIA_CONTENT_ERROR_NONE;
3216         media_info_s *_media = (media_info_s*)media;
3217
3218         if (!__media_info_isFaceRecognition_feature_supported()) {
3219                 media_content_error("NOT_SUPPORTED(0x%08x)", MEDIA_CONTENT_ERROR_NOT_SUPPORTED);
3220                 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED;
3221         }
3222
3223         if (_media != NULL && STRING_VALID(_media->media_id) && _media->face_request_id > 0) {
3224                 ret = dcm_request_cancel_face(_media->face_request_id);
3225                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3226         } else {
3227                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3228                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3229         }
3230
3231         return ret;
3232 }
3233
3234 static int __media_info_map_data_usr_to_svc(media_info_s *media, media_svc_content_info_s **service_content, media_content_storage_e storage_type)
3235 {
3236         media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
3237         char repl_path[MAX_PATH_LEN] = {0, };
3238         char *tmp_path = NULL;
3239
3240         media_svc_content_info_s *svc_content_info = calloc(1, sizeof(media_svc_content_info_s));
3241         media_content_retvm_if(svc_content_info == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3242
3243         memset(repl_path, 0, sizeof(repl_path));
3244         tmp_path = g_strdup(media->file_path);
3245         _media_content_replace_path(tmp_path, repl_path);
3246         svc_content_info->path = g_strdup(repl_path);
3247         SAFE_FREE(tmp_path);
3248
3249         svc_content_info->file_name = g_strdup(media->display_name);
3250         svc_content_info->media_type = media->media_type;
3251         svc_content_info->mime_type = g_strdup(media->mime_type);
3252         svc_content_info->size = media->size;
3253         svc_content_info->storage_type = storage_type;
3254         svc_content_info->storage_uuid = g_strdup(media->storage_uuid);
3255
3256         svc_content_info->added_time = media->added_time;
3257         svc_content_info->modified_time = media->modified_time;
3258         svc_content_info->thumbnail_path = g_strdup(media->thumbnail_path);
3259         svc_content_info->is_drm = media->is_drm;
3260         svc_content_info->last_played_time = media->played_time;
3261         svc_content_info->played_count = media->played_count;
3262         svc_content_info->favourate = media->favourite;
3263
3264 #ifdef _USE_SENIOR_MODE
3265         if (_media_content_is_support_senior_mode()) {
3266                 svc_content_info->contact = g_strdup(media->contact);
3267                 svc_content_info->app_data = g_strdup(media->app_data);
3268         }
3269 #endif
3270
3271         svc_content_info->media_meta.title = g_strdup(media->title);
3272         svc_content_info->media_meta.rating = media->rating;
3273         svc_content_info->media_meta.description = g_strdup(media->description);
3274         svc_content_info->media_meta.longitude = media->longitude;
3275         svc_content_info->media_meta.latitude = media->latitude;
3276         svc_content_info->media_meta.altitude = media->altitude;
3277         svc_content_info->media_meta.weather = g_strdup(media->weather);
3278         svc_content_info->media_meta.category = g_strdup(media->category);
3279         svc_content_info->media_meta.keyword = g_strdup(media->keyword);
3280         svc_content_info->media_meta.location_tag = g_strdup(media->location_tag);
3281         svc_content_info->media_meta.content_name = g_strdup(media->content_name);
3282         svc_content_info->media_meta.age_rating = g_strdup(media->age_rating);
3283         svc_content_info->media_meta.author = g_strdup(media->author);
3284         svc_content_info->media_meta.provider = g_strdup(media->provider);
3285
3286         svc_content_info->media_meta.album = g_strdup(media->audio_meta->album);
3287         svc_content_info->media_meta.artist = g_strdup(media->audio_meta->artist);
3288         svc_content_info->media_meta.genre = g_strdup(media->audio_meta->genre);
3289         svc_content_info->media_meta.recorded_date = g_strdup(media->audio_meta->recorded_date);
3290
3291         *service_content = svc_content_info;
3292
3293         return MEDIA_CONTENT_ERROR_NONE;
3294 }
3295
3296 static int __media_info_set_str_data(media_info_h media, media_info_item_e data_type, const char *str_data)
3297 {
3298         media_info_s *_media = (media_info_s*)media;
3299
3300         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3301
3302         switch (data_type) {
3303         case MEDIA_INFO_PATH:
3304                 SAFE_FREE(_media->file_path);
3305                 if (STRING_VALID(str_data)) {
3306                         _media->file_path = strdup(str_data);
3307                         media_content_retvm_if(_media->file_path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3308                 } else {
3309                         _media->file_path = NULL;
3310                 }
3311                 break;
3312         case MEDIA_INFO_MIME_TYPE:
3313                 SAFE_FREE(_media->mime_type);
3314                 if (STRING_VALID(str_data)) {
3315                         _media->mime_type = strdup(str_data);
3316                         media_content_retvm_if(_media->mime_type == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3317                 } else {
3318                         _media->mime_type = NULL;
3319                 }
3320                 break;
3321         case MEDIA_INFO_THUMBNAIL_PATH:
3322                 SAFE_FREE(_media->thumbnail_path);
3323                 if (STRING_VALID(str_data)) {
3324                         _media->thumbnail_path = strdup(str_data);
3325                         media_content_retvm_if(_media->thumbnail_path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3326                 } else {
3327                         _media->thumbnail_path = NULL;
3328                 }
3329                 break;
3330         case MEDIA_INFO_TITLE:
3331                 SAFE_FREE(_media->title);
3332                 if (STRING_VALID(str_data)) {
3333                         _media->title = strdup(str_data);
3334                         media_content_retvm_if(_media->title == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3335                 } else {
3336                         _media->title = NULL;
3337                 }
3338                 break;
3339         case MEDIA_INFO_STORAGE_UUID:
3340                 SAFE_FREE(_media->storage_uuid);
3341                 if (STRING_VALID(str_data)) {
3342                         _media->storage_uuid = strdup(str_data);
3343                         media_content_retvm_if(_media->storage_uuid == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3344                 } else {
3345                         _media->storage_uuid = NULL;
3346                 }
3347                 break;
3348         case MEDIA_INFO_ALBUM:
3349                 if (STRING_VALID(_media->media_id)) {
3350                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3351                                 SAFE_FREE(_media->video_meta->album);
3352                                 if (str_data != NULL) {
3353                                         _media->video_meta->album = strdup(str_data);
3354                                         media_content_retvm_if(_media->video_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3355                                 }
3356                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3357                                 SAFE_FREE(_media->audio_meta->album);
3358                                 if (str_data != NULL) {
3359                                         _media->audio_meta->album = strdup(str_data);
3360                                         media_content_retvm_if(_media->audio_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3361                                 }
3362                         }
3363                 } else {
3364                         SAFE_FREE(_media->video_meta->album);
3365                         if (str_data != NULL) {
3366                                 _media->video_meta->album = strdup(str_data);
3367                                 media_content_retvm_if(_media->video_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3368                         }
3369
3370                         SAFE_FREE(_media->audio_meta->album);
3371                         if (str_data != NULL) {
3372                                 _media->audio_meta->album = strdup(str_data);
3373                                 media_content_retvm_if(_media->audio_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3374                         }
3375                 }
3376                 break;
3377         case MEDIA_INFO_ARTIST:
3378                 if (STRING_VALID(_media->media_id)) {
3379                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3380                                 SAFE_FREE(_media->video_meta->artist);
3381                                 if (str_data != NULL) {
3382                                         _media->video_meta->artist = strdup(str_data);
3383                                         media_content_retvm_if(_media->video_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3384                                 }
3385                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3386                                 SAFE_FREE(_media->audio_meta->artist);
3387                                 if (str_data != NULL) {
3388                                         _media->audio_meta->artist = strdup(str_data);
3389                                         media_content_retvm_if(_media->audio_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3390                                 }
3391                         }
3392                 } else {
3393                         SAFE_FREE(_media->video_meta->artist);
3394                         if (str_data != NULL) {
3395                                 _media->video_meta->artist = strdup(str_data);
3396                                 media_content_retvm_if(_media->video_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3397                         }
3398
3399                         SAFE_FREE(_media->audio_meta->artist);
3400                         if (str_data != NULL) {
3401                                 _media->audio_meta->artist = strdup(str_data);
3402                                 media_content_retvm_if(_media->audio_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3403                         }
3404                 }
3405                 break;
3406         case MEDIA_INFO_GENRE:
3407                 if (STRING_VALID(_media->media_id)) {
3408                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3409                                 SAFE_FREE(_media->video_meta->genre);
3410                                 if (str_data != NULL) {
3411                                         _media->video_meta->genre = strdup(str_data);
3412                                         media_content_retvm_if(_media->video_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3413                                 }
3414                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3415                                 SAFE_FREE(_media->audio_meta->genre);
3416                                 if (str_data != NULL) {
3417                                         _media->audio_meta->genre = strdup(str_data);
3418                                         media_content_retvm_if(_media->audio_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3419                                 }
3420                         }
3421                 } else {
3422                         SAFE_FREE(_media->video_meta->genre);
3423                         if (str_data != NULL) {
3424                                 _media->video_meta->genre = strdup(str_data);
3425                                 media_content_retvm_if(_media->video_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3426                         }
3427
3428                         SAFE_FREE(_media->audio_meta->genre);
3429                         if (str_data != NULL) {
3430                                 _media->audio_meta->genre = strdup(str_data);
3431                                 media_content_retvm_if(_media->audio_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3432                         }
3433                 }
3434                 break;
3435         case MEDIA_INFO_RECORDED_DATE:
3436                 if (STRING_VALID(_media->media_id)) {
3437                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3438                                 SAFE_FREE(_media->video_meta->recorded_date);
3439                                 if (str_data != NULL) {
3440                                         _media->video_meta->recorded_date = strdup(str_data);
3441                                         media_content_retvm_if(_media->video_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3442                                 }
3443                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3444                                 SAFE_FREE(_media->audio_meta->recorded_date);
3445                                 if (str_data != NULL) {
3446                                         _media->audio_meta->recorded_date = strdup(str_data);
3447                                         media_content_retvm_if(_media->audio_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3448                                 }
3449                         }
3450                 } else {
3451                         SAFE_FREE(_media->video_meta->recorded_date);
3452                         if (str_data != NULL) {
3453                                 _media->video_meta->recorded_date = strdup(str_data);
3454                                 media_content_retvm_if(_media->video_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3455                         }
3456
3457                         SAFE_FREE(_media->audio_meta->recorded_date);
3458                         if (str_data != NULL) {
3459                                 _media->audio_meta->recorded_date = strdup(str_data);
3460                                 media_content_retvm_if(_media->audio_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3461                         }
3462                 }
3463                 break;
3464         default:
3465                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3466                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3467         }
3468
3469         return MEDIA_CONTENT_ERROR_NONE;
3470 }
3471
3472 static int __media_info_destroy(media_info_h media)
3473 {
3474         int ret = MEDIA_CONTENT_ERROR_NONE;
3475         media_info_s *_media = (media_info_s*)media;
3476
3477         if (_media) {
3478                 SAFE_FREE(_media->media_id);
3479                 SAFE_FREE(_media->file_path);
3480                 SAFE_FREE(_media->display_name);
3481                 SAFE_FREE(_media->mime_type);
3482                 SAFE_FREE(_media->thumbnail_path);
3483                 SAFE_FREE(_media->description);
3484                 SAFE_FREE(_media->author);
3485                 SAFE_FREE(_media->provider);
3486                 SAFE_FREE(_media->content_name);
3487                 SAFE_FREE(_media->category);
3488                 SAFE_FREE(_media->location_tag);
3489                 SAFE_FREE(_media->age_rating);
3490                 SAFE_FREE(_media->keyword);
3491                 SAFE_FREE(_media->title);
3492                 SAFE_FREE(_media->weather);
3493                 SAFE_FREE(_media->storage_uuid);
3494
3495                 if (_media->image_meta) {
3496                         SAFE_FREE(_media->image_meta->media_id);
3497                         SAFE_FREE(_media->image_meta->date_taken);
3498                         SAFE_FREE(_media->image_meta->burst_id);
3499                         SAFE_FREE(_media->image_meta->exposure_time);
3500                         SAFE_FREE(_media->image_meta->model);
3501                         SAFE_FREE(_media->image_meta->title);
3502
3503                         SAFE_FREE(_media->image_meta);
3504                 }
3505
3506                 if (_media->video_meta) {
3507                         SAFE_FREE(_media->video_meta->media_id);
3508                         SAFE_FREE(_media->video_meta->title);
3509                         SAFE_FREE(_media->video_meta->album);
3510                         SAFE_FREE(_media->video_meta->artist);
3511                         SAFE_FREE(_media->video_meta->album_artist);
3512                         SAFE_FREE(_media->video_meta->genre);
3513                         SAFE_FREE(_media->video_meta->composer);
3514                         SAFE_FREE(_media->video_meta->year);
3515                         SAFE_FREE(_media->video_meta->recorded_date);
3516                         SAFE_FREE(_media->video_meta->copyright);
3517                         SAFE_FREE(_media->video_meta->track_num);
3518
3519                         SAFE_FREE(_media->video_meta);
3520                 }
3521
3522                 if (_media->audio_meta) {
3523                         SAFE_FREE(_media->audio_meta->media_id);
3524                         SAFE_FREE(_media->audio_meta->title);
3525                         SAFE_FREE(_media->audio_meta->album);
3526                         SAFE_FREE(_media->audio_meta->artist);
3527                         SAFE_FREE(_media->audio_meta->album_artist);
3528                         SAFE_FREE(_media->audio_meta->genre);
3529                         SAFE_FREE(_media->audio_meta->composer);
3530                         SAFE_FREE(_media->audio_meta->year);
3531                         SAFE_FREE(_media->audio_meta->recorded_date);
3532                         SAFE_FREE(_media->audio_meta->copyright);
3533                         SAFE_FREE(_media->audio_meta->track_num);
3534
3535                         SAFE_FREE(_media->audio_meta);
3536                 }
3537
3538                 ret = MEDIA_CONTENT_ERROR_NONE;
3539         } else {
3540                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3541                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3542         }
3543
3544         return ret;
3545 }
3546
3547 int media_info_insert_to_db_with_data(media_info_h media)
3548 {
3549         int ret = MEDIA_CONTENT_ERROR_NONE;
3550         int ret_cnt = 0;
3551         char repl_path[MAX_PATH_LEN] = {0, };
3552
3553         media_content_warn("DEPRECATION WARNING: media_info_insert_to_db_with_data() is deprecated and will be removed from next release. Use media_info_insert_to_db() instead.");
3554
3555         media_info_s *_media = (media_info_s*)media;
3556
3557         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3558         media_content_retvm_if(!STRING_VALID(_media->file_path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid file_path");
3559         media_content_retvm_if(!STRING_VALID(_media->storage_uuid), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid storage_uuid");
3560         media_content_retvm_if(_media->storage_type < 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid storage_type [%d]", _media->storage_type);
3561
3562         media_content_sec_debug("storage[%d], path[%s], media_type[%d]", _media->storage_type, _media->file_path, _media->media_type);
3563
3564         media_svc_content_info_s *svc_content_info = NULL;
3565
3566         ret = __media_info_map_data_usr_to_svc(_media, &svc_content_info, _media->storage_type);
3567         media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "__media_info_map_data_usr_to_svc fail");
3568
3569         ret = media_svc_insert_item_immediately_with_data(_content_get_db_handle(), svc_content_info, _content_get_uid());
3570         if (ret != MS_MEDIA_ERR_NONE) {
3571                 media_content_sec_error("media_svc_insert_item_immediately_with_data failed : %d (%s)", ret, _media->file_path);
3572                 media_svc_destroy_content_info(svc_content_info);
3573                 SAFE_FREE(svc_content_info);
3574                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3575         }
3576         /*free the svc_content_info*/
3577         media_svc_destroy_content_info(svc_content_info);
3578         SAFE_FREE(svc_content_info);
3579
3580         /*Fill out the handle*/
3581         memset(repl_path, 0, sizeof(repl_path));
3582         ret = _media_content_replace_path(_media->file_path, repl_path);
3583         char *media_file_path = g_strdup(repl_path);
3584
3585         char *media_string_uuid = g_strdup(_media->storage_uuid);
3586
3587         __media_info_destroy(media);
3588 RETRY:
3589         ret = _media_info_get_media_info_from_db(media_file_path, media_string_uuid, media);
3590         if (ret != MEDIA_CONTENT_ERROR_NONE) {
3591                 media_content_error("_media_info_get_media_info_from_db fail [%d]", ret);
3592                 if (ret == MEDIA_CONTENT_ERROR_DB_FAILED && ret_cnt < 5) {
3593                         ret_cnt++;
3594                         media_content_error("RETRY GETTING DATA");
3595                         goto RETRY;
3596                 }
3597         }
3598
3599         SAFE_FREE(media_file_path);
3600         SAFE_FREE(media_string_uuid);
3601
3602         return ret;
3603 }
3604
3605 int media_info_create(const char *path, media_info_h *media)
3606 {
3607         int ret = MEDIA_CONTENT_ERROR_NONE;
3608         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
3609         media_svc_storage_type_e storage_type = 0;
3610         char repl_path[MAX_PATH_LEN] = {0, };
3611         media_content_warn("DEPRECATION WARNING: media_info_create() is deprecated and will be removed from next release. Use media_info_insert_to_db() instead.");
3612
3613         media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
3614         media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3615         memset(repl_path, 0, sizeof(repl_path));
3616         ret = _media_content_replace_path(path, repl_path);
3617         media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3618
3619         memset(storage_id, 0x00, sizeof(storage_id));
3620
3621         ret = __media_info_check_file_validity(repl_path);
3622         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
3623
3624         ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id, _content_get_uid());
3625         if (ret != MS_MEDIA_ERR_NONE) {
3626                 media_content_error("media_svc_get_storage_id failed : %d", ret);
3627                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3628         }
3629
3630         ret = media_svc_get_storage_type(repl_path, &storage_type, _content_get_uid());
3631         if (ret != MS_MEDIA_ERR_NONE) {
3632                 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
3633                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3634         }
3635
3636         media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
3637         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3638
3639         _media->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
3640         if (_media->audio_meta == NULL) {
3641                 SAFE_FREE(_media);
3642                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3643                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3644         }
3645
3646         _media->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
3647         if (_media->video_meta == NULL) {
3648                 SAFE_FREE(_media->audio_meta);
3649                 SAFE_FREE(_media);
3650                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3651                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3652         }
3653
3654         _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
3655         if (_media->image_meta == NULL) {
3656                 SAFE_FREE(_media->audio_meta);
3657                 SAFE_FREE(_media->video_meta);
3658                 SAFE_FREE(_media);
3659                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3660                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3661         }
3662
3663         _media->file_path = g_strdup(path);
3664         _media->storage_type = -1;
3665         _media->media_type = 0;
3666         _media->modified_time = 0;
3667         _media->size = 0;
3668         _media->request_id = 0;
3669         _media->longitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3670         _media->latitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3671         _media->altitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3672
3673         if (STRING_VALID(storage_id)) {
3674                 _media->storage_uuid = g_strdup(storage_id);
3675                 _media->storage_type = storage_type;
3676         }
3677
3678         *media = (media_info_h)_media;
3679
3680         return ret;
3681 }
3682
3683 int media_info_set_title(media_info_h media, const char *title)
3684 {
3685         media_content_warn("DEPRECATION WARNING: media_info_set_title() is deprecated and will be removed from next release.");
3686
3687         return __media_info_set_str_data(media, MEDIA_INFO_TITLE, title);
3688 }
3689
3690 int media_info_set_album(media_info_h media, const char *album)
3691 {
3692         media_content_warn("DEPRECATION WARNING: media_info_set_album() is deprecated and will be removed from next release.");
3693
3694         return __media_info_set_str_data(media, MEDIA_INFO_ALBUM, album);
3695 }
3696
3697 int media_info_set_artist(media_info_h media, const char *artist)
3698 {
3699         media_content_warn("DEPRECATION WARNING: media_info_set_artist() is deprecated and will be removed from next release.");
3700
3701         return __media_info_set_str_data(media, MEDIA_INFO_ARTIST, artist);
3702 }
3703
3704 int media_info_set_genre(media_info_h media, const char *genre)
3705 {
3706         media_content_warn("DEPRECATION WARNING: media_info_set_genre() is deprecated and will be removed from next release.");
3707
3708         return __media_info_set_str_data(media, MEDIA_INFO_GENRE, genre);
3709 }
3710
3711 int media_info_set_recorded_date(media_info_h media, const char *recorded_date)
3712 {
3713         media_content_warn("DEPRECATION WARNING: media_info_set_recorded_date() is deprecated and will be removed from next release.");
3714
3715         return __media_info_set_str_data(media, MEDIA_INFO_RECORDED_DATE, recorded_date);
3716 }