ndi_sdk_sys/lib.rs
1//! Safe and ergonomic Rust bindings for the [NDI (ndi.video)](https://ndi.video/) SDK, enabling high-performance video, audio, and metadata transmission over IP networks.
2//!
3//! Unlike other bindings this never exposes any raw pointers and uses correct Rust types for everything (timeouts are handled as `std::time::Duration`, not `time_in_ms: u32`)
4//!
5//! Despite its name this is not affiliated with `ndi`, `ndi-sdk`, `ndi-sys` crates.
6//!
7//! ## Building
8//!
9//! 1. Make sure to have the [NDI SDK](https://ndi.video/for-developers/#ndi-sdk) installed
10//! 2. Make sure to have Clang/LLVM installed. [see rust-bindgen requirements](https://rust-lang.github.io/rust-bindgen/requirements.html)
11//!
12//! ## Docs
13//!
14//! This library aims to be as close to the C SDK as possible while still providing a safe abstraction.
15//! In many cases the [original documentation](https://docs.ndi.video/all/developing-with-ndi/sdk) is still useful.
16//! If you have already worked with it, look out for `C Equivalent: ...` comments, as they are intended to help selecting the right Rust equivalent of C structs and functions
17//!
18//! ## Cargo features
19//!
20//! ### `strict_assertions`
21//!
22//! This crate uses a lot of unsafe ffi bindings and therefore a lot of assertions.
23//!
24//! You can turn on this feature to ensure debug assertions are in place even for
25//! release builds. During development and testing it is highly recommended to turn
26//! this on, as it sometimes also outputs more diagnostics.
27//!
28//! ### `dangerous_apis` (not recommended)
29//!
30//! There are some (unsafe) APIs that are not really necessary, but might in some
31//! rare case be useful. Use only if you REALLY know what you do. For example there
32//! are APIs that allow to change the resolution of a video frame while it is
33//! allocated, which may lead to out-of-bounds memory access by safe code.
34
35mod bindings;
36
37pub mod blocking_update;
38pub mod buffer_info;
39pub mod enums;
40pub mod find;
41pub mod four_cc;
42pub mod frame;
43pub mod receiver;
44pub mod resolution;
45pub mod router;
46pub mod sdk;
47pub mod sender;
48pub mod source;
49pub mod subsampling;
50pub mod tally;
51pub mod timecode;
52pub mod util;