feat: Implement exposure
(#2173)
* feat: Implement `exposure` (iOS) * Update Podfile.lock * Format * Expose exposure in format * Set exposure in Camera2 * fix: Fix exposure calculation * Add exposure docs
This commit is contained in:
@@ -39,6 +39,9 @@ class CameraConfiguration {
|
||||
// Zoom
|
||||
var zoom: CGFloat?
|
||||
|
||||
// Exposure
|
||||
var exposure: Float?
|
||||
|
||||
// isActive (Start/Stop)
|
||||
var isActive = false
|
||||
|
||||
@@ -59,6 +62,7 @@ class CameraConfiguration {
|
||||
enableLowLightBoost = other.enableLowLightBoost
|
||||
torch = other.torch
|
||||
zoom = other.zoom
|
||||
exposure = other.exposure
|
||||
isActive = other.isActive
|
||||
audio = other.audio
|
||||
} else {
|
||||
@@ -77,6 +81,7 @@ class CameraConfiguration {
|
||||
let sidePropsChanged: Bool
|
||||
let torchChanged: Bool
|
||||
let zoomChanged: Bool
|
||||
let exposureChanged: Bool
|
||||
|
||||
let audioSessionChanged: Bool
|
||||
|
||||
@@ -113,6 +118,8 @@ class CameraConfiguration {
|
||||
torchChanged = left?.isActive != right.isActive || left?.torch != right.torch
|
||||
// zoom (depends on format)
|
||||
zoomChanged = formatChanged || left?.zoom != right.zoom
|
||||
// exposure (depends on format)
|
||||
exposureChanged = formatChanged || left?.exposure != right.exposure
|
||||
|
||||
// audio session
|
||||
audioSessionChanged = left?.audio != right.audio
|
||||
|
@@ -285,6 +285,20 @@ extension CameraSession {
|
||||
device.videoZoomFactor = clamped
|
||||
}
|
||||
|
||||
// pragma MARK: Exposure
|
||||
|
||||
/**
|
||||
Configures exposure (`exposure`) as a bias that adjusts exposureTime and ISO.
|
||||
*/
|
||||
func configureExposure(configuration: CameraConfiguration, device: AVCaptureDevice) {
|
||||
guard let exposure = configuration.exposure else {
|
||||
return
|
||||
}
|
||||
|
||||
let clamped = max(min(exposure, device.maxExposureTargetBias), device.minExposureTargetBias)
|
||||
device.setExposureTargetBias(clamped)
|
||||
}
|
||||
|
||||
// pragma MARK: Audio
|
||||
|
||||
/**
|
||||
|
@@ -154,13 +154,17 @@ class CameraSession: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate, AVC
|
||||
if difference.zoomChanged {
|
||||
self.configureZoom(configuration: config, device: device)
|
||||
}
|
||||
// 8. Configure exposure bias
|
||||
if difference.exposureChanged {
|
||||
self.configureExposure(configuration: config, device: device)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 8. Start or stop the session if needed
|
||||
// 9. Start or stop the session if needed
|
||||
self.checkIsActive(configuration: config)
|
||||
|
||||
// 9. Enable or disable the Torch if needed (requires session to be running)
|
||||
// 10. Enable or disable the Torch if needed (requires session to be running)
|
||||
if difference.torchChanged {
|
||||
try self.withDeviceLock { device in
|
||||
try self.configureTorch(configuration: config, device: device)
|
||||
|
Reference in New Issue
Block a user