Video recording framerate#

Camera 1#

Sample code to monitor video recording framerate:

/// Keep reference on MainCamera peripheral to get notified of changes.
private var cameraRef: Ref<MainCamera>?

/// Monitors and prints video recording framerate.
func monitorVideoFramerate(drone: Drone) {
    cameraRef = drone.getPeripheral(Peripherals.mainCamera) { camera in
        // called on main thread when the camera peripheral changes
        if let camera = camera {
            if camera.recordingSettings.supportedFramerates.isEmpty {
                // setting value is not relevant if there is no supported value
                print("No supported value")
            } else {
                // get setting value
                let videoFramerate = camera.recordingSettings.framerate
                print("Current value is: \(videoFramerate)")
            }
        }
    }
}

Example of output when video recording framerate is 60 fps:

Current value is: 60

Sample code to modify video recording framerate:

/// Sets video framerate.
func setVideoFramerate(drone: Drone, videoFramerate: CameraRecordingFramerate) {
    if let camera = drone.getPeripheral(Peripherals.mainCamera) {
        // set setting value
        camera.recordingSettings.framerate = videoFramerate
    }
}

Trying to change the setting value to an unsupported value has no effect. Values supported by the camera are provided by CameraRecordingSettings.supportedFramerates.

Camera 2#

Video recording framerate is configured with parameter Camera2Params.videoRecordingFramerate.

Sample code to monitor video recording framerate:

/// Keep reference on MainCamera2 peripheral to get notified of changes.
private var cameraRef: Ref<MainCamera2>?

// Monitors and prints video recording framerate.
func monitorVideoFramerate(drone: Drone) {
    cameraRef = drone.getPeripheral(Peripherals.mainCamera2) { camera in
        // called on main thread when the camera peripheral changes
        if let camera = camera {
            // get configuration parameter
            if let configParam = camera.config[Camera2Params.videoRecordingFramerate] {
                if configParam.currentSupportedValues.isEmpty {
                    // parameter value is not relevant
                    // if there is not supported values in current configuration
                    print("No supported value in current configuration")
                } else {
                    // get parameter value
                    let videoFramerate = configParam.value
                    print("Current value is: \(videoFramerate)")
                }
            }
        }
    }
}

Example of output when video recording framerate is 60 fps:

Current value is: fps60

Sample code to modify video recording framerate:

/// Sets video framerate.
func setVideoFramerate(drone: Drone, videoFramerate: Camera2RecordingFramerate) {
    if let camera = drone.getPeripheral(Peripherals.mainCamera2) {
        // create configuration editor, starting from current configuration
        let editor = camera.config.edit(fromScratch: false)
        // retrieve configuration parameter
        if let configParam = editor[Camera2Params.videoRecordingFramerate] {
            // change parameter value,
            // and unset other parameters conflicting with this new value
            configParam.value = videoFramerate
            // complete configuration, by setting missing parameters values
            editor.autoComplete()
            // send new configuration to drone
            editor.commit()
        }
    }
}

Trying to change the parameter value to an unsupported value has no effect. Values supported by the camera are provided by the parameter field configParam.overallSupportedValues.