summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinje Ahn <minje.ahn@samsung.com>2020-12-02 08:12:37 +0900
committerMinje Ahn <minje.ahn@samsung.com>2020-12-08 12:05:37 +0900
commit0733d62a02e63f98463b23faa64af36e3fe62d1e (patch)
treea19a34c73cd0c956c3a6d596374ad5089d8f0507
parenta6d23aef1d7f05a56cc60ae65139ff49bfc6dfb0 (diff)
downloadmetadata-extractor-0733d62a02e63f98463b23faa64af36e3fe62d1e.tar.gz
metadata-extractor-0733d62a02e63f98463b23faa64af36e3fe62d1e.tar.bz2
metadata-extractor-0733d62a02e63f98463b23faa64af36e3fe62d1e.zip
Changed to extract album art only on request. Change-Id: I417745540cc9fe5815fb4e3513c6aa73f22ca0a9 Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
-rwxr-xr-xpackaging/capi-media-metadata-extractor.spec2
-rw-r--r--src/metadata_extractor.c53
2 files changed, 34 insertions, 21 deletions
diff --git a/packaging/capi-media-metadata-extractor.spec b/packaging/capi-media-metadata-extractor.spec
index 9015fad..5403be3 100755
--- a/packaging/capi-media-metadata-extractor.spec
+++ b/packaging/capi-media-metadata-extractor.spec
@@ -1,6 +1,6 @@
Name: capi-media-metadata-extractor
Summary: A media metadata extractor library in Tizen Native API
-Version: 0.1.15
+Version: 0.1.16
Release: 1
Group: Multimedia/API
License: Apache-2.0
diff --git a/src/metadata_extractor.c b/src/metadata_extractor.c
index cb1db76..1de04f1 100644
--- a/src/metadata_extractor.c
+++ b/src/metadata_extractor.c
@@ -29,12 +29,12 @@ typedef enum {
METADATA_TYPE_TAG,
} metadata_extractor_type_e;
-static int __metadata_extractor_check_and_extract_meta(metadata_extractor_s *metadata, metadata_extractor_type_e metadata_type);
+static int __metadata_extractor_check_and_extract_meta(metadata_extractor_s *metadata, metadata_extractor_type_e metadata_type, bool extract_albumart);
static int __metadata_extractor_get_stream_info(metadata_extractor_s *metadata, const char *path);
static int __metadata_extractor_create_content_attrs(metadata_extractor_s *metadata, const char *path);
-static int __metadata_extractor_create_tag_attr(metadata_extractor_s *metadata, const char *path);
+static int __metadata_extractor_create_tag_attr(metadata_extractor_s *metadata, const char *path, bool extract_albumart);
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_create_tag_attrs_from_buffer(metadata_extractor_s *metadata, const void *buffer, int size, bool extract_albumart);
static int __metadata_extractor_get_artwork(metadata_extractor_s *metadata, void **artwork, int *artwork_size);
static int __metadata_extractor_get_video_thumbnail(metadata_extractor_s *metadata, void **thumbnail, int *thumbnail_len);
static int __metadata_extractor_get_audio_track_count(metadata_extractor_s *metadata, int *track_cnt);
@@ -60,7 +60,7 @@ static int __metadata_extractor_error_capi(int fileinfo_error)
}
}
-static int __metadata_extractor_check_and_extract_meta(metadata_extractor_s *metadata, metadata_extractor_type_e metadata_type)
+static int __metadata_extractor_check_and_extract_meta(metadata_extractor_s *metadata, metadata_extractor_type_e metadata_type, bool extract_albumart)
{
int ret = METADATA_EXTRACTOR_ERROR_NONE;
@@ -99,11 +99,11 @@ static int __metadata_extractor_check_and_extract_meta(metadata_extractor_s *met
else {
metadata_extractor_debug("Extract Tag attrs");
if (metadata->path != NULL) {
- ret = __metadata_extractor_create_tag_attr(metadata, metadata->path);
+ ret = __metadata_extractor_create_tag_attr(metadata, metadata->path, extract_albumart);
if (ret != METADATA_EXTRACTOR_ERROR_NONE)
return ret;
} else if (metadata->buffer != NULL) {
- ret = __metadata_extractor_create_tag_attrs_from_buffer(metadata, metadata->buffer, metadata->buffer_size);
+ ret = __metadata_extractor_create_tag_attrs_from_buffer(metadata, metadata->buffer, metadata->buffer_size, extract_albumart);
if (ret != METADATA_EXTRACTOR_ERROR_NONE)
return ret;
}
@@ -167,12 +167,16 @@ static int __metadata_extractor_create_content_attrs(metadata_extractor_s *metad
}
-static int __metadata_extractor_create_tag_attr(metadata_extractor_s *metadata, const char *path)
+static int __metadata_extractor_create_tag_attr(metadata_extractor_s *metadata, const char *path, bool extract_albumart)
{
int ret = METADATA_EXTRACTOR_ERROR_NONE;
MMHandleType tag = 0;
- ret = mm_file_create_tag_attrs(&tag, path);
+ if (extract_albumart)
+ ret = mm_file_create_tag_attrs(&tag, path);
+ else
+ ret = mm_file_create_tag_attrs_no_albumart(&tag, path);
+
metadata_extractor_retvm_if(ret != FILEINFO_ERROR_NONE, __metadata_extractor_error_capi(ret), "Fail mm_file_create_tag_attrs(%d)", ret);
metadata->tag_h = tag;
@@ -192,12 +196,16 @@ static int __metadata_extractor_create_content_attrs_from_buffer(metadata_extrac
return __get_content_attrs(metadata, content);
}
-static int __metadata_extractor_create_tag_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, bool extract_albumart)
{
int ret = METADATA_EXTRACTOR_ERROR_NONE;
MMHandleType tag = 0;
- ret = mm_file_create_tag_attrs_from_memory(&tag, buffer, size, 0);
+ if (extract_albumart)
+ ret = mm_file_create_tag_attrs_from_memory(&tag, buffer, size, 0);
+ else
+ ret = mm_file_create_tag_attrs_no_albumart_from_memory(&tag, buffer, size, 0);
+
metadata_extractor_retvm_if(ret != FILEINFO_ERROR_NONE, __metadata_extractor_error_capi(ret), "Fail mm_file_create_tag_attrs_from_memory(%d)", ret);
metadata->tag_h = tag;
@@ -509,7 +517,7 @@ int metadata_extractor_get_synclyrics(metadata_extractor_h metadata, int index,
metadata_extractor_retvm_if(!_metadata, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is NULL");
metadata_extractor_retvm_if(!_metadata->path && !_metadata->buffer, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid parameter");
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG);
+ ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG, false);
if (ret != METADATA_EXTRACTOR_ERROR_NONE)
return ret;
@@ -536,22 +544,22 @@ static int __extract_meta(metadata_extractor_s *metadata, metadata_extractor_att
if ((attribute == METADATA_HAS_VIDEO) || (attribute == METADATA_HAS_AUDIO)) {
if (metadata->path != NULL)
- return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_STREAM);
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_STREAM, false);
else
- return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR);
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR, false);
} else if ((attribute >= METADATA_DURATION) && (attribute < METADATA_HAS_AUDIO)) {
- return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR);
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR, false);
} else if ((attribute > METADATA_HAS_AUDIO) && (attribute <= METADATA_ROTATE)) {
- return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG);
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG, false);
#ifdef SUPPORT_GSPHERICAL_METADATA
} else if (((attribute >= METADATA_360) && (attribute <= METADATA_AMBISONIC_ORDER))) {
- return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG);
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG, false);
#else
} else if (attribute == METADATA_360) {
- return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG);
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_TAG, false);
#endif
} else if ((attribute == METADATA_AUDIO_CODEC) || (attribute == METADATA_VIDEO_CODEC)) {
- return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR);
+ return __metadata_extractor_check_and_extract_meta(metadata, METADATA_TYPE_ATTR, false);
} else {
metadata_extractor_error("INVALID_PARAMETER [%d]", attribute);
return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
@@ -831,7 +839,12 @@ int metadata_extractor_get_artwork(metadata_extractor_h metadata, void **artwork
metadata_extractor_retvm_if(!_metadata, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Handle is NULL");
metadata_extractor_retvm_if(!_metadata->path && !_metadata->buffer, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid parameter");
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG);
+ if (_metadata->tag_h) {
+ ret = mm_file_destroy_tag_attrs(_metadata->tag_h);
+ metadata_extractor_retvm_if(ret != FILEINFO_ERROR_NONE, METADATA_EXTRACTOR_ERROR_OPERATION_FAILED, "Failed to destroy tag handle");
+ }
+
+ ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG, true);
metadata_extractor_retvm_if(ret != METADATA_EXTRACTOR_ERROR_NONE, ret, "Fail: __metadata_extractor_check_and_extract_meta");
ret = __metadata_extractor_get_artwork(_metadata, &_artwork, &_artwork_size);
@@ -860,7 +873,7 @@ int metadata_extractor_get_frame(metadata_extractor_h metadata, void **frame, in
metadata_extractor_retvm_if(!_metadata->path && !_metadata->buffer, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid parameter");
metadata_extractor_retvm_if(!size, METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER, "Invalid parameter");
- ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_ATTR);
+ ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_ATTR, false);
if (ret != METADATA_EXTRACTOR_ERROR_NONE)
return ret;