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);
}
}
-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;
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;
}
}
-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;
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;
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;
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;
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);
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;