AVFoundation 相机的正确 ISO 值

Correct ISO value for AVFoundation camera

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

AVCaptureDeviceFormat *activeFormat = _videoDevice.activeFormat;
minISO = activeFormat.minISO;
maxISO = activeFormat.maxISO;

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

minISO = 23
maxISO = 736

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

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

它基于胶卷速度。最常见的 ISO 值从 25 开始,以下值为双倍值(例如 50、100、200、400)。 Wikipedia: Film Speed 列出所有值。

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

let isos: [Float] = [32, 50, 64, 80, 100, 125, 160, 200, 250, 320, 400, 500, 640, 800, 1000, 1250, 1600, 1800]

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

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

还有快门速度:

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