diff --git a/examples/wgpu_room/Cargo.toml b/examples/wgpu_room/Cargo.toml index 1f76dbdd4..6030d64cd 100644 --- a/examples/wgpu_room/Cargo.toml +++ b/examples/wgpu_room/Cargo.toml @@ -10,6 +10,7 @@ tracing = ["console-subscriber", "tokio/tracing"] [dependencies] tokio = { version = "1", features = ["full", "parking_lot"] } livekit = { path = "../../livekit", features = ["native-tls"] } +webrtc-sys = { path = "../../webrtc-sys", features = [ "use_vaapi", "use_nvidia" ] } futures = "0.3" winit = "0.30.11" parking_lot = { version = "0.12.1", features = ["deadlock_detection"] } diff --git a/livekit-ffi/Cargo.toml b/livekit-ffi/Cargo.toml index e3836bd0e..44441d81b 100644 --- a/livekit-ffi/Cargo.toml +++ b/livekit-ffi/Cargo.toml @@ -19,6 +19,7 @@ tracing = ["tokio/tracing", "console-subscriber"] [dependencies] livekit = { workspace = true } +webrtc-sys = { workspace = true , features = [ "use_vaapi", "use_nvidia" ]} soxr-sys = { workspace = true } imgproc = { workspace = true } livekit-protocol = { workspace = true } diff --git a/webrtc-sys/Cargo.toml b/webrtc-sys/Cargo.toml index c04ee5e14..ae9888bc9 100644 --- a/webrtc-sys/Cargo.toml +++ b/webrtc-sys/Cargo.toml @@ -7,6 +7,11 @@ license = "Apache-2.0" description = "Unsafe bindings to libwebrtc" repository = "https://github.com/livekit/client-sdk-rust" +[features] +default = [] +use_vaapi = [] +use_nvidia = [] + [dependencies] cxx = "1.0" log = "0.4" diff --git a/webrtc-sys/build.rs b/webrtc-sys/build.rs index 4b897fd3f..b022ea7d3 100644 --- a/webrtc-sys/build.rs +++ b/webrtc-sys/build.rs @@ -155,6 +155,7 @@ fn main() { match target_arch.as_str() { "x86_64" => { + #[cfg(feature = "use_vaapi")] builder .file("src/vaapi/vaapi_display_drm.cpp") .file("src/vaapi/vaapi_h264_encoder_wrapper.cpp") @@ -163,8 +164,10 @@ fn main() { .file("src/vaapi/implib/libva-drm.so.init.c") .file("src/vaapi/implib/libva-drm.so.tramp.S") .file("src/vaapi/implib/libva.so.init.c") - .file("src/vaapi/implib/libva.so.tramp.S"); + .file("src/vaapi/implib/libva.so.tramp.S") + .flag("-DUSE_VAAPI_VIDEO_CODEC=1"); + #[cfg(feature = "use_nvidia")] builder .flag("-I/usr/local/cuda/include") .flag("-Isrc/nvidia/NvCodec/include") @@ -181,7 +184,8 @@ fn main() { .file("src/nvidia/implib/libcuda.so.tramp.S") .file("src/nvidia/implib/libnvcuvid.so.init.c") .file("src/nvidia/implib/libnvcuvid.so.tramp.S") - .flag("-Wno-deprecated-declarations"); + .flag("-Wno-deprecated-declarations") + .flag("-DUSE_NVIDIA_VIDEO_CODEC=1"); } _ => {} } diff --git a/webrtc-sys/src/video_decoder_factory.cpp b/webrtc-sys/src/video_decoder_factory.cpp index d12ad1e88..bd2dfbe1d 100644 --- a/webrtc-sys/src/video_decoder_factory.cpp +++ b/webrtc-sys/src/video_decoder_factory.cpp @@ -35,7 +35,7 @@ #include "livekit/android.h" #endif -#if defined(__linux__) && defined(__x86_64__) && !defined(WEBRTC_ANDROID) +#if defined(USE_NVIDIA_VIDEO_CODEC) #include "nvidia/nvidia_decoder_factory.h" #endif @@ -50,7 +50,7 @@ VideoDecoderFactory::VideoDecoderFactory() { factories_.push_back(CreateAndroidVideoDecoderFactory()); #endif -#if defined(__linux__) && defined(__x86_64__) && !defined(WEBRTC_ANDROID) +#if defined(USE_NVIDIA_VIDEO_CODEC) if (webrtc::NvidiaVideoDecoderFactory::IsSupported()) { factories_.push_back(std::make_unique()); } diff --git a/webrtc-sys/src/video_encoder_factory.cpp b/webrtc-sys/src/video_encoder_factory.cpp index 370a7d257..351a5c79f 100644 --- a/webrtc-sys/src/video_encoder_factory.cpp +++ b/webrtc-sys/src/video_encoder_factory.cpp @@ -37,8 +37,11 @@ #include "livekit/android.h" #endif -#if defined(__linux__) && defined(__x86_64__) && !defined(WEBRTC_ANDROID) +#if defined(USE_NVIDIA_VIDEO_CODEC) #include "nvidia/nvidia_encoder_factory.h" +#endif + +#if defined(USE_VAAPI_VIDEO_CODEC) #include "vaapi/vaapi_encoder_factory.h" #endif @@ -63,11 +66,19 @@ VideoEncoderFactory::InternalFactory::InternalFactory() { factories_.push_back(CreateAndroidVideoEncoderFactory()); #endif -#if defined(__linux__) && defined(__x86_64__) && !defined(WEBRTC_ANDROID) +#if defined(USE_NVIDIA_VIDEO_CODEC) if (webrtc::NvidiaVideoEncoderFactory::IsSupported()) { factories_.push_back(std::make_unique()); - } else if (webrtc::VAAPIVideoEncoderFactory::IsSupported()) { - factories_.push_back(std::make_unique()); + } else { +#endif + +#if defined(USE_VAAPI_VIDEO_CODEC) + if (webrtc::VAAPIVideoEncoderFactory::IsSupported()) { + factories_.push_back(std::make_unique()); + } +#endif + +#if defined(USE_NVIDIA_VIDEO_CODEC) } #endif } diff --git a/yuv-sys/Cargo.toml b/yuv-sys/Cargo.toml index 2bd72148e..c3f5c411d 100644 --- a/yuv-sys/Cargo.toml +++ b/yuv-sys/Cargo.toml @@ -7,7 +7,7 @@ license = "MIT OR Apache-2.0" description = "libyuv bindings" [build-dependencies] -bindgen = "0.69" +bindgen = "0.72.1" cc = "1.0" regex = "1" rayon = "1.8"