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