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()
    }
}