Skip to content

feat(call): Linux camera send + cross-platform camera CI verification - #35

Merged
schnsrw merged 3 commits into
mainfrom
ci/camera-crossplatform-compile
Jul 25, 2026
Merged

feat(call): Linux camera send + cross-platform camera CI verification#35
schnsrw merged 3 commits into
mainfrom
ci/camera-crossplatform-compile

Conversation

@schnsrw

@schnsrw schnsrw commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Non-macOS camera send for video calls, done on verified ground. Before writing camera code I confirmed the hard constraint: the Linux camera backend (v4l2-sys-mit) bindgens against linux/videodev2.h, which isn't on the macOS dev machine — so a Linux camera build can't be verified locally, and push-CI didn't compile the app at all (only a license gate). This PR fixes the verification path first, then wires the feature.

CI (verification first)

  • Camera backend compile-check now runs on all three OSes (was macOS-only) — proves nokhwa's V4L2 (Linux) and Media Foundation (Windows) backends build. Added libv4l-dev to the Linux capture deps. (This half is already green — see the checks.)
  • New app compile-check (linux) job — a full cargo check of the unified app on ubuntu-22.04 with all native deps (WebKitGTK, PipeWire/Pulse, ALSA mic, V4L2 camera, libvpx VP9). The app lives outside the workspace and was previously built only at release, so an app-level Linux regression surfaced at release, not in push-CI. This closes that gap for the camera path and every future app change.

Feature

  • Add ras-camera (features=capture) to the Linux app deps; widen the camera egress + pump cfg from macOS-only to any(macos, linux).
  • Linux uses the same VP9 encoder (ras-media-vpx, already a proven Linux dep) macOS uses for the camera — universally WebCodecs-decodable, so a Linux caller's camera renders on every peer.
  • Windows camera send stays deferred (no libvpx there — needs a codec decision); Windows still receives video and sends voice.

Security (unchanged)

Camera live-only, torn down on hangup/emergency-stop (Inv 4/12); no pixel logged (Inv 8).

Verification

App cargo check + clippy + fmt on macOS; CI now compiles the app on Linux and the camera backend on all three OSes. On-device (a real Linux camera call) pending hardware.

sachin sarwa added 2 commits July 26, 2026 02:53
…ust macOS)

Groundwork for non-macOS camera send. The camera backend (ras-camera --features
capture) was compile-checked on macOS only; its Linux V4L2 / Windows Media
Foundation builds were unverified. Prove they build in CI before wiring the
camera into the app on those platforms (the app isn't compiled in push-CI, so an
unverified camera dep would otherwise only fail at release).

- Add libv4l-dev to the Linux capture deps (v4l2-sys-mit needs
  linux/videodev2.h; can't be built on the macOS dev machine).
- Run the ras-camera capture compile-check on all three OSes.

Purely additive — only adds CI coverage; cannot affect existing builds.

Author: sachin sarwa
Builds on the camera compile-check groundwork: now that CI proves the nokhwa
backend builds on all three OSes, wire the camera into the app's Share/Call role
on Linux (macOS already sends; every platform already receives + renders).

- app: add ras-camera (features=capture) to the Linux target deps; widen the
  camera egress + pump cfg from macOS-only to any(macos, linux). Linux uses the
  same VP9 encoder (ras-media-vpx, already a proven Linux dep) macOS uses for the
  camera — universally WebCodecs-decodable, so a Linux caller's camera renders on
  every peer. Windows camera send stays deferred (no libvpx there — needs a codec
  decision); Windows still receives video and sends voice.
- ci: new "app compile-check (linux)" job — full cargo check of the app on
  ubuntu-22.04 with all native deps (WebKitGTK, PipeWire/Pulse, ALSA, V4L2,
  libvpx). The app is outside the workspace and was previously built ONLY at
  release, so an app-level Linux regression surfaced at release, not push-CI.
  This closes that gap for the camera path and every future app change.
- ci: the nokhwa camera compile-check now runs on Linux + Windows too (was
  macOS-only) + libv4l-dev added to the Linux capture deps.

Security unchanged (Inv 8/12): camera live-only, torn down on hangup, no pixel
logged.

Verified: app cargo check + clippy + fmt on macOS; CI now compiles the app on
Linux and the camera backend on all three OSes. On-device (a real Linux camera
call) pending hardware.

Author: sachin sarwa
@schnsrw schnsrw changed the title ci: compile-check the camera backend on Linux + Windows feat(call): Linux camera send + cross-platform camera CI verification Jul 25, 2026
…nux build broke)

The new Linux app compile-check surfaced a pre-existing broken lockfile: the app
Cargo.lock had zbus 5.12.0 paired with zbus_macros 5.18.0. zbus pins its macros
with a caret, and zbus 5.18.0 is held back by ras-input-linux's rustix "=1.0.8",
so the lib stayed at 5.12.0 while the proc-macro floated to 5.18.0 — whose
generated code references object_server::DispatchResult2, absent in 5.12.0
(E0433). Never caught before because push-CI never compiled the Linux app.

Pin zbus_macros back to 5.12.0 to match the lib (no rustix conflict, unlike
bumping zbus up). zbus/zvariant families are otherwise internally consistent.

Author: sachin sarwa
@schnsrw
schnsrw merged commit 494a088 into main Jul 25, 2026
10 checks 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