diff options
author | Mykola Alieksieiev <m.alieksieie@samsung.com> | 2017-08-17 12:39:39 +0300 |
---|---|---|
committer | Mykola Alieksieiev <m.alieksieie@samsung.com> | 2017-08-31 16:36:22 +0300 |
commit | 188f088c8f047893073218e2b4f3284ba82f5650 (patch) | |
tree | fc83ea7d71642d4d75c3ad6d3843e04e5f2e14e9 | |
parent | 145da86885f6e0f5ab5091ee46df5727fd78a24d (diff) | |
download | metadata-extractor-188f088c8f047893073218e2b4f3284ba82f5650.tar.gz metadata-extractor-188f088c8f047893073218e2b4f3284ba82f5650.tar.bz2 metadata-extractor-188f088c8f047893073218e2b4f3284ba82f5650.zip |
Add Spherical Video Metadata V2 support
Change-Id: Idbbbabff024f86015b38c617a7b7c08b7e0ebe08
Signed-off-by: Mykola Alieksieiev <m.alieksieie@samsung.com>
-rwxr-xr-x | include/metadata_extractor_private.h | 50 | ||||
-rwxr-xr-x | packaging/capi-media-metadata-extractor.spec | 1 | ||||
-rwxr-xr-x | src/metadata_extractor.c | 487 | ||||
-rwxr-xr-x | test/metadata_extractor_test.c | 175 |
4 files changed, 570 insertions, 143 deletions
diff --git a/include/metadata_extractor_private.h b/include/metadata_extractor_private.h index 0834a77..f1bde66 100755 --- a/include/metadata_extractor_private.h +++ b/include/metadata_extractor_private.h @@ -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 diff --git a/packaging/capi-media-metadata-extractor.spec b/packaging/capi-media-metadata-extractor.spec index 0b95081..619b077 100755 --- a/packaging/capi-media-metadata-extractor.spec +++ b/packaging/capi-media-metadata-extractor.spec @@ -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} diff --git a/src/metadata_extractor.c b/src/metadata_extractor.c index 44c2d16..26b4349 100755 --- a/src/metadata_extractor.c +++ b/src/metadata_extractor.c @@ -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: { diff --git a/test/metadata_extractor_test.c b/test/metadata_extractor_test.c index 749b3aa..3211b89 100755 --- a/test/metadata_extractor_test.c +++ b/test/metadata_extractor_test.c @@ -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, ×tamp); - 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, ×tamp_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); |