Exposure lock#
Camera 1#
Sample code to monitor exposure lock state:
/// Keep reference on MainCamera peripheral to get notified of changes.
private var cameraRef: Ref<MainCamera>?
/// Monitors and prints exposure lock state.
func monitorExposureLock(drone: Drone) {
cameraRef = drone.getPeripheral(Peripherals.mainCamera) { camera in
// called on main thread when the camera peripheral changes
if let camera = camera {
if let exposureLock = camera.exposureLock {
// get setting value
let exposureLockMode = exposureLock.mode
print("Exposure lock mode: \(exposureLockMode)")
// get updating flag
let updating = exposureLock.updating
print("Exposure lock updating: \(updating)")
} else {
// exposure lock is not available
print("Exposure lock not available")
}
}
}
}
Example of output:
Exposure lock mode: currentValues
Exposure lock updating: false
Sample code to lock and unlock exposure:
/// Locks exposure on current values.
func lockExposure(drone: Drone) {
if let camera = drone.getPeripheral(Peripherals.mainCamera) {
camera.exposureLock?.lockOnCurrentValues()
}
}
/// Locks exposure on a region.
func lockExposureOnRegion(drone: Drone, centerX: Double, centerY: Double) {
if let camera = drone.getPeripheral(Peripherals.mainCamera) {
camera.exposureLock?.lockOnRegion(centerX: centerX, centerY: centerY)
}
}
/// Unlocks exposure.
func unlockExposure(drone: Drone) {
if let camera = drone.getPeripheral(Peripherals.mainCamera) {
camera.exposureLock?.unlock()
}
}
Camera 2#
Exposure values are monitored with sub-component Camera2Components.exposureLock
.
Note: You need to keep a reference on the sub-component Camera2Components.exposureLock
to get notified of changes.
Sample code to monitor exposure lock:
/// Keep reference on Camera2ExposureLock sub-component to get notified of changes.
private var exposureLockRef: Ref<Camera2ExposureLock>?
/// Monitors and prints exposure lock.
func monitorExposureLock(drone: Drone) {
if let camera = drone.getPeripheral(Peripherals.mainCamera2) {
// called on main thread when the camera peripheral changes
// get exposureLock component reference and register listener
exposureLockRef = camera.getComponent(Camera2Components.exposureLock) { exposureLock in
if let exposureLock = exposureLock {
if !exposureLock.supportedModes.isEmpty {
// mode value is not relevant, there is no supported value
print("Exposure lock not available")
} else {
if !exposureLock.supportedModes.contains(.currentValues)
&& !exposureLock.supportedModes.contains(.region) {
// exposure cannot be locked at present
print("Exposure can't be locked")
}
// get setting value
let exposureLockMode = exposureLock.mode
print("Exposure lock mode: \(exposureLockMode)")
// get updating flag
let updating = exposureLock.updating
print("Exposure lock updating: \(updating)")
}
} else {
// exposureLock component nil, meaning exposure lock is unavailable
print("Exposure lock not available")
}
}
}
}
Example of output:
Exposure lock mode: currentValues
Exposure lock updating: false
Sample code to lock and unlock exposure:
/// Locks exposure on current values.
func lockExposure(drone: Drone) {
if let camera = drone.getPeripheral(Peripherals.mainCamera2),
let exposureLock = camera.getComponent(Camera2Components.exposureLock) {
exposureLock.lockOnCurrentValues()
}
}
/// Locks exposure on a region.
func lockExposureOnRegion(drone: Drone, centerX: Double, centerY: Double) {
if let camera = drone.getPeripheral(Peripherals.mainCamera2),
let exposureLock = camera.getComponent(Camera2Components.exposureLock) {
exposureLock.lockOnRegion(centerX: centerX, centerY: centerY)
}
}
/// Unlocks exposure.
func unlockExposure(drone: Drone) {
if let camera = drone.getPeripheral(Peripherals.mainCamera2),
let exposureLock = camera.getComponent(Camera2Components.exposureLock) {
exposureLock.unlock()
}
}