Does activeLockedVideoFrameDuration limit fully manual exposure to half a frame?

On an iPhone 18 Pro running iOS 27, I’m seeing an interaction between locked frame timing and custom exposure.

I configure the wide camera for 4K at 29.97 fps:

  input.activeLockedVideoFrameDuration =
      CMTime(value: 1001, timescale: 30000)

With aperture and ISO fixed, I set exposure using the iOS 27 setExposureModeCustom(lensAperture:duration:iso:completionHandler:) API.

A controlled comparison produced:

  • 10 ms requested: timing lock ON → 10.000 ms; OFF → 10.000 ms.
  • 16 ms requested: timing lock ON → 16.129 ms; OFF → 16.129 ms.
  • 20 ms requested: timing lock ON → 16.667 ms; OFF → 20.000 ms.

“OFF” means ordinary minimum and maximum frame durations both set to 1001/30000 seconds.

These are exposure values from per-frame camera metadata after valid completion timestamps and a settling period. The behaviour occurs both idle and during recording.

With the timing lock enabled, delivered frame timestamps show exact 30000/1001 pacing. Without it, fully manual capture measured approximately 29.964 fps.

Separately, with shutter fixed at 20 ms but ISO automatic, the locked-timing configuration held 20 ms and exact 29.97. That suggests exposure ownership affects the behaviour.

The documentation (https://developer.apple.com/documentation/avfoundation/avcapturedeviceinput/activelockedvideoframeduration) recommends exposure durations of half a frame or less to maintain full dynamic range, but doesn’t explicitly describe a duration clamp.

Is this expected behaviour?

  • Does fully manual exposure impose a half-frame ceiling when locked frame timing is active?
  • Is there an API to query that effective limit? The format’s advertised exposure range includes 20 ms.
  • Is there a supported way to retain exact fractional frame timing and a longer fully manual exposure?

I can provide a minimal reproducer and device diagnostics.

Does activeLockedVideoFrameDuration limit fully manual exposure to half a frame?
 
 
Q