support album art. 13/35813/2
authorji.yong.seo <ji.yong.seo@samsung.com>
Wed, 25 Feb 2015 03:17:49 +0000 (12:17 +0900)
committerji.yong seo <ji.yong.seo@samsung.com>
Thu, 26 Feb 2015 04:56:14 +0000 (20:56 -0800)
Change-Id: I3f520b61e1ad24c4a285763cf52ec2fe1e33cca9

14 files changed:
formats/ffmpeg/include/mm_file_format_aac.h
formats/ffmpeg/include/mm_file_format_id3tag.h
formats/ffmpeg/mm_file_format_aac.c
formats/ffmpeg/mm_file_format_ffmpeg.c
formats/ffmpeg/mm_file_format_mp3.c
formats/ffmpeg/mm_file_formats.c
include/mm_file.h
include/mm_file_formats.h
mm_file.c
tests/mm_file_test.c
utils/include/mm_file_utils.h
utils/mm_file_util_print.c
utils/mm_file_util_tag.c
utils/mm_file_util_validity.c

index 25f3328..177a09a 100755 (executable)
@@ -60,6 +60,7 @@ typedef struct _mmfileaactaginfo {
   char *author;
   char *artist;
   char *album;
+  char *album_artist;
   char *year;
   char *copyright;
   char *comment;
index 5b5311b..042d474 100755 (executable)
@@ -205,6 +205,7 @@ typedef struct
        char                    *pComment;
        char                    *pRating;
        char                    *pAlbum;                //Album/Movie/
+       char                    *pAlbum_Artist;
        char                    *pYear;
        char                    *pGenre; 
        char                    *pTrackNum;             //Track number/Position in set
@@ -248,6 +249,7 @@ inline static void mm_file_free_AvFileContentInfo (AvFileContentInfo *pInfo)
                if (pInfo->pComment) mmfile_free (pInfo->pComment);
                if (pInfo->pRating) mmfile_free (pInfo->pRating);
                if (pInfo->pAlbum) mmfile_free (pInfo->pAlbum);
+               if (pInfo->pAlbum_Artist) mmfile_free (pInfo->pAlbum_Artist);
                if (pInfo->pYear) mmfile_free (pInfo->pYear);
                if (pInfo->pGenre) mmfile_free (pInfo->pGenre); 
                if (pInfo->pTrackNum) mmfile_free (pInfo->pTrackNum);
index 7975af1..df6f9db 100755 (executable)
@@ -124,6 +124,7 @@ void _aac_init_handle(tMMFILE_AAC_HANDLE* privateData)
   privateData->tagInfo.author = NULL;
   privateData->tagInfo.artist = NULL;
   privateData->tagInfo.album = NULL;
+  privateData->tagInfo.album_artist = NULL;
   privateData->tagInfo.year = NULL;
   privateData->tagInfo.copyright = NULL;
   privateData->tagInfo.comment = NULL;
index 273d147..dd6542f 100755 (executable)
@@ -477,6 +477,9 @@ int mmfile_format_read_tag_ffmpg (MMFileFormatContext *formatContext)
                                                } else if(!strcasecmp(tag->key, "album")) {
                                                        if (formatContext->album)       free (formatContext->album);
                                                        formatContext->album = mmfile_strdup (tag->value);
+                                               } else if(!strcasecmp(tag->key, "album_artist")) {
+                                                       if (formatContext->album_artist)        free (formatContext->album_artist);
+                                                       formatContext->album_artist = mmfile_strdup (tag->value);
                                                } else if(!strcasecmp(tag->key, "copyright")) {
                                                        if (formatContext->copyright)   free (formatContext->copyright);
                                                        formatContext->copyright = mmfile_strdup (tag->value);
index 8b6e48a..2fc7740 100755 (executable)
@@ -202,6 +202,7 @@ int mmfile_format_read_tag_mp3    (MMFileFormatContext *formatContext)
        if (privateData->pCopyright)            formatContext->copyright = mmfile_strdup(privateData->pCopyright);
        if (privateData->pComment)              formatContext->comment = mmfile_strdup(privateData->pComment);
        if (privateData->pAlbum)                        formatContext->album = mmfile_strdup(privateData->pAlbum);
+       if (privateData->pAlbum_Artist)                 formatContext->album_artist = mmfile_strdup(privateData->pAlbum_Artist);
        if (privateData->pYear)                         formatContext->year = mmfile_strdup(privateData->pYear);
        if (privateData->pGenre)                        formatContext->genre = mmfile_strdup(privateData->pGenre);
        if (privateData->pTrackNum)             formatContext->tagTrackNum = mmfile_strdup(privateData->pTrackNum);
index 572ecb1..d7bc5f5 100755 (executable)
@@ -78,6 +78,7 @@ static int _CleanupFrameContext (MMFileFormatContext *formatContext, bool clean_
                if (formatContext->author)                      mmfile_free(formatContext->author);
                if (formatContext->composer)                    mmfile_free(formatContext->composer);
                if (formatContext->album)                               mmfile_free(formatContext->album);
+               if (formatContext->album_artist)                mmfile_free(formatContext->album_artist);
                if (formatContext->copyright)                   mmfile_free(formatContext->copyright);
                if (formatContext->description)                 mmfile_free(formatContext->description);
                if (formatContext->comment)                     mmfile_free(formatContext->comment);
index 16f3e7c..e2f01fe 100755 (executable)
@@ -76,6 +76,7 @@ extern "C" {
 #define        MM_FILE_TAG_ARTIST                      "tag-artist"                    /**< Artist */
 #define        MM_FILE_TAG_TITLE                               "tag-title"                     /**< Title */
 #define        MM_FILE_TAG_ALBUM                       "tag-album"                     /**< Album */
+#define        MM_FILE_TAG_ALBUM_ARTIST        "tag-album-artist"                      /**< Album_Artist */
 #define        MM_FILE_TAG_GENRE                               "tag-genre"                     /**< Genre */
 #define        MM_FILE_TAG_AUTHOR                      "tag-author"                    /**< Author / Composer */
 #define        MM_FILE_TAG_COPYRIGHT           "tag-copyright"         /**< Copyright */
index 3c856d6..da3ea62 100755 (executable)
@@ -132,6 +132,7 @@ struct _MMFileFormatContext {
        char *author;
        char *composer;
        char *album;
+       char *album_artist;
        char *copyright;
        char *description;
        char *comment;
index 945b0b8..1ea2584 100755 (executable)
--- a/mm_file.c
+++ b/mm_file.c
@@ -100,6 +100,7 @@ static mmf_attrs_construct_info_t g_tag_attrs[] = {
        {"tag-artist",                  MMF_VALUE_TYPE_STRING,  MM_ATTRS_FLAG_RW, (void *)NULL},
        {"tag-title",                   MMF_VALUE_TYPE_STRING,  MM_ATTRS_FLAG_RW, (void *)NULL},
        {"tag-album",                   MMF_VALUE_TYPE_STRING,  MM_ATTRS_FLAG_RW, (void *)NULL},
+       {"tag-album-artist",    MMF_VALUE_TYPE_STRING,  MM_ATTRS_FLAG_RW, (void *)NULL},
        {"tag-genre",                   MMF_VALUE_TYPE_STRING,  MM_ATTRS_FLAG_RW, (void *)NULL},
        {"tag-author",                  MMF_VALUE_TYPE_STRING,  MM_ATTRS_FLAG_RW, (void *)NULL},
        {"tag-copyright",               MMF_VALUE_TYPE_STRING,  MM_ATTRS_FLAG_RW, (void *)NULL},
@@ -284,7 +285,8 @@ _info_set_attr_media (mmf_attrs_t *attrs, MMFileFormatContext *formatContext)
                if (formatContext->author)                      mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_AUTHOR, formatContext->author);
                if (formatContext->composer && formatContext->author == NULL)   
                                                                                        mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_AUTHOR, formatContext->composer);
-               if (formatContext->album)                               mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_ALBUM   , formatContext->album);
+               if (formatContext->album)                               mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_ALBUM, formatContext->album);
+               if (formatContext->album_artist)                                mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_ALBUM_ARTIST, formatContext->album_artist);
                if (formatContext->copyright)                   mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_COPYRIGHT, formatContext->copyright);
                if (formatContext->description)                 mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_DESCRIPTION, formatContext->description);
                if (formatContext->comment)                     mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_COMMENT, formatContext->comment);
