SPB Git

spb/focale Public

Swift 100%
1.6 KB · 51 lines swift
Raw Blame History
1//2//  DeviceCapabilities.swift3//  Focale4//5//  Author: Simon-Pierre Boucher6//  Contact: contact@spboucher.ai7//8//  Every hardware capability is queried before a control is exposed9//  (CLAUDE.md §4): no dead buttons, no assumptions about iPhone model.10//1112import Foundation1314/// Sendable snapshot of what the active capture device supports.15struct DeviceCapabilities: Sendable {16    var availableLenses: [LensKind]17    var supportsProRAW: Bool18    var isoRange: ClosedRange<Float>19    var shutterRange: ClosedRange<Double>      // seconds20    var exposureBiasRange: ClosedRange<Float>  // EV21    var maxWhiteBalanceGain: Float22    var maxZoomFactor: Double23    var supportsManualFocus: Bool24    var hasDepthCapture: Bool                  // LiDAR / depth for SceneSignal25    var hasFlash: Bool2627    static let none = DeviceCapabilities(28        availableLenses: [],29        supportsProRAW: false,30        isoRange: 100...100,31        shutterRange: 0.008...0.008,32        exposureBiasRange: 0...0,33        maxWhiteBalanceGain: 1,34        maxZoomFactor: 1,35        supportsManualFocus: false,36        hasDepthCapture: false,37        hasFlash: false38    )3940    func supports(_ control: CaptureControl) -> Bool {41        switch control {42        case .iso: isoRange.lowerBound < isoRange.upperBound43        case .shutterSpeed: shutterRange.lowerBound < shutterRange.upperBound44        case .exposureBias: exposureBiasRange.lowerBound < exposureBiasRange.upperBound45        case .focus: supportsManualFocus46        case .whiteBalance: maxWhiteBalanceGain > 147        case .zoom: maxZoomFactor > 148        }49    }50}51