修正 AVFoundation 相机的 ISO 值

Spa*_*Dog 3 iso avfoundation ios

AVFoundation使用时,我使用这两个属性来了解设备相机可以使用的最小和最大 ISO:

AVCaptureDeviceFormat *activeFormat = _videoDevice.activeFormat;
minISO = activeFormat.minISO;
maxISO = activeFormat.maxISO;
Run Code Online (Sandbox Code Playgroud)

但是这些行给了我以下结果:

minISO = 23
maxISO = 736
Run Code Online (Sandbox Code Playgroud)

但是没有 ISO 23 或 736 这样的东西。 事实上,如果你用 ISO 23 调整相机,它会自动调整 ISO 50,而 ISO 736 会使相机调整到 ISO 800。

有没有办法在设置之前知道给定相机可以使用的真实 ISO?

Ale*_*tan 6

您可以定义标准 ISO 值列表:

let isos: [Float] = [32, 50, 64, 80, 100, 125, 160, 200, 250, 320, 400, 500, 640, 800, 1000, 1250, 1600, 1800]
Run Code Online (Sandbox Code Playgroud)

在通过最小和最大 ISO 值初始化捕获设备过滤器之后:

var isos_available: [Float] = []
    
for one_iso in isos {
    if one_iso >= min_iso && one_iso <= max_iso {
        isos_available.append(one_iso)
    }
}
Run Code Online (Sandbox Code Playgroud)

还有快门速度:

var shutters: [Float] = [1, 2, 4, 8, 15, 30, 60, 125, 250, 500, 1000, 2000, 4000, 8000]
var shutters_available: [Float] = []
    
let min_seconds = CMTimeGetSeconds(self.device.activeFormat.minExposureDuration)
let max_seconds = CMTimeGetSeconds(self.device.activeFormat.maxExposureDuration)
    
for one_shutter in shutters {
    let seconds = 1.0 / Float64(one_shutter)
    if seconds >= min_seconds && seconds <= max_seconds {
        shutters_available.append(one_shutter)
    }
}
Run Code Online (Sandbox Code Playgroud)