Add Spherical Video Metadata V2 support 48/144648/3
authorMykola Alieksieiev <m.alieksieie@samsung.com>
Thu, 17 Aug 2017 09:39:39 +0000 (12:39 +0300)
committerMykola Alieksieiev <m.alieksieie@samsung.com>
Thu, 31 Aug 2017 13:36:22 +0000 (16:36 +0300)
Change-Id: Idbbbabff024f86015b38c617a7b7c08b7e0ebe08
Signed-off-by: Mykola Alieksieiev <m.alieksieie@samsung.com>
include/metadata_extractor_private.h
packaging/capi-media-metadata-extractor.spec
src/metadata_extractor.c
test/metadata_extractor_test.c

index 0834a775d92160a26db6b76cc7a2d1741b47649c..f1bde6681948f3b131130bf428cc183f7b8ad600 100755 (executable)
@@ -70,24 +70,38 @@ typedef struct {
 
 /*TODO: Move attributes to metadata_extractor_type.h after ACR*/
 #ifdef SUPPORT_GSPHERICAL_METADATA
-#define METADATA_360_STITCHED                                  35 /**< Flag indicating if the video is stitched (Since 4.0) */
-#define METADATA_360_STITCHING_SOFTWARE                        36 /**< Software used to stitch the spherical video (Since 4.0) */
-#define METADATA_360_PROJECTION_TYPE                   37 /**< Projection type used in the video frames (Since 4.0) */
-#define METADATA_360_STEREO_MODE                               38 /**< Description of stereoscopic 3D layout (Since 4.0) */
-#define METADATA_360_SOURCE_COUNT                              39 /**< Number of cameras used to create the spherical video (Since 4.0) */
-#define METADATA_360_INIT_VIEW_HEADING                 40 /**< The heading angle of the initial view in degrees. (Since 4.0) */
-#define METADATA_360_INIT_VIEW_PITCH                   41 /**< The pitch angle of the initial view in degrees (Since 4.0) */
-#define METADATA_360_INIT_VIEW_ROLL                    42 /**< The roll angle of the initial view in degrees (Since 4.0) */
-#define METADATA_360_TIMESTAMP                                 43 /**< Epoch timestamp of when the first frame in the video was recorded (Since 4.0) */
-#define METADATA_360_FULL_PANO_WIDTH                   44 /**< Width of the encoded video frame in pixels (Since 4.0) */
-#define METADATA_360_FULL_PANO_HEIGHT                  45 /**< Height of the encoded video frame in pixels (Since 4.0) */
-#define METADATA_360_CROPPED_AREA_IMAGE_WIDTH  46 /**< Width of the video frame to display (e.g. cropping) (Since 4.0) */
-#define METADATA_360_CROPPED_AREA_IMAGE_HEIGHT 47 /**< Height of the video frame to display (e.g. cropping) (Since 4.0) */
-#define METADATA_360_CROPPED_AREA_LEFT                 48 /**< Column where the left edge of the image was cropped from the full sized panorama (Since 4.0) */
-#define METADATA_360_CROPPED_AREA_TOP                  49 /**< Row where the top edge of the image was cropped from the full sized panorama (Since 4.0) */
-#define METADATA_AMBISONIC_TYPE                                        50 /**< Ambisonics type in User Data Information (Since 4.0) */
-#define METADATA_AMBISONIC_FORMAT                              51 /**< Ambisonics format in User Data Information (Since 4.0) */
-#define METADATA_AMBISONIC_ORDER                               52 /**< Ambisonics order in User Data Information (Since 4.0) */
+
+#define METADATA_360_V1_STITCHED                                       35 /**< Flag indicating if the video is stitched. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_STITCHING_SOFTWARE                     36 /**< Software used to stitch the spherical video. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_PROJECTION_TYPE                                37 /**< Projection type used in the video frames. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_STEREO_MODE                                    38 /**< Description of stereoscopic 3D layout. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_SOURCE_COUNT                           39 /**< Number of cameras used to create the spherical video. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_INIT_VIEW_HEADING                      40 /**< The heading angle of the initial view in degrees. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_INIT_VIEW_PITCH                                41 /**< The pitch angle of the initial view in degrees. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_INIT_VIEW_ROLL                                 42 /**< The roll angle of the initial view in degrees. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_TIMESTAMP                                      43 /**< Epoch timestamp of when the first frame in the video was recorded. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_FULL_PANO_WIDTH                                44 /**< Width of the encoded video frame in pixels. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_FULL_PANO_HEIGHT                       45 /**< Height of the encoded video frame in pixels. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_CROPPED_AREA_IMAGE_WIDTH       46 /**< Width of the video frame to display (e.g. cropping). Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_CROPPED_AREA_IMAGE_HEIGHT      47 /**< Height of the video frame to display (e.g. cropping). Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_CROPPED_AREA_LEFT                      48 /**< Column where the left edge of the image was cropped from the full sized panorama. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V1_CROPPED_AREA_TOP                       49 /**< Row where the top edge of the image was cropped from the full sized panorama. Spherical Video Metadata RFC v1 (Since 4.0) */
+#define METADATA_360_V2_STEREO_MODE                                    50 /**< Stereo frame layout. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_METADATA_SOURCE                                51 /**< Tool used to create the Spherical Video Metadata V2 (Since 4.0) */
+#define METADATA_360_V2_PROJ_TYPE                                      52 /**< Projection type. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_POSE_YAW                                       53 /**< Counter-clockwise rotation in degrees around the up vector. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_POSE_PITCH                                     54 /**< Counter-clockwise rotation in degrees around the right vector post yaw transform. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_POSE_ROLL                                      55 /**< Clockwise-rotation in degrees around the forward vector post yaw and pitch transform. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_CBMP_LAYOUT                                    56 /**< Layout of cube faces for the Cubemap Projection. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_CBMP_PADDING                           57 /**< Number of pixels to pad from the edge of each cube face for the Cubemap Projection. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_EQUI_BOUNDS_TOP                                58 /**< Amount from the top of the frame to crop. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_EQUI_BOUNDS_BOTTOM                     59 /**< Amount from the bottom of the frame to crop. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_EQUI_BOUNDS_LEFT                       60 /**< Amount from the left of the frame to crop. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_360_V2_EQUI_BOUNDS_RIGHT                      61 /**< Amount from the right of the frame to crop. Spherical Video Metadata RFC v2 (Since 4.0) */
+#define METADATA_AMBISONIC_TYPE                                                62 /**< Ambisonics type in User Data Information (Since 4.0) */
+#define METADATA_AMBISONIC_FORMAT                                      63 /**< Ambisonics format in User Data Information (Since 4.0) */
+#define METADATA_AMBISONIC_ORDER                                       64 /**< Ambisonics order in User Data Information (Since 4.0) */
+
 #endif
 
 #ifdef __cplusplus
index 0b95081a0ab4b54605870b7b788088e47ce7227a..619b07701aff2a2aa161f40d541921c15e396e88 100755 (executable)
@@ -31,6 +31,7 @@ export CFLAGS+=" -Wextra -Wno-array-bounds"
 export CFLAGS+=" -Wno-ignored-qualifiers -Wno-unused-parameter -Wshadow"
 export CFLAGS+=" -Wwrite-strings -Wswitch-default"
 #export CFLAGS+=" -DSUPPORT_GSPHERICAL_METADATA"
+
 MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
 %cmake . -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
 make %{?jobs:-j%jobs}
index 44c2d16e25ce7e8a29902cf54e0d3e9ea22c2ff9..26b43495c700b650f1da9fbc139385c9e20da020 100755 (executable)
@@ -74,22 +74,37 @@ static int __metadata_extractor_destroy_handle(metadata_extractor_s *metadata);
 static int __metadata_extractor_get_audio_codec(metadata_extractor_s *metadata, char **audio_codec);
 static int __metadata_extractor_get_video_codec(metadata_extractor_s *metadata, char **video_codec);
 static int __metadata_extractor_get_is_360(metadata_extractor_s *metadata, int *is_360);
+
 #ifdef SUPPORT_GSPHERICAL_METADATA
-static int __metadata_extractor_get_is_stitched(metadata_extractor_s *metadata, int *is_stitched);
-static int __metadata_extractor_get_projection_type(metadata_extractor_s *metadata, char **projection_type);
-static int __metadata_extractor_get_stitching_software(metadata_extractor_s *metadata, char **stitching_software);
-static int __metadata_extractor_get_stereo_mode(metadata_extractor_s *metadata, char **stereo_mode);
-static int __metadata_extractor_get_source_count(metadata_extractor_s *metadata, int *source_count);
-static int __metadata_extractor_get_initial_view_heading_degrees(metadata_extractor_s *metadata, int32_t *initial_view_heading_degrees);
-static int __metadata_extractor_get_initial_view_pitch_degrees(metadata_extractor_s *metadata, int32_t *initial_view_pitch_degrees);
-static int __metadata_extractor_get_initial_view_roll_degrees(metadata_extractor_s *metadata, int32_t *initial_view_roll_degrees);
-static int __metadata_extractor_get_timestamp(metadata_extractor_s *metadata, int *timestamp);
-static int __metadata_extractor_get_full_pano_width_pixels(metadata_extractor_s *metadata, int *full_pano_width_pixels);
-static int __metadata_extractor_get_full_pano_height_pixels(metadata_extractor_s *metadata, int *full_pano_height_pixels);
-static int __metadata_extractor_get_cropped_area_image_width(metadata_extractor_s *metadata, int *cropped_area_image_width);
-static int __metadata_extractor_get_cropped_area_image_height(metadata_extractor_s *metadata, int *cropped_area_image_height);
-static int __metadata_extractor_get_cropped_area_left(metadata_extractor_s *metadata, int *cropped_area_left);
-static int __metadata_extractor_get_cropped_area_top(metadata_extractor_s *metadata, int *cropped_area_top);
+static int __metadata_extractor_get_is_stitched_v1(metadata_extractor_s *metadata, int *is_stitched);
+static int __metadata_extractor_get_projection_type_v1(metadata_extractor_s *metadata, char **projection_type);
+static int __metadata_extractor_get_stitching_software_v1(metadata_extractor_s *metadata, char **stitching_software);
+static int __metadata_extractor_get_stereo_mode_v1(metadata_extractor_s *metadata, char **stereo_mode);
+static int __metadata_extractor_get_source_count_v1(metadata_extractor_s *metadata, int *source_count);
+static int __metadata_extractor_get_initial_view_heading_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_heading_degrees);
+static int __metadata_extractor_get_initial_view_pitch_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_pitch_degrees);
+static int __metadata_extractor_get_initial_view_roll_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_roll_degrees);
+static int __metadata_extractor_get_timestamp_v1(metadata_extractor_s *metadata, int *timestamp);
+static int __metadata_extractor_get_full_pano_width_pixels_v1(metadata_extractor_s *metadata, int *full_pano_width_pixels);
+static int __metadata_extractor_get_full_pano_height_pixels_v1(metadata_extractor_s *metadata, int *full_pano_height_pixels);
+static int __metadata_extractor_get_cropped_area_image_width_v1(metadata_extractor_s *metadata, int *cropped_area_image_width);
+static int __metadata_extractor_get_cropped_area_image_height_v1(metadata_extractor_s *metadata, int *cropped_area_image_height);
+static int __metadata_extractor_get_cropped_area_left_v1(metadata_extractor_s *metadata, int *cropped_area_left);
+static int __metadata_extractor_get_cropped_area_top_v1(metadata_extractor_s *metadata, int *cropped_area_top);
+
+static int __metadata_extractor_get_stereo_mode_v2(metadata_extractor_s *metadata, int *stereo_mode_v2);
+static int __metadata_extractor_get_proj_type_v2(metadata_extractor_s *metadata, int *proj_type_v2);
+static int __metadata_extractor_get_metadata_source_v2(metadata_extractor_s *metadata, char **metadata_source_v2);
+static int __metadata_extractor_get_pose_yaw_degrees_v2(metadata_extractor_s *metadata, int *pose_yaw_degrees_v2);
+static int __metadata_extractor_get_pose_pitch_degrees_v2(metadata_extractor_s *metadata, int *pose_pitch_degrees_v2);
+static int __metadata_extractor_get_pose_roll_degrees_v2(metadata_extractor_s *metadata, int *pose_roll_degrees_v2);
+static int __metadata_extractor_get_cbmp_layout_v2(metadata_extractor_s *metadata, int *cbmp_layout_v2);
+static int __metadata_extractor_get_cbmp_padding_v2(metadata_extractor_s *metadata, int *cbmp_padding_v2);
+static int __metadata_extractor_get_equi_projection_bounds_top_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_top_v2);
+static int __metadata_extractor_get_equi_projection_bounds_bottom_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_bottom_v2);
+static int __metadata_extractor_get_equi_projection_bounds_left_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_left_v2);
+static int __metadata_extractor_get_equi_projection_bounds_right_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_right_v2);
+
 static int __metadata_extractor_get_ambisonic_type(metadata_extractor_s *metadata, int *ambisonic_type);
 static int __metadata_extractor_get_ambisonic_format(metadata_extractor_s *metadata, int *ambisonic_format);
 static int __metadata_extractor_get_ambisonic_order(metadata_extractor_s *metadata, int *ambisonic_order);
