Many third-party applications on iOS (or Android) enable us to manually set the shutter speed, but they often only provide a limited set of shutter speed. For example, a common-used list of predefined shutter speed values is [1/2, 1/4, 1/8, 1/12, 1/16, ...].
However, I notice that the iOS API actually provides a function that takes a continuous exposure duration as input. (ref. iOS AVCaptureDevice)
setExposureModeCustomWithDuration(_ duration: CMTime, iso ISO: Float, completionHandler handler: ((CMTime) -> Void)!)
Parameters
duration: The exposure duration.
A value of AVCaptureExposureDurationCurrent can be used to indicate that the caller does not wish to specify a value for exposureDuration. Note that changes to this property may result in changes to activeVideoMinFrameDuration and/or activeVideoMaxFrameDuration.
Similar function can also be found on the Android. (ref. SENSOR_EXPOSURE_TIME)
Key< long > SENSOR_EXPOSURE_TIME
Duration each pixel is exposed to light.
If the sensor can't expose this exact duration, it will shorten the duration exposed to the nearest possible value (rather than expose longer). The final exposure time used will be available in the output capture result.
This control is only effective if android.control.aeMode or android.control.mode is set to OFF; otherwise the auto-exposure algorithm will override this value.
Units: Nanoseconds
Range of valid values: android.sensor.info.exposureTimeRange
Now, my question is why most camera apps use a limited set of shutter speed values instead of a continuous value.
Is it a conversion of photography? or due to some other factors, e.g., the support of underlying CMOS sensor?