From b4619be858d64fc82fcdb18511fe41ea8c264030 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Thu, 4 Jul 2024 10:28:43 +0200 Subject: [PATCH] Store image resolution and framerate in ar metadata --- openVulkanoCpp/AR/ArSessionMetadata.cpp | 23 ++++++++++++++++--- openVulkanoCpp/AR/ArSessionMetadata.hpp | 9 +++++--- .../AR/Provider/ArKit/ArSessionArKit.mm | 2 +- .../Provider/ArKit/ArSessionArKitInternal.mm | 2 ++ 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/openVulkanoCpp/AR/ArSessionMetadata.cpp b/openVulkanoCpp/AR/ArSessionMetadata.cpp index f028d9e..548de0a 100644 --- a/openVulkanoCpp/AR/ArSessionMetadata.cpp +++ b/openVulkanoCpp/AR/ArSessionMetadata.cpp @@ -22,9 +22,19 @@ namespace OpenVulkano::AR int minRange = metaNode.child("minConfidence").text().as_int(); int maxRange = metaNode.child("maxConfidence").text().as_int(); const char* depthType = metaNode.child("depthType").text().as_string(); + uint32_t resX = 1920, resY = 1440; + auto resNode = metaNode.child("imageResolution"); + if (!resNode.empty()) + { + resX = resNode.child("width").text().as_uint(); + resY = resNode.child("height").text().as_uint(); + } + float frameRate = metaNode.child("frameRate").text().as_float(60); return { ArType::GetFromHumanReadableName(type), ArDepthFormat::GetFromAltName(depthType).value_or(ArDepthFormat::UNAVAILABLE), - Math::Range(minRange, maxRange) + Math::Range(minRange, maxRange), + Math::Vector2ui(resX, resY), + frameRate }; } @@ -35,7 +45,9 @@ namespace OpenVulkano::AR return { ArType::GetFromName(meta["Type"].Scalar()), ArDepthFormat::GetFromName(meta["DepthType"].Scalar()).value_or(ArDepthFormat::UNAVAILABLE), - Math::Range(meta["MinConfidence"].as(), meta["MaxConfidence"].as()) + Math::Range(meta["MinConfidence"].as(), meta["MaxConfidence"].as()), + Math::Vector2ui(1), // TODO load + meta["FrameRate"].as(60) }; } @@ -72,7 +84,10 @@ namespace OpenVulkano::AR ss << "\n\t" << type.GetHumanReadableName() << "\n\t"; ss << static_cast(confidenceRange.min) << "\n\t"; ss << static_cast(confidenceRange.max) << "\n\t"; - ss << depthFormat.GetAltName() << "\n"; + ss << depthFormat.GetAltName() << ""; + ss << "\n\t" << imageResolution.x << "" << imageResolution.y << ""; + ss << "\n\t" << frameRate << ""; + ss << "\n"; return ss.str(); } @@ -82,6 +97,8 @@ namespace OpenVulkano::AR ss << "Type: " << type.GetName() << "\nDepthType: " << depthFormat.GetName(); ss << "\nMinConfidence: " << static_cast(confidenceRange.min); ss << "\nMaxConfidence: " << static_cast(confidenceRange.max); + ss << "\nResolution: \"(" << imageResolution.x << "," << imageResolution.y << ")\""; + ss << "\nFrameRate: " << frameRate; return ss.str(); } } \ No newline at end of file diff --git a/openVulkanoCpp/AR/ArSessionMetadata.hpp b/openVulkanoCpp/AR/ArSessionMetadata.hpp index b62b822..9a28136 100644 --- a/openVulkanoCpp/AR/ArSessionMetadata.hpp +++ b/openVulkanoCpp/AR/ArSessionMetadata.hpp @@ -9,6 +9,7 @@ #include "AR/ArType.hpp" #include "AR/ArDepthFormat.hpp" #include "Math/Range.hpp" +#include "Math/Math.hpp" namespace OpenVulkano::AR { @@ -17,14 +18,16 @@ namespace OpenVulkano::AR ArType type; ArDepthFormat depthFormat; Math::Range confidenceRange; + Math::Vector2ui imageResolution; + float frameRate; bool playback = false; ArSessionMetadata() noexcept - : ArSessionMetadata(ArType::UNKNOWN, ArDepthFormat::UNAVAILABLE, {0,0}) + : ArSessionMetadata(ArType::UNKNOWN, ArDepthFormat::UNAVAILABLE, {0,0}, { 1920, 1440 }, 60) {} - ArSessionMetadata(ArType type, ArDepthFormat format, Math::Range confRange) noexcept - : type(type), depthFormat(format), confidenceRange(confRange) + ArSessionMetadata(ArType type, ArDepthFormat format, Math::Range confRange, Math::Vector2ui resolution, float frameRate) noexcept + : type(type), depthFormat(format), confidenceRange(confRange), imageResolution(resolution), frameRate(frameRate) {} ArSessionMetadata(const std::string& dirPath); diff --git a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKit.mm b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKit.mm index be1ebb4..d9fb276 100644 --- a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKit.mm +++ b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKit.mm @@ -35,6 +35,6 @@ namespace OpenVulkano::AR::ArKit return capabilities; } - ArSessionArKit::ArSessionArKit() : ArSession({ ArType::AR_KIT, ArDepthFormat::METER_FP32, { 0, 2 } }) + ArSessionArKit::ArSessionArKit() : ArSession({ ArType::AR_KIT, ArDepthFormat::METER_FP32, { 0, 2 }, { 1920, 1440 }, 60 }) {} } diff --git a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm index f555a93..6874e6c 100644 --- a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm +++ b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm @@ -84,6 +84,8 @@ namespace OpenVulkano::AR::ArKit //TODO resolution handling } LogFormat("Using video format", m_arConfig.videoFormat); + metadata.imageResolution = { m_arConfig.videoFormat.imageResolution.width, m_arConfig.videoFormat.imageResolution.height }; + metadata.frameRate = m_arConfig.videoFormat.framesPerSecond; } m_arSession = [ARSession new];