@@ -1128,7 +1143,7 @@ static int __metadata_extractor_get_is_360(metadata_extractor_s *metadata, int *
 }
 
 #ifdef SUPPORT_GSPHERICAL_METADATA
-static int __metadata_extractor_get_is_stitched(metadata_extractor_s *metadata, int *is_stitched)
+static int __metadata_extractor_get_is_stitched_v1(metadata_extractor_s *metadata, int *is_stitched)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1151,14 +1166,14 @@ static int __metadata_extractor_get_is_stitched(metadata_extractor_s *metadata,
        return ret;
 }
 
-static int __metadata_extractor_get_projection_type(metadata_extractor_s *metadata, char **projection_type)
+static int __metadata_extractor_get_projection_type_v1(metadata_extractor_s *metadata, char **projection_type)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
        char *_projection_type = NULL;
        int _tag_len = 0;
 
-       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name,        MM_FILE_TAG_SPHERICAL_PROJECTION_TYPE, &_projection_type, &_tag_len, NULL);
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_PROJECTION_TYPE, &_projection_type, &_tag_len, NULL);
        if (ret != FILEINFO_ERROR_NONE) {
                metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
                SAFE_FREE(err_attr_name);
@@ -1170,14 +1185,14 @@ static int __metadata_extractor_get_projection_type(metadata_extractor_s *metada
        return ret;
 }
 
-static int __metadata_extractor_get_stitching_software(metadata_extractor_s *metadata, char **stitching_software)
+static int __metadata_extractor_get_stitching_software_v1(metadata_extractor_s *metadata, char **stitching_software)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
        char *_stitching_software = NULL;
        int _tag_len = 0;
 
-       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name,        MM_FILE_TAG_SPHERICAL_STITCHING_SOFTWARE, &_stitching_software, &_tag_len, NULL);
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_STITCHING_SOFTWARE, &_stitching_software, &_tag_len, NULL);
        if (ret != FILEINFO_ERROR_NONE) {
                metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
                SAFE_FREE(err_attr_name);
@@ -1189,14 +1204,14 @@ static int __metadata_extractor_get_stitching_software(metadata_extractor_s *met
        return ret;
 }
 
-static int __metadata_extractor_get_stereo_mode(metadata_extractor_s *metadata, char **stereo_mode)
+static int __metadata_extractor_get_stereo_mode_v1(metadata_extractor_s *metadata, char **stereo_mode)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
        char *_stereo_mode = NULL;
        int _tag_len = 0;
 
-       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name,        MM_FILE_TAG_SPHERICAL_STEREO_MODE, &_stereo_mode, &_tag_len, NULL);
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_STEREO_MODE, &_stereo_mode, &_tag_len, NULL);
        if (ret != FILEINFO_ERROR_NONE) {
                metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
                SAFE_FREE(err_attr_name);
@@ -1208,7 +1223,7 @@ static int __metadata_extractor_get_stereo_mode(metadata_extractor_s *metadata,
        return ret;
 }
 
-static int __metadata_extractor_get_source_count(metadata_extractor_s *metadata, int *source_count)
+static int __metadata_extractor_get_source_count_v1(metadata_extractor_s *metadata, int *source_count)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1231,7 +1246,7 @@ static int __metadata_extractor_get_source_count(metadata_extractor_s *metadata,
        return ret;
 }
 
-static int __metadata_extractor_get_initial_view_heading_degrees(metadata_extractor_s *metadata, int32_t *initial_view_heading_degrees)
+static int __metadata_extractor_get_initial_view_heading_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_heading_degrees)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1254,7 +1269,7 @@ static int __metadata_extractor_get_initial_view_heading_degrees(metadata_extrac
        return ret;
 }
 
