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 */
/**
* 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"
/**
int cdis;
int smta;
int is_360;
+ int stitched_info;
/* private data */
void *privateFormatData;
{(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},
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);
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);
Name: libmm-fileinfo
Summary: Media Fileinfo
-Version: 0.6.51
+Version: 0.6.52
Release: 0
Group: System/Libraries
License: Apache-2.0
#include <vconf.h>
#include <glib.h>
+#include "mm_file.h"
#include "mm_file_debug.h"
#include "mm_file_utils.h"
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__
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, "<GSpherical:Spherical>true</GSpherical:Spherical>"))
+ formatContext->is_360 = 1;
+ else
+ formatContext->is_360 = 0;
+
+ if(formatContext->is_360 == 1) {
+ if (strstr(str, "<GSpherical:Stitched>true</GSpherical:Stitched>"))
+ 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",