From 6fa6a01f5c024f9c7c272d792dec59dfa1c3a799 Mon Sep 17 00:00:00 2001 From: SunYin Date: Mon, 8 Sep 2025 21:55:11 +0800 Subject: [PATCH] 3DGS Signed-off-by: SunYin --- .../inner_api/native/avmetadatahelper.h | 6 +++++ .../avmetadatahelper/avmetadata_collector.cpp | 23 +++++++++++++------ .../avmetadatahelper/avmetadata_collector.h | 1 + 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/interfaces/inner_api/native/avmetadatahelper.h b/interfaces/inner_api/native/avmetadatahelper.h index dc26bd3e8..48d9d1dab 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 5477a3256..7609ce6ec 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 b5ec6c1af..8a4907f23 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); -- Gitee