I’m borrowing some code to get higher framerate than the default 30, but not all of these formats support Live Photo and I can’t find a way to check for it – any ideas?
var bestFormat: AVCaptureDevice.Format?
var bestFrameRateRange: AVFrameRateRange?
for format in deviceInput.device.formats {
if format.supportlive
let supporrtedFrameRanges = deviceInput.device.activeFormat.videoSupportedFrameRateRanges
for frameRange in supporrtedFrameRanges {
if frameRange.maxFrameRate > bestFrameRateRange?.maxFrameRate ?? 0 {
bestFormat = format
bestFrameRateRange = frameRange
}
Log.debug("livePhoto frameRange:(frameRange) format:(format)")
}
}
if let bestFormat, let bestFrameRateRange {
do {
try deviceInput.device.lockForConfiguration()
deviceInput.device.activeFormat = bestFormat
// Set the device's min/max frame duration.
let duration = bestFrameRateRange.minFrameDuration
deviceInput.device.activeVideoMinFrameDuration = duration
deviceInput.device.activeVideoMaxFrameDuration = duration
deviceInput.device.unlockForConfiguration()
Log.debug("livePhoto didSet bestFrameRateRange:(bestFrameRateRange)")
} catch {
Log.error(error, message: "livePhoto set format failed for:(bestFrameRateRange)")
}
}