From 36f2cc34b4014fd20a43bab729bc0567cf5b30f0 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Sun, 13 Apr 2025 12:22:11 +0200 Subject: [PATCH] Add option to set max exposure time --- openVulkanoCpp/AR/ArSession.hpp | 2 ++ openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h | 1 + .../AR/Provider/ArKit/ArSessionArKitInternal.mm | 8 ++++++++ 3 files changed, 11 insertions(+) diff --git a/openVulkanoCpp/AR/ArSession.hpp b/openVulkanoCpp/AR/ArSession.hpp index 2d4e438..d7b3d50 100644 --- a/openVulkanoCpp/AR/ArSession.hpp +++ b/openVulkanoCpp/AR/ArSession.hpp @@ -226,6 +226,8 @@ namespace OpenVulkano::AR */ virtual void SetRenderer(IRenderer* renderer) = 0; + virtual void SetMaxExposureTime(int fraction = 61) {}; + virtual void LockExposureTime(bool locked) {}; virtual void LockWhiteBalance(bool locked) {}; diff --git a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h index 5be3bdb..d51592a 100644 --- a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h +++ b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h @@ -55,6 +55,7 @@ namespace OpenVulkano::AR::ArKit void SetRenderer(IRenderer* renderer) override; + void SetMaxExposureTime(int fraction = 61) override; void LockExposureTime(bool locked) override; void LockWhiteBalance(bool locked) override; void SetFlashlightOn(bool on) override; diff --git a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm index 6c13c76..c71d365 100644 --- a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm +++ b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm @@ -236,6 +236,14 @@ namespace OpenVulkano::AR::ArKit [dev setExposureMode: locked ? AVCaptureExposureModeLocked : AVCaptureExposureModeContinuousAutoExposure]; } + void ArSessionArKitInternal::SetMaxExposureTime(int fraction) + { + AVCaptureDevice* dev = [ARWorldTrackingConfiguration configurableCaptureDeviceForPrimaryCamera]; + if (!m_lockedConfiguration) m_lockedConfiguration |=[dev lockForConfiguration:nil]; + [dev setActiveMaxExposureDuration:CMTimeMake(1, fraction)]; + Logger::AR->info("Set max exposure time to: 1/{}s", fraction); + } + void ArSessionArKitInternal::LockWhiteBalance(bool locked) { AVCaptureDevice* dev = [ARWorldTrackingConfiguration configurableCaptureDeviceForPrimaryCamera];