From: ji.yong.seo Date: Thu, 1 Dec 2016 04:12:45 +0000 (+0900) Subject: modify 360 video parser. X-Git-Tag: accepted/tizen/common/20170109.202413~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F01%2F101401%2F2;p=platform%2Fcore%2Fmultimedia%2Flibmm-fileinfo.git modify 360 video parser. Change-Id: I5411e7583b0fa8d964dd0e268d206cc0b38b61e7 Signed-off-by: ji.yong.seo (cherry picked from commit 3636ddb575175638220b414a7f3b9a818dd01d24) --- diff --git a/include/mm_file.h b/include/mm_file.h index 1711739..9067824 100755 --- a/include/mm_file.h +++ b/include/mm_file.h @@ -51,16 +51,24 @@ extern "C" { #endif +typedef enum { + MMFILE_360_NONE = 0, + MMFILE_360_NON_STITCHED = 0x00010000, + MMFILE_360_STITCHED = 0x00020000, + MMFILE_360_MASK = 0x00001111, +} MMFILE_360_TYPE; + /** * content attributes. */ -#define MM_FILE_CONTENT_DURATION "content-duration" /**< Duration of media */ +#define MM_FILE_CONTENT_DURATION "content-duration" /**< Duration of media */ #define MM_FILE_CONTENT_VIDEO_CODEC "content-video-codec" /**< Used video codec */ -#define MM_FILE_CONTENT_VIDEO_BITRATE "content-video-bitrate" /**< Bitrate of video stream */ -#define MM_FILE_CONTENT_VIDEO_FPS "content-video-fps" /**< Frames per second of video stream */ +#define MM_FILE_CONTENT_VIDEO_FORMAT "content-video-format" /**< Used video format */ +#define MM_FILE_CONTENT_VIDEO_BITRATE "content-video-bitrate" /**< Bitrate of video stream */ +#define MM_FILE_CONTENT_VIDEO_FPS "content-video-fps" /**< Frames per second of video stream */ #define MM_FILE_CONTENT_VIDEO_WIDTH "content-video-width" /**< Width of video stream */ -#define MM_FILE_CONTENT_VIDEO_HEIGHT "content-video-height" /**< Height of video stream */ +#define MM_FILE_CONTENT_VIDEO_HEIGHT "content-video-height" /**< Height of video stream */ #define MM_FILE_CONTENT_VIDEO_THUMBNAIL "content-video-thumbnail" /**< Thumbnail of video stream */ #define MM_FILE_CONTENT_VIDEO_TRACK_INDEX "content-video-track-index" /**< Current stream of video */ #define MM_FILE_CONTENT_VIDEO_TRACK_COUNT "content-video-track-count"/**< Number of video streams */ @@ -75,34 +83,34 @@ extern "C" { /** * tag attributes. */ -#define MM_FILE_TAG_ARTIST "tag-artist" /**< Artist */ -#define MM_FILE_TAG_TITLE "tag-title" /**< Title */ +#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_GENRE "tag-genre" /**< Genre */ #define MM_FILE_TAG_AUTHOR "tag-author" /**< Author / Composer */ #define MM_FILE_TAG_COPYRIGHT "tag-copyright" /**< Copyright */ -#define MM_FILE_TAG_DATE "tag-date" /**< Year */ +#define MM_FILE_TAG_DATE "tag-date" /**< Year */ #define MM_FILE_TAG_DESCRIPTION "tag-description" /**< Description */ #define MM_FILE_TAG_COMMENT "tag-comment" /**< Comment */ #define MM_FILE_TAG_ARTWORK "tag-artwork" /**< Artwork */ -#define MM_FILE_TAG_ARTWORK_SIZE "tag-artwork-size" /**< Artwork size */ +#define MM_FILE_TAG_ARTWORK_SIZE "tag-artwork-size" /**< Artwork size */ #define MM_FILE_TAG_ARTWORK_MIME "tag-artwork-mime" /**< Artwork mime type */ #define MM_FILE_TAG_TRACK_NUM "tag-track-num" /**< Number of tracks */ #define MM_FILE_TAG_CLASSIFICATION "tag-classification" /**< Classification Information */ -#define MM_FILE_TAG_RATING "tag-rating" /**< Rating Information */ -#define MM_FILE_TAG_LONGITUDE "tag-longitude" /**< location Information*/ -#define MM_FILE_TAG_LATIDUE "tag-latitude" /**< location Information*/ -#define MM_FILE_TAG_ALTIDUE "tag-altitude" /**< location Information*/ -#define MM_FILE_TAG_CONDUCTOR "tag-conductor" /**< Conductor Information*/ -#define MM_FILE_TAG_UNSYNCLYRICS "tag-unsynclyrics" /**< Unsynchronized Lyrics Information*/ -#define MM_FILE_TAG_SYNCLYRICS_NUM "tag-synclyrics-num" /**< Synchronized Lyrics Information*/ +#define MM_FILE_TAG_RATING "tag-rating" /**< Rating Information */ +#define MM_FILE_TAG_LONGITUDE "tag-longitude" /**< location Information*/ +#define MM_FILE_TAG_LATIDUE "tag-latitude" /**< location Information*/ +#define MM_FILE_TAG_ALTIDUE "tag-altitude" /**< location Information*/ +#define MM_FILE_TAG_CONDUCTOR "tag-conductor" /**< Conductor Information*/ +#define MM_FILE_TAG_UNSYNCLYRICS "tag-unsynclyrics" /**< Unsynchronized Lyrics Information*/ +#define MM_FILE_TAG_SYNCLYRICS_NUM "tag-synclyrics-num" /**< Synchronized Lyrics Information*/ #define MM_FILE_TAG_RECDATE "tag-recdate" /**< Recoding date */ #define MM_FILE_TAG_ROTATE "tag-rotate" /**< Rotate(Orientation) Information*/ #define MM_FILE_TAG_CDIS "tag-cdis" /**< CDIS in User Data Information*/ #define MM_FILE_TAG_SMTA "tag-smta" /**< SMTA in User Data Information*/ - -#define MM_FILE_TAG_360 "tag-360" /**< 360 content in User Data Information*/ +#define MM_FILE_TAG_360 "tag-360" /**< 360 content in User Data Information*/ +#define MM_FILE_TAG_STITCHED_INFO "tag-stitched_info" /** diff --git a/include/mm_file_formats.h b/include/mm_file_formats.h index bc1794c..68c673d 100755 --- a/include/mm_file_formats.h +++ b/include/mm_file_formats.h @@ -151,6 +151,7 @@ struct _MMFileFormatContext { int cdis; int smta; int is_360; + int stitched_info; /* private data */ void *privateFormatData; diff --git a/mm_file.c b/mm_file.c index 8c9123e..dd10634 100755 --- a/mm_file.c +++ b/mm_file.c @@ -125,11 +125,13 @@ static mmf_attrs_construct_info_t g_tag_attrs[] = { {(char *)"tag-cdis", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, {(char *)"tag-smta", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, {(char *)"tag-360", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, + {(char *)"tag-stitched_info", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, }; static mmf_attrs_construct_info_t g_content_attrs[] = { {(char *)"content-duration", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, {(char *)"content-video-codec", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, + {(char *)"content-video-format", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, {(char *)"content-video-bitrate", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, {(char *)"content-video-fps", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, {(char *)"content-video-width", MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0}, @@ -311,6 +313,7 @@ _info_set_attr_media(mmf_attrs_t *attrs, MMFileFormatContext *formatContext) mm_attrs_set_int_by_name(hattrs, MM_FILE_TAG_SMTA, formatContext->smta); mm_attrs_set_int_by_name(hattrs, MM_FILE_TAG_360, formatContext->is_360); + mm_attrs_set_int_by_name(hattrs, MM_FILE_TAG_STITCHED_INFO, formatContext->stitched_info); if ((formatContext->syncLyricsNum > 0) && (formatContext->syncLyrics)) mm_attrs_set_data_by_name(hattrs, MM_FILE_TAG_SYNCLYRICS, formatContext->syncLyrics, formatContext->syncLyricsNum); @@ -339,6 +342,7 @@ _info_set_attr_media(mmf_attrs_t *attrs, MMFileFormatContext *formatContext) MMFileFormatStream *videoStream = formatContext->streams[MMFILE_VIDEO_STREAM]; + mm_attrs_set_int_by_name(hattrs, MM_FILE_CONTENT_VIDEO_FORMAT, formatContext->formatType); mm_attrs_set_int_by_name(hattrs, MM_FILE_CONTENT_VIDEO_CODEC, videoStream->codecId); mm_attrs_set_int_by_name(hattrs, MM_FILE_CONTENT_VIDEO_BITRATE, videoStream->bitRate); mm_attrs_set_int_by_name(hattrs, MM_FILE_CONTENT_VIDEO_FPS, videoStream->framePerSec); diff --git a/packaging/libmm-fileinfo.spec b/packaging/libmm-fileinfo.spec index f539101..46c6339 100755 --- a/packaging/libmm-fileinfo.spec +++ b/packaging/libmm-fileinfo.spec @@ -1,6 +1,6 @@ Name: libmm-fileinfo Summary: Media Fileinfo -Version: 0.6.51 +Version: 0.6.52 Release: 0 Group: System/Libraries License: Apache-2.0 diff --git a/utils/mm_file_util_tag.c b/utils/mm_file_util_tag.c index 4e52dd1..35e537e 100755 --- a/utils/mm_file_util_tag.c +++ b/utils/mm_file_util_tag.c @@ -26,6 +26,7 @@ #include #include +#include "mm_file.h" #include "mm_file_debug.h" #include "mm_file_utils.h" @@ -1316,13 +1317,6 @@ EXPORT_API int MMFileUtilGetMetaDataFromMP4(MMFileFormatContext *formatContext) chunk_size = basic_header.size; } -#ifdef __MMFILE_TEST_MODE__ - debug_msg("START_OFFSET:[%lld] SIZE:[%d Byte] 4CC:[%c%c%c%c]\n", - basic_header.start_offset, basic_header.size, - ((char *)&basic_header.type)[0], ((char *)&basic_header.type)[1], - ((char *)&basic_header.type)[2], ((char *)&basic_header.type)[3]); -#endif - switch (basic_header.type) { case FOURCC('m', 'o', 'o', 'v'): { #ifdef __MMFILE_TEST_MODE__ @@ -1452,31 +1446,48 @@ EXPORT_API int MMFileUtilGetMetaDataFromMP4(MMFileFormatContext *formatContext) case FOURCC('t', 'r', 'a', 'k'): { #ifdef __MMFILE_TEST_MODE__ - debug_msg("MPEG4: [trak] SIZE: [%d]Byte\n", basic_header.size); + debug_msg("MPEG4: [trak] SIZE: [%lld]Byte\n", chunk_size); #endif break; } case FOURCC('u', 'u', 'i', 'd'): { #ifdef __MMFILE_TEST_MODE__ - debug_msg("MPEG4: [uuid] SIZE: [%d]Byte\n", basic_header.size); + debug_msg("MPEG4: [uuid] SIZE: [%lld]Byte\n", chunk_size); #endif - if (!formatContext->is_360) { - unsigned long uuid[4] = {0, }; + unsigned long uuid[4] = {0, }; + + mmfile_read(fp, (unsigned char *)uuid, sizeof(uuid)); + + if (mmfile_io_be_uint32(uuid[0]) == 0xffcc8263 + && mmfile_io_be_uint32(uuid[1]) == 0xf8554a93 + && mmfile_io_be_uint32(uuid[2]) == 0x8814587a + && mmfile_io_be_uint32(uuid[3]) == 0x02521fdd) { + char *str = NULL; + str = (char *)malloc(basic_header.size); - mmfile_read(fp, (unsigned char *)uuid, sizeof(uuid)); + if(str != NULL) { + memset(str, 0, basic_header.size); + mmfile_read(fp, (unsigned char *)str, basic_header.size); - if (mmfile_io_be_uint32(uuid[0]) == 0xffcc8263 - && mmfile_io_be_uint32(uuid[1]) == 0xf8554a93 - && mmfile_io_be_uint32(uuid[2]) == 0x8814587a - && mmfile_io_be_uint32(uuid[3]) == 0x02521fdd) { - formatContext->is_360 = 1; + if(strstr(str, "true")) + formatContext->is_360 = 1; + else + formatContext->is_360 = 0; + + if(formatContext->is_360 == 1) { + if (strstr(str, "true")) + formatContext->stitched_info = MMFILE_360_STITCHED; + else + formatContext->stitched_info = MMFILE_360_NON_STITCHED; + } else { + formatContext->stitched_info = MMFILE_360_NONE; + } } - ret = mmfile_seek(fp, basic_header.start_offset + basic_header.size, SEEK_SET); } + ret = mmfile_seek(fp, basic_header.start_offset + chunk_size - sizeof(uuid), SEEK_SET); break; } - default: { #ifdef __MMFILE_TEST_MODE__ debug_msg("4CC: Not Support [%c%c%c%c]. So skip it. Size [%lld Byte]\n",