Skip to content

Only the running camera can preview — is framing with the ultra-wide worth a lens switch? #115

Description

@liversedge

From PinPointStudio's preview handover, 28 August 2026, §4.6 — filed as their words have it: "a product question, not a bug". It needs a decision before it needs code.

What the device can actually do

This handset has one AVCaptureSession. CORE 5.6d gives each lens its own Source, and PinPointStudio asks about every camera Source at declare — but only one of them can be previewing at any moment, because only one camera is running.

Until 2f604b1, AppModel.livePreview was a single slot and the second request stopped the first. src:camera:wide is asked for first, so wide — the lens an operator actually watches — was destroyed milliseconds after being created, and both Sources were acked opened. A Source that is not the running camera is now refused with a reason, which is legitimate under E18 clause 1c and which Studio handles.

The lens is never switched to satisfy a preview request. Lens.captureRank makes a lens change calibration-affecting, and changing it mid-session is currently forbidden.

The question

If an operator wants to frame with the ultra-wide, the only way to show it to them is to switch the active lens — which is calibration-affecting.

  • Leave it as it is. Preview follows the capture lens. Framing on a different lens is not offered, and the host's request is refused with a reason. Costs nothing; an operator who wants the ultra-wide's field of view cannot see it before committing to it.
  • Allow a lens switch for framing, before arming only. Preview follows whichever lens is asked for while the session is unarmed; arming pins it and any calibration is re-taken or invalidated. Needs a rule for what happens to calibration, and a reason it cannot happen mid-session.
  • Something narrower — e.g. the host may name a preferred preview Source at declare, chosen once, before anything is calibrated.

⚠ Whichever it is, 5.6d still lets Studio ask about every Source, so the refusal path stays regardless. This decides only whether a request can ever cause a switch.

Exit criterion

An answer recorded here, and if it is anything but the first option, an issue against E3 with the calibration rule written down.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions