Skip to content

docs(stereo-camera): Android design proposal (ownership, browser path, privacy, phases) - #1834

Draft
dfattal wants to merge 1 commit into
mainfrom
docs/stereo-camera-android
Draft

dfattal wants to merge 1 commit into
mainfrom
docs/stereo-camera-android

Conversation

@dfattal

@dfattal dfattal commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Design proposal, no code: how to bring XR_DXR_stereo_camera (ADR-043) to the Android tablets so the DisplayXR Browser can offer the stereo pair to pages for 3D calls, as it now does on Windows.

New: docs/roadmap/stereo-camera-android.md. Touched: a pointer paragraph in docs/roadmap/stereo-camera-source.md §C, plus an index line in docs/README.md.

Base: main, because ADR-043, the spec and the roadmap are on main. The runtime code it cites is on feat/stereo-camera-r3 @ b567f3203 (#1819), and those citations are marked r3:. The §C pointer touches the same file #1819 edits heavily, so expect a trivial conflict on whichever lands second.

Recommendation

  • Rear pair first. It does not conflict with head tracking (measured).
  • Front pair, near term: option R. The runtime satellite that weaves for the browser's package owns the Camera2 pair and drives the vendor's in-app tracking from the same capture. Other apps' tracking pauses during a call, and in-process apps are refused the front pair.
  • End state: option V. The vendor tracking service owns the pair and shares frames. This is consistent with OEM R7 and multi-app.
  • Browser: the B1 factory on Android, with a CAMERA_CONSUMER connection from the capture process. That connection lands in the same satellite, because the slot broker reuses the slot for the same package. CPU NV12 first, AHB later. It is independent of browser-pvt#175.
  • Privacy: Android identity is package + signing certificate. R3's executable path does not identify Android apps.

Findings the doc records

  • android_package_is_visible reports package visibility, not foreground, so spec §7.1 misuses it.
  • pid_has_visible_window() returns true on Android.
  • xrt_plugin_stereo_camera_frame has no struct_size. Zero-copy therefore needs an appended stereo_camera_wait_frame2 slot.
  • The vendor SDK's C API carries per-camera intrinsics, not only rotations. Whether the devices populate them is open.

Phases

A0a/A0b (cheapest de-risk; tablet) → A1 rear pair → A2 Android privacy → B2a browser rear → A3 front pair (option R; vendor) → B2b product gate → A4 AHB/GPU. Option V runs in parallel. Each phase has a checkable gate.

Checks

  • Ran locally: check_doc_paths.py, gen_adr_index.py --check, gen_extensions_index.py --check.
  • No device was touched and nothing was built.

🤖 Generated with Claude Code

…h, privacy, phases

Proposal for bringing XR_DXR_stereo_camera to the Android tablets so the
DisplayXR Browser can offer the stereo pair to pages. Design only.

- Ownership options (runtime satellite + in-app tracking, vendor service
  shares frames, runtime pushes into the vendor service, time-slicing,
  Chromium Camera2) with the vendor capabilities each needs, marked
  confirmed / unconfirmed. Recommends rear pair first, option R near term,
  vendor-owned pair as the end state.
- Android browser path: capture device in front of the Android platform
  factory, CAMERA_CONSUMER from the browser process, same-package satellite
  routing; relation to browser-pvt#175.
- Rectification cost at 2x1280x720, calibration sources, output contract
  matching the web SDK, eye-order gate.
- Android consent: package + signing-cert identity (exe path does not
  identify Android apps), peer CAMERA permission, OS while-in-use as the
  foreground gate, runtime notification as the indicator.
- ABI: A1 needs none; zero-copy needs an appended wait_frame2 slot because
  the frame struct has no struct_size.
- Gated phases A0a..A4, B2a/B2b, V; open questions for the owner and vendor.

Pointer added to stereo-camera-source.md §C and docs/README.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@dfattal
dfattal force-pushed the docs/stereo-camera-android branch from 88163f3 to a5aa52e Compare October 6, 2026 08:05
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