Separate album art extraction 12/248712/4 accepted/tizen/unified/20201209.124852 submit/tizen/20201208.235402
authorMinje Ahn <minje.ahn@samsung.com>
Tue, 1 Dec 2020 23:12:18 +0000 (08:12 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Tue, 8 Dec 2020 23:55:56 +0000 (08:55 +0900)
Changed to extract album art only on request.

Change-Id: I0ad6da0da25905535d5aec94ec74a3069d0d0e11
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
formats/ffmpeg/mm_file_format_aac.c
formats/ffmpeg/mm_file_format_mp3.c
include/mm_file.h
include/mm_file_formats.h
mm_file.c
packaging/libmm-fileinfo.spec
utils/include/mm_file_utils.h
utils/mm_file_util_tag.c

index 8ec9ca3..4bcc771 100644 (file)
@@ -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);
index e2d48d5..460b338 100644 (file)
@@ -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);
 
index 270f576..6e9087d 100755 (executable)
@@ -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().<BR>
@@ -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.<BR>
index 001c5be..94864c7 100755 (executable)
@@ -102,7 +102,7 @@ struct _MMFileFormatContext {
        int notsupport;
        int formatType;
        int commandType;        /* TAG or CONTENTS */
-
+       bool extract_artwork;
        MMFileSourceType *filesrc;      /*ref only*/
        char *uriFileName;
 
index 53ad6c1..ef77535 100644 (file)
--- 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)
 {
index ba4ea9c..3e0d3d3 100644 (file)
@@ -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
index 83cde2f..280a43b 100755 (executable)
@@ -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);
index a6a1e96..b8c5423 100644 (file)
@@ -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: