Remove unnecessary executable permissions
[platform/core/api/metadata-extractor.git] / test / metadata_extractor_test.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 <stdio.h>
18 #include <stdlib.h>
19 #include <string.h>
20 #include <unistd.h>
21 #include <stdbool.h>
22 #include <limits.h>
23 #include <metadata_extractor.h>
24 #include <metadata_extractor_private.h>
25
26 #define SAFE_FREE(src) { if (src) {free(src); src = NULL; } }
27
28 #define READ_FROM_FILE(FILE_PATH, data, size) \
29         do { \
30                 FILE *fp = fopen(FILE_PATH, "r"); \
31                 if (fp) { \
32                         fseek(fp, 0, SEEK_END); \
33                         size = ftell(fp); \
34                         fseek(fp, 0, SEEK_SET); \
35                         if (size > 0) { \
36                                 data = malloc(size); \
37                                 if (data != NULL) \
38                                         if (fread(data, sizeof(char), size, fp) != (size_t)size) \
39                                                 printf("fread error\n"); \
40                         } \
41                         fclose(fp); \
42                         printf("file size = %ld\n", size); \
43                 } \
44         } while (0)
45
46 /* Saves dump artwork and thumbnail to current path */
47 #define DUMP_ARTWORK_THUMBNAIL  0       /* disable: 0, enable: 1*/
48 #if DUMP_ARTWORK_THUMBNAIL
49 #define DUMP_ARTWORK_PATH               "./test_artwork.jpg"
50 #define DUMP_THUMBNAIL_PATH             "./test_thumbnail.rgb"
51 #endif
52
53 static int _is_file_exist(const char *filename);
54 static bool __capi_metadata_extractor(metadata_extractor_h metadata);
55
56 #if DUMP_ARTWORK_THUMBNAIL
57 static void __write_file(const char *path, void *data, size_t length)
58 {
59         FILE *fp = NULL;
60         size_t len = 0;
61
62         if (!path || !data || length == 0) {
63                 printf("\t[__write_file] invalid data\n");
64                 return ;
65         }
66
67         printf("\t[__write_file] %s %p %zu write\n", path, data, length);
68
69         fp = fopen(path, "w");
70         if (!fp) {
71                 printf("\t[__write_file] fopen failed (%d)\n", errno);
72                 return ;
73         }
74
75         len = fwrite(data, 1, length, fp);
76         if (len != length) {
77                 printf("\t[__write_file] fwrite failed\n");
78         }
79
80         fclose(fp);
81         fp = NULL;
82
83         printf("\t[__write_file] %s write DONE\n", path);
84 }
85 #endif
86
87 static int _is_file_exist(const char *filename)
88 {
89         int ret = 1;
90         if (filename) {
91                 const char *to_access = (strstr(filename, "file://") != NULL) ? filename + 7 : filename;
92                 ret = access(to_access, R_OK);
93                 if (ret != 0)
94                         printf("file [%s] not found.\n", to_access);
95         }
96         return !ret;
97 }
98
99 static bool __capi_metadata_extractor(metadata_extractor_h metadata)
100 {
101         char *duration = 0;
102         char *audio_bitrate = 0;
103         char *audio_channel = 0;
104         char *audio_samplerate = 0;
105         char *audio_bitpersample = 0;
106         char *audio_track_cnt = 0;
107         char *video_bitrate = 0;
108         char *video_fps = 0;
109         char *video_width = 0;
110         char *video_height = 0;
111         char *video_track_cnt = 0;
112         void *video_thumbnail = NULL;
113         int video_thumbnail_len = 0;
114         void *video_frame = NULL;
115         int video_frame_len = 0;
116
117         /*Tag info*/
118         char *artist = NULL;
119         char *title = NULL;
120         char *album = NULL;
121         char *album_artist = NULL;
122         char *genre = NULL;
123         char *author = NULL;
124         char *copyright = NULL;
125         char *date = NULL;
126         char *description = NULL;
127         char *comment = NULL;
128         void *artwork = NULL;
129         int artwork_size = 0;
130         char *artwork_mime = NULL;
131         char *track_num = NULL;
132         char *classification = NULL;
133         char *rating = NULL;
134         char *longitude = 0;
135         char *latitude = 0;
136         char *altitude = 0;
137         char *conductor = NULL;
138         char *unsynclyrics = NULL;
139         char *synclyrics_num = NULL;
140         char *rec_date = NULL;
141         char *rotate = NULL;
142         char *video_codec = NULL;
143         char *audio_codec = NULL;
144         char *is_360 = NULL;
145 #ifdef SUPPORT_GSPHERICAL_METADATA
146         char *is_stitched_v1 = NULL;
147         char *stitching_software_v1 = NULL;
148         char *projection_type_v1 = NULL;
149         char *stereo_mode_v1 = NULL;
150         char *source_count_v1 = NULL;
151         char *initial_view_heading_degrees_v1 = NULL;
152         char *initial_view_pitch_degrees_v1 = NULL;
153         char *initial_view_roll_degrees_v1 = NULL;
154         char *timestamp_v1 = NULL;
155         char *full_pano_width_v1 = NULL;
156         char *full_pano_height_v1 = NULL;
157         char *cropped_area_image_width_v1 = NULL;
158         char *cropped_area_image_height_v1 = NULL;
159         char *cropped_area_left_v1 = NULL;
160         char *cropped_area_top_v1 = NULL;
161
162         char *stereo_mode_v2 = NULL;
163         char *metadata_source_v2 = NULL;
164         char *proj_type_v2 = NULL;
165         char *pose_yaw_degrees_v2 = NULL;
166         char *pose_pitch_degrees_v2 = NULL;
167         char *pose_roll_degrees_v2 = NULL;
168         char *cbmp_layout_v2 = NULL;
169         char *cbmp_padding_v2 = NULL;
170         char *equi_projection_bounds_top_v2 = NULL;
171         char *equi_projection_bounds_bottom_v2 = NULL;
172         char *equi_projection_bounds_left_v2 = NULL;
173         char *equi_projection_bounds_right_v2 = NULL;
174
175         char *ambisonic_type = NULL;
176         char *ambisonic_format = NULL;
177         char *ambisonic_order = NULL;
178
179 #endif
180
181         int idx = 0;
182         unsigned long time_info = 0;
183         char *lyrics = NULL;
184         int video_cnt = 0;
185         if (metadata == NULL) {
186                 printf("Invalid handle \n");
187                 return false;
188         }
189
190         /*Get metadata*/
191         metadata_extractor_get_metadata(metadata, METADATA_HAS_AUDIO, &audio_track_cnt);
192         printf("audio_track_cnt = [%s]\n", audio_track_cnt);
193         metadata_extractor_get_metadata(metadata, METADATA_HAS_VIDEO, &video_track_cnt);
194         printf("video_track_cnt = [%s]\n", video_track_cnt);
195         if (video_track_cnt != NULL)
196                 video_cnt = atoi(video_track_cnt);
197
198         metadata_extractor_get_metadata(metadata, METADATA_DURATION, &duration);
199         printf("duration = [%s]\n", duration);
200         metadata_extractor_get_metadata(metadata, METADATA_AUDIO_BITRATE, &audio_bitrate);
201         printf("audio_bitrate = [%s]bps\n", audio_bitrate);
202         metadata_extractor_get_metadata(metadata, METADATA_AUDIO_CHANNELS, &audio_channel);
203         printf("audio_channel = [%s]\n", audio_channel);
204         metadata_extractor_get_metadata(metadata, METADATA_AUDIO_SAMPLERATE, &audio_samplerate);
205         printf("audio_samplerate = [%s]Hz\n", audio_samplerate);
206         metadata_extractor_get_metadata(metadata, METADATA_AUDIO_BITPERSAMPLE, &audio_bitpersample);
207         printf("audio_bitpersample = [%s]Bit\n", audio_bitpersample);
208
209         if (video_cnt > 0) {
210                 metadata_extractor_get_metadata(metadata, METADATA_VIDEO_BITRATE, &video_bitrate);
211                 printf("video_bitrate = [%s]bps\n", video_bitrate);
212                 metadata_extractor_get_metadata(metadata, METADATA_VIDEO_FPS, &video_fps);
213                 printf("video_fps = [%s]\n", video_fps);
214                 metadata_extractor_get_metadata(metadata, METADATA_VIDEO_WIDTH, &video_width);
215                 printf("video_width = [%s]\n", video_width);
216                 metadata_extractor_get_metadata(metadata, METADATA_VIDEO_HEIGHT, &video_height);
217                 printf("video_height = [%s]\n", video_height);
218         }
219
220         metadata_extractor_get_metadata(metadata, METADATA_ARTIST, &artist);
221         printf("artist = [%s]\n", artist);
222         metadata_extractor_get_metadata(metadata, METADATA_TITLE, &title);
223         printf("title = [%s]\n", title);
224         metadata_extractor_get_metadata(metadata, METADATA_ALBUM, &album);
225         printf("album = [%s]\n", album);
226         metadata_extractor_get_metadata(metadata, METADATA_ALBUM_ARTIST, &album_artist);
227         printf("album_artist = [%s]\n", album_artist);
228         metadata_extractor_get_metadata(metadata, METADATA_GENRE, &genre);
229         printf("genre = [%s]\n", genre);
230         metadata_extractor_get_metadata(metadata, METADATA_COMPOSER, &author);
231         printf("author = [%s]\n", author);
232         metadata_extractor_get_metadata(metadata, METADATA_COPYRIGHT, &copyright);
233         printf("copyright = [%s]\n", copyright);
234         metadata_extractor_get_metadata(metadata, METADATA_DATE, &date);
235         printf("date = [%s]\n", date);
236         metadata_extractor_get_metadata(metadata, METADATA_DESCRIPTION, &description);
237         printf("description = [%s]\n", description);
238         metadata_extractor_get_metadata(metadata, METADATA_COMMENT, &comment);
239         printf("comment = [%s]\n", comment);
240         metadata_extractor_get_metadata(metadata, METADATA_TRACK_NUM, &track_num);
241         printf("track_num = [%s]\n", track_num);
242         metadata_extractor_get_metadata(metadata, METADATA_CLASSIFICATION, &classification);
243         printf("classification = [%s]\n", classification);
244         metadata_extractor_get_metadata(metadata, METADATA_RATING, &rating);
245         printf("rating = [%s]\n", rating);
246         metadata_extractor_get_metadata(metadata, METADATA_LONGITUDE, &longitude);
247         printf("longitude = [%s]\n", longitude);
248         metadata_extractor_get_metadata(metadata, METADATA_LATITUDE, &latitude);
249         printf("latitude = [%s]\n", latitude);
250         metadata_extractor_get_metadata(metadata, METADATA_ALTITUDE, &altitude);
251         printf("altitude = [%s]\n", altitude);
252         metadata_extractor_get_metadata(metadata, METADATA_CONDUCTOR, &conductor);
253         printf("conductor = [%s]\n", conductor);
254         metadata_extractor_get_metadata(metadata, METADATA_UNSYNCLYRICS, &unsynclyrics);
255         printf("unsynclyrics = [%s]\n", unsynclyrics);
256         metadata_extractor_get_metadata(metadata, METADATA_RECDATE, &rec_date);
257         printf("rec_date = [%s]\n", rec_date);
258         metadata_extractor_get_metadata(metadata, METADATA_ROTATE, &rotate);
259         printf("rotate = [%s]\n", rotate);
260         metadata_extractor_get_metadata(metadata, METADATA_AUDIO_CODEC, &audio_codec);
261         printf("audio_codec = [%s]\n", audio_codec);
262         metadata_extractor_get_metadata(metadata, METADATA_VIDEO_CODEC, &video_codec);
263         printf("video_codec = [%s]\n", video_codec);
264         metadata_extractor_get_metadata(metadata, METADATA_360, &is_360);
265         printf("is_360 = [%s]\n", is_360);
266
267 #ifdef SUPPORT_GSPHERICAL_METADATA
268         metadata_extractor_get_metadata(metadata, METADATA_360_V1_STITCHED, &is_stitched_v1);
269         printf("is_stitched_v1 = [%s]\n", is_stitched_v1);
270         metadata_extractor_get_metadata(metadata, METADATA_360_V1_STITCHING_SOFTWARE, &stitching_software_v1);
271         printf("stitching_software_v1 = [%s]\n", stitching_software_v1);
272         metadata_extractor_get_metadata(metadata, METADATA_360_V1_PROJECTION_TYPE, &projection_type_v1);
273         printf("projection_type_v1 = [%s]\n", projection_type_v1);
274         metadata_extractor_get_metadata(metadata, METADATA_360_V1_STEREO_MODE, &stereo_mode_v1);
275         printf("stereo_mode_v1 = [%s]\n", stereo_mode_v1);
276         metadata_extractor_get_metadata(metadata, METADATA_360_V1_SOURCE_COUNT, &source_count_v1);
277         printf("source_count_v1 = [%s]\n", source_count_v1);
278         metadata_extractor_get_metadata(metadata, METADATA_360_V1_INIT_VIEW_HEADING, &initial_view_heading_degrees_v1);
279         printf("initial_view_heading_degrees_v1 = [%s]\n", initial_view_heading_degrees_v1);
280         metadata_extractor_get_metadata(metadata, METADATA_360_V1_INIT_VIEW_PITCH, &initial_view_pitch_degrees_v1);
281         printf("initial_view_pitch_degrees_v1 = [%s]\n", initial_view_pitch_degrees_v1);
282         metadata_extractor_get_metadata(metadata, METADATA_360_V1_INIT_VIEW_ROLL, &initial_view_roll_degrees_v1);
283         printf("initial_view_roll_degrees_v1 = [%s]\n", initial_view_roll_degrees_v1);
284         metadata_extractor_get_metadata(metadata, METADATA_360_V1_TIMESTAMP, &timestamp_v1);
285         printf("timestamp_v1 = [%s]\n", timestamp_v1);
286         metadata_extractor_get_metadata(metadata, METADATA_360_V1_FULL_PANO_WIDTH, &full_pano_width_v1);
287         printf("full_pano_width_v1 = [%s]\n", full_pano_width_v1);
288         metadata_extractor_get_metadata(metadata, METADATA_360_V1_FULL_PANO_HEIGHT, &full_pano_height_v1);
289         printf("full_pano_height_v1 = [%s]\n", full_pano_height_v1);
290         metadata_extractor_get_metadata(metadata, METADATA_360_V1_CROPPED_AREA_IMAGE_WIDTH, &cropped_area_image_width_v1);
291         printf("cropped_area_image_width_v1 = [%s]\n", cropped_area_image_width_v1);
292         metadata_extractor_get_metadata(metadata, METADATA_360_V1_CROPPED_AREA_IMAGE_HEIGHT, &cropped_area_image_height_v1);
293         printf("cropped_area_image_height_v1 = [%s]\n", cropped_area_image_height_v1);
294         metadata_extractor_get_metadata(metadata, METADATA_360_V1_CROPPED_AREA_LEFT, &cropped_area_left_v1);
295         printf("cropped_area_left_v1 = [%s]\n", cropped_area_left_v1);
296         metadata_extractor_get_metadata(metadata, METADATA_360_V1_CROPPED_AREA_TOP, &cropped_area_top_v1);
297         printf("cropped_area_top_v1 = [%s]\n", cropped_area_top_v1);
298
299         metadata_extractor_get_metadata(metadata, METADATA_360_V2_STEREO_MODE, &stereo_mode_v2);
300         printf("stereo_mode_v2 = [%s]\n", stereo_mode_v2);
301         metadata_extractor_get_metadata(metadata, METADATA_360_V2_METADATA_SOURCE, &metadata_source_v2);
302         printf("metadata_source_v2 = [%s]\n", metadata_source_v2);
303         metadata_extractor_get_metadata(metadata, METADATA_360_V2_PROJ_TYPE, &proj_type_v2);
304         printf("proj_type_v2 = [%s]\n", proj_type_v2);
305         metadata_extractor_get_metadata(metadata, METADATA_360_V2_POSE_YAW, &pose_yaw_degrees_v2);
306         printf("pose_yaw_degrees_v2 = [%s]\n", pose_yaw_degrees_v2);
307         metadata_extractor_get_metadata(metadata, METADATA_360_V2_POSE_PITCH, &pose_pitch_degrees_v2);
308         printf("pose_pitch_degrees_v2 = [%s]\n", pose_pitch_degrees_v2);
309         metadata_extractor_get_metadata(metadata, METADATA_360_V2_POSE_ROLL, &pose_roll_degrees_v2);
310         printf("pose_roll_degrees_v2 = [%s]\n", pose_roll_degrees_v2);
311         metadata_extractor_get_metadata(metadata, METADATA_360_V2_CBMP_LAYOUT, &cbmp_layout_v2);
312         printf("cbmp_layout_v2 = [%s]\n", cbmp_layout_v2);
313         metadata_extractor_get_metadata(metadata, METADATA_360_V2_CBMP_PADDING, &cbmp_padding_v2);
314         printf("cbmp_padding_v2 = [%s]\n", cbmp_padding_v2);
315         metadata_extractor_get_metadata(metadata, METADATA_360_V2_EQUI_BOUNDS_TOP, &equi_projection_bounds_top_v2);
316         printf("equi_projection_bounds_top_v2 = [%s]\n", equi_projection_bounds_top_v2);
317         metadata_extractor_get_metadata(metadata, METADATA_360_V2_EQUI_BOUNDS_BOTTOM, &equi_projection_bounds_bottom_v2);
318         printf("equi_projection_bounds_bottom_v2 = [%s]\n", equi_projection_bounds_bottom_v2);
319         metadata_extractor_get_metadata(metadata, METADATA_360_V2_EQUI_BOUNDS_LEFT, &equi_projection_bounds_left_v2);
320         printf("equi_projection_bounds_left_v2 = [%s]\n", equi_projection_bounds_left_v2);
321         metadata_extractor_get_metadata(metadata, METADATA_360_V2_EQUI_BOUNDS_RIGHT, &equi_projection_bounds_right_v2);
322         printf("equi_projection_bounds_right_v2 = [%s]\n", equi_projection_bounds_right_v2);
323
324         metadata_extractor_get_metadata(metadata, METADATA_AMBISONIC_TYPE, &ambisonic_type);
325         printf("ambisonic_type = [%s]\n", ambisonic_type);
326         metadata_extractor_get_metadata(metadata, METADATA_AMBISONIC_FORMAT, &ambisonic_format);
327         printf("ambisonic_format = [%s]\n", ambisonic_format);
328         metadata_extractor_get_metadata(metadata, METADATA_AMBISONIC_ORDER, &ambisonic_order);
329         printf("ambisonic_order = [%s]\n", ambisonic_order);
330 #endif
331
332         metadata_extractor_get_metadata(metadata, METADATA_SYNCLYRICS_NUM, &synclyrics_num);
333         if (synclyrics_num) {
334                 int s_num = atoi(synclyrics_num);
335                 for (idx = 0; idx < s_num; idx++) {
336                         int ret = -1;
337                         ret = metadata_extractor_get_synclyrics(metadata, idx, &time_info, &lyrics);
338                         if (ret == 0)
339                                 printf("[%2d][%6ld][%s]\n", idx, time_info, lyrics);
340
341                         SAFE_FREE(lyrics);
342                 }
343         }
344
345         /*Get Artwork*/
346         metadata_extractor_get_artwork(metadata, &artwork, &artwork_size, &artwork_mime);
347         printf("artwork = [%p], artwork_size = [%d]\n", artwork, artwork_size);
348         printf("artwork_mime = [%s]\n", artwork_mime);
349 #if DUMP_ARTWORK_THUMBNAIL
350         if (artwork)
351                 __write_file(DUMP_ARTWORK_PATH, artwork, (size_t)artwork_size);
352 #endif
353
354         if (video_cnt > 0) {
355                 /*Get Thumbnail*/
356                 metadata_extractor_get_frame(metadata, &video_thumbnail, &video_thumbnail_len);
357                 printf("video_thumbnail[%p], video_thumbnail_len = [%d]\n\n", video_thumbnail, video_thumbnail_len);
358 #if DUMP_ARTWORK_THUMBNAIL
359                 if (video_thumbnail)
360                         __write_file(DUMP_THUMBNAIL_PATH, video_thumbnail, (size_t)video_thumbnail_len);
361 #endif
362
363                 /*Get Video frame at time, extract frame of 22.5 sec and not key frame*/
364                 metadata_extractor_get_frame_at_time(metadata, 22500, false, &video_frame, &video_frame_len);
365                 printf("video_frame[%p], video_frame_len = [%d]\n\n", video_frame, video_frame_len);
366         }
367
368         SAFE_FREE(audio_track_cnt);
369         SAFE_FREE(video_track_cnt);
370         SAFE_FREE(duration);
371         SAFE_FREE(audio_bitrate);
372         SAFE_FREE(audio_channel);
373         SAFE_FREE(audio_samplerate);
374         SAFE_FREE(audio_bitpersample);
375         SAFE_FREE(video_bitrate);
376         SAFE_FREE(video_fps);
377         SAFE_FREE(video_width);
378         SAFE_FREE(video_height);
379         SAFE_FREE(video_thumbnail);
380         SAFE_FREE(video_frame);
381
382         SAFE_FREE(artist);
383         SAFE_FREE(title);
384         SAFE_FREE(album);
385         SAFE_FREE(album_artist);
386         SAFE_FREE(genre);
387         SAFE_FREE(author);
388         SAFE_FREE(copyright);
389         SAFE_FREE(date);
390         SAFE_FREE(description);
391         SAFE_FREE(comment);
392         SAFE_FREE(artwork);
393         SAFE_FREE(artwork_mime);
394         SAFE_FREE(track_num);
395         SAFE_FREE(classification);
396         SAFE_FREE(rating);
397         SAFE_FREE(longitude);
398         SAFE_FREE(latitude);
399         SAFE_FREE(altitude);
400         SAFE_FREE(conductor);
401         SAFE_FREE(unsynclyrics);
402         SAFE_FREE(synclyrics_num);
403         SAFE_FREE(rec_date);
404         SAFE_FREE(rotate);
405         SAFE_FREE(audio_codec);
406         SAFE_FREE(video_codec);
407         SAFE_FREE(is_360);
408 #ifdef SUPPORT_GSPHERICAL_METADATA
409         SAFE_FREE(is_stitched_v1);
410         SAFE_FREE(stitching_software_v1);
411         SAFE_FREE(projection_type_v1);
412         SAFE_FREE(stereo_mode_v1);
413         SAFE_FREE(source_count_v1);
414         SAFE_FREE(initial_view_heading_degrees_v1);
415         SAFE_FREE(initial_view_pitch_degrees_v1);
416         SAFE_FREE(initial_view_roll_degrees_v1);
417         SAFE_FREE(timestamp_v1);
418         SAFE_FREE(full_pano_width_v1);
419         SAFE_FREE(full_pano_height_v1);
420         SAFE_FREE(cropped_area_image_width_v1);
421         SAFE_FREE(cropped_area_image_height_v1);
422         SAFE_FREE(cropped_area_left_v1);
423         SAFE_FREE(cropped_area_top_v1);
424
425         SAFE_FREE(stereo_mode_v2);
426         SAFE_FREE(metadata_source_v2);
427         SAFE_FREE(proj_type_v2);
428         SAFE_FREE(pose_yaw_degrees_v2);
429         SAFE_FREE(pose_pitch_degrees_v2);
430         SAFE_FREE(pose_roll_degrees_v2);
431         SAFE_FREE(cbmp_layout_v2);
432         SAFE_FREE(cbmp_padding_v2);
433         SAFE_FREE(equi_projection_bounds_top_v2);
434         SAFE_FREE(equi_projection_bounds_bottom_v2);
435         SAFE_FREE(equi_projection_bounds_left_v2);
436         SAFE_FREE(equi_projection_bounds_right_v2);
437
438         SAFE_FREE(ambisonic_type);
439         SAFE_FREE(ambisonic_format);
440         SAFE_FREE(ambisonic_order);
441 #endif
442
443         return true;
444
445 }
446
447 int main(int argc, char *argv[])
448 {
449         int ret = METADATA_EXTRACTOR_ERROR_NONE;
450         metadata_extractor_h metadata;
451         int idx = 0;
452         int cnt = argc - 1;
453         bool file_test = true;
454         /* bool file_test = false; */
455         long file_size = 0;
456         unsigned char *buffer = NULL;
457
458         printf("--- metadata extractor test start ---\n\n");
459
460         if (cnt < 1) {
461                 printf("type file path plz. [%d]\n", cnt);
462                 return 0;
463         }
464
465         ret = metadata_extractor_create(&metadata);
466         if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
467                 printf("Fail metadata_extractor_create [%d]\n", ret);
468                 return 0;
469         }
470
471         for (idx = 0; idx < cnt; idx++) {
472                 if (!_is_file_exist(argv[idx + 1])) {
473                         printf("there is no file [%s]\n", argv[idx + 1]);
474                         goto exception;
475                 }
476
477                 if (file_test) {
478                         printf("Extract meta from file-----------------------\n");
479                         ret = metadata_extractor_set_path(metadata, argv[idx + 1]);
480                         if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
481                                 printf("Fail metadata_extractor_set_path [%d]\n", ret);
482                                 goto exception;
483                         }
484                 } else {
485                         printf("Extract meta from memory-----------------------\n");
486                         /* Read file */
487                         READ_FROM_FILE(argv[idx + 1], buffer, file_size);
488
489                         if (file_size >= INT_MAX) {
490                                 printf("File_size[%ld] is too big\n", file_size);
491                                 goto exception;
492                         }
493
494                         ret = metadata_extractor_set_buffer(metadata, buffer, (int)file_size);
495                         if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
496                                 printf("Fail metadata_extractor_set_buffer [%d]\n", ret);
497                                 goto exception;
498                         }
499                 }
500
501                 __capi_metadata_extractor(metadata);
502                 SAFE_FREE(buffer);
503                 printf("--------------------------------------------\n");
504
505         }
506
507 exception:
508         ret = metadata_extractor_destroy(metadata);
509         printf("metadata_extractor_destroy [%d]\n", ret);
510         SAFE_FREE(buffer);
511         printf("--- metadata extractor test end ---\n\n");
512
513         return 0;
514
515 }