diff --git a/interfaces/inner_api/native/avmetadatahelper.h b/interfaces/inner_api/native/avmetadatahelper.h index dc26bd3e89da739013b2dddc337eb241320b7fca..48d9d1dab2d737944112b7077d84e80eda9cedf2 100644 --- a/interfaces/inner_api/native/avmetadatahelper.h +++ b/interfaces/inner_api/native/avmetadatahelper.h @@ -99,6 +99,7 @@ static const std::map g_MetadataCodeMap = { {38, "videoOrientation"}, {39, "hdrType"}, {44, "videoRotateOrientation"}, + {45, "gltf_offset"}, }; /** @@ -128,6 +129,7 @@ static const std::vector g_Metadata = { "longitude", "customInfo", "tracks", + "gltf_offset", }; enum HdrType : int32_t { @@ -317,6 +319,10 @@ enum AVMetadataCode : int32_t { * orientation(rotation and flip info). */ AV_KEY_VIDEO_ROTATE_ORIENTATION = 44, + /** + * The metadata key to retrieve the information about the offset of the 3DGS video. + */ + AV_KEY_GLTF_OFFSET = 45, }; /** diff --git a/services/engine/histreamer/avmetadatahelper/avmetadata_collector.cpp b/services/engine/histreamer/avmetadatahelper/avmetadata_collector.cpp index 5477a32569fb22f14c5a96b0d352567a88997ef7..7609ce6ec16faf77ab0fcfee5eb3e93d7e75c967 100644 --- a/services/engine/histreamer/avmetadatahelper/avmetadata_collector.cpp +++ b/services/engine/histreamer/avmetadatahelper/avmetadata_collector.cpp @@ -88,10 +88,11 @@ static const std::unordered_map AVMETA_KEY_TO_X_MAP = { { AV_KEY_VIDEO_ORIENTATION, Tag::VIDEO_ROTATION }, { AV_KEY_VIDEO_ROTATE_ORIENTATION, Tag::VIDEO_ORIENTATION_TYPE }, { AV_KEY_VIDEO_IS_HDR_VIVID, Tag::VIDEO_IS_HDR_VIVID }, - { AV_KEY_LOCATION_LONGITUDE, Tag::MEDIA_LONGITUDE}, - { AV_KEY_LOCATION_LATITUDE, Tag::MEDIA_LATITUDE}, - { AV_KEY_CUSTOMINFO, "customInfo"}, - { AV_KEY_DATE_TIME_ISO8601, "ISO8601 time"}, + { AV_KEY_LOCATION_LONGITUDE, Tag::MEDIA_LONGITUDE }, + { AV_KEY_LOCATION_LATITUDE, Tag::MEDIA_LATITUDE }, + { AV_KEY_CUSTOMINFO, "customInfo" }, + { AV_KEY_DATE_TIME_ISO8601, "ISO8601 time" }, + { AV_KEY_GLTF_OFFSET, Tag::GLTF_OFFSET}, }; AVMetaDataCollector::AVMetaDataCollector(std::shared_ptr &mediaDemuxer) : mediaDemuxer_(mediaDemuxer) @@ -469,11 +470,19 @@ void AVMetaDataCollector::FormatAVMeta( if (IsAllDigits(str)) { avmeta.SetMeta(AV_KEY_NUM_TRACKS, std::to_string(std::stoi(str) - imageTrackCount)); } + FormatDuration(avmeta, globalInfo); FormatMimeType(avmeta, globalInfo); FormatDateTime(avmeta, globalInfo); FormatVideoRotateOrientation(avmeta); } +void AVMetaDataCollector::FormatDuration(Metadata &avmeta, const std::shared_ptr &globalInfo) +{ + std::string duration = avmeta.GetMeta(AV_KEY_DURATION); + CHECK_AND_RETURN_LOG(IsAllDigits(duration), "duration is %{public}s, it is invalid", duration.c_str()); + avmeta.SetMeta(AV_KEY_DURATION, std::to_string(std::stoi(duration) / SECOND_DEVIDE_MS)); +} + void AVMetaDataCollector::FormatMimeType(Metadata &avmeta, const std::shared_ptr &globalInfo) { Plugins::FileType fileType = Plugins::FileType::UNKNOW; @@ -572,9 +581,9 @@ bool AVMetaDataCollector::SetStringByValueType(const std::shared_ptr &inne avmeta.SetMeta(avKey, std::to_string(orientation)); } } else if (Any::IsSameTypeWith(type)) { - int64_t duration; - if (innerMeta->GetData(innerKey, duration)) { - avmeta.SetMeta(avKey, std::to_string(duration / SECOND_DEVIDE_MS)); + int64_t value; + if (innerMeta->GetData(innerKey, value)) { + avmeta.SetMeta(avKey, std::to_string(value)); } } else if (Any::IsSameTypeWith(type)) { bool isTrue; diff --git a/services/engine/histreamer/avmetadatahelper/avmetadata_collector.h b/services/engine/histreamer/avmetadatahelper/avmetadata_collector.h index b5ec6c1afa4f422d99f5a4925777262f5d919cc5..8a4907f23d513a44ab969dac5027735ffb578eb6 100644 --- a/services/engine/histreamer/avmetadatahelper/avmetadata_collector.h +++ b/services/engine/histreamer/avmetadatahelper/avmetadata_collector.h @@ -94,6 +94,7 @@ private: const std::shared_ptr &globalInfo, const std::vector> &trackInfos); void ConvertToAVMeta(const std::shared_ptr &innerMeta, Metadata &avmeta) const; void FormatAVMeta(Metadata &avmeta, int32_t imageTrackCount, const std::shared_ptr &globalInfo); + void FormatDuration(Metadata &avmeta, const std::shared_ptr &globalInfo); void FormatMimeType(Metadata &avmeta, const std::shared_ptr &globalInfo); void FormatDateTime(Metadata &avmeta, const std::shared_ptr &globalInfo); void FormatVideoRotateOrientation(Metadata &avmeta);