summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhj kim <backto.kim@samsung.com>2019-08-26 16:01:22 +0900
committerhj kim <backto.kim@samsung.com>2019-08-28 08:55:05 +0900
commit57d2df27d9b6d71c226d2cf653d45e55551257ff (patch)
tree0882049813324110fd5a0effcb60a028d3454d57
parent3753ebb53e0025a25a897034b37fe3ca68e7047c (diff)
downloadmetadata-extractor-57d2df27d9b6d71c226d2cf653d45e55551257ff.tar.gz
metadata-extractor-57d2df27d9b6d71c226d2cf653d45e55551257ff.tar.bz2
metadata-extractor-57d2df27d9b6d71c226d2cf653d45e55551257ff.zip
Change-Id: I148c3e335e0ef2a978c013aa209ef4c3c5dc6ad0
-rw-r--r--src/metadata_extractor.c172
1 files changed, 71 insertions, 101 deletions
diff --git a/src/metadata_extractor.c b/src/metadata_extractor.c
index 0b38e39..c4104f5 100644
--- a/src/metadata_extractor.c
+++ b/src/metadata_extractor.c
@@ -131,18 +131,13 @@ static int __metadata_extractor_get_stream_info(metadata_extractor_s *metadata,
return ret;
}
-static int __metadata_extractor_create_content_attrs(metadata_extractor_s *metadata, const char *path)
+static int __get_content_attrs(metadata_extractor_s *metadata, MMHandleType content)
{
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);
- metadata_extractor_retvm_if(ret != FILEINFO_ERROR_NONE, __metadata_extractor_error_capi(ret), "Fail mm_file_create_content_attrs(%d)", ret);
-
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,
@@ -159,8 +154,18 @@ static int __metadata_extractor_create_content_attrs(metadata_extractor_s *metad
metadata->audio_track_cnt = _audio_track_cnt;
metadata->video_track_cnt = _video_track_cnt;
- return ret;
+ return METADATA_EXTRACTOR_ERROR_NONE;
+}
+
+static int __metadata_extractor_create_content_attrs(metadata_extractor_s *metadata, const char *path)
+{
+ int ret = METADATA_EXTRACTOR_ERROR_NONE;
+ MMHandleType content = 0;
+ ret = mm_file_create_content_attrs(&content, path);
+ metadata_extractor_retvm_if(ret != FILEINFO_ERROR_NONE, __metadata_extractor_error_capi(ret), "Fail mm_file_create_content_attrs(%d)", ret);
+
+ return __get_content_attrs(metadata, content);
}
@@ -182,32 +187,11 @@ static int __metadata_extractor_create_content_attrs_from_buffer(metadata_extrac
{
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);
metadata_extractor_retvm_if(ret != FILEINFO_ERROR_NONE, __metadata_extractor_error_capi(ret), "Fail mm_file_create_content_attrs_from_memory(%d)", ret);
- 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;
-
+ return __get_content_attrs(metadata, content);
}
static int __metadata_extractor_create_tag_attrs_from_buffer(metadata_extractor_s *metadata, const void *buffer, int size)
@@ -224,16 +208,25 @@ static int __metadata_extractor_create_tag_attrs_from_buffer(metadata_extractor_
}
+static bool __is_tag_param_valid(metadata_extractor_s *metadata, const char *attribute_name)
+{
+ metadata_extractor_retvm_if(!metadata, false, "Invalid metadata");
+ metadata_extractor_retvm_if(!metadata->tag_h, false, "Invalid tag_h");
+ metadata_extractor_retvm_if(!ME_STRING_VALID(attribute_name), false, "Invalid attribute_name");
+
+ return true;
+}
+
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 _attr = 0;
- 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(!metadata, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid metadata");
+ metadata_extractor_retvm_if(!metadata->attr_h , METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid attr_h");
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");
+ metadata_extractor_retvm_if(!attr, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid attr");
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);
@@ -245,44 +238,22 @@ static int __metadata_extractor_get_attr_int(metadata_extractor_s *metadata, con
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;
- int _attr = 0;
-
- 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);
- }
+ if (metadata && metadata->audio_track_cnt > 0)
+ return __metadata_extractor_get_attr_int(metadata, attribute_name, attr);
- *attr = _attr;
+ *attr = 0;
- return ret;
+ return METADATA_EXTRACTOR_ERROR_NONE;
}
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 _attr = 0;
+ if (metadata && metadata->video_track_cnt > 0)
+ return __metadata_extractor_get_attr_int(metadata, attribute_name, attr);
- 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->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);
- }
+ *attr = 0;
- *attr = _attr;
-
- return ret;
+ return METADATA_EXTRACTOR_ERROR_NONE;
}
static int __metadata_extractor_get_audio_track_count(metadata_extractor_s *metadata, int *track_cnt)
@@ -334,10 +305,8 @@ static int __metadata_extractor_get_tag_str(metadata_extractor_s *metadata, cons
char *_tag = NULL;
int _tag_len = 0;
- 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");
+ metadata_extractor_retvm_if(!__is_tag_param_valid(metadata, attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "fail to __is_tag_param_valid()");
+ metadata_extractor_retvm_if(!tag, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid tag");
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);
@@ -353,10 +322,8 @@ static int __metadata_extractor_get_tag_int(metadata_extractor_s *metadata, cons
char *err_attr_name = NULL;
int _tag = 0;
- 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");
+ metadata_extractor_retvm_if(!__is_tag_param_valid(metadata, attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "fail to __is_tag_param_valid()");
+ metadata_extractor_retvm_if(!tag, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid tag");
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);
@@ -372,10 +339,8 @@ static int __metadata_extractor_get_tag_double(metadata_extractor_s *metadata, c
char *err_attr_name = NULL;
double _tag = 0;
- 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");
+ metadata_extractor_retvm_if(!__is_tag_param_valid(metadata, attribute_name), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "fail to __is_tag_param_valid()");
+ metadata_extractor_retvm_if(!tag, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid tag");
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);
@@ -599,45 +564,50 @@ int metadata_extractor_get_synclyrics(metadata_extractor_h metadata, int index,
return ret;
}
-int metadata_extractor_get_metadata(metadata_extractor_h metadata, metadata_extractor_attr_e attribute, char **value)
+static int __extract_meta(metadata_extractor_s *metadata, metadata_extractor_attr_e attribute)
{
- int ret = METADATA_EXTRACTOR_ERROR_NONE;
- metadata_extractor_s *_metadata = (metadata_extractor_s *)metadata;
- int i_value = 0;
- double d_value = 0;
- char *s_value = NULL;
- int is_string = 0;
- int is_double = 0;
+ metadata_extractor_retvm_if(!metadata, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid parameter");
- metadata_extractor_retvm_if((!_metadata) || ((!_metadata->path) && (!_metadata->buffer)), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ /*metadata_extractor_debug("attribute [%d]", attribute); */
if ((attribute == METADATA_HAS_VIDEO) || (attribute == METADATA_HAS_AUDIO)) {
- if (_metadata->path != NULL)
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_STREAM);
+ if (metadata->path != NULL)
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_STREAM);
else
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_ATTR);
- } else if ((attribute >= METADATA_DURATION) && (attribute < METADATA_HAS_AUDIO))
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_ATTR);
- else if ((attribute > METADATA_HAS_AUDIO) && (attribute <= METADATA_ROTATE))
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG);
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR);
+ } else if ((attribute >= METADATA_DURATION) && (attribute < METADATA_HAS_AUDIO)) {
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR);
+ } else if ((attribute > METADATA_HAS_AUDIO) && (attribute <= METADATA_ROTATE)) {
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG);
#ifdef SUPPORT_GSPHERICAL_METADATA
- else if (((attribute >= METADATA_360) && (attribute <= METADATA_AMBISONIC_ORDER)))
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG);
+ } else if (((attribute >= METADATA_360) && (attribute <= METADATA_AMBISONIC_ORDER))) {
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG);
#else
- else if (attribute == METADATA_360)
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG);
+ } else if (attribute == METADATA_360) {
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG);
#endif
- else if ((attribute == METADATA_AUDIO_CODEC) || (attribute == METADATA_VIDEO_CODEC))
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_ATTR);
- else {
+ } else if ((attribute == METADATA_AUDIO_CODEC) || (attribute == METADATA_VIDEO_CODEC)) {
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR);
+ } else {
metadata_extractor_error("INVALID_PARAMETER [%d]", attribute);
- ret = METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+ return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
}
+}
- if (ret != METADATA_EXTRACTOR_ERROR_NONE)
- return ret;
+int metadata_extractor_get_metadata(metadata_extractor_h metadata, metadata_extractor_attr_e attribute, char **value)
+{
+ int ret = METADATA_EXTRACTOR_ERROR_NONE;
+ metadata_extractor_s *_metadata = (metadata_extractor_s *)metadata;
+ int i_value = 0;
+ double d_value = 0;
+ char *s_value = NULL;
+ int is_string = 0;
+ int is_double = 0;
- /*metadata_extractor_debug("attribute [%d]", attribute); */
+ metadata_extractor_retvm_if((!_metadata) || ((!_metadata->path) && (!_metadata->buffer)), METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid parameter");
+
+ ret = __extract_meta(_metadata, attribute);
+ metadata_extractor_retvm_if(ret != METADATA_EXTRACTOR_ERROR_NONE, ret, "fail to __metadata_extractor_extract_meta() [%d]", ret);
switch ((int)attribute) { /*TODO (m.alieksieie): Remove casting after ACR*/
case METADATA_DURATION: {