From c076622c750b1db2ce4f236dbcb9e0aa259760ad Mon Sep 17 00:00:00 2001 From: Minje Ahn Date: Wed, 2 Dec 2020 08:12:18 +0900 Subject: [PATCH] Separate album art extraction Changed to extract album art only on request. Change-Id: I0ad6da0da25905535d5aec94ec74a3069d0d0e11 Signed-off-by: Minje Ahn --- formats/ffmpeg/mm_file_format_aac.c | 14 ++++++------ formats/ffmpeg/mm_file_format_mp3.c | 12 +++++----- include/mm_file.h | 2 ++ include/mm_file_formats.h | 2 +- mm_file.c | 29 +++++++++++++++++++----- packaging/libmm-fileinfo.spec | 2 +- utils/include/mm_file_utils.h | 6 ++--- utils/mm_file_util_tag.c | 45 ++++++++++++++++++------------------- 8 files changed, 66 insertions(+), 46 deletions(-) diff --git a/formats/ffmpeg/mm_file_format_aac.c b/formats/ffmpeg/mm_file_format_aac.c index 8ec9ca3..4bcc771 100644 --- a/formats/ffmpeg/mm_file_format_aac.c +++ b/formats/ffmpeg/mm_file_format_aac.c @@ -154,7 +154,7 @@ static bool __search_id3tag(tMMFILE_AAC_HANDLE *pData) return true; } -static bool __parse_id3_tag(tMMFILE_AAC_HANDLE *pData) +static bool __parse_id3_tag(tMMFILE_AAC_HANDLE *pData, bool extract_artwork) { unsigned char *tagBuff = NULL; AvFileContentInfo *hTag = &pData->id3Handle; @@ -175,13 +175,13 @@ static bool __parse_id3_tag(tMMFILE_AAC_HANDLE *pData) switch (hTag->tagV2Info.tagVersion) { case 2: - ret = mm_file_id3tag_parse_v222(hTag, tagBuff); + ret = mm_file_id3tag_parse_v222(hTag, tagBuff, extract_artwork); break; case 3: - ret = mm_file_id3tag_parse_v223(hTag, tagBuff); + ret = mm_file_id3tag_parse_v223(hTag, tagBuff, extract_artwork); break; case 4: - ret = mm_file_id3tag_parse_v224(hTag, tagBuff); + ret = mm_file_id3tag_parse_v224(hTag, tagBuff, extract_artwork); break; default: debug_error(DEBUG, "Invalid Tag version [%d]\n", hTag->tagV2Info.tagVersion); @@ -577,7 +577,7 @@ static bool __mmfile_aacparser_get_stream_info(MMFileAACHandle handle, tMMFILE_A } -static bool __mmfile_aacparser_get_tag_info(MMFileAACHandle handle, tMMFILE_AAC_TAG_INFO *tagInfo) +static bool __mmfile_aacparser_get_tag_info(MMFileAACHandle handle, tMMFILE_AAC_TAG_INFO *tagInfo, bool extract_artwork) { tMMFILE_AAC_HANDLE *privateData = NULL; @@ -590,7 +590,7 @@ static bool __mmfile_aacparser_get_tag_info(MMFileAACHandle handle, tMMFILE_AAC_ return true; } - mm_file_retvm_if_fails(DEBUG, __parse_id3_tag(privateData), false); + mm_file_retvm_if_fails(DEBUG, __parse_id3_tag(privateData, extract_artwork), false); /* Return the tag info structure */ memcpy(tagInfo, &(privateData->tagInfo), sizeof(tMMFILE_AAC_TAG_INFO)); @@ -696,7 +696,7 @@ int mmfile_format_read_tag_aac(MMFileFormatContext *formatContext) handle = formatContext->privateFormatData; - mm_file_retvm_if_fails(DEBUG, __mmfile_aacparser_get_tag_info(handle, &aacinfo), MMFILE_FORMAT_FAIL); + mm_file_retvm_if_fails(DEBUG, __mmfile_aacparser_get_tag_info(handle, &aacinfo, formatContext->extract_artwork), MMFILE_FORMAT_FAIL); formatContext->title = g_strdup(aacinfo.title); formatContext->author = g_strdup(aacinfo.author); diff --git a/formats/ffmpeg/mm_file_format_mp3.c b/formats/ffmpeg/mm_file_format_mp3.c index e2d48d5..460b338 100644 --- a/formats/ffmpeg/mm_file_format_mp3.c +++ b/formats/ffmpeg/mm_file_format_mp3.c @@ -54,7 +54,7 @@ int mmfile_format_read_tag_mp3(MMFileFormatContext *formatContext); int mmfile_format_close_mp3(MMFileFormatContext *formatContext); /* internal */ -static bool __get_tag_info(char *src, AvFileContentInfo *pInfo); +static bool __get_tag_info(char *src, AvFileContentInfo *pInfo, bool extract_artwork); static bool __get_stream_info(char *src, AvFileContentInfo *pInfo); @@ -131,7 +131,7 @@ int mmfile_format_read_tag_mp3(MMFileFormatContext *formatContext) mm_file_retvm_if_fails(DEBUG, formatContext, MMFILE_FORMAT_FAIL); mm_file_retvm_if_fails(DEBUG, formatContext->privateFormatData, MMFILE_FORMAT_FAIL); - if (!__get_tag_info(formatContext->uriFileName, formatContext->privateFormatData)) { + if (!__get_tag_info(formatContext->uriFileName, formatContext->privateFormatData, formatContext->extract_artwork)) { debug_error(DEBUG, "getting tag information is failed"); return MMFILE_FORMAT_FAIL; } @@ -674,7 +674,7 @@ static bool __AvGetMp3HeaderInfo(MMFileIOHandle *hFile, AvFileContentInfo *pInfo * Param pInfo [out] Specifies a struct pointer for ID3 tag information. * This function returns true on success, or false on failure. */ -static bool __get_tag_info(char *filename, AvFileContentInfo *pInfo) +static bool __get_tag_info(char *filename, AvFileContentInfo *pInfo, bool extract_artwork) { MMFileIOHandle *hFile; unsigned char *buf = NULL; @@ -730,11 +730,11 @@ static bool __get_tag_info(char *filename, AvFileContentInfo *pInfo) } if (pInfo->tagV2Info.tagVersion == 0x02) - mm_file_id3tag_parse_v222(pInfo, buf); + mm_file_id3tag_parse_v222(pInfo, buf, extract_artwork); else if (pInfo->tagV2Info.tagVersion == 0x03) - mm_file_id3tag_parse_v223(pInfo, buf); + mm_file_id3tag_parse_v223(pInfo, buf, extract_artwork); else if (pInfo->tagV2Info.tagVersion == 0x04) - mm_file_id3tag_parse_v224(pInfo, buf); /* currently 2.4 ver parsed by 2.3 routine */ + mm_file_id3tag_parse_v224(pInfo, buf, extract_artwork); /* currently 2.4 ver parsed by 2.3 routine */ else debug_msg(RELEASE, "Invalid tag version(%d)", pInfo->tagV2Info.tagVersion); diff --git a/include/mm_file.h b/include/mm_file.h index 270f576..6e9087d 100755 --- a/include/mm_file.h +++ b/include/mm_file.h @@ -227,6 +227,7 @@ mm_file_destroy_tag_attrs(tag_attrs); * @endcode */ int mm_file_create_tag_attrs(MMHandleType *tag_attrs, const char *filename); +int mm_file_create_tag_attrs_no_albumart(MMHandleType *tag_attrs, const char *filename); /** * This function is to destory the tag attribute handle which is created by mm_file_create_tag_attrs().
@@ -532,6 +533,7 @@ mm_file_destroy_tag_attrs(tag_attrs); * @endcode */ int mm_file_create_tag_attrs_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format); +int mm_file_create_tag_attrs_no_albumart_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format); /** * This function is to get the content attributes from media data on memory while mm_file_create_content_attrs() extracts from file.
diff --git a/include/mm_file_formats.h b/include/mm_file_formats.h index 001c5be..94864c7 100755 --- a/include/mm_file_formats.h +++ b/include/mm_file_formats.h @@ -102,7 +102,7 @@ struct _MMFileFormatContext { int notsupport; int formatType; int commandType; /* TAG or CONTENTS */ - + bool extract_artwork; MMFileSourceType *filesrc; /*ref only*/ char *uriFileName; diff --git a/mm_file.c b/mm_file.c index 53ad6c1..ef77535 100644 --- a/mm_file.c +++ b/mm_file.c @@ -487,7 +487,7 @@ exception: static int -_get_tag_info(MMHandleType attrs, MMFileSourceType *src) +_get_tag_info(MMHandleType attrs, MMFileSourceType *src, bool extract_albumart) { MMFileFormatContext *formatContext = NULL; int ret = 0; @@ -499,6 +499,9 @@ _get_tag_info(MMHandleType attrs, MMFileSourceType *src) goto exception; } + /* Set albumart flag */ + formatContext->extract_artwork = extract_albumart; + ret = mmfile_format_read_tag(formatContext); if (MMFILE_FORMAT_FAIL == ret) { debug_warning(DEBUG, "reading tag is fail\n"); @@ -581,7 +584,7 @@ int mm_file_get_synclyrics_info(MMHandleType tag_attrs, int index, unsigned long return ret; } -int mm_file_create_tag_attrs(MMHandleType *tag_attrs, const char *filename) +static int __mm_file_create_tag_attrs(MMHandleType *tag_attrs, const char *filename, bool extract_albumart) { int ret = FILEINFO_ERROR_NONE; MMHandleType attrs = NULL; @@ -616,7 +619,7 @@ int mm_file_create_tag_attrs(MMHandleType *tag_attrs, const char *filename) goto END; } - ret = _get_tag_info(attrs, &src); + ret = _get_tag_info(attrs, &src, extract_albumart); if (ret != FILEINFO_ERROR_NONE) { mm_attrs_free(attrs); attrs = NULL; @@ -635,7 +638,15 @@ END: return ret; } +int mm_file_create_tag_attrs(MMHandleType *tag_attrs, const char *filename) +{ + return __mm_file_create_tag_attrs(tag_attrs, filename, true); +} +int mm_file_create_tag_attrs_no_albumart(MMHandleType *tag_attrs, const char *filename) +{ + return __mm_file_create_tag_attrs(tag_attrs, filename, false); +} int mm_file_destroy_tag_attrs(MMHandleType tag_attrs) { @@ -723,7 +734,7 @@ int mm_file_create_content_attrs(MMHandleType *contents_attrs, const char *filen } -int mm_file_create_tag_attrs_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format) +static int __mm_file_create_tag_attrs_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format, bool extract_albumart) { MMHandleType attrs = NULL; MMFileSourceType src; @@ -756,7 +767,7 @@ int mm_file_create_tag_attrs_from_memory(MMHandleType *tag_attrs, const void *da } /*parse.type = MM_FILE_PARSE_TYPE_ALL;*/ - ret = _get_tag_info(attrs, &src); + ret = _get_tag_info(attrs, &src, extract_albumart); if (ret != FILEINFO_ERROR_NONE) { mm_attrs_free(attrs); attrs = NULL; @@ -775,7 +786,15 @@ END: return ret; } +int mm_file_create_tag_attrs_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format) +{ + return __mm_file_create_tag_attrs_from_memory(tag_attrs, data, size, format, true); +} +int mm_file_create_tag_attrs_no_albumart_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format) +{ + return __mm_file_create_tag_attrs_from_memory(tag_attrs, data, size, format, false); +} int mm_file_create_content_attrs_from_memory(MMHandleType *contents_attrs, const void *data, unsigned int size, int format) { diff --git a/packaging/libmm-fileinfo.spec b/packaging/libmm-fileinfo.spec index ba4ea9c..3e0d3d3 100644 --- a/packaging/libmm-fileinfo.spec +++ b/packaging/libmm-fileinfo.spec @@ -1,6 +1,6 @@ Name: libmm-fileinfo Summary: Media Fileinfo -Version: 1.0.1 +Version: 1.0.2 Release: 0 Group: System/Libraries License: Apache-2.0 diff --git a/utils/include/mm_file_utils.h b/utils/include/mm_file_utils.h index 83cde2f..280a43b 100755 --- a/utils/include/mm_file_utils.h +++ b/utils/include/mm_file_utils.h @@ -381,9 +381,9 @@ inline static void mm_file_free_AvFileContentInfo(AvFileContentInfo *pInfo) bool mm_file_id3tag_parse_v110(AvFileContentInfo *pInfo, unsigned char *buffer); /*20050401 Condol : for MP3 content Info. */ -bool mm_file_id3tag_parse_v222(AvFileContentInfo *pInfo, unsigned char *buffer); -bool mm_file_id3tag_parse_v223(AvFileContentInfo *pInfo, unsigned char *buffer); -bool mm_file_id3tag_parse_v224(AvFileContentInfo *pInfo, unsigned char *buffer); +bool mm_file_id3tag_parse_v222(AvFileContentInfo *pInfo, unsigned char *buffer, bool extract_artwork); +bool mm_file_id3tag_parse_v223(AvFileContentInfo *pInfo, unsigned char *buffer, bool extract_artwork); +bool mm_file_id3tag_parse_v224(AvFileContentInfo *pInfo, unsigned char *buffer, bool extract_artwork); void mm_file_id3tag_restore_content_info(AvFileContentInfo *pInfo); int MMFileUtilGetMetaDataFromMKV(MMFileFormatContext *formatContext); int MMFileUtilGetMetaDataFromMP4(MMFileFormatContext *formatContext); diff --git a/utils/mm_file_util_tag.c b/utils/mm_file_util_tag.c index a6a1e96..b8c5423 100644 --- a/utils/mm_file_util_tag.c +++ b/utils/mm_file_util_tag.c @@ -1715,24 +1715,20 @@ static int GetTagFromMetaBox(MMFileFormatContext *formatContext, MMFileIOHandle /* set id3v2 data to formatContext */ switch (tagVersion) { - case 2: { - versionCheck = mm_file_id3tag_parse_v222(&tagInfo, id3v2Box.id3v2Data); - break; - } - case 3: { - versionCheck = mm_file_id3tag_parse_v223(&tagInfo, id3v2Box.id3v2Data); - break; - } - case 4: { - versionCheck = mm_file_id3tag_parse_v224(&tagInfo, id3v2Box.id3v2Data); - break; - } + case 2: + versionCheck = mm_file_id3tag_parse_v222(&tagInfo, id3v2Box.id3v2Data, formatContext->extract_artwork); + break; + case 3: + versionCheck = mm_file_id3tag_parse_v223(&tagInfo, id3v2Box.id3v2Data, formatContext->extract_artwork); + break; + case 4: + versionCheck = mm_file_id3tag_parse_v224(&tagInfo, id3v2Box.id3v2Data, formatContext->extract_artwork); + break; case 1: - default: { - debug_error(DEBUG, "tag vesion is not support"); - versionCheck = false; - break; - } + default: + debug_error(DEBUG, "tag vesion is not support"); + versionCheck = false; + break; } if (versionCheck == false) { @@ -2907,7 +2903,7 @@ static AvID3TagList __get_tag_info_v223(const char *tag) } -bool mm_file_id3tag_parse_v222(AvFileContentInfo *pInfo, unsigned char *buffer) +bool mm_file_id3tag_parse_v222(AvFileContentInfo *pInfo, unsigned char *buffer, bool extract_artwork) { unsigned long taglen = 0; unsigned long needToloopv2taglen; @@ -2998,7 +2994,8 @@ bool mm_file_id3tag_parse_v222(AvFileContentInfo *pInfo, unsigned char *buffer) break; case AV_ID3TAG_PICTURE: - _mm_file_id3tag_parse_PIC(pInfo, pExtContent, realCpyFrameNum, (const char*)charset_array[textEncodingType]); + if (extract_artwork) + _mm_file_id3tag_parse_PIC(pInfo, pExtContent, realCpyFrameNum, (const char*)charset_array[textEncodingType]); break; default: @@ -3036,7 +3033,7 @@ bool mm_file_id3tag_parse_v222(AvFileContentInfo *pInfo, unsigned char *buffer) } -bool mm_file_id3tag_parse_v223(AvFileContentInfo *pInfo, unsigned char *buffer) +bool mm_file_id3tag_parse_v223(AvFileContentInfo *pInfo, unsigned char *buffer, bool extract_artwork) { unsigned long taglen = 0; unsigned long needToloopv2taglen; @@ -3245,7 +3242,8 @@ bool mm_file_id3tag_parse_v223(AvFileContentInfo *pInfo, unsigned char *buffer) break; case AV_ID3TAG_PICTURE: - _mm_file_id3tag_parse_APIC(pInfo, (unsigned char *)pExtContent, realCpyFrameNum, charset_array[textEncodingType]); + if (extract_artwork) + _mm_file_id3tag_parse_APIC(pInfo, (unsigned char *)pExtContent, realCpyFrameNum, charset_array[textEncodingType]); break; default: @@ -3288,7 +3286,7 @@ bool mm_file_id3tag_parse_v223(AvFileContentInfo *pInfo, unsigned char *buffer) } -bool mm_file_id3tag_parse_v224(AvFileContentInfo *pInfo, unsigned char *buffer) +bool mm_file_id3tag_parse_v224(AvFileContentInfo *pInfo, unsigned char *buffer, bool extract_artwork) { unsigned long taglen = 0; unsigned long needToloopv2taglen; @@ -3452,7 +3450,8 @@ bool mm_file_id3tag_parse_v224(AvFileContentInfo *pInfo, unsigned char *buffer) break; case AV_ID3TAG_PICTURE: - _mm_file_id3tag_parse_APIC(pInfo, (unsigned char *)pExtContent, realCpyFrameNum, charset_array[textEncodingType]); + if (extract_artwork) + _mm_file_id3tag_parse_APIC(pInfo, (unsigned char *)pExtContent, realCpyFrameNum, charset_array[textEncodingType]); break; default: -- 2.7.4