Skip to content

Facade camera controls: zoom, torch, Center Stage, stabilization, portrait-aware startSession - #1

Merged
ustacode merged 2 commits into
mainfrom
feature/camera-controls
Aug 1, 2026
Merged

Facade camera controls: zoom, torch, Center Stage, stabilization, portrait-aware startSession#1
ustacode merged 2 commits into
mainfrom
feature/camera-controls

Conversation

@ustacode

@ustacode ustacode commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Extends the facade for UX IRL's Camera Mode (streamer role) — no vendor edits, containment check green.

  • startSession(camera:video:) (cherry-picked from the parked feature/irl-camera) so preview geometry matches go-live; source-compatible default overload.
  • CameraSelection resolves the best virtual device (triple > dual-wide > dual > wide), so display-space zoom sweeps 0.5x…max continuously across lenses.
  • New protocol surface: setZoom(x:ramped:) (display-space, 0.5 = ultra-wide), setTorch, setCenterStage, setStabilization. Intent is remembered and re-applied after every internal re-attach (goLive rebuilds the capture graph).
  • Center Stage re-landed without the vendor patch reverted in b50403e: always off during attach (vendored format selection stays byte-identical), activated post-attach only when activeFormat.isCenterStageSupported — the uncatchable-NSException path cannot fire.
  • New StreamEngineState fields + events (cameraDeviceUpdated capability snapshot, zoom/torch/centerStage/stabilization); reducer + FakeStreamEngine parity; mediaOnNoTorch wired.

Tests: full package suite green on iPhone 17 Pro sim (IRLStreamKit-Package scheme), scripts/check-containment.sh clean.

🤖 Generated with Claude Code

ustacode and others added 2 commits August 2, 2026 07:47
Preview came up in the camera's native landscape because the portrait geometry
was only applied at go-live. startSession now accepts the intended
VideoConfiguration (default-landscape convenience overload keeps existing
callers working), and applies the canvas/geometry up front so the preview
matches what goLive will stream.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…t-device lenses

- startSession(camera:video:) cherry-picked from feature/irl-camera (3f2ceec)
  so a portrait/landscape preview matches go-live geometry.
- CameraSelection now resolves the best virtual device (triple > dual-wide >
  dual > wide) so display-space zoom sweeps 0.5x...max across lenses.
- setZoom(x:ramped:) in display space (0.5 == ultra-wide), setTorch,
  setCenterStage, setStabilization on the StreamEngine protocol; intent is
  remembered and re-applied after every internal re-attach (goLive rebuilds
  the capture graph).
- Center Stage re-landed WITHOUT the vendor patch that b50403e reverted:
  always disabled during attach (vendored format selection untouched),
  activated post-attach only when the active format supports it — the
  uncatchable-NSException trap cannot fire.
- New state fields + events (cameraDeviceUpdated capability snapshot,
  zoom/torch/centerStage/stabilization changes); reducer + FakeStreamEngine
  parity; mediaOnNoTorch wired to clear torch state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ustacode
ustacode merged commit 0017087 into main Aug 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant