Separate album art extraction 13/248713/2 accepted/tizen/unified/20201209.124855 submit/tizen/20201208.235402
authorMinje Ahn <minje.ahn@samsung.com>
Tue, 1 Dec 2020 23:12:37 +0000 (08:12 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Tue, 8 Dec 2020 03:05:37 +0000 (12:05 +0900)
Changed to extract album art only on request.

Change-Id: I417745540cc9fe5815fb4e3513c6aa73f22ca0a9
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
packaging/capi-media-metadata-extractor.spec
src/metadata_extractor.c

index 9015fad82e3c2065292693c5cc41b41691700be6..5403be39eb1e969b8bf517ae55cd5451b27d6b75 100755 (executable)
@@ -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
index cb1db760240893394c3c78924b5711180b57f39f..1de04f11bd91abd0f99fd1be8c7e64012b6ed45c 100644 (file)
@@ -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;