index bc192c7..d13d78a 100755 (executable)
@@ -60,6 +60,7 @@ typedef struct _TagContext {
        mmfile_value_t artist;
        mmfile_value_t title;
        mmfile_value_t album;
+       mmfile_value_t album_artist;
        mmfile_value_t genre;
        mmfile_value_t author;
        mmfile_value_t copyright;
@@ -319,6 +320,7 @@ static int mmfile_get_file_infomation (void *data, void* user_data, bool file_te
                                                                        &err_attr_name,
                                                                        MM_FILE_TAG_ARTIST, &ctag.artist.value.s_val, &ctag.artist.len,
                                                                        MM_FILE_TAG_ALBUM, &ctag.album.value.s_val, &ctag.album.len,
+                                                                       MM_FILE_TAG_ALBUM_ARTIST, &ctag.album_artist.value.s_val, &ctag.album_artist.len,
                                                                        MM_FILE_TAG_TITLE, &ctag.title.value.s_val, &ctag.title.len,
                                                                        MM_FILE_TAG_GENRE, &ctag.genre.value.s_val, &ctag.genre.len,
                                                                        MM_FILE_TAG_AUTHOR, &ctag.author.value.s_val, &ctag.author.len,
@@ -361,6 +363,7 @@ static int mmfile_get_file_infomation (void *data, void* user_data, bool file_te
                printf("# artist: [%s]\n", ctag.artist.value.s_val);
                printf("# title: [%s]\n", ctag.title.value.s_val);
                printf("# album: [%s]\n", ctag.album.value.s_val);
+               printf("# album_artist: [%s]\n", ctag.album_artist.value.s_val);
                printf("# genre: [%s]\n", ctag.genre.value.s_val);
                printf("# author: [%s]\n", ctag.author.value.s_val);
                printf("# copyright: [%s]\n", ctag.copyright.value.s_val);
index ac17482..62f649f 100755 (executable)
@@ -479,6 +479,7 @@ typedef struct
        char                    *pComment;
        char                    *pRating;
        char                    *pAlbum;                //Album/Movie/
+       char                    *pAlbum_Artist;
        char                    *pYear;
        char                    *pGenre; 
        char                    *pTrackNum;             //Track number/Position in set
@@ -534,6 +535,7 @@ inline static void mm_file_free_AvFileContentInfo (AvFileContentInfo *pInfo)
                if (pInfo->pComment) mmfile_free (pInfo->pComment);
                if (pInfo->pRating) mmfile_free (pInfo->pRating);
                if (pInfo->pAlbum) mmfile_free (pInfo->pAlbum);
+               if (pInfo->pAlbum_Artist) mmfile_free (pInfo->pAlbum_Artist);
                if (pInfo->pYear) mmfile_free (pInfo->pYear);
                if (pInfo->pGenre) mmfile_free (pInfo->pGenre); 
                if (pInfo->pTrackNum) mmfile_free (pInfo->pTrackNum);
index 126e64c..7aa888f 100755 (executable)
@@ -68,6 +68,7 @@ void mmfile_format_print_tags (MMFileFormatContext *in)
                if (in->author)                 debug_msg ("author = %s\n", in->author);
                if (in->composer)                       debug_msg ("composer = %s\n", in->composer);
                if (in->album)                  debug_msg ("album = %s\n", in->album);
+               if (in->album_artist)                   debug_msg ("album_artist = %s\n", in->album_artist);
                if (in->copyright)                      debug_msg ("copyright = %s\n", in->copyright);
                if (in->comment)                        debug_msg ("comment = %s\n", in->comment);
                if (in->genre)                  debug_msg ("genre = %s\n", in->genre);
index ce40f36..ca4e4f7 100755 (executable)
@@ -1151,6 +1151,7 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                if (!formatContext->copyright)      formatContext->copyright = mmfile_strdup((const char*)tagInfo.pCopyright);
                if (!formatContext->comment)        formatContext->comment = mmfile_strdup((const char*)tagInfo.pComment);
                if (!formatContext->album)          formatContext->album = mmfile_strdup((const char*)tagInfo.pAlbum);
+               if (!formatContext->album_artist)   formatContext->album_artist = mmfile_strdup((const char*)tagInfo.pAlbum_Artist);
                if (!formatContext->year)           formatContext->year = mmfile_strdup((const char*)tagInfo.pYear);
                if (!formatContext->genre)          formatContext->genre = mmfile_strdup((const char*)tagInfo.pGenre);
                if (!formatContext->tagTrackNum)    formatContext->tagTrackNum = mmfile_strdup((const char*)tagInfo.pTrackNum);
index 11e25c8..e345f7a 100755 (executable)
@@ -1163,18 +1163,18 @@ int MMFileFormatIsValidMatroska (const char *mmfileuri)
            debug_msg ("Initial total header size = [0x%x]\n", total);
 
            while (size <= 8 && !(total & len_mask)) {
-             debug_error ("This case can not be handled yet....")
+             debug_error ("This case can not be handled yet....");
              size++;
              len_mask >>= 1;
            }
            if (size > 8) {
-               debug_error ("This case can not be handled yet....")
+               debug_error ("This case can not be handled yet....");
                ret = 0;
                goto exit;
            }
            total &= (len_mask - 1);
            while (n < size) {
-             debug_error ("This case can not be handled yet....")
+             debug_error ("This case can not be handled yet....");
              ret = 0;
              goto exit;
            }