-static int __metadata_extractor_get_initial_view_pitch_degrees(metadata_extractor_s *metadata, int32_t *initial_view_pitch_degrees)
+static int __metadata_extractor_get_initial_view_pitch_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_pitch_degrees)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1277,7 +1292,7 @@ static int __metadata_extractor_get_initial_view_pitch_degrees(metadata_extracto
        return ret;
 }
 
-static int __metadata_extractor_get_initial_view_roll_degrees(metadata_extractor_s *metadata, int32_t *initial_view_roll_degrees)
+static int __metadata_extractor_get_initial_view_roll_degrees_v1(metadata_extractor_s *metadata, int32_t *initial_view_roll_degrees)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1300,7 +1315,7 @@ static int __metadata_extractor_get_initial_view_roll_degrees(metadata_extractor
        return ret;
 }
 
-static int __metadata_extractor_get_timestamp(metadata_extractor_s *metadata, int *timestamp)
+static int __metadata_extractor_get_timestamp_v1(metadata_extractor_s *metadata, int *timestamp)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1323,7 +1338,7 @@ static int __metadata_extractor_get_timestamp(metadata_extractor_s *metadata, in
        return ret;
 }
 
-static int __metadata_extractor_get_full_pano_width_pixels(metadata_extractor_s *metadata, int *full_pano_width_pixels)
+static int __metadata_extractor_get_full_pano_width_pixels_v1(metadata_extractor_s *metadata, int *full_pano_width_pixels)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1346,7 +1361,7 @@ static int __metadata_extractor_get_full_pano_width_pixels(metadata_extractor_s
        return ret;
 }
 
-static int __metadata_extractor_get_full_pano_height_pixels(metadata_extractor_s *metadata, int *full_pano_height_pixels)
+static int __metadata_extractor_get_full_pano_height_pixels_v1(metadata_extractor_s *metadata, int *full_pano_height_pixels)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1369,7 +1384,7 @@ static int __metadata_extractor_get_full_pano_height_pixels(metadata_extractor_s
        return ret;
 }
 
-static int __metadata_extractor_get_cropped_area_image_width(metadata_extractor_s *metadata, int *cropped_area_image_width)
+static int __metadata_extractor_get_cropped_area_image_width_v1(metadata_extractor_s *metadata, int *cropped_area_image_width)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1392,7 +1407,7 @@ static int __metadata_extractor_get_cropped_area_image_width(metadata_extractor_
        return ret;
 }
 
-static int __metadata_extractor_get_cropped_area_image_height(metadata_extractor_s *metadata, int *cropped_area_image_height)
+static int __metadata_extractor_get_cropped_area_image_height_v1(metadata_extractor_s *metadata, int *cropped_area_image_height)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1415,7 +1430,7 @@ static int __metadata_extractor_get_cropped_area_image_height(metadata_extractor
        return ret;
 }
 
-static int __metadata_extractor_get_cropped_area_left(metadata_extractor_s *metadata, int *cropped_area_left)
+static int __metadata_extractor_get_cropped_area_left_v1(metadata_extractor_s *metadata, int *cropped_area_left)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1438,7 +1453,7 @@ static int __metadata_extractor_get_cropped_area_left(metadata_extractor_s *meta
        return ret;
 }
 
-static int __metadata_extractor_get_cropped_area_top(metadata_extractor_s *metadata, int *cropped_area_top)
+static int __metadata_extractor_get_cropped_area_top_v1(metadata_extractor_s *metadata, int *cropped_area_top)
 {
        int ret = METADATA_EXTRACTOR_ERROR_NONE;
        char *err_attr_name = NULL;
@@ -1532,6 +1547,289 @@ static int __metadata_extractor_get_ambisonic_order(metadata_extractor_s *metada
 
        return ret;
 }
+
+static int __metadata_extractor_get_stereo_mode_v2(metadata_extractor_s *metadata, int *stereo_mode_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _stereo_mode_v2 = -1;
+       *stereo_mode_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_STEREO_MODE, &_stereo_mode_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *stereo_mode_v2 = _stereo_mode_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_metadata_source_v2(metadata_extractor_s *metadata, char **metadata_source_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       char *_metadata_source_v2 = NULL;
+       int _tag_len = 0;
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_METADATA_SOURCE, &_metadata_source_v2, &_tag_len, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *metadata_source_v2 = _metadata_source_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_proj_type_v2(metadata_extractor_s *metadata, int *proj_type_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _proj_type_v2 = -1;
+       *proj_type_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_PROJ_TYPE, &_proj_type_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *proj_type_v2 = _proj_type_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_pose_yaw_degrees_v2(metadata_extractor_s *metadata, int *pose_yaw_degrees_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _pose_yaw_degrees_v2 = -1;
+       *pose_yaw_degrees_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_POSE_YAW, &_pose_yaw_degrees_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *pose_yaw_degrees_v2 = _pose_yaw_degrees_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_pose_pitch_degrees_v2(metadata_extractor_s *metadata, int *pose_pitch_degrees_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _pose_pitch_degrees_v2 = -1;
+       *pose_pitch_degrees_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_POSE_PITCH, &_pose_pitch_degrees_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *pose_pitch_degrees_v2 = _pose_pitch_degrees_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_pose_roll_degrees_v2(metadata_extractor_s *metadata, int *pose_roll_degrees_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _pose_roll_degrees_v2 = -1;
+       *pose_roll_degrees_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_POSE_ROLL, &_pose_roll_degrees_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *pose_roll_degrees_v2 = _pose_roll_degrees_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_cbmp_layout_v2(metadata_extractor_s *metadata, int *cbmp_layout_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _cbmp_layout_v2 = -1;
+       *cbmp_layout_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_CBMP_LAYOUT, &_cbmp_layout_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *cbmp_layout_v2 = _cbmp_layout_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_cbmp_padding_v2(metadata_extractor_s *metadata, int *cbmp_padding_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _cbmp_padding_v2 = -1;
+       *cbmp_padding_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_CBMP_PADDING, &_cbmp_padding_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *cbmp_padding_v2 = _cbmp_padding_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_equi_projection_bounds_top_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_top_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _equi_projection_bounds_top_v2 = -1;
+       *equi_projection_bounds_top_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_TOP, &_equi_projection_bounds_top_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *equi_projection_bounds_top_v2 = _equi_projection_bounds_top_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_equi_projection_bounds_bottom_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_bottom_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _equi_projection_bounds_bottom_v2 = -1;
+       *equi_projection_bounds_bottom_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_BOTTOM, &_equi_projection_bounds_bottom_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *equi_projection_bounds_bottom_v2 = _equi_projection_bounds_bottom_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_equi_projection_bounds_left_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_left_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _equi_projection_bounds_left_v2 = -1;
+       *equi_projection_bounds_left_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_LEFT, &_equi_projection_bounds_left_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *equi_projection_bounds_left_v2 = _equi_projection_bounds_left_v2;
+
+       return ret;
+}
+
+static int __metadata_extractor_get_equi_projection_bounds_right_v2(metadata_extractor_s *metadata, int *equi_projection_bounds_right_v2)
+{
+       int ret = METADATA_EXTRACTOR_ERROR_NONE;
+       char *err_attr_name = NULL;
+       int _equi_projection_bounds_right_v2 = -1;
+       *equi_projection_bounds_right_v2 = -1;
+
+       if ((!metadata) || (!metadata->tag_h)) {
+               metadata_extractor_error("INVALID_PARAMETER(0x%08x)", METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER);
+               return METADATA_EXTRACTOR_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_file_get_attrs(metadata->tag_h, &err_attr_name, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_RIGHT, &_equi_projection_bounds_right_v2, NULL);
+       if (ret != FILEINFO_ERROR_NONE) {
+               metadata_extractor_error("METADATA_EXTRACTOR_ERROR_OPERATION_FAILED(0x%08x)", ret);
+               SAFE_FREE(err_attr_name);
+               return METADATA_EXTRACTOR_ERROR_OPERATION_FAILED;
+       }
+
+       *equi_projection_bounds_right_v2 = _equi_projection_bounds_right_v2;
+
+       return ret;
+}
 #endif
 
 static int __metadata_extractor_destroy_handle(metadata_extractor_s *metadata)
@@ -1729,8 +2027,7 @@ int metadata_extractor_get_metadata(metadata_extractor_h metadata, metadata_extr
        else if ((attribute > METADATA_HAS_AUDIO) && (attribute <= METADATA_ROTATE))
                ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG);
 #ifdef SUPPORT_GSPHERICAL_METADATA
-       else if (((attribute >= METADATA_360) && (attribute <= METADATA_360_CROPPED_AREA_TOP))
-                       || ((attribute >= METADATA_AMBISONIC_TYPE) && (attribute <= METADATA_AMBISONIC_ORDER)))
+       else if (((attribute >= METADATA_360) && (attribute <= METADATA_AMBISONIC_ORDER)))
                ret = __metadata_extractor_check_and_extract_meta(_metadata, METADATA_TYPE_TAG);
 #else
        else if (attribute == METADATA_360)
@@ -1925,79 +2222,139 @@ int metadata_extractor_get_metadata(metadata_extractor_h metadata, metadata_extr
                break;
        }
 #ifdef SUPPORT_GSPHERICAL_METADATA
-       case METADATA_360_STITCHED: {
+       case METADATA_360_V1_STITCHED: {
                is_string = 0;
-               ret = __metadata_extractor_get_is_stitched(_metadata, &i_value);
+               ret = __metadata_extractor_get_is_stitched_v1(_metadata, &i_value);
                break;
        }
-       case METADATA_360_PROJECTION_TYPE: {
+       case METADATA_360_V1_PROJECTION_TYPE: {
                is_string = 1;
-               ret = __metadata_extractor_get_projection_type(_metadata, &s_value);
+               ret = __metadata_extractor_get_projection_type_v1(_metadata, &s_value);
                break;
        }
-       case METADATA_360_STITCHING_SOFTWARE: {
+       case METADATA_360_V1_STITCHING_SOFTWARE: {
                is_string = 1;
-               ret = __metadata_extractor_get_stitching_software(_metadata, &s_value);
+               ret = __metadata_extractor_get_stitching_software_v1(_metadata, &s_value);
                break;
        }
-       case METADATA_360_STEREO_MODE: {
+       case METADATA_360_V1_STEREO_MODE: {
                is_string = 1;
-               ret = __metadata_extractor_get_stereo_mode(_metadata, &s_value);
+               ret = __metadata_extractor_get_stereo_mode_v1(_metadata, &s_value);
                break;
        }
-       case METADATA_360_SOURCE_COUNT: {
+       case METADATA_360_V1_SOURCE_COUNT: {
                is_string = 0;
-               ret = __metadata_extractor_get_source_count(_metadata, &i_value);
+               ret = __metadata_extractor_get_source_count_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_INIT_VIEW_HEADING: {
+               is_string = 0;
+               ret = __metadata_extractor_get_initial_view_heading_degrees_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_INIT_VIEW_PITCH: {
+               is_string = 0;
+               ret = __metadata_extractor_get_initial_view_pitch_degrees_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_INIT_VIEW_ROLL: {
+               is_string = 0;
+               ret = __metadata_extractor_get_initial_view_roll_degrees_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_TIMESTAMP: {
+               is_string = 0;
+               ret = __metadata_extractor_get_timestamp_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_FULL_PANO_WIDTH: {
+               is_string = 0;
+               ret = __metadata_extractor_get_full_pano_width_pixels_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_FULL_PANO_HEIGHT: {
+               is_string = 0;
+               ret = __metadata_extractor_get_full_pano_height_pixels_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_CROPPED_AREA_IMAGE_WIDTH: {
+               is_string = 0;
+               ret = __metadata_extractor_get_cropped_area_image_width_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_CROPPED_AREA_IMAGE_HEIGHT: {
+               is_string = 0;
+               ret = __metadata_extractor_get_cropped_area_image_height_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_CROPPED_AREA_LEFT: {
+               is_string = 0;
+               ret = __metadata_extractor_get_cropped_area_left_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V1_CROPPED_AREA_TOP: {
+               is_string = 0;
+               ret = __metadata_extractor_get_cropped_area_top_v1(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V2_STEREO_MODE: {
+               is_string = 0;
+               ret = __metadata_extractor_get_stereo_mode_v2(_metadata, &i_value);
+               break;
+       }
+       case METADATA_360_V2_METADATA_SOURCE: {
+               is_string = 1;
+               ret = __metadata_extractor_get_metadata_source_v2(_metadata, &s_value);
                break;
        }
-       case METADATA_360_INIT_VIEW_HEADING: {
+       case METADATA_360_V2_PROJ_TYPE: {
                is_string = 0;
-               ret = __metadata_extractor_get_initial_view_heading_degrees(_metadata, &i_value);
+               ret = __metadata_extractor_get_proj_type_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_INIT_VIEW_PITCH: {
+       case METADATA_360_V2_POSE_YAW: {
                is_string = 0;
-               ret = __metadata_extractor_get_initial_view_pitch_degrees(_metadata, &i_value);
+               ret = __metadata_extractor_get_pose_yaw_degrees_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_INIT_VIEW_ROLL: {
+       case METADATA_360_V2_POSE_PITCH: {
                is_string = 0;
-               ret = __metadata_extractor_get_initial_view_roll_degrees(_metadata, &i_value);
+               ret = __metadata_extractor_get_pose_pitch_degrees_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_TIMESTAMP: {
+       case METADATA_360_V2_POSE_ROLL: {
                is_string = 0;
-               ret = __metadata_extractor_get_timestamp(_metadata, &i_value);
+               ret = __metadata_extractor_get_pose_roll_degrees_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_FULL_PANO_WIDTH: {
+       case METADATA_360_V2_CBMP_LAYOUT: {
                is_string = 0;
-               ret = __metadata_extractor_get_full_pano_width_pixels(_metadata, &i_value);
+               ret = __metadata_extractor_get_cbmp_layout_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_FULL_PANO_HEIGHT: {
+       case METADATA_360_V2_CBMP_PADDING: {
                is_string = 0;
-               ret = __metadata_extractor_get_full_pano_height_pixels(_metadata, &i_value);
+               ret = __metadata_extractor_get_cbmp_padding_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_CROPPED_AREA_IMAGE_WIDTH: {
+       case METADATA_360_V2_EQUI_BOUNDS_TOP: {
                is_string = 0;
-               ret = __metadata_extractor_get_cropped_area_image_width(_metadata, &i_value);
+               ret = __metadata_extractor_get_equi_projection_bounds_top_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_CROPPED_AREA_IMAGE_HEIGHT: {
+       case METADATA_360_V2_EQUI_BOUNDS_BOTTOM: {
                is_string = 0;
-               ret = __metadata_extractor_get_cropped_area_image_height(_metadata, &i_value);
+               ret = __metadata_extractor_get_equi_projection_bounds_bottom_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_CROPPED_AREA_LEFT: {
+       case METADATA_360_V2_EQUI_BOUNDS_LEFT: {
                is_string = 0;
-               ret = __metadata_extractor_get_cropped_area_left(_metadata, &i_value);
+               ret = __metadata_extractor_get_equi_projection_bounds_left_v2(_metadata, &i_value);
                break;
        }
-       case METADATA_360_CROPPED_AREA_TOP: {
+       case METADATA_360_V2_EQUI_BOUNDS_RIGHT: {
                is_string = 0;
-               ret = __metadata_extractor_get_cropped_area_top(_metadata, &i_value);
+               ret = __metadata_extractor_get_equi_projection_bounds_right_v2(_metadata, &i_value);
                break;
        }
        case METADATA_AMBISONIC_TYPE: {
index 749b3aa78039fa611a5a11736e02c57634c8d4eb..3211b890382ce0c94e9dc8c852d4823775a6c973 100755 (executable)
@@ -100,24 +100,39 @@ static bool __capi_metadata_extractor(metadata_extractor_h metadata)
        char *audio_codec = NULL;
        char *is_360 = NULL;
 #ifdef SUPPORT_GSPHERICAL_METADATA
-       char *is_stitched = NULL;
-       char *stitching_software = NULL;
-       char *projection_type = NULL;
-       char *stereo_mode = NULL;
-       char *source_count = NULL;
-       char *initial_view_heading_degrees = NULL;
-       char *initial_view_pitch_degrees = NULL;
-       char *initial_view_roll_degrees = NULL;
-       char *timestamp = NULL;
-       char *full_pano_width = NULL;
-       char *full_pano_height = NULL;
-       char *cropped_area_image_width = NULL;
-       char *cropped_area_image_height = NULL;
-       char *cropped_area_left = NULL;
-       char *cropped_area_top = NULL;
+       char *is_stitched_v1 = NULL;
+       char *stitching_software_v1 = NULL;
+       char *projection_type_v1 = NULL;
+       char *stereo_mode_v1 = NULL;
+       char *source_count_v1 = NULL;
+       char *initial_view_heading_degrees_v1 = NULL;
+       char *initial_view_pitch_degrees_v1 = NULL;
+       char *initial_view_roll_degrees_v1 = NULL;
+       char *timestamp_v1 = NULL;
+       char *full_pano_width_v1 = NULL;
+       char *full_pano_height_v1 = NULL;
+       char *cropped_area_image_width_v1 = NULL;
+       char *cropped_area_image_height_v1 = NULL;
+       char *cropped_area_left_v1 = NULL;
+       char *cropped_area_top_v1 = NULL;
+
+       char *stereo_mode_v2 = NULL;
+       char *metadata_source_v2 = NULL;
+       char *proj_type_v2 = NULL;
+       char *pose_yaw_degrees_v2 = NULL;
+       char *pose_pitch_degrees_v2 = NULL;
+       char *pose_roll_degrees_v2 = NULL;
+       char *cbmp_layout_v2 = NULL;
+       char *cbmp_padding_v2 = NULL;
+       char *equi_projection_bounds_top_v2 = NULL;
+       char *equi_projection_bounds_bottom_v2 = NULL;
+       char *equi_projection_bounds_left_v2 = NULL;
+       char *equi_projection_bounds_right_v2 = NULL;
+
        char *ambisonic_type = NULL;
        char *ambisonic_format = NULL;
        char *ambisonic_order = NULL;
+
 #endif
 
        int idx = 0;
@@ -207,36 +222,62 @@ static bool __capi_metadata_extractor(metadata_extractor_h metadata)
        printf("is_360 = [%s]\n", is_360);
 
 #ifdef SUPPORT_GSPHERICAL_METADATA
-       metadata_extractor_get_metadata(metadata, METADATA_360_STITCHED, &is_stitched);
-       printf("is_stitched = [%s]\n", is_stitched);
-       metadata_extractor_get_metadata(metadata, METADATA_360_STITCHING_SOFTWARE, &stitching_software);
-       printf("stitching_software = [%s]\n", stitching_software);
-       metadata_extractor_get_metadata(metadata, METADATA_360_PROJECTION_TYPE, &projection_type);
-       printf("projection_type = [%s]\n", projection_type);
-       metadata_extractor_get_metadata(metadata, METADATA_360_STEREO_MODE, &stereo_mode);
-       printf("stereo_mode = [%s]\n", stereo_mode);
-       metadata_extractor_get_metadata(metadata, METADATA_360_SOURCE_COUNT, &source_count);
-       printf("source_count = [%s]\n", source_count);
-       metadata_extractor_get_metadata(metadata, METADATA_360_INIT_VIEW_HEADING, &initial_view_heading_degrees);
-       printf("initial_view_heading_degrees = [%s]\n", initial_view_heading_degrees);
-       metadata_extractor_get_metadata(metadata, METADATA_360_INIT_VIEW_PITCH, &initial_view_pitch_degrees);
-       printf("initial_view_pitch_degrees = [%s]\n", initial_view_pitch_degrees);
-       metadata_extractor_get_metadata(metadata, METADATA_360_INIT_VIEW_ROLL, &initial_view_roll_degrees);
-       printf("initial_view_roll_degrees = [%s]\n", initial_view_roll_degrees);
-       metadata_extractor_get_metadata(metadata, METADATA_360_TIMESTAMP, &timestamp);
-       printf("timestamp = [%s]\n", timestamp);
-       metadata_extractor_get_metadata(metadata, METADATA_360_FULL_PANO_WIDTH, &full_pano_width);
-       printf("full_pano_width = [%s]\n", full_pano_width);
-       metadata_extractor_get_metadata(metadata, METADATA_360_FULL_PANO_HEIGHT, &full_pano_height);
-       printf("full_pano_height = [%s]\n", full_pano_height);
-       metadata_extractor_get_metadata(metadata, METADATA_360_CROPPED_AREA_IMAGE_WIDTH, &cropped_area_image_width);
-       printf("cropped_area_image_width = [%s]\n", cropped_area_image_width);
-       metadata_extractor_get_metadata(metadata, METADATA_360_CROPPED_AREA_IMAGE_HEIGHT, &cropped_area_image_height);
-       printf("cropped_area_image_height = [%s]\n", cropped_area_image_height);
-       metadata_extractor_get_metadata(metadata, METADATA_360_CROPPED_AREA_LEFT, &cropped_area_left);
-       printf("cropped_area_left = [%s]\n", cropped_area_left);
-       metadata_extractor_get_metadata(metadata, METADATA_360_CROPPED_AREA_TOP, &cropped_area_top);
-       printf("cropped_area_top = [%s]\n", cropped_area_top);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_STITCHED, &is_stitched_v1);
+       printf("is_stitched_v1 = [%s]\n", is_stitched_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_STITCHING_SOFTWARE, &stitching_software_v1);
+       printf("stitching_software_v1 = [%s]\n", stitching_software_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_PROJECTION_TYPE, &projection_type_v1);
+       printf("projection_type_v1 = [%s]\n", projection_type_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_STEREO_MODE, &stereo_mode_v1);
+       printf("stereo_mode_v1 = [%s]\n", stereo_mode_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_SOURCE_COUNT, &source_count_v1);
+       printf("source_count_v1 = [%s]\n", source_count_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_INIT_VIEW_HEADING, &initial_view_heading_degrees_v1);
+       printf("initial_view_heading_degrees_v1 = [%s]\n", initial_view_heading_degrees_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_INIT_VIEW_PITCH, &initial_view_pitch_degrees_v1);
+       printf("initial_view_pitch_degrees_v1 = [%s]\n", initial_view_pitch_degrees_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_INIT_VIEW_ROLL, &initial_view_roll_degrees_v1);
+       printf("initial_view_roll_degrees_v1 = [%s]\n", initial_view_roll_degrees_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_TIMESTAMP, &timestamp_v1);
+       printf("timestamp_v1 = [%s]\n", timestamp_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_FULL_PANO_WIDTH, &full_pano_width_v1);
+       printf("full_pano_width_v1 = [%s]\n", full_pano_width_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_FULL_PANO_HEIGHT, &full_pano_height_v1);
+       printf("full_pano_height_v1 = [%s]\n", full_pano_height_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_CROPPED_AREA_IMAGE_WIDTH, &cropped_area_image_width_v1);
+       printf("cropped_area_image_width_v1 = [%s]\n", cropped_area_image_width_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_CROPPED_AREA_IMAGE_HEIGHT, &cropped_area_image_height_v1);
+       printf("cropped_area_image_height_v1 = [%s]\n", cropped_area_image_height_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_CROPPED_AREA_LEFT, &cropped_area_left_v1);
+       printf("cropped_area_left_v1 = [%s]\n", cropped_area_left_v1);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V1_CROPPED_AREA_TOP, &cropped_area_top_v1);
+       printf("cropped_area_top_v1 = [%s]\n", cropped_area_top_v1);
+
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_STEREO_MODE, &stereo_mode_v2);
+       printf("stereo_mode_v2 = [%s]\n", stereo_mode_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_METADATA_SOURCE, &metadata_source_v2);
+       printf("metadata_source_v2 = [%s]\n", metadata_source_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_PROJ_TYPE, &proj_type_v2);
+       printf("proj_type_v2 = [%s]\n", proj_type_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_POSE_YAW, &pose_yaw_degrees_v2);
+       printf("pose_yaw_degrees_v2 = [%s]\n", pose_yaw_degrees_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_POSE_PITCH, &pose_pitch_degrees_v2);
+       printf("pose_pitch_degrees_v2 = [%s]\n", pose_pitch_degrees_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_POSE_ROLL, &pose_roll_degrees_v2);
+       printf("pose_roll_degrees_v2 = [%s]\n", pose_roll_degrees_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_CBMP_LAYOUT, &cbmp_layout_v2);
+       printf("cbmp_layout_v2 = [%s]\n", cbmp_layout_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_CBMP_PADDING, &cbmp_padding_v2);
+       printf("cbmp_padding_v2 = [%s]\n", cbmp_padding_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_EQUI_BOUNDS_TOP, &equi_projection_bounds_top_v2);
+       printf("equi_projection_bounds_top_v2 = [%s]\n", equi_projection_bounds_top_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_EQUI_BOUNDS_BOTTOM, &equi_projection_bounds_bottom_v2);
+       printf("equi_projection_bounds_bottom_v2 = [%s]\n", equi_projection_bounds_bottom_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_EQUI_BOUNDS_LEFT, &equi_projection_bounds_left_v2);
+       printf("equi_projection_bounds_left_v2 = [%s]\n", equi_projection_bounds_left_v2);
+       metadata_extractor_get_metadata(metadata, METADATA_360_V2_EQUI_BOUNDS_RIGHT, &equi_projection_bounds_right_v2);
+       printf("equi_projection_bounds_right_v2 = [%s]\n", equi_projection_bounds_right_v2);
+
        metadata_extractor_get_metadata(metadata, METADATA_AMBISONIC_TYPE, &ambisonic_type);
        printf("ambisonic_type = [%s]\n", ambisonic_type);
        metadata_extractor_get_metadata(metadata, METADATA_AMBISONIC_FORMAT, &ambisonic_format);
@@ -314,21 +355,35 @@ static bool __capi_metadata_extractor(metadata_extractor_h metadata)
        SAFE_FREE(video_codec);
        SAFE_FREE(is_360);
 #ifdef SUPPORT_GSPHERICAL_METADATA
-       SAFE_FREE(is_stitched);
-       SAFE_FREE(stitching_software);
-       SAFE_FREE(projection_type);
-       SAFE_FREE(stereo_mode);
-       SAFE_FREE(source_count);
-       SAFE_FREE(initial_view_heading_degrees);
-       SAFE_FREE(initial_view_pitch_degrees);
-       SAFE_FREE(initial_view_roll_degrees);
-       SAFE_FREE(timestamp);
-       SAFE_FREE(full_pano_width);
-       SAFE_FREE(full_pano_height);
-       SAFE_FREE(cropped_area_image_width);
-       SAFE_FREE(cropped_area_image_height);
-       SAFE_FREE(cropped_area_left);
-       SAFE_FREE(cropped_area_top);
+       SAFE_FREE(is_stitched_v1);
+       SAFE_FREE(stitching_software_v1);
+       SAFE_FREE(projection_type_v1);
+       SAFE_FREE(stereo_mode_v1);
+       SAFE_FREE(source_count_v1);
+       SAFE_FREE(initial_view_heading_degrees_v1);
+       SAFE_FREE(initial_view_pitch_degrees_v1);
+       SAFE_FREE(initial_view_roll_degrees_v1);
+       SAFE_FREE(timestamp_v1);
+       SAFE_FREE(full_pano_width_v1);
+       SAFE_FREE(full_pano_height_v1);
+       SAFE_FREE(cropped_area_image_width_v1);
+       SAFE_FREE(cropped_area_image_height_v1);
+       SAFE_FREE(cropped_area_left_v1);
+       SAFE_FREE(cropped_area_top_v1);
+
+       SAFE_FREE(stereo_mode_v2);
+       SAFE_FREE(metadata_source_v2);
+       SAFE_FREE(proj_type_v2);
+       SAFE_FREE(pose_yaw_degrees_v2);
+       SAFE_FREE(pose_pitch_degrees_v2);
+       SAFE_FREE(pose_roll_degrees_v2);
+       SAFE_FREE(cbmp_layout_v2);
+       SAFE_FREE(cbmp_padding_v2);
+       SAFE_FREE(equi_projection_bounds_top_v2);
+       SAFE_FREE(equi_projection_bounds_bottom_v2);
+       SAFE_FREE(equi_projection_bounds_left_v2);
+       SAFE_FREE(equi_projection_bounds_right_v2);
+
        SAFE_FREE(ambisonic_type);
        SAFE_FREE(ambisonic_format);
        SAFE_FREE(ambisonic_order);