Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/capture-source-device-argus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
livekit-capture: minor
livekit-ffi: minor
---

Add NVIDIA Jetson CSI camera capture on Linux.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 1 addition & 3 deletions libargus-sys/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,7 @@ fn find_tegra_lib_dir() -> Option<PathBuf> {
],
};

candidates
.into_iter()
.find(|dir| REQUIRED_LIBS.iter().all(|lib| dir.join(lib).exists()))
candidates.into_iter().find(|dir| REQUIRED_LIBS.iter().all(|lib| dir.join(lib).exists()))
}

fn main() {
Expand Down
4 changes: 1 addition & 3 deletions libargus-sys/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,7 @@ pub fn lk_argus_status_string(status: i32) -> &'static str {
match status {
LK_ARGUS_OK => "ok",
LK_ARGUS_ERR_INVALID_ARG => "invalid argument",
LK_ARGUS_ERR_NO_PROVIDER => {
"failed to create camera provider (is nvargus-daemon running?)"
}
LK_ARGUS_ERR_NO_PROVIDER => "failed to create camera provider (is nvargus-daemon running?)",
LK_ARGUS_ERR_NO_DEVICE => "camera device index out of range",
LK_ARGUS_ERR_ARGUS => "Argus operation failed",
LK_ARGUS_ERR_TIMEOUT => "frame acquire timed out",
Expand Down
7 changes: 7 additions & 0 deletions livekit-capture/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ source-device = [
"dep:libc",
"dep:v4l",
]
# Adds NVIDIA Jetson CSI capture through libargus as an additional Linux
# device-source backend. The libargus-sys build probes for the Jetson
# Multimedia API and falls back to inert stubs when it is absent, so this
# feature compiles on any target; it only has an effect on aarch64 Linux
# (inert elsewhere).
source-device-argus = ["source-device", "dep:libargus-sys"]
source-pattern = ["dep:pollster", "dep:wgpu", "dep:yuv-sys"]

# Encoded sources
Expand Down Expand Up @@ -122,5 +128,6 @@ objc2-foundation = { version = "0.3.2", default-features = false, features = ["s

[target.'cfg(target_os = "linux")'.dependencies]
image = { workspace = true, optional = true }
libargus-sys = { workspace = true, optional = true }
libc = { version = "0.2", optional = true }
v4l = { version = "0.14", default-features = false, features = ["v4l2"], optional = true }
4 changes: 4 additions & 0 deletions livekit-capture/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ named `source-<module>`. Each module documents its source.
| `source-pattern` | `PatternVideoSource` | pixel |
| `source-clock` | `ClockVideoSource` | pixel |

`source-device-argus` extends `DeviceVideoSource` with an NVIDIA Jetson CSI
backend (libargus, zero-copy NV12 DMA buffers) on Linux; it is inert on
other platforms and on machines without the Jetson stack.

`source-rtsp-tls` extends `RtspVideoSource` with `rtsps://` support (RTSP
over TLS 1.2+). Certificates are verified against the system roots by
default; cameras with self-signed certificates can opt out per source.
Expand Down
Loading
Loading