Zoom#
Camera 1#
Zoom level is controlled with setting CameraZoom
.
Sample code to monitor camera zoom:
/// Keep reference on MainCamera peripheral to get notified of changes.
private var cameraRef: Ref<MainCamera>?
/// Monitors and prints zoom information.
func monitorZoom(drone: Drone) {
cameraRef = drone.getPeripheral(Peripherals.mainCamera) { camera in
if let camera = camera {
if let zoom = camera.zoom {
let level = zoom.currentLevel
print("Zoom level \(level)")
let available = zoom.isAvailable
print("Zoom isAvailable \(available)")
let maxSpeed = zoom.maxSpeed.value
print("Zoom maxSpeed \(maxSpeed) tan(degree)/second")
let velocityQualityDegradationAllowance = zoom.velocityQualityDegradationAllowance.value
print("Zoom velocityQualityDegradationAllowance \(velocityQualityDegradationAllowance)")
let maxLossLessLevel = zoom.maxLossLessLevel
print("Zoom maxLossLessLevel \(maxLossLessLevel)")
let maxLossyLevel = zoom.maxLossyLevel
print("Zoom maxLossyLevel \(maxLossyLevel)")
} else {
print("Zoom not supported by camera")
}
}
}
}
Example of output:
Zoom level 1.0
Zoom isAvailable true
Zoom maxSpeed 0.3400000035762787 tan(degree)/second
Zoom velocityQualityDegradationAllowance true
Zoom maxLossLessLevel 1.0
Zoom maxLossyLevel 2.999976396560669
Details:
CameraZoom.level
is the current zoom level.CameraZoom.isAvailable
indicates whether zoom control is available at present. For instance, zoom control may be unavailable temporarily during an animation.CameraZoom.maxLossyLevel
is the maximum zoom level supported by the camera.CameraZoom.maxLossLessLevel
is the zoom level above which image quality will be degraded.CameraZoom.maxSpeed
is used to configure the maximum zoom speed.CameraZoom.velocityQualityDegradationAllowance
tells whether zoom level changes using zoom velocity will stop atCameraZoom.maxLossyLevel
or atCameraZoom.maxLossLessLevel
.
Zoom level can be controlled either by defining a zoom level or by giving a zoom change velocity.
Sample code to control zoom level by defining a zoom level:
/// Sets zoom level.
func setZoomLevel(drone: Drone, level: Double) {
if let camera = drone.getPeripheral(Peripherals.mainCamera) {
if camera.zoom?.isAvailable == true {
camera.zoom?.control(mode: .level, target: level)
} else {
print("Zoom not available")
}
}
}
The zoom level target shall be contained between 1 (means no zoom) and maxLossyLevel
.
Sample code to control zoom level by giving a zoom change velocity:
/// Sets zoom velocity.
func setZoomVelocity(camera: MainCamera, velocity: Double) {
if let camera = drone.getPeripheral(Peripherals.mainCamera) {
if camera.zoom?.isAvailable == true {
camera.zoom?.control(mode: .velocity, target: velocity)
} else {
print("Zoom not available")
}
}
}
The velocity value shall be in range [-1, 1]:
-1: the camera zooms out at the speed defined in
CameraZoom.maxSpeed
.0: the zoom level does not change.
1: the camera zooms in at the speed defined in
CameraZoom.maxSpeed
.
Camera 2#
Zoom level is controlled with sub-component Camera2Components.zoom
.
Zoom behavior is configured with parameters Camera2Params.zoomMaxSpeed
and Camera2Params.zoomVelocityControlQualityMode
.
Sample code to monitor video mode:
/// Keep reference on MainCamera2 peripheral to get notified of changes.
private var cameraRef: Ref<MainCamera2>?
/// Keep reference on Camera2Zoom component to get notified of changes.
private var zoomRef: Ref<Camera2Zoom>?
/// Monitors and prints zoom information.
func monitorZoom(drone: Drone) {
cameraRef = drone.getPeripheral(Peripherals.mainCamera2) { [weak self] camera in
// get zoom component reference and register listener
self?.zoomRef = camera?.getComponent(Camera2Components.zoom) { zoom in
if let zoom = zoom {
let level = zoom.level
print("Zoom level \(level)")
let maxLossLessLevel = zoom.maxLossLessLevel
print("Zoom maxLossLessLevel \(maxLossLessLevel)")
let maxLevel = zoom.maxLevel
print("Zoom maxLevel \(maxLevel)")
} else {
print("Zoom unavailable")
}
}
// get zoomMaxSpeed configuration parameter
if let configParam = camera?.config[Camera2Params.zoomMaxSpeed] {
if configParam.currentSupportedValues == nil {
// parameter value is not relevant
// if there is not supported values in current configuration
print("zoomMaxSpeed: no supported value in current configuration")
} else {
// get parameter value
let speed = configParam.value
print("zoomMaxSpeed: \(speed) tan(degree)/second")
}
}
// get zoomVelocityControlQualityMode configuration parameter
if let configParam = camera?.config[Camera2Params.zoomVelocityControlQualityMode] {
if configParam.currentSupportedValues.isEmpty {
// parameter value is not relevant
// if there is not supported values in current configuration
print("zoomVelocityControlQualityMode no supported value in current configuration")
} else {
// get parameter value
let mode = configParam.value
print("zoomVelocityControlQualityMode: \(mode)")
}
}
}
}
Example of output:
Zoom level 1.0
Zoom maxLossLessLevel 1.0
Zoom maxLevel 6.014731352298322
zoomMaxSpeed: 0.0 tan(degree)/second
zoomVelocityControlQualityMode: allowDegrading
Details:
Camera2Zoom.level
is the current zoom level.Camera2Zoom.maxLevel
is the maximum zoom level supported by the camera.Camera2Zoom.maxLossLessLevel
is the zoom level above which image quality will be degraded.Camera2Params.zoomMaxSpeed
is used to configure the maximum zoom speed.Camera2Params.zoomVelocityControlQualityMode
tells whether zoom level changes using zoom velocity will stop atCamera2Zoom.maxLevel
or atCamera2Zoom.maxLossLessLevel
.
Zoom level can be controlled either by defining a zoom level or by giving a zoom change velocity.
Sample code to control zoom level by defining a zoom level:
/// Sets zoom level.
func setZoomLevel(drone: Drone, level: Double) {
if let camera = drone.getPeripheral(Peripherals.mainCamera2) {
// get zoom component
if let zoom = camera.getComponent(Camera2Components.zoom) {
zoom.control(mode: .level, target: level)
} else {
// zoom component not available at present
print("Zoom not available")
}
}
}
The zoom level target shall be contained between 1 (means no zoom) and Camera2Zoom.maxLevel
.
Sample code to control zoom level by giving a zoom change velocity:
/// Sets zoom velocity.
func setZoomVelocity(drone: Drone, velocity: Double) {
if let camera = drone.getPeripheral(Peripherals.mainCamera2) {
// get zoom component
if let zoom = camera.getComponent(Camera2Components.zoom) {
zoom.control(mode: .velocity, target: velocity)
} else {
// zoom component not available at present
print("Zoom not available")
}
}
}
The velocity value shall be in range [-1, 1]:
-1: the camera zooms out at the speed defined in
Camera2Params.zoomMaxSpeed
.0: the zoom level does not change.
1: the camera zooms in at the speed defined in
Camera2Params.zoomMaxSpeed
.