Expose options to lock exposure time and white-balance and toggle flash
This commit is contained in:
@@ -220,6 +220,12 @@ namespace OpenVulkano::AR
|
||||
*/
|
||||
virtual void SetRenderer(IRenderer* renderer) = 0;
|
||||
|
||||
virtual void LockExposureTime(bool locked) {};
|
||||
|
||||
virtual void LockWhitebalance(bool locked) {};
|
||||
|
||||
virtual void SetFlashlightOn(bool on) {};
|
||||
|
||||
/**
|
||||
* Gets the capabilities for this ArSession.
|
||||
* @return The capabilities for the current AR session.
|
||||
|
||||
@@ -51,6 +51,10 @@ namespace OpenVulkano::AR::ArKit
|
||||
|
||||
void SetRenderer(IRenderer* renderer) override;
|
||||
|
||||
void LockExposureTime(bool locked) override;
|
||||
void LockWhitebalance(bool locked) override;
|
||||
void SetFlashlightOn(bool on) override;
|
||||
|
||||
protected:
|
||||
Scene::Texture * MakeTexture(ArFrame *frame) override;
|
||||
|
||||
@@ -66,6 +70,9 @@ namespace OpenVulkano::AR::ArKit
|
||||
#else*/
|
||||
SpintexProtectedObject<std::shared_ptr<ArFrame>> m_frame;
|
||||
//#endif
|
||||
std::atomic_size_t m_frameId;
|
||||
std::atomic_size_t m_frameId = 0;
|
||||
bool m_lockedConfiguration = false;
|
||||
bool m_lockedExposure = false;
|
||||
bool m_lockedWhitebalance = false;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#import <ARKit/ARConfiguration.h>
|
||||
#import <ARKit/ARCamera.h>
|
||||
#import <ARKit/ARKit.h>
|
||||
#import <AVFoundation/AVCaptureDevice.h>
|
||||
#import <CoreVideo/CoreVideo.h>
|
||||
#import "ArKitDelegate.h"
|
||||
|
||||
@@ -138,6 +139,11 @@ namespace OpenVulkano::AR::ArKit
|
||||
|
||||
void ArSessionArKitInternal::Stop()
|
||||
{
|
||||
if (m_lockedConfiguration)
|
||||
{
|
||||
m_lockedConfiguration = false;
|
||||
[[ARWorldTrackingConfiguration configurableCaptureDeviceForPrimaryCamera] unlockForConfiguration];
|
||||
}
|
||||
OnStopped();
|
||||
[m_arSession pause];
|
||||
/*#if (__cplusplus >= 202002L)
|
||||
@@ -184,6 +190,27 @@ namespace OpenVulkano::AR::ArKit
|
||||
}
|
||||
}
|
||||
|
||||
void ArSessionArKitInternal::LockExposureTime(bool locked)
|
||||
{
|
||||
AVCaptureDevice* dev = [ARWorldTrackingConfiguration configurableCaptureDeviceForPrimaryCamera];
|
||||
if (!m_lockedConfiguration) m_lockedConfiguration |=[dev lockForConfiguration:nil];
|
||||
[dev setExposureMode: locked ? AVCaptureExposureModeLocked : AVCaptureExposureModeContinuousAutoExposure];
|
||||
}
|
||||
|
||||
void ArSessionArKitInternal::LockWhitebalance(bool locked)
|
||||
{
|
||||
AVCaptureDevice* dev = [ARWorldTrackingConfiguration configurableCaptureDeviceForPrimaryCamera];
|
||||
if (!m_lockedConfiguration) m_lockedConfiguration |=[dev lockForConfiguration:nil];
|
||||
[dev setWhiteBalanceMode: locked ? AVCaptureWhiteBalanceModeLocked : AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance];
|
||||
}
|
||||
|
||||
void ArSessionArKitInternal::SetFlashlightOn(bool on)
|
||||
{
|
||||
AVCaptureDevice* dev = [ARWorldTrackingConfiguration configurableCaptureDeviceForPrimaryCamera];
|
||||
if (!m_lockedConfiguration) m_lockedConfiguration |=[dev lockForConfiguration:nil];
|
||||
[dev setTorchMode: on ? AVCaptureTorchModeOn : AVCaptureTorchModeOff];
|
||||
}
|
||||
|
||||
|
||||
// AR Kit delegate events
|
||||
void ArSessionArKitInternal::OnArNewFrame(ARSession* session, ARFrame* frame)
|
||||
@@ -201,6 +228,7 @@ namespace OpenVulkano::AR::ArKit
|
||||
}
|
||||
OnNewFrameAvailable();
|
||||
m_frame = arFrame;
|
||||
Logger::AR->info("Exposure: {}; ColTemp: {}", 1.0/frame.camera.exposureDuration, frame.lightEstimate.ambientColorTemperature);
|
||||
}
|
||||
|
||||
void ArSessionArKitInternal::OnArSessionInterruptedChanged(ARSession* session, bool interrupted)
|
||||
|
||||
Reference in New Issue
Block a user