From c7819a1c24b6830396878b0129f8293e5fb50c55 Mon Sep 17 00:00:00 2001 From: "ji.yong.seo" Date: Wed, 25 Feb 2015 12:17:49 +0900 Subject: [PATCH] support album art. Change-Id: I3f520b61e1ad24c4a285763cf52ec2fe1e33cca9 --- formats/ffmpeg/include/mm_file_format_aac.h | 1 + formats/ffmpeg/include/mm_file_format_id3tag.h | 2 ++ formats/ffmpeg/mm_file_format_aac.c | 1 + formats/ffmpeg/mm_file_format_ffmpeg.c | 3 +++ formats/ffmpeg/mm_file_format_mp3.c | 1 + formats/ffmpeg/mm_file_formats.c | 1 + include/mm_file.h | 1 + include/mm_file_formats.h | 1 + mm_file.c | 4 +++- tests/mm_file_test.c | 3 +++ utils/include/mm_file_utils.h | 2 ++ utils/mm_file_util_print.c | 1 + utils/mm_file_util_tag.c | 1 + utils/mm_file_util_validity.c | 6 +++--- 14 files changed, 24 insertions(+), 4 deletions(-) diff --git a/formats/ffmpeg/include/mm_file_format_aac.h b/formats/ffmpeg/include/mm_file_format_aac.h index 25f3328..177a09a 100755 --- a/formats/ffmpeg/include/mm_file_format_aac.h +++ b/formats/ffmpeg/include/mm_file_format_aac.h @@ -60,6 +60,7 @@ typedef struct _mmfileaactaginfo { char *author; char *artist; char *album; + char *album_artist; char *year; char *copyright; char *comment; diff --git a/formats/ffmpeg/include/mm_file_format_id3tag.h b/formats/ffmpeg/include/mm_file_format_id3tag.h index 5b5311b..042d474 100755 --- a/formats/ffmpeg/include/mm_file_format_id3tag.h +++ b/formats/ffmpeg/include/mm_file_format_id3tag.h @@ -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); diff --git a/formats/ffmpeg/mm_file_format_aac.c b/formats/ffmpeg/mm_file_format_aac.c index 7975af1..df6f9db 100755 --- a/formats/ffmpeg/mm_file_format_aac.c +++ b/formats/ffmpeg/mm_file_format_aac.c @@ -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; diff --git a/formats/ffmpeg/mm_file_format_ffmpeg.c b/formats/ffmpeg/mm_file_format_ffmpeg.c index 273d147..dd6542f 100755 --- a/formats/ffmpeg/mm_file_format_ffmpeg.c +++ b/formats/ffmpeg/mm_file_format_ffmpeg.c @@ -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); diff --git a/formats/ffmpeg/mm_file_format_mp3.c b/formats/ffmpeg/mm_file_format_mp3.c index 8b6e48a..2fc7740 100755 --- a/formats/ffmpeg/mm_file_format_mp3.c +++ b/formats/ffmpeg/mm_file_format_mp3.c @@ -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); diff --git a/formats/ffmpeg/mm_file_formats.c b/formats/ffmpeg/mm_file_formats.c index 572ecb1..d7bc5f5 100755 --- a/formats/ffmpeg/mm_file_formats.c +++ b/formats/ffmpeg/mm_file_formats.c @@ -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); diff --git a/include/mm_file.h b/include/mm_file.h index 16f3e7c..e2f01fe 100755 --- a/include/mm_file.h +++ b/include/mm_file.h @@ -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 */ diff --git a/include/mm_file_formats.h b/include/mm_file_formats.h index 3c856d6..da3ea62 100755 --- a/include/mm_file_formats.h +++ b/include/mm_file_formats.h @@ -132,6 +132,7 @@ struct _MMFileFormatContext { char *author; char *composer; char *album; + char *album_artist; char *copyright; char *description; char *comment; diff --git a/mm_file.c b/mm_file.c index 945b0b8..1ea2584 100755 --- 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); diff --git a/tests/mm_file_test.c b/tests/mm_file_test.c index bc192c7..d13d78a 100755 --- a/tests/mm_file_test.c +++ b/tests/mm_file_test.c @@ -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); diff --git a/utils/include/mm_file_utils.h b/utils/include/mm_file_utils.h index ac17482..62f649f 100755 --- a/utils/include/mm_file_utils.h +++ b/utils/include/mm_file_utils.h @@ -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); diff --git a/utils/mm_file_util_print.c b/utils/mm_file_util_print.c index 126e64c..7aa888f 100755 --- a/utils/mm_file_util_print.c +++ b/utils/mm_file_util_print.c @@ -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); diff --git a/utils/mm_file_util_tag.c b/utils/mm_file_util_tag.c index ce40f36..ca4e4f7 100755 --- a/utils/mm_file_util_tag.c +++ b/utils/mm_file_util_tag.c @@ -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); diff --git a/utils/mm_file_util_validity.c b/utils/mm_file_util_validity.c index 11e25c8..e345f7a 100755 --- a/utils/mm_file_util_validity.c +++ b/utils/mm_file_util_validity.c @@ -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; } -- 2.7.4