From: hj kim Date: Wed, 19 Sep 2018 05:52:53 +0000 (+0900) Subject: Code refactoring X-Git-Tag: submit/tizen/20180919.063447^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5cd2da7729e5589028a9dd81474fccc784ea15ee;p=platform%2Fcore%2Fapi%2Fmetadata-extractor.git Code refactoring Change-Id: Id176b97081d51452420743bf9680c91e88db85b1 --- diff --git a/include/metadata_extractor_private.h b/include/metadata_extractor_private.h index a26fe52..fd9a03c 100755 --- a/include/metadata_extractor_private.h +++ b/include/metadata_extractor_private.h @@ -32,6 +32,7 @@ extern "C" { #define LOG_TAG "CAPI_MEDIA_METADATA_EXTRACTOR" #define SAFE_FREE(src) { if (src) {free(src); src = NULL; } } +#define ME_STRING_VALID(str) ((str != NULL && strlen(str) > 0) ? TRUE : FALSE) #define metadata_extractor_debug(fmt, arg...) do { \ LOGD(""fmt"", ##arg); \ diff --git a/src/metadata_extractor.c b/src/metadata_extractor.c index 51b7a96..2de7779 100755 --- a/src/metadata_extractor.c +++ b/src/metadata_extractor.c @@ -23,7 +23,6 @@ #define META_MAX_LEN 256 - typedef enum { METADATA_TYPE_STREAM = 0, METADATA_TYPE_ATTR, @@ -37,78 +36,12 @@ static int __metadata_extractor_create_tag_attr(metadata_extractor_s *metadata, static int __metadata_extractor_create_content_attrs_from_buffer(metadata_extractor_s *metadata, const void *buffer, int size); static int __metadata_extractor_create_tag_attrs_from_buffer(metadata_extractor_s *metadata, const void *buffer, int size); static int __metadata_extractor_get_artwork(metadata_extractor_s *metadata, void **artwork, int *artwork_size); -static int __metadata_extractor_get_artwork_mime(metadata_extractor_s *metadata, char **artwork_mime); static int __metadata_extractor_get_video_thumbnail(metadata_extractor_s *metadata, void **thumbnail, int *thumbnail_len); -static int __metadata_extractor_get_duration(metadata_extractor_s *metadata, int *duration); -static int __metadata_extractor_get_audio_bitrate(metadata_extractor_s *metadata, int *bitrate); -static int __metadata_extractor_get_audio_channel(metadata_extractor_s *metadata, int *channel); -static int __metadata_extractor_get_audio_samplerate(metadata_extractor_s *metadata, int *samplerate); static int __metadata_extractor_get_audio_track_count(metadata_extractor_s *metadata, int *track_cnt); -static int __metadata_extractor_get_video_bitrate(metadata_extractor_s *metadata, int *bitrate); -static int __metadata_extractor_get_video_FPS(metadata_extractor_s *metadata, int *fps); -static int __metadata_extractor_get_video_width(metadata_extractor_s *metadata, int *width); -static int __metadata_extractor_get_video_height(metadata_extractor_s *metadata, int *height); static int __metadata_extractor_get_video_track_count(metadata_extractor_s *metadata, int *track_cnt); -static int __metadata_extractor_get_artist(metadata_extractor_s *metadata, char **artist); -static int __metadata_extractor_get_title(metadata_extractor_s *metadata, char **title); -static int __metadata_extractor_get_album(metadata_extractor_s *metadata, char **album); -static int __metadata_extractor_get_album_artist(metadata_extractor_s *metadata, char **album_artist); -static int __metadata_extractor_get_genre(metadata_extractor_s *metadata, char **genre); -static int __metadata_extractor_get_author(metadata_extractor_s *metadata, char **author); -static int __metadata_extractor_get_copyright(metadata_extractor_s *metadata, char **copyright); -static int __metadata_extractor_get_date(metadata_extractor_s *metadata, char **date); -static int __metadata_extractor_get_description(metadata_extractor_s *metadata, char **description); -static int __metadata_extractor_get_comment(metadata_extractor_s *metadata, char **comment); -static int __metadata_extractor_get_track_num(metadata_extractor_s *metadata, char **track_num); -static int __metadata_extractor_get_classification(metadata_extractor_s *metadata, char **classification); -static int __metadata_extractor_get_rating(metadata_extractor_s *metadata, char **rating); -static int __metadata_extractor_get_longitude(metadata_extractor_s *metadata, double *longitude); -static int __metadata_extractor_get_latitude(metadata_extractor_s *metadata, double *latitude); -static int __metadata_extractor_get_altitude(metadata_extractor_s *metadata, double *altitude); -static int __metadata_extractor_get_conductor(metadata_extractor_s *metadata, char **conductor); -static int __metadata_extractor_get_unsynclyrics(metadata_extractor_s *metadata, char **unsynclyrics); -static int __metadata_extractor_get_recording_date(metadata_extractor_s *metadata, char **rec_date); -static int __metadata_extractor_get_rotate(metadata_extractor_s *metadata, char **rotate); -static int __metadata_extractor_get_synclyrics_pair_num(metadata_extractor_s *metadata, int *synclyrics_num); static int __metadata_extractor_destroy_handle(metadata_extractor_s *metadata); static int __metadata_extractor_get_audio_codec(metadata_extractor_s *metadata, char **audio_codec); static int __metadata_extractor_get_video_codec(metadata_extractor_s *metadata, char **video_codec); -static int __metadata_extractor_get_is_360(metadata_extractor_s *metadata, int *is_360); - -#ifdef SUPPORT_GSPHERICAL_METADATA -static int __metadata_extractor_get_is_stitched_v1(metadata_extractor_s *metadata, int *is_stitched); -static int __metadata_extractor_get_projection_type_v1(metadata_extractor_s *metadata, char **projection_type); -static int __metadata_extractor_get_stitching_software_v1(metadata_extractor_s *metadata, char **stitching_software); -static int __metadata_extractor_get_stereo_mode_v1(metadata_extractor_s *metadata, char **stereo_mode); -static int __metadata_extractor_get_source_count_v1(metadata_extractor_s *metadata, int *source_count); -static int __metadata_extractor_get_initial_view_heading_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_heading_degrees); -static int __metadata_extractor_get_initial_view_pitch_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_pitch_degrees); -static int __metadata_extractor_get_initial_view_roll_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_roll_degrees); -static int __metadata_extractor_get_timestamp_v1(metadata_extractor_s *metadata, int *timestamp); -static int __metadata_extractor_get_full_pano_width_pixels_v1(metadata_extractor_s *metadata, int *full_pano_width_pixels); -static int __metadata_extractor_get_full_pano_height_pixels_v1(metadata_extractor_s *metadata, int *full_pano_height_pixels); -static int __metadata_extractor_get_cropped_area_image_width_v1(metadata_extractor_s *metadata, int *cropped_area_image_width); -static int __metadata_extractor_get_cropped_area_image_height_v1(metadata_extractor_s *metadata, int *cropped_area_image_height); -static int __metadata_extractor_get_cropped_area_left_v1(metadata_extractor_s *metadata, int *cropped_area_left); -static int __metadata_extractor_get_cropped_area_top_v1(metadata_extractor_s *metadata, int *cropped_area_top); - -static int __metadata_extractor_get_stereo_mode_v2(metadata_extractor_s *metadata, int *stereo_mode_v2); -static int __metadata_extractor_get_proj_type_v2(metadata_extractor_s *metadata, int *proj_type_v2); -static int __metadata_extractor_get_metadata_source_v2(metadata_extractor_s *metadata, char **metadata_source_v2); -static int __metadata_extractor_get_pose_yaw_degrees_v2(metadata_extractor_s *metadata, int *pose_yaw_degrees_v2); -static int __metadata_extractor_get_pose_pitch_degrees_v2(metadata_extractor_s *metadata, int *pose_pitch_degrees_v2); -static int __metadata_extractor_get_pose_roll_degrees_v2(metadata_extractor_s *metadata, int *pose_roll_degrees_v2); -static int __metadata_extractor_get_cbmp_layout_v2(metadata_extractor_s *metadata, int *cbmp_layout_v2); -static int __metadata_extractor_get_cbmp_padding_v2(metadata_extractor_s *metadata, int *cbmp_padding_v2); -static int __metadata_extractor_get_equi_projection_bounds_top_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_top_v2); -static int __metadata_extractor_get_equi_projection_bounds_bottom_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_bottom_v2); -static int __metadata_extractor_get_equi_projection_bounds_left_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_left_v2); -static int __metadata_extractor_get_equi_projection_bounds_right_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_right_v2); - -static int __metadata_extractor_get_ambisonic_type(metadata_extractor_s *metadata, int *ambisonic_type); -static int __metadata_extractor_get_ambisonic_format(metadata_extractor_s *metadata, int *ambisonic_format); -static int __metadata_extractor_get_ambisonic_order(metadata_extractor_s *metadata, int *ambisonic_order); -#endif static int __metadata_extractor_check_and_extract_meta(metadata_extractor_s *metadata, metadata_extractor_type_e metadata_type) { @@ -161,1285 +94,401 @@ static int __metadata_extractor_check_and_extract_meta(metadata_extractor_s *met } else { metadata_extractor_error("INVALID_PARAMETER(%d)", metadata_type); return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER; - } - - return ret; -} - -static int __metadata_extractor_get_stream_info(metadata_extractor_s *metadata, const char *path) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - int _audio_track_cnt = 0; - int _video_track_cnt = 0; - - ret = mm_file_get_stream_info(path, &_audio_track_cnt, &_video_track_cnt); - - if (ret != FILEINFO_ERROR_NONE) { - if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { - metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); - return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; - } else { - metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); - return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; - } - } - - metadata->audio_track_cnt = _audio_track_cnt; - metadata->video_track_cnt = _video_track_cnt; - - return ret; -} - -static int __metadata_extractor_create_content_attrs(metadata_extractor_s *metadata, const char *path) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - MMHandleType content = 0; - char *err_attr_name = NULL; - - int _audio_track_cnt = 0; - int _video_track_cnt = 0; - - ret = mm_file_create_content_attrs(&content, path); - - if (ret != FILEINFO_ERROR_NONE) { - if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { - metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); - return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; - } else { - metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); - return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; - } - } - - ret = mm_file_get_attrs(content, &err_attr_name, - MM_FILE_CONTENT_VIDEO_TRACK_COUNT, &_video_track_cnt, - MM_FILE_CONTENT_AUDIO_TRACK_COUNT, &_audio_track_cnt, - NULL); - - if (ret != FILEINFO_ERROR_NONE) { - metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); - SAFE_FREE(err_attr_name); - mm_file_destroy_content_attrs(content); - return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; - } - - metadata->attr_h = content; - metadata->audio_track_cnt = _audio_track_cnt; - metadata->video_track_cnt = _video_track_cnt; - - return ret; - -} - - -static int __metadata_extractor_create_tag_attr(metadata_extractor_s *metadata, const char *path) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - MMHandleType tag = 0; - - ret = mm_file_create_tag_attrs(&tag, path); - - if (ret != FILEINFO_ERROR_NONE) { - if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { - metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); - return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; - } else { - metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); - return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; - } - } - - metadata->tag_h = tag; - - return ret; - -} - -static int __metadata_extractor_create_content_attrs_from_buffer(metadata_extractor_s *metadata, const void *buffer, int size) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - MMHandleType content = 0; - char *err_attr_name = NULL; - - int _audio_track_cnt = 0; - int _video_track_cnt = 0; - - ret = mm_file_create_content_attrs_from_memory(&content, buffer, size, 0); - - if (ret != FILEINFO_ERROR_NONE) { - if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { - metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); - return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; - } else { - metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); - return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; - } - } - - ret = mm_file_get_attrs(content, &err_attr_name, - MM_FILE_CONTENT_VIDEO_TRACK_COUNT, &_video_track_cnt, - MM_FILE_CONTENT_AUDIO_TRACK_COUNT, &_audio_track_cnt, - NULL); - - if (ret != FILEINFO_ERROR_NONE) { - metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); - SAFE_FREE(err_attr_name); - mm_file_destroy_content_attrs(content); - return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; - } - - metadata->attr_h = content; - metadata->audio_track_cnt = _audio_track_cnt; - metadata->video_track_cnt = _video_track_cnt; - - return ret; - -} - -static int __metadata_extractor_create_tag_attrs_from_buffer(metadata_extractor_s *metadata, const void *buffer, int size) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - MMHandleType tag = 0; - - ret = mm_file_create_tag_attrs_from_memory(&tag, buffer, size, 0); - - if (ret != FILEINFO_ERROR_NONE) { - if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { - metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); - return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; - } else { - metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); - return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; - } - } - - metadata->tag_h = tag; - - return ret; - -} - -static int __metadata_extractor_get_duration(metadata_extractor_s *metadata, int *duration) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _duration = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_DURATION, &_duration, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *duration = _duration; - - return ret; -} - -static int __metadata_extractor_get_audio_bitrate(metadata_extractor_s *metadata, int *bitrate) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _audio_bitrate = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->audio_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_AUDIO_BITRATE, &_audio_bitrate, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *bitrate = _audio_bitrate; - - return ret; -} - -static int __metadata_extractor_get_audio_channel(metadata_extractor_s *metadata, int *channel) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _audio_channel = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->audio_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_AUDIO_CHANNELS, &_audio_channel, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *channel = _audio_channel; - - return ret; -} - -static int __metadata_extractor_get_audio_samplerate(metadata_extractor_s *metadata, int *samplerate) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _audio_samplerate = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->audio_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_AUDIO_SAMPLERATE, &_audio_samplerate, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *samplerate = _audio_samplerate; - - return ret; -} - -static int __metadata_extractor_get_audio_bitpersample(metadata_extractor_s *metadata, int *bitpersample) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _audio_bit_per_sample = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->audio_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_AUDIO_BITPERSAMPLE, &_audio_bit_per_sample, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *bitpersample = _audio_bit_per_sample; - - return ret; -} - -static int __metadata_extractor_get_audio_track_count(metadata_extractor_s *metadata, int *track_cnt) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - - metadata_extractor_retvm_if(!metadata, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - *track_cnt = metadata->audio_track_cnt; - - return ret; -} - -static int __metadata_extractor_get_video_bitrate(metadata_extractor_s *metadata, int *bitrate) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _video_bitrate = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->video_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_VIDEO_BITRATE, &_video_bitrate, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - *bitrate = _video_bitrate; - - return ret; -} - -static int __metadata_extractor_get_video_FPS(metadata_extractor_s *metadata, int *fps) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _video_fps = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->video_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_VIDEO_FPS, &_video_fps, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *fps = _video_fps; - - return ret; -} - -static int __metadata_extractor_get_video_width(metadata_extractor_s *metadata, int *width) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _video_width = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->video_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_VIDEO_WIDTH, &_video_width, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *width = _video_width; - - return ret; -} - -static int __metadata_extractor_get_video_height(metadata_extractor_s *metadata, int *height) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _video_height = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->video_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_VIDEO_HEIGHT, &_video_height, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *height = _video_height; - - return ret; -} - -static int __metadata_extractor_get_video_thumbnail(metadata_extractor_s *metadata, void **thumbnail, int *thumbnail_len) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - void *_video_thumbnail = NULL; - int _video_thumbnail_len = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->video_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_VIDEO_THUMBNAIL, &_video_thumbnail, &_video_thumbnail_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *thumbnail = _video_thumbnail; - *thumbnail_len = _video_thumbnail_len; - - return ret; -} - -static int __metadata_extractor_get_video_track_count(metadata_extractor_s *metadata, int *track_cnt) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - - metadata_extractor_retvm_if(!metadata, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - *track_cnt = metadata->video_track_cnt; - - return ret; -} - -static int __metadata_extractor_get_artist(metadata_extractor_s *metadata, char **artist) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_artist = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ARTIST, &_artist, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *artist = _artist; - - return ret; -} - -static int __metadata_extractor_get_title(metadata_extractor_s *metadata, char **title) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_title = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_TITLE, &_title, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *title = _title; - - return ret; -} - -static int __metadata_extractor_get_album(metadata_extractor_s *metadata, char **album) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_album = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ALBUM, &_album, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *album = _album; - - return ret; -} - -static int __metadata_extractor_get_album_artist(metadata_extractor_s *metadata, char **album_artist) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_album_artist = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ALBUM_ARTIST, &_album_artist, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *album_artist = _album_artist; - - return ret; -} - -static int __metadata_extractor_get_genre(metadata_extractor_s *metadata, char **genre) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_genre = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_GENRE, &_genre, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *genre = _genre; - - return ret; -} - -static int __metadata_extractor_get_author(metadata_extractor_s *metadata, char **author) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_author = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_AUTHOR, &_author, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *author = _author; - - return ret; -} - -static int __metadata_extractor_get_copyright(metadata_extractor_s *metadata, char **copyright) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_copyright = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_COPYRIGHT, &_copyright, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *copyright = _copyright; - - return ret; -} - -static int __metadata_extractor_get_date(metadata_extractor_s *metadata, char **date) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_date = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_DATE, &_date, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *date = _date; - - return ret; -} - -static int __metadata_extractor_get_description(metadata_extractor_s *metadata, char **description) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_description = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_DESCRIPTION, &_description, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *description = _description; - - return ret; -} - -static int __metadata_extractor_get_comment(metadata_extractor_s *metadata, char **comment) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_comment = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_COMMENT, &_comment, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *comment = _comment; - - return ret; -} - -static int __metadata_extractor_get_artwork(metadata_extractor_s *metadata, void **artwork, int *artwork_size) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - void *_artwork = NULL; - int _artwork_size = 0; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ARTWORK_SIZE, &_artwork_size, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - if (_artwork_size > 0) { - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ARTWORK, &_artwork, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - *artwork = _artwork; - *artwork_size = _artwork_size; - - return ret; -} - -static int __metadata_extractor_get_artwork_mime(metadata_extractor_s *metadata, char **artwork_mime) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_artwork_mime = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ARTWORK_MIME, &_artwork_mime, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *artwork_mime = _artwork_mime; - - return ret; -} - - -static int __metadata_extractor_get_track_num(metadata_extractor_s *metadata, char **track_num) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_track_num = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_TRACK_NUM, &_track_num, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *track_num = _track_num; - - return ret; -} - -static int __metadata_extractor_get_classification(metadata_extractor_s *metadata, char **classification) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_classification = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_CLASSIFICATION, &_classification, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *classification = _classification; - - return ret; -} - -static int __metadata_extractor_get_rating(metadata_extractor_s *metadata, char **rating) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_rating = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_RATING, &_rating, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *rating = _rating; - - return ret; -} - -static int __metadata_extractor_get_longitude(metadata_extractor_s *metadata, double *longitude) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - double _longitude = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_LONGITUDE, &_longitude, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *longitude = _longitude; - - return ret; -} - -static int __metadata_extractor_get_latitude(metadata_extractor_s *metadata, double *latitude) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - double _latitude = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_LATIDUE, &_latitude, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *latitude = _latitude; - - return ret; -} - -static int __metadata_extractor_get_altitude(metadata_extractor_s *metadata, double *altitude) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - double _altitude = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ALTIDUE, &_altitude, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *altitude = _altitude; - - return ret; -} - -static int __metadata_extractor_get_conductor(metadata_extractor_s *metadata, char **conductor) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_conductor = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_CONDUCTOR, &_conductor, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *conductor = _conductor; - - return ret; -} -static int __metadata_extractor_get_unsynclyrics(metadata_extractor_s *metadata, char **unsynclyrics) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_unsynclyrics = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_UNSYNCLYRICS, &_unsynclyrics, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *unsynclyrics = _unsynclyrics; - - return ret; -} - -static int __metadata_extractor_get_recording_date(metadata_extractor_s *metadata, char **rec_date) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_rec_date = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_RECDATE, &_rec_date, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *rec_date = _rec_date; - - return ret; -} - -static int __metadata_extractor_get_rotate(metadata_extractor_s *metadata, char **rotate) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_rotate = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ROTATE, &_rotate, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *rotate = _rotate; - - return ret; -} - -static int __metadata_extractor_get_synclyrics_pair_num(metadata_extractor_s *metadata, int *synclyrics_num) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _synclyrics_num = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SYNCLYRICS_NUM, &_synclyrics_num, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *synclyrics_num = _synclyrics_num; - - return ret; -} - -static int __metadata_extractor_get_audio_codec(metadata_extractor_s *metadata, char **audio_codec) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int audio_codec_idx = 0; - int audio_codec_cnt = 45; - - const char *AudioCodecTypeString[] = { - "AMR", "G723.1", "MP3", "OGG", "AAC", "WMA", "MMF", "ADPCM", "WAVE", "WAVE NEW", "MIDI", "IMELODY", "MXMF", "MPEG1-Layer1 codec", "MPEG1-Layer2 codec", - "G711", "G722", "G722.1", "G722.2 (AMR-WB)", "G723 wideband speech", "G726 (ADPCM)", "G728 speech", "G729", "G729a", "G729.1", - "Real", - "AAC-Low complexity", "AAC-Main profile", "AAC-Scalable sample rate", "AAC-Long term prediction", "AAC-High Efficiency v1", "AAC-High efficiency v2", - "DolbyDigital", "Apple Lossless", "Sony proprietary", "SPEEX", "Vorbis", "AIFF", "AU", "None (will be deprecated)", - "PCM", "ALAW", "MULAW", "MS ADPCM", "FLAC" - }; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->audio_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_AUDIO_CODEC, &audio_codec_idx, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - if (audio_codec_idx < audio_codec_cnt) - *audio_codec = strdup(AudioCodecTypeString[audio_codec_idx]); - else { - metadata_extractor_error("Invalid Audio Codec [%d]", audio_codec_idx); - *audio_codec = NULL; - } - - return ret; -} - -static int __metadata_extractor_get_video_codec(metadata_extractor_s *metadata, char **video_codec) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int video_codec_idx = 0; - int video_codec_cnt = 29; - - const char *VideoCodecTypeString[] = { - "None (will be deprecated)", - "H263", "H264", "H26L", "MPEG4", "MPEG1", "WMV", "DIVX", "XVID", "H261", "H262/MPEG2-part2", "H263v2", "H263v3", - "Motion JPEG", "MPEG2", "MPEG4 part-2 Simple profile", "MPEG4 part-2 Advanced Simple profile", "MPEG4 part-2 Main profile", - "MPEG4 part-2 Core profile", "MPEG4 part-2 Adv Coding Eff profile", "MPEG4 part-2 Adv RealTime Simple profile", - "MPEG4 part-10 (h.264)", "Real", "VC-1", "AVS", "Cinepak", "Indeo", "Theora", "Flv" - }; - - metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - if (metadata->video_track_cnt > 0) { - ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_VIDEO_CODEC, &video_codec_idx, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - } - - if (video_codec_idx < video_codec_cnt) - *video_codec = strdup(VideoCodecTypeString[video_codec_idx]); - else { - metadata_extractor_error("Invalid Video Codec[%d]", video_codec_idx); - *video_codec = NULL; - } - - return ret; -} - -static int __metadata_extractor_get_is_360(metadata_extractor_s *metadata, int *is_360) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _is_360 = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL, &_is_360, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *is_360 = _is_360; - - return ret; -} - -#ifdef SUPPORT_GSPHERICAL_METADATA -static int __metadata_extractor_get_is_stitched_v1(metadata_extractor_s *metadata, int *is_stitched) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _is_stitched = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_STITCHED, &_is_stitched, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *is_stitched = _is_stitched; - - return ret; -} - -static int __metadata_extractor_get_projection_type_v1(metadata_extractor_s *metadata, char **projection_type) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_projection_type = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_PROJECTION_TYPE, &_projection_type, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *projection_type = _projection_type; - - return ret; -} - -static int __metadata_extractor_get_stitching_software_v1(metadata_extractor_s *metadata, char **stitching_software) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_stitching_software = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_STITCHING_SOFTWARE, &_stitching_software, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *stitching_software = _stitching_software; - - return ret; -} - -static int __metadata_extractor_get_stereo_mode_v1(metadata_extractor_s *metadata, char **stereo_mode) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - char *_stereo_mode = NULL; - int _tag_len = 0; - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_STEREO_MODE, &_stereo_mode, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *stereo_mode = _stereo_mode; - - return ret; -} - -static int __metadata_extractor_get_source_count_v1(metadata_extractor_s *metadata, int *source_count) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _source_count = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_SOURCE_COUNT, &_source_count, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *source_count = _source_count; - - return ret; -} - -static int __metadata_extractor_get_initial_view_heading_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_heading_degrees) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _initial_view_heading_degrees = -1; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_INIT_VIEW_HEADING, &_initial_view_heading_degrees, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *initial_view_heading_degrees = _initial_view_heading_degrees; - - return ret; -} - -static int __metadata_extractor_get_initial_view_pitch_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_pitch_degrees) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _initial_view_pitch_degrees = -1; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_INIT_VIEW_PITCH, &_initial_view_pitch_degrees, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *initial_view_pitch_degrees = _initial_view_pitch_degrees; + } return ret; } -static int __metadata_extractor_get_initial_view_roll_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_roll_degrees) +static int __metadata_extractor_get_stream_info(metadata_extractor_s *metadata, const char *path) { int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _initial_view_roll_degrees = -1; + int _audio_track_cnt = 0; + int _video_track_cnt = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + ret = mm_file_get_stream_info(path, &_audio_track_cnt, &_video_track_cnt); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_INIT_VIEW_ROLL, &_initial_view_roll_degrees, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + if (ret != FILEINFO_ERROR_NONE) { + if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { + metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); + return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; + } else { + metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); + return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; + } + } - *initial_view_roll_degrees = _initial_view_roll_degrees; + metadata->audio_track_cnt = _audio_track_cnt; + metadata->video_track_cnt = _video_track_cnt; return ret; } -static int __metadata_extractor_get_timestamp_v1(metadata_extractor_s *metadata, int *timestamp) +static int __metadata_extractor_create_content_attrs(metadata_extractor_s *metadata, const char *path) { int ret = METADATA_EXTRACTOR_ERROR_NONE; + MMHandleType content = 0; char *err_attr_name = NULL; - int _timestamp = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_TIMESTAMP, &_timestamp, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *timestamp = _timestamp; + int _audio_track_cnt = 0; + int _video_track_cnt = 0; - return ret; -} + ret = mm_file_create_content_attrs(&content, path); -static int __metadata_extractor_get_full_pano_width_pixels_v1(metadata_extractor_s *metadata, int *full_pano_width_pixels) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _full_pano_width_pixels = 0; + if (ret != FILEINFO_ERROR_NONE) { + if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { + metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); + return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; + } else { + metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); + return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; + } + } - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + ret = mm_file_get_attrs(content, &err_attr_name, + MM_FILE_CONTENT_VIDEO_TRACK_COUNT, &_video_track_cnt, + MM_FILE_CONTENT_AUDIO_TRACK_COUNT, &_audio_track_cnt, + NULL); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_FULL_PANO_WIDTH, &_full_pano_width_pixels, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + if (ret != FILEINFO_ERROR_NONE) { + metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); + SAFE_FREE(err_attr_name); + mm_file_destroy_content_attrs(content); + return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; + } - *full_pano_width_pixels = _full_pano_width_pixels; + metadata->attr_h = content; + metadata->audio_track_cnt = _audio_track_cnt; + metadata->video_track_cnt = _video_track_cnt; return ret; -} - -static int __metadata_extractor_get_full_pano_height_pixels_v1(metadata_extractor_s *metadata, int *full_pano_height_pixels) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _full_pano_height_pixels = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_FULL_PANO_HEIGHT, &_full_pano_height_pixels, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *full_pano_height_pixels = _full_pano_height_pixels; - - return ret; } -static int __metadata_extractor_get_cropped_area_image_width_v1(metadata_extractor_s *metadata, int *cropped_area_image_width) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _cropped_area_image_width = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_CROPPED_AREA_IMAGE_WIDTH, &_cropped_area_image_width, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *cropped_area_image_width = _cropped_area_image_width; - - return ret; -} -static int __metadata_extractor_get_cropped_area_image_height_v1(metadata_extractor_s *metadata, int *cropped_area_image_height) +static int __metadata_extractor_create_tag_attr(metadata_extractor_s *metadata, const char *path) { int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _cropped_area_image_height = 0; + MMHandleType tag = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + ret = mm_file_create_tag_attrs(&tag, path); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_CROPPED_AREA_IMAGE_HEIGHT, &_cropped_area_image_height, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + if (ret != FILEINFO_ERROR_NONE) { + if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { + metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); + return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; + } else { + metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); + return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; + } + } - *cropped_area_image_height = _cropped_area_image_height; + metadata->tag_h = tag; return ret; -} - -static int __metadata_extractor_get_cropped_area_left_v1(metadata_extractor_s *metadata, int *cropped_area_left) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _cropped_area_left = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_CROPPED_AREA_LEFT, &_cropped_area_left, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *cropped_area_left = _cropped_area_left; - return ret; } -static int __metadata_extractor_get_cropped_area_top_v1(metadata_extractor_s *metadata, int *cropped_area_top) +static int __metadata_extractor_create_content_attrs_from_buffer(metadata_extractor_s *metadata, const void *buffer, int size) { int ret = METADATA_EXTRACTOR_ERROR_NONE; + MMHandleType content = 0; char *err_attr_name = NULL; - int _cropped_area_top = 0; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_CROPPED_AREA_TOP, &_cropped_area_top, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - *cropped_area_top = _cropped_area_top; + int _audio_track_cnt = 0; + int _video_track_cnt = 0; - return ret; -} + ret = mm_file_create_content_attrs_from_memory(&content, buffer, size, 0); -static int __metadata_extractor_get_ambisonic_type(metadata_extractor_s *metadata, int *ambisonic_type) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _ambisonic_type = -1; - *ambisonic_type = -1; + if (ret != FILEINFO_ERROR_NONE) { + if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { + metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); + return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; + } else { + metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); + return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; + } + } - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + ret = mm_file_get_attrs(content, &err_attr_name, + MM_FILE_CONTENT_VIDEO_TRACK_COUNT, &_video_track_cnt, + MM_FILE_CONTENT_AUDIO_TRACK_COUNT, &_audio_track_cnt, + NULL); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_AMBISONIC_TYPE, &_ambisonic_type, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + if (ret != FILEINFO_ERROR_NONE) { + metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); + SAFE_FREE(err_attr_name); + mm_file_destroy_content_attrs(content); + return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; + } - *ambisonic_type = _ambisonic_type; + metadata->attr_h = content; + metadata->audio_track_cnt = _audio_track_cnt; + metadata->video_track_cnt = _video_track_cnt; return ret; -} - -static int __metadata_extractor_get_ambisonic_format(metadata_extractor_s *metadata, int *ambisonic_format) -{ - int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _ambisonic_format = -1; - *ambisonic_format = -1; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_AMBISONIC_FORMAT, &_ambisonic_format, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - - *ambisonic_format = _ambisonic_format; - return ret; } -static int __metadata_extractor_get_ambisonic_order(metadata_extractor_s *metadata, int *ambisonic_order) +static int __metadata_extractor_create_tag_attrs_from_buffer(metadata_extractor_s *metadata, const void *buffer, int size) { int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _ambisonic_order = -1; - *ambisonic_order = -1; + MMHandleType tag = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + ret = mm_file_create_tag_attrs_from_memory(&tag, buffer, size, 0); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_AMBISONIC_ORDER, &_ambisonic_order, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + if (ret != FILEINFO_ERROR_NONE) { + if (ret == FILEINFO_ERROR_FILE_NOT_FOUND) { + metadata_extractor_error("FILE_NOT_EXISTS(0x%08x)", METADATA_EXTRACTOR_ERROR_FILE_EXISTS); + return METADATA_EXTRACTOR_ERROR_FILE_EXISTS; + } else { + metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret); + return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED; + } + } - *ambisonic_order = _ambisonic_order; + metadata->tag_h = tag; return ret; + } -static int __metadata_extractor_get_stereo_mode_v2(metadata_extractor_s *metadata, int *stereo_mode_v2) +static int __metadata_extractor_get_attr_int(metadata_extractor_s *metadata, const char *attribute_name, int *attr) { int ret = METADATA_EXTRACTOR_ERROR_NONE; char *err_attr_name = NULL; - int _stereo_mode_v2 = -1; - *stereo_mode_v2 = -1; + int _attr = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata->attr_h == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Attr handle is null"); + metadata_extractor_retvm_if(!ME_STRING_VALID(attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid attribute_name"); + metadata_extractor_retvm_if(attr == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "attr is null"); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_STEREO_MODE, &_stereo_mode_v2, NULL); + ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, attribute_name, &_attr, NULL); metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - *stereo_mode_v2 = _stereo_mode_v2; + *attr = _attr; return ret; } -static int __metadata_extractor_get_metadata_source_v2(metadata_extractor_s *metadata, char **metadata_source_v2) +static int __metadata_extractor_get_audio_attr_int(metadata_extractor_s *metadata, const char *attribute_name, int *attr) { int ret = METADATA_EXTRACTOR_ERROR_NONE; char *err_attr_name = NULL; - char *_metadata_source_v2 = NULL; - int _tag_len = 0; + int _attr = 0; - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_METADATA_SOURCE, &_metadata_source_v2, &_tag_len, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + metadata_extractor_retvm_if(metadata == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata->attr_h == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Attr handle is null"); + metadata_extractor_retvm_if(!ME_STRING_VALID(attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid attribute_name"); + metadata_extractor_retvm_if(attr == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "attr is null"); + + if (metadata->audio_track_cnt > 0) { + ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, attribute_name, &_attr, NULL); + metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + } - *metadata_source_v2 = _metadata_source_v2; + *attr = _attr; return ret; } -static int __metadata_extractor_get_proj_type_v2(metadata_extractor_s *metadata, int *proj_type_v2) +static int __metadata_extractor_get_video_attr_int(metadata_extractor_s *metadata, const char *attribute_name, int *attr) { int ret = METADATA_EXTRACTOR_ERROR_NONE; char *err_attr_name = NULL; - int _proj_type_v2 = -1; - *proj_type_v2 = -1; + int _attr = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata->attr_h == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Attr handle is null"); + metadata_extractor_retvm_if(!ME_STRING_VALID(attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid attribute_name"); + metadata_extractor_retvm_if(attr == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "attr is null"); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_PROJ_TYPE, &_proj_type_v2, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + if (metadata->video_track_cnt > 0) { + ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, attribute_name, &_attr, NULL); + metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + } - *proj_type_v2 = _proj_type_v2; + *attr = _attr; return ret; } -static int __metadata_extractor_get_pose_yaw_degrees_v2(metadata_extractor_s *metadata, int *pose_yaw_degrees_v2) +static int __metadata_extractor_get_audio_track_count(metadata_extractor_s *metadata, int *track_cnt) { int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _pose_yaw_degrees_v2 = -1; - *pose_yaw_degrees_v2 = -1; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_POSE_YAW, &_pose_yaw_degrees_v2, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + metadata_extractor_retvm_if(!metadata, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - *pose_yaw_degrees_v2 = _pose_yaw_degrees_v2; + *track_cnt = metadata->audio_track_cnt; return ret; } -static int __metadata_extractor_get_pose_pitch_degrees_v2(metadata_extractor_s *metadata, int *pose_pitch_degrees_v2) +static int __metadata_extractor_get_video_thumbnail(metadata_extractor_s *metadata, void **thumbnail, int *thumbnail_len) { int ret = METADATA_EXTRACTOR_ERROR_NONE; char *err_attr_name = NULL; - int _pose_pitch_degrees_v2 = -1; - *pose_pitch_degrees_v2 = -1; + void *_video_thumbnail = NULL; + int _video_thumbnail_len = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if((!metadata) || (!metadata->attr_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_POSE_PITCH, &_pose_pitch_degrees_v2, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + if (metadata->video_track_cnt > 0) { + ret = mm_file_get_attrs(metadata->attr_h, &err_attr_name, MM_FILE_CONTENT_VIDEO_THUMBNAIL, &_video_thumbnail, &_video_thumbnail_len, NULL); + metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + } - *pose_pitch_degrees_v2 = _pose_pitch_degrees_v2; + *thumbnail = _video_thumbnail; + *thumbnail_len = _video_thumbnail_len; return ret; } -static int __metadata_extractor_get_pose_roll_degrees_v2(metadata_extractor_s *metadata, int *pose_roll_degrees_v2) +static int __metadata_extractor_get_video_track_count(metadata_extractor_s *metadata, int *track_cnt) { int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _pose_roll_degrees_v2 = -1; - *pose_roll_degrees_v2 = -1; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_POSE_ROLL, &_pose_roll_degrees_v2, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + metadata_extractor_retvm_if(!metadata, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); - *pose_roll_degrees_v2 = _pose_roll_degrees_v2; + *track_cnt = metadata->video_track_cnt; return ret; } -static int __metadata_extractor_get_cbmp_layout_v2(metadata_extractor_s *metadata, int *cbmp_layout_v2) +static int __metadata_extractor_get_tag_str(metadata_extractor_s *metadata, const char *attribute_name, char **tag) { int ret = METADATA_EXTRACTOR_ERROR_NONE; char *err_attr_name = NULL; - int _cbmp_layout_v2 = -1; - *cbmp_layout_v2 = -1; + char *_tag = NULL; + int _tag_len = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata->tag_h == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Tag handle is null"); + metadata_extractor_retvm_if(!ME_STRING_VALID(attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid attribute_name"); + metadata_extractor_retvm_if(tag == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "tag is null"); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_CBMP_LAYOUT, &_cbmp_layout_v2, NULL); + ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, attribute_name, &_tag, &_tag_len, NULL); metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - *cbmp_layout_v2 = _cbmp_layout_v2; + *tag = _tag; return ret; } -static int __metadata_extractor_get_cbmp_padding_v2(metadata_extractor_s *metadata, int *cbmp_padding_v2) +static int __metadata_extractor_get_tag_int(metadata_extractor_s *metadata, const char *attribute_name, int *tag) { int ret = METADATA_EXTRACTOR_ERROR_NONE; char *err_attr_name = NULL; - int _cbmp_padding_v2 = -1; - *cbmp_padding_v2 = -1; + int _tag = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata->tag_h == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Tag handle is null"); + metadata_extractor_retvm_if(!ME_STRING_VALID(attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid attribute_name"); + metadata_extractor_retvm_if(tag == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "tag is null"); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_CBMP_PADDING, &_cbmp_padding_v2, NULL); + ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, attribute_name, &_tag, NULL); metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - *cbmp_padding_v2 = _cbmp_padding_v2; + *tag = _tag; return ret; } -static int __metadata_extractor_get_equi_projection_bounds_top_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_top_v2) +static int __metadata_extractor_get_tag_double(metadata_extractor_s *metadata, const char *attribute_name, double *tag) { int ret = METADATA_EXTRACTOR_ERROR_NONE; char *err_attr_name = NULL; - int _equi_projection_bounds_top_v2 = -1; - *equi_projection_bounds_top_v2 = -1; + double _tag = 0; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + metadata_extractor_retvm_if(metadata->tag_h == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Tag handle is null"); + metadata_extractor_retvm_if(!ME_STRING_VALID(attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid attribute_name"); + metadata_extractor_retvm_if(tag == NULL, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "tag is null"); - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_TOP, &_equi_projection_bounds_top_v2, NULL); + ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, attribute_name, &_tag, NULL); metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - *equi_projection_bounds_top_v2 = _equi_projection_bounds_top_v2; + *tag = _tag; return ret; } -static int __metadata_extractor_get_equi_projection_bounds_bottom_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_bottom_v2) +static int __metadata_extractor_get_artwork(metadata_extractor_s *metadata, void **artwork, int *artwork_size) { int ret = METADATA_EXTRACTOR_ERROR_NONE; char *err_attr_name = NULL; - int _equi_projection_bounds_bottom_v2 = -1; - *equi_projection_bounds_bottom_v2 = -1; - - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + void *_artwork = NULL; + int _artwork_size = 0; + int _tag_len = 0; - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_BOTTOM, &_equi_projection_bounds_bottom_v2, NULL); + ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ARTWORK_SIZE, &_artwork_size, NULL); metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); - *equi_projection_bounds_bottom_v2 = _equi_projection_bounds_bottom_v2; + if (_artwork_size > 0) { + ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_ARTWORK, &_artwork, &_tag_len, NULL); + metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + } + + *artwork = _artwork; + *artwork_size = _artwork_size; return ret; } -static int __metadata_extractor_get_equi_projection_bounds_left_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_left_v2) +static int __metadata_extractor_get_audio_codec(metadata_extractor_s *metadata, char **audio_codec) { int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _equi_projection_bounds_left_v2 = -1; - *equi_projection_bounds_left_v2 = -1; + int audio_codec_idx = 0; + int audio_codec_cnt = 45; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + const char *AudioCodecTypeString[] = { + "AMR", "G723.1", "MP3", "OGG", "AAC", "WMA", "MMF", "ADPCM", "WAVE", "WAVE NEW", "MIDI", "IMELODY", "MXMF", "MPEG1-Layer1 codec", "MPEG1-Layer2 codec", + "G711", "G722", "G722.1", "G722.2 (AMR-WB)", "G723 wideband speech", "G726 (ADPCM)", "G728 speech", "G729", "G729a", "G729.1", + "Real", + "AAC-Low complexity", "AAC-Main profile", "AAC-Scalable sample rate", "AAC-Long term prediction", "AAC-High Efficiency v1", "AAC-High efficiency v2", + "DolbyDigital", "Apple Lossless", "Sony proprietary", "SPEEX", "Vorbis", "AIFF", "AU", "None (will be deprecated)", + "PCM", "ALAW", "MULAW", "MS ADPCM", "FLAC" + }; - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_LEFT, &_equi_projection_bounds_left_v2, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + ret = __metadata_extractor_get_audio_attr_int(metadata, MM_FILE_CONTENT_AUDIO_CODEC, &audio_codec_idx); + metadata_extractor_retvm_if(ret != METADATA_EXTRACTOR_ERROR_NONE, ret, "Fail to get codec idx"); - *equi_projection_bounds_left_v2 = _equi_projection_bounds_left_v2; + if (audio_codec_idx < audio_codec_cnt) + *audio_codec = strdup(AudioCodecTypeString[audio_codec_idx]); + else { + metadata_extractor_error("Invalid Audio Codec [%d]", audio_codec_idx); + *audio_codec = NULL; + } return ret; } -static int __metadata_extractor_get_equi_projection_bounds_right_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_right_v2) +static int __metadata_extractor_get_video_codec(metadata_extractor_s *metadata, char **video_codec) { int ret = METADATA_EXTRACTOR_ERROR_NONE; - char *err_attr_name = NULL; - int _equi_projection_bounds_right_v2 = -1; - *equi_projection_bounds_right_v2 = -1; + int video_codec_idx = 0; + int video_codec_cnt = 29; - metadata_extractor_retvm_if((!metadata) || (!metadata->tag_h), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is null"); + const char *VideoCodecTypeString[] = { + "None (will be deprecated)", + "H263", "H264", "H26L", "MPEG4", "MPEG1", "WMV", "DIVX", "XVID", "H261", "H262/MPEG2-part2", "H263v2", "H263v3", + "Motion JPEG", "MPEG2", "MPEG4 part-2 Simple profile", "MPEG4 part-2 Advanced Simple profile", "MPEG4 part-2 Main profile", + "MPEG4 part-2 Core profile", "MPEG4 part-2 Adv Coding Eff profile", "MPEG4 part-2 Adv RealTime Simple profile", + "MPEG4 part-10 (h.264)", "Real", "VC-1", "AVS", "Cinepak", "Indeo", "Theora", "Flv" + }; - ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_RIGHT, &_equi_projection_bounds_right_v2, NULL); - metadata_extractor_retv_free_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, err_attr_name); + ret = __metadata_extractor_get_video_attr_int(metadata, MM_FILE_CONTENT_AUDIO_CODEC, &video_codec_idx); + metadata_extractor_retvm_if(ret != METADATA_EXTRACTOR_ERROR_NONE, ret, "Fail to get codec idx"); - *equi_projection_bounds_right_v2 = _equi_projection_bounds_right_v2; + if (video_codec_idx < video_codec_cnt) + *video_codec = strdup(VideoCodecTypeString[video_codec_idx]); + else { + metadata_extractor_error("Invalid Video Codec[%d]", video_codec_idx); + *video_codec = NULL; + } return ret; } -#endif static int __metadata_extractor_destroy_handle(metadata_extractor_s *metadata) { @@ -1555,7 +604,7 @@ int metadata_extractor_get_synclyrics(metadata_extractor_h metadata, int index, if (ret != METADATA_EXTRACTOR_ERROR_NONE) return ret; - ret = __metadata_extractor_get_synclyrics_pair_num(_metadata, &_synclyrics_num); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SYNCLYRICS_NUM, &_synclyrics_num); if (ret != METADATA_EXTRACTOR_ERROR_NONE) return ret; @@ -1621,7 +670,7 @@ int metadata_extractor_get_metadata(metadata_extractor_h metadata, metadata_extr switch ((int)attribute) { /*TODO (m.alieksieie): Remove casting after ACR*/ case METADATA_DURATION: { is_string = 0; - ret = __metadata_extractor_get_duration(_metadata, &i_value); + ret = __metadata_extractor_get_attr_int(_metadata, MM_FILE_CONTENT_DURATION, &i_value); break; } case METADATA_VIDEO_CODEC: { @@ -1631,22 +680,22 @@ int metadata_extractor_get_metadata(metadata_extractor_h metadata, metadata_extr } case METADATA_VIDEO_BITRATE: { is_string = 0; - ret = __metadata_extractor_get_video_bitrate(_metadata, &i_value); + ret = __metadata_extractor_get_video_attr_int(_metadata, MM_FILE_CONTENT_VIDEO_BITRATE, &i_value); break; } case METADATA_VIDEO_FPS: { is_string = 0; - ret = __metadata_extractor_get_video_FPS(_metadata, &i_value); + ret = __metadata_extractor_get_video_attr_int(_metadata, MM_FILE_CONTENT_VIDEO_FPS, &i_value); break; } case METADATA_VIDEO_WIDTH: { is_string = 0; - ret = __metadata_extractor_get_video_width(_metadata, &i_value); + ret = __metadata_extractor_get_video_attr_int(_metadata, MM_FILE_CONTENT_VIDEO_WIDTH, &i_value); break; } case METADATA_VIDEO_HEIGHT: { is_string = 0; - ret = __metadata_extractor_get_video_height(_metadata, &i_value); + ret = __metadata_extractor_get_video_attr_int(_metadata, MM_FILE_CONTENT_VIDEO_HEIGHT, &i_value); break; } case METADATA_HAS_VIDEO: { @@ -1661,22 +710,22 @@ int metadata_extractor_get_metadata(metadata_extractor_h metadata, metadata_extr } case METADATA_AUDIO_BITRATE: { is_string = 0; - ret = __metadata_extractor_get_audio_bitrate(_metadata, &i_value); + ret = __metadata_extractor_get_audio_attr_int(_metadata, MM_FILE_CONTENT_AUDIO_BITRATE, &i_value); break; } case METADATA_AUDIO_CHANNELS: { is_string = 0; - ret = __metadata_extractor_get_audio_channel(_metadata, &i_value); + ret = __metadata_extractor_get_audio_attr_int(_metadata, MM_FILE_CONTENT_AUDIO_CHANNELS, &i_value); break; } case METADATA_AUDIO_SAMPLERATE: { is_string = 0; - ret = __metadata_extractor_get_audio_samplerate(_metadata, &i_value); + ret = __metadata_extractor_get_audio_attr_int(_metadata, MM_FILE_CONTENT_AUDIO_SAMPLERATE, &i_value); break; } case METADATA_AUDIO_BITPERSAMPLE: { is_string = 0; - ret = __metadata_extractor_get_audio_bitpersample(_metadata, &i_value); + ret = __metadata_extractor_get_audio_attr_int(_metadata, MM_FILE_CONTENT_AUDIO_BITPERSAMPLE, &i_value); break; } case METADATA_HAS_AUDIO: { @@ -1686,263 +735,263 @@ int metadata_extractor_get_metadata(metadata_extractor_h metadata, metadata_extr } case METADATA_ARTIST: { is_string = 1; - ret = __metadata_extractor_get_artist(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_ARTIST, &s_value); break; } case METADATA_TITLE: { is_string = 1; - ret = __metadata_extractor_get_title(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_TITLE, &s_value); break; } case METADATA_ALBUM: { is_string = 1; - ret = __metadata_extractor_get_album(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_ALBUM, &s_value); break; } case METADATA_ALBUM_ARTIST: { is_string = 1; - ret = __metadata_extractor_get_album_artist(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_ALBUM_ARTIST, &s_value); break; } case METADATA_GENRE: { is_string = 1; - ret = __metadata_extractor_get_genre(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_GENRE, &s_value); break; } case METADATA_AUTHOR: { is_string = 1; - ret = __metadata_extractor_get_author(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_AUTHOR, &s_value); break; } case METADATA_COPYRIGHT: { is_string = 1; - ret = __metadata_extractor_get_copyright(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_COPYRIGHT, &s_value); break; } case METADATA_DATE: { is_string = 1; - ret = __metadata_extractor_get_date(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_DATE, &s_value); break; } case METADATA_DESCRIPTION: { is_string = 1; - ret = __metadata_extractor_get_description(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_DESCRIPTION, &s_value); break; } case METADATA_COMMENT: { is_string = 1; - ret = __metadata_extractor_get_comment(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_COMMENT, &s_value); break; } case METADATA_TRACK_NUM: { is_string = 1; - ret = __metadata_extractor_get_track_num(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_TRACK_NUM, &s_value); break; } case METADATA_CLASSIFICATION: { is_string = 1; - ret = __metadata_extractor_get_classification(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_CLASSIFICATION, &s_value); break; } case METADATA_RATING: { is_string = 1; - ret = __metadata_extractor_get_rating(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_RATING, &s_value); break; } case METADATA_LONGITUDE: { is_double = 1; - ret = __metadata_extractor_get_longitude(_metadata, &d_value); + ret = __metadata_extractor_get_tag_double(_metadata, MM_FILE_TAG_LONGITUDE, &d_value); break; } case METADATA_LATITUDE: { is_double = 1; - ret = __metadata_extractor_get_latitude(_metadata, &d_value); + ret = __metadata_extractor_get_tag_double(_metadata, MM_FILE_TAG_LATIDUE, &d_value); break; } case METADATA_ALTITUDE: { is_double = 1; - ret = __metadata_extractor_get_altitude(_metadata, &d_value); + ret = __metadata_extractor_get_tag_double(_metadata, MM_FILE_TAG_ALTIDUE, &d_value); break; } case METADATA_CONDUCTOR: { is_string = 1; - ret = __metadata_extractor_get_conductor(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_CONDUCTOR, &s_value); break; } case METADATA_UNSYNCLYRICS: { is_string = 1; - ret = __metadata_extractor_get_unsynclyrics(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_UNSYNCLYRICS, &s_value); break; } case METADATA_SYNCLYRICS_NUM: { is_string = 0; - ret = __metadata_extractor_get_synclyrics_pair_num(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SYNCLYRICS_NUM, &i_value); break; } case METADATA_RECDATE: { is_string = 1; - ret = __metadata_extractor_get_recording_date(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_RECDATE, &s_value); break; } case METADATA_ROTATE: { is_string = 1; - ret = __metadata_extractor_get_rotate(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_ROTATE, &s_value); break; } case METADATA_360: { is_string = 0; - ret = __metadata_extractor_get_is_360(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL, &i_value); break; } #ifdef SUPPORT_GSPHERICAL_METADATA case METADATA_360_V1_STITCHED: { is_string = 0; - ret = __metadata_extractor_get_is_stitched_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_STITCHED, &i_value); break; } case METADATA_360_V1_PROJECTION_TYPE: { is_string = 1; - ret = __metadata_extractor_get_projection_type_v1(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_SPHERICAL_PROJECTION_TYPE, &s_value); break; } case METADATA_360_V1_STITCHING_SOFTWARE: { is_string = 1; - ret = __metadata_extractor_get_stitching_software_v1(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_SPHERICAL_STITCHING_SOFTWARE, &s_value); break; } case METADATA_360_V1_STEREO_MODE: { is_string = 1; - ret = __metadata_extractor_get_stereo_mode_v1(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_SPHERICAL_STEREO_MODE, &s_value); break; } case METADATA_360_V1_SOURCE_COUNT: { is_string = 0; - ret = __metadata_extractor_get_source_count_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_SOURCE_COUNT, &i_value); break; } case METADATA_360_V1_INIT_VIEW_HEADING: { is_string = 0; - ret = __metadata_extractor_get_initial_view_heading_degrees_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_INIT_VIEW_HEADING, &i_value); break; } case METADATA_360_V1_INIT_VIEW_PITCH: { is_string = 0; - ret = __metadata_extractor_get_initial_view_pitch_degrees_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_INIT_VIEW_PITCH, &i_value); break; } case METADATA_360_V1_INIT_VIEW_ROLL: { is_string = 0; - ret = __metadata_extractor_get_initial_view_roll_degrees_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_INIT_VIEW_ROLL, &i_value); break; } case METADATA_360_V1_TIMESTAMP: { is_string = 0; - ret = __metadata_extractor_get_timestamp_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_TIMESTAMP, &i_value); break; } case METADATA_360_V1_FULL_PANO_WIDTH: { is_string = 0; - ret = __metadata_extractor_get_full_pano_width_pixels_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_FULL_PANO_WIDTH, &i_value); break; } case METADATA_360_V1_FULL_PANO_HEIGHT: { is_string = 0; - ret = __metadata_extractor_get_full_pano_height_pixels_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_FULL_PANO_HEIGHT, &i_value); break; } case METADATA_360_V1_CROPPED_AREA_IMAGE_WIDTH: { is_string = 0; - ret = __metadata_extractor_get_cropped_area_image_width_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_CROPPED_AREA_IMAGE_WIDTH, &i_value); break; } case METADATA_360_V1_CROPPED_AREA_IMAGE_HEIGHT: { is_string = 0; - ret = __metadata_extractor_get_cropped_area_image_height_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_CROPPED_AREA_IMAGE_HEIGHT, &i_value); break; } case METADATA_360_V1_CROPPED_AREA_LEFT: { is_string = 0; - ret = __metadata_extractor_get_cropped_area_left_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_CROPPED_AREA_LEFT, &i_value); break; } case METADATA_360_V1_CROPPED_AREA_TOP: { is_string = 0; - ret = __metadata_extractor_get_cropped_area_top_v1(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_CROPPED_AREA_TOP, &i_value); break; } case METADATA_360_V2_STEREO_MODE: { is_string = 0; - ret = __metadata_extractor_get_stereo_mode_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_STEREO_MODE, &i_value); break; } case METADATA_360_V2_METADATA_SOURCE: { is_string = 1; - ret = __metadata_extractor_get_metadata_source_v2(_metadata, &s_value); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_SPHERICAL_V2_METADATA_SOURCE, &s_value); break; } case METADATA_360_V2_PROJ_TYPE: { is_string = 0; - ret = __metadata_extractor_get_proj_type_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_PROJ_TYPE, &i_value); break; } case METADATA_360_V2_POSE_YAW: { is_string = 0; - ret = __metadata_extractor_get_pose_yaw_degrees_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_POSE_YAW, &i_value); break; } case METADATA_360_V2_POSE_PITCH: { is_string = 0; - ret = __metadata_extractor_get_pose_pitch_degrees_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_POSE_PITCH, &i_value); break; } case METADATA_360_V2_POSE_ROLL: { is_string = 0; - ret = __metadata_extractor_get_pose_roll_degrees_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_POSE_ROLL, &i_value); break; } case METADATA_360_V2_CBMP_LAYOUT: { is_string = 0; - ret = __metadata_extractor_get_cbmp_layout_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_CBMP_LAYOUT, &i_value); break; } case METADATA_360_V2_CBMP_PADDING: { is_string = 0; - ret = __metadata_extractor_get_cbmp_padding_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_CBMP_PADDING, &i_value); break; } case METADATA_360_V2_EQUI_BOUNDS_TOP: { is_string = 0; - ret = __metadata_extractor_get_equi_projection_bounds_top_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_TOP, &i_value); break; } case METADATA_360_V2_EQUI_BOUNDS_BOTTOM: { is_string = 0; - ret = __metadata_extractor_get_equi_projection_bounds_bottom_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_BOTTOM, &i_value); break; } case METADATA_360_V2_EQUI_BOUNDS_LEFT: { is_string = 0; - ret = __metadata_extractor_get_equi_projection_bounds_left_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_LEFT, &i_value); break; } case METADATA_360_V2_EQUI_BOUNDS_RIGHT: { is_string = 0; - ret = __metadata_extractor_get_equi_projection_bounds_right_v2(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_RIGHT, &i_value); break; } case METADATA_AMBISONIC_TYPE: { is_string = 0; - ret = __metadata_extractor_get_ambisonic_type(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_AMBISONIC_TYPE, &i_value); break; } case METADATA_AMBISONIC_FORMAT: { is_string = 0; - ret = __metadata_extractor_get_ambisonic_format(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_AMBISONIC_FORMAT, &i_value); break; } case METADATA_AMBISONIC_ORDER: { is_string = 0; - ret = __metadata_extractor_get_ambisonic_order(_metadata, &i_value); + ret = __metadata_extractor_get_tag_int(_metadata, MM_FILE_TAG_AMBISONIC_ORDER, &i_value); break; } #endif @@ -1997,15 +1046,13 @@ int metadata_extractor_get_artwork(metadata_extractor_h metadata, void **artwork metadata_extractor_retvm_if((!_metadata) || ((!_metadata->path) && (!_metadata->buffer)), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid parameter"); ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG); - if (ret != METADATA_EXTRACTOR_ERROR_NONE) - return ret; + metadata_extractor_retvm_if(ret != METADATA_EXTRACTOR_ERROR_NONE, ret, "Error in __metadata_extractor_check_and_extract_meta()"); ret = __metadata_extractor_get_artwork(_metadata, &_artwork, &_artwork_size); - if (ret != METADATA_EXTRACTOR_ERROR_NONE) - return ret; + metadata_extractor_retvm_if(ret != METADATA_EXTRACTOR_ERROR_NONE, ret, "Fail to get artwork"); if ((_artwork_size > 0) && (_artwork != NULL)) { - ret = __metadata_extractor_get_artwork_mime(_metadata, &_artwork_mime); + ret = __metadata_extractor_get_tag_str(_metadata, MM_FILE_TAG_ARTWORK_MIME, &_artwork_mime); if (ret != METADATA_EXTRACTOR_ERROR_NONE) { *artwork = NULL; *size = 0;