2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #include <sys/types.h>
22 #include <glib/gprintf.h>
23 #include <metadata_extractor.h>
24 #include "mtp_media_info.h"
26 #include "mtp_support.h"
29 static bool __fill_media_id_cb(media_info_h media, void *user_data)
31 media_info_h *media_id = (media_info_h *)user_data;
32 DBG("INTO MEdia id retrieval callback");
33 media_info_clone(media_id, media);
38 static void __scan_folder_cb(media_content_error_e err, void *user_data)
40 if (err != MEDIA_CONTENT_ERROR_NONE)
41 ERR("Scan folder callback returns error = [%d]\n", err);
46 mtp_bool _util_get_audio_metadata(const mtp_char *filepath,
47 comp_audio_meta_t *audio_data)
51 filter_h filter = NULL;
52 media_info_h media_item = NULL;
53 mtp_int32 ret = MEDIA_CONTENT_ERROR_NONE;
54 mtp_char condition[MEDIA_PATH_COND_MAX_LEN + 1];
56 retv_if(filepath == NULL, FALSE);
57 retv_if(audio_data == NULL, FALSE);
59 g_snprintf(condition, MEDIA_PATH_COND_MAX_LEN + 1, "%s\"%s\"",
60 MEDIA_PATH_COND, filepath);
62 ret = media_filter_create(&filter);
63 if (ret != MEDIA_CONTENT_ERROR_NONE) {
64 ERR("Fail to create filter ");
68 ret = media_filter_set_condition(filter, condition,
69 MEDIA_CONTENT_COLLATE_DEFAULT);
70 if (ret != MEDIA_CONTENT_ERROR_NONE) {
71 ERR("Failed to set condition ");
72 media_filter_destroy(filter);
76 ret = media_info_foreach_media_from_db(filter, __fill_media_id_cb,
78 if (ret != MEDIA_CONTENT_ERROR_NONE) {
79 ERR("media_info_foreach_media_from_db Fail");
80 media_filter_destroy(filter);
84 media_filter_destroy(filter);
86 if (media_item == NULL) {
87 ERR("File entry not found in db");
91 ret = media_info_get_audio(media_item, &audio);
92 if (ret != MEDIA_CONTENT_ERROR_NONE || audio == NULL) {
93 ERR("media_info_get_audio Fail or Audio is NULL");
94 media_info_destroy(media_item);
98 ret = audio_meta_get_album(audio, &(audio_data->commonmeta.album));
99 if (ret != MEDIA_CONTENT_ERROR_NONE) {
100 ERR("METADATA_ALBUM Fail");
104 ret = audio_meta_get_artist(audio, &(audio_data->commonmeta.artist));
105 if (ret != MEDIA_CONTENT_ERROR_NONE) {
106 ERR("METADATA_ARTIST Fail");
110 ret = audio_meta_get_bit_rate(audio,
111 &(audio_data->commonmeta.audio_bitrate));
112 if (ret != MEDIA_CONTENT_ERROR_NONE) {
113 ERR("METADATA_AUDIO_BITRATE Fail");
117 ret = audio_meta_get_composer(audio, &(audio_data->commonmeta.author));
118 if (ret != MEDIA_CONTENT_ERROR_NONE) {
119 ERR("METADATA_AUTHOR Fail");
123 ret = audio_meta_get_copyright(audio,
124 &(audio_data->commonmeta.copyright));
125 if (ret != MEDIA_CONTENT_ERROR_NONE) {
126 ERR("METADATA_COPYRIGHT Fail");
130 ret = audio_meta_get_duration(audio,
131 &(audio_data->commonmeta.duration));
132 if (ret != MEDIA_CONTENT_ERROR_NONE) {
133 ERR("METADATA_DURATION Fail");
137 ret = audio_meta_get_genre(audio, &(audio_data->commonmeta.genre));
138 if (ret != MEDIA_CONTENT_ERROR_NONE) {
139 ERR("METADATA_GENRE Fail");
143 ret = audio_meta_get_recorded_date(audio,
144 &(audio_data->commonmeta.year));
145 if (ret != MEDIA_CONTENT_ERROR_NONE) {
146 ERR("METADATA_RECDATE Fail");
150 ret = audio_meta_get_track_num(audio, &temp);
151 if (ret != MEDIA_CONTENT_ERROR_NONE) {
152 ERR("METADATA_TRACK_NUM Fail");
157 audio_data->audiometa.track = atoi(temp);
158 MTP_PAL_SAFE_FREE(temp);
161 ret = audio_meta_get_channel(audio,
162 &(audio_data->commonmeta.num_channel));
163 if (ret != MEDIA_CONTENT_ERROR_NONE) {
164 ERR("METADATA_NUM_CHANNEL Fail");
168 ret = audio_meta_get_sample_rate(audio,
169 &(audio_data->commonmeta.sample_rate));
170 if (ret != MEDIA_CONTENT_ERROR_NONE) {
171 ERR("METADATA_SAMPLE_RATE Fail");
175 audio_data->commonmeta.description = g_strdup("Unknown");
176 audio_data->commonmeta.audio_codec = 0;
178 audio_meta_destroy(audio);
179 media_info_destroy(media_item);
184 audio_meta_destroy(audio);
185 media_info_destroy(media_item);
189 mtp_bool _util_get_video_metadata(mtp_char *filepath,
190 comp_video_meta_t *video_data)
192 filter_h filter = NULL;
194 media_info_h media_item = NULL;
195 mtp_int32 ret = MEDIA_CONTENT_ERROR_NONE;
196 mtp_char condition[MEDIA_PATH_COND_MAX_LEN + 1];
198 retv_if(filepath == NULL, FALSE);
199 retv_if(video_data == NULL, FALSE);
201 g_snprintf(condition, sizeof(condition), "%s\"%s\"", MEDIA_PATH_COND, filepath);
203 ret = media_filter_create(&filter);
204 if (ret != MEDIA_CONTENT_ERROR_NONE) {
205 ERR("Fail to create filter ");
209 ret = media_filter_set_condition(filter, condition,
210 MEDIA_CONTENT_COLLATE_DEFAULT);
211 if (ret != MEDIA_CONTENT_ERROR_NONE) {
212 ERR("Failed to set condition ");
213 media_filter_destroy(filter);
217 ret = media_info_foreach_media_from_db(filter, __fill_media_id_cb,
219 if (ret != MEDIA_CONTENT_ERROR_NONE) {
220 ERR("media_info_foreach_media_from_db Fail");
221 media_filter_destroy(filter);
225 media_filter_destroy(filter);
227 if (media_item == NULL) {
228 ERR("File entry not found in db");
232 ret = media_info_get_video(media_item, &video);
233 if (ret != MEDIA_CONTENT_ERROR_NONE || video == NULL) {
234 ERR("media_info_get_audio Fail or video is NULL");
235 media_info_destroy(media_item);
239 ret = video_meta_get_album(video, &(video_data->commonmeta.album));
240 if (ret != MEDIA_CONTENT_ERROR_NONE) {
241 ERR("METADATA_ALBUM Fail");
245 ret = video_meta_get_artist(video, &(video_data->commonmeta.artist));
246 if (ret != MEDIA_CONTENT_ERROR_NONE) {
247 ERR("METADATA_ARTIST Fail");
252 video_data->commonmeta.audio_bitrate = 0;
254 ret = video_meta_get_composer(video, &(video_data->commonmeta.author));
255 if (ret != MEDIA_CONTENT_ERROR_NONE) {
256 ERR("METADATA_AUTHOR Fail");
260 ret = video_meta_get_copyright(video,
261 &(video_data->commonmeta.copyright));
262 if (ret != MEDIA_CONTENT_ERROR_NONE) {
263 ERR("METADATA_COPYRIGHT Fail");
268 video_data->commonmeta.description = g_strdup("Unknown");
270 ret = video_meta_get_duration(video,
271 &(video_data->commonmeta.duration));
272 if (ret != MEDIA_CONTENT_ERROR_NONE) {
273 ERR("METADATA_DURATION Fail");
277 ret = video_meta_get_genre(video, &(video_data->commonmeta.genre));
278 if (ret != MEDIA_CONTENT_ERROR_NONE) {
279 ERR("METADATA_GENRE Fail");
283 ret = video_meta_get_recorded_date(video,
284 &(video_data->commonmeta.year));
285 if (ret != MEDIA_CONTENT_ERROR_NONE) {
286 ERR("METADATA_REC_DATE Fail");
290 /* METADATA_AUDIO_CHANNELS */
291 video_data->commonmeta.num_channel = 0;
294 video_data->commonmeta.rating = 0;
296 /* METADATA_SAMPLE_RATE */
297 video_data->commonmeta.sample_rate = 0;
299 ret = video_meta_get_track_num(video, &(video_data->videometa.track));
300 if (ret != MEDIA_CONTENT_ERROR_NONE) {
301 ERR("METADATA_TRACK_NUM Fail");
305 ret = video_meta_get_bit_rate(video, &(video_data->videometa.video_br));
306 if (ret != MEDIA_CONTENT_ERROR_NONE) {
307 ERR("METADATA_VIDEO_BITRATE Fail");
312 video_data->videometa.video_fps = 0;
313 video_data->commonmeta.audio_codec = 0;
314 video_data->videometa.video_br = 0;
316 ret = video_meta_get_height(video, &(video_data->videometa.video_h));
317 if (ret != MEDIA_CONTENT_ERROR_NONE) {
318 ERR("METADATA_HEIGHT Fail");
322 ret = video_meta_get_width(video, &(video_data->videometa.video_w));
323 if (ret != MEDIA_CONTENT_ERROR_NONE) {
324 ERR("METADATA_WIDTH Fail");
328 video_meta_destroy(video);
329 media_info_destroy(media_item);
332 video_meta_destroy(video);
333 media_info_destroy(media_item);
338 static media_info_h __util_find_media_info(mtp_char *condition)
341 filter_h filter = NULL;
342 media_info_h media_item = NULL;
344 ret = media_filter_create(&filter);
345 if (ret != MEDIA_CONTENT_ERROR_NONE) {
346 ERR("Fail to create filter ");
351 ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
352 if (ret != MEDIA_CONTENT_ERROR_NONE) {
353 ERR("media_filter_set_condition() Fail");
357 ret = media_filter_set_offset(filter, 0, 1);
358 if (ret != MEDIA_CONTENT_ERROR_NONE) {
359 ERR("media_filter_set_offset() Fail");
363 ret = media_info_foreach_media_from_db(filter, __fill_media_id_cb, &media_item);
364 if (ret != MEDIA_CONTENT_ERROR_NONE) {
365 ERR("media_info_foreach_media_from_db() Fail");
370 media_filter_destroy(filter);
376 static mtp_bool __util_get_height_width(image_meta_h image, int *h, int *w)
380 ret = image_meta_get_height(image, h);
381 if (ret != MEDIA_CONTENT_ERROR_NONE) {
382 ERR("image_meta_get_height() Fail(%d)", ret);
386 ret = image_meta_get_width(image, w);
387 if (ret != MEDIA_CONTENT_ERROR_NONE) {
388 ERR("image_meta_get_width() Fail(%d)", ret);
395 mtp_bool _util_get_image_ht_wt(const mtp_char *filepath,
396 image_meta_t *image_data)
400 media_info_h media_item;
401 mtp_char condition[MEDIA_PATH_COND_MAX_LEN + 1];
403 retv_if(filepath == NULL, FALSE);
404 retv_if(image_data == NULL, FALSE);
406 g_snprintf(condition, sizeof(condition), "%s\"%s\"", MEDIA_PATH_COND, filepath);
408 media_item = __util_find_media_info(condition);
409 if (media_item == NULL) {
410 ERR("File entry not found in db");
414 ret = media_info_get_image(media_item, &image);
415 if (ret != MEDIA_CONTENT_ERROR_NONE || image == NULL) {
416 ERR("media_info_get_image() Fail(%d) or image(%p) is NULL", ret, image);
417 media_info_destroy(media_item);
421 ret = __util_get_height_width(image, &image_data->ht, &image_data->wt);
423 ERR("__util_get_height_width() Fail");
425 media_info_destroy(media_item);
426 image_meta_destroy(image);
431 mtp_bool _util_get_audio_meta_from_extractor(const mtp_char *filepath,
432 comp_audio_meta_t *audio_data)
435 mtp_char *temp = NULL;
436 metadata_extractor_h metadata = NULL;
438 retv_if(filepath == NULL, FALSE);
439 retv_if(audio_data == NULL, FALSE);
441 ret = metadata_extractor_create(&metadata);
442 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
443 ERR("metadata extractor create Fail");
447 ret = metadata_extractor_set_path(metadata, filepath);
448 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
449 ERR("metadata extractor set path Fail");
453 ret = metadata_extractor_get_metadata(metadata, METADATA_ALBUM,
454 &(audio_data->commonmeta.album));
455 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
456 ERR("METADATA_ALBUM Fail");
460 ret = metadata_extractor_get_metadata(metadata, METADATA_ARTIST,
461 &(audio_data->commonmeta.artist));
462 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
463 ERR("METADATA_ARTIST Fail");
467 ret = metadata_extractor_get_metadata(metadata, METADATA_AUDIO_BITRATE,
469 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
470 ERR("METADATA_AUDIO_BITRATE Fail");
475 audio_data->commonmeta.audio_bitrate = atoi(temp);
476 MTP_PAL_SAFE_FREE(temp);
479 ret = metadata_extractor_get_metadata(metadata, METADATA_AUTHOR,
480 &(audio_data->commonmeta.author));
481 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
482 ERR("METADATA_AUTHOR Fail");
486 ret = metadata_extractor_get_metadata(metadata, METADATA_COPYRIGHT,
487 &(audio_data->commonmeta.copyright));
488 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
489 ERR("METADATA_COPYRIGHT Fail");
493 ret = metadata_extractor_get_metadata(metadata, METADATA_DESCRIPTION,
494 &(audio_data->commonmeta.description));
495 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
496 ERR("METADATA_DESCRIPTION Fail");
500 ret = metadata_extractor_get_metadata(metadata, METADATA_DURATION,
502 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
503 ERR("METADATA_DURATION Fail");
508 audio_data->commonmeta.duration = atoi(temp);
509 MTP_PAL_SAFE_FREE(temp);
512 ret = metadata_extractor_get_metadata(metadata, METADATA_GENRE,
513 &(audio_data->commonmeta.genre));
514 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
515 ERR("METADATA_GENRE Fail");
519 ret = metadata_extractor_get_metadata(metadata, METADATA_RECDATE,
520 &(audio_data->commonmeta.year));
521 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
522 ERR("METADATA_RECDATE Fail");
526 ret = metadata_extractor_get_metadata(metadata, METADATA_TRACK_NUM,
528 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
529 ERR("METADATA_TRACK_NUM Fail");
533 audio_data->audiometa.track = atoi(temp);
534 MTP_PAL_SAFE_FREE(temp);
537 ret = metadata_extractor_get_metadata(metadata, METADATA_RATING,
539 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
540 ERR("METADATA_RATING Fail");
544 audio_data->commonmeta.rating = atoi(temp);
545 MTP_PAL_SAFE_FREE(temp);
548 ret = metadata_extractor_get_metadata(metadata,
549 METADATA_AUDIO_SAMPLERATE, &temp);
550 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
551 ERR("METADATA_SAMPLERATE Fail");
555 audio_data->commonmeta.sample_rate = atoi(temp);
556 MTP_PAL_SAFE_FREE(temp);
559 ret = metadata_extractor_get_metadata(metadata, METADATA_AUDIO_CHANNELS,
561 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
562 ERR("METADATA_CHANNELS Fail");
566 audio_data->commonmeta.num_channel = atoi(temp);
567 MTP_PAL_SAFE_FREE(temp);
570 audio_data->commonmeta.audio_codec = 0;
572 metadata_extractor_destroy(metadata);
576 metadata_extractor_destroy(metadata);
580 mtp_bool _util_get_video_meta_from_extractor(const mtp_char *filepath,
581 comp_video_meta_t *video_data)
584 mtp_char *temp = NULL;
585 metadata_extractor_h metadata = NULL;
587 retv_if(filepath == NULL, FALSE);
588 retv_if(video_data == NULL, FALSE);
590 ret = metadata_extractor_create(&metadata);
591 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
592 ERR("metadata extractor create Fail");
596 ret = metadata_extractor_set_path(metadata, filepath);
597 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
598 ERR("metadata extractor set path Fail");
602 ret = metadata_extractor_get_metadata(metadata, METADATA_ALBUM,
603 &(video_data->commonmeta.album));
604 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
605 ERR("METADATA_ALBUM Fail");
610 ret = metadata_extractor_get_metadata(metadata, METADATA_ARTIST,
611 &(video_data->commonmeta.artist));
612 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
613 ERR("METADATA_ARTIST Fail");
617 ret = metadata_extractor_get_metadata(metadata, METADATA_AUDIO_BITRATE,
619 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
620 ERR("METADATA_AUDIO_BITRATE Fail");
624 video_data->commonmeta.audio_bitrate = atoi(temp);
625 MTP_PAL_SAFE_FREE(temp);
628 ret = metadata_extractor_get_metadata(metadata, METADATA_AUTHOR,
629 &(video_data->commonmeta.author));
630 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
631 ERR("METADATA_AUTHOR Fail");
635 ret = metadata_extractor_get_metadata(metadata, METADATA_COPYRIGHT,
636 &(video_data->commonmeta.copyright));
637 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
638 ERR("METADATA_COPYRIGHT Fail");
642 ret = metadata_extractor_get_metadata(metadata, METADATA_DESCRIPTION,
643 &(video_data->commonmeta.description));
644 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
645 ERR("METADATA_DESCRIPTION Fail");
649 ret = metadata_extractor_get_metadata(metadata, METADATA_DURATION,
651 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
652 ERR("METADATA_DURATION Fail");
656 video_data->commonmeta.duration = atoi(temp);
657 MTP_PAL_SAFE_FREE(temp);
660 ret = metadata_extractor_get_metadata(metadata, METADATA_GENRE,
661 &(video_data->commonmeta.genre));
662 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
663 ERR("METADATA_GENRE Fail");
667 ret = metadata_extractor_get_metadata(metadata, METADATA_RECDATE,
668 &(video_data->commonmeta.year));
669 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
670 ERR("METADATA_RECDATE Fail");
674 ret = metadata_extractor_get_metadata(metadata, METADATA_AUDIO_CHANNELS,
676 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
677 ERR("METADATA_AUDIO_CHANNELS Fail");
681 video_data->commonmeta.num_channel = atoi(temp);
682 MTP_PAL_SAFE_FREE(temp);
685 ret = metadata_extractor_get_metadata(metadata, METADATA_RATING,
687 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
688 ERR("METADATA_RATING Fail");
693 video_data->commonmeta.rating = atoi(temp);
694 MTP_PAL_SAFE_FREE(temp);
697 ret = metadata_extractor_get_metadata(metadata,
698 METADATA_AUDIO_SAMPLERATE, &temp);
699 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
700 ERR("METADATA_AUDIO_SAMPLERATE Fail");
704 video_data->commonmeta.sample_rate = atoi(temp);
705 MTP_PAL_SAFE_FREE(temp);
708 ret = metadata_extractor_get_metadata(metadata, METADATA_TRACK_NUM,
709 &(video_data->videometa.track));
710 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
711 ERR("METADATA_TRACK_NUM Fail");
715 ret = metadata_extractor_get_metadata(metadata, METADATA_VIDEO_BITRATE,
717 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
718 ERR("METADATA_VIDEO_BITRATE Fail");
722 video_data->videometa.video_br = atoi(temp);
723 MTP_PAL_SAFE_FREE(temp);
726 ret = metadata_extractor_get_metadata(metadata, METADATA_VIDEO_FPS,
728 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
729 ERR("METADATA_VIDEO_FPS Fail");
733 video_data->videometa.video_fps = atoi(temp);
734 MTP_PAL_SAFE_FREE(temp);
737 ret = metadata_extractor_get_metadata(metadata, METADATA_VIDEO_HEIGHT,
739 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
740 ERR("METADATA_VIDEO_HEIGHT Fail");
744 video_data->videometa.video_h = atoi(temp);
745 MTP_PAL_SAFE_FREE(temp);
748 ret = metadata_extractor_get_metadata(metadata, METADATA_VIDEO_WIDTH,
750 if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
751 ERR("METADATA_VIDEO_WIDTH Fail");
755 video_data->videometa.video_w = atoi(temp);
756 MTP_PAL_SAFE_FREE(temp);
759 metadata_extractor_destroy(metadata);
763 metadata_extractor_destroy(metadata);
768 void _util_flush_db(void)
770 _util_add_file_to_db(NULL);
771 _util_delete_file_from_db(NULL);
774 void _util_delete_file_from_db(const mtp_char *filepath)
777 media_info_h info = NULL;
778 char *media_id = NULL;
779 mtp_char condition[MEDIA_PATH_COND_MAX_LEN + 1];
781 ret_if(NULL == filepath);
783 g_snprintf(condition, sizeof(condition), "%s\"%s\"", MEDIA_PATH_COND, filepath);
785 info = __util_find_media_info(condition);
787 ERR("File entry not found in db");
791 ret = media_info_get_media_id(info, &media_id);
792 if (MEDIA_CONTENT_ERROR_NONE != ret)
793 ERR("media_info_get_media_id() Fail(%d)", ret);
795 ret = media_info_delete_from_db(media_id);
796 if (MEDIA_CONTENT_ERROR_NONE != ret)
797 ERR("media_info_delete_from_db() Fail(%d)", ret);
803 media_info_destroy(info);
808 void _util_add_file_to_db(const mtp_char *filepath)
811 media_info_h info = NULL;
813 ret_if(NULL == filepath);
815 ret = media_info_insert_to_db(filepath, &info);
816 if (MEDIA_CONTENT_ERROR_NONE != ret)
817 ERR("media_info_insert_to_db() Fail(%d)", ret);
820 media_info_destroy(info);
825 void _util_scan_folder_contents_in_db(const mtp_char *filepath)
829 ret_if(filepath == NULL);
831 ret = media_content_scan_folder(filepath, true, __scan_folder_cb, NULL);
832 if (ret != MEDIA_CONTENT_ERROR_NONE)
833 ERR("media_content_scan_folder Fail : %d\n", ret);
838 void _util_free_common_meta(common_meta_t *metadata)
840 MTP_PAL_SAFE_FREE(metadata->album);
841 MTP_PAL_SAFE_FREE(metadata->artist);
842 MTP_PAL_SAFE_FREE(metadata->author);
843 MTP_PAL_SAFE_FREE(metadata->copyright);
844 MTP_PAL_SAFE_FREE(metadata->description);
845 MTP_PAL_SAFE_FREE(metadata->genre);
846 MTP_PAL_SAFE_FREE(metadata->year);
850 void _util_free_video_meta(video_meta_t *video)
852 MTP_PAL_SAFE_FREE(video->track);