| lib.rs |
# audio_thread_priority
Promote the current thread, or another thread (possibly in another process), to real-time
priority, suitable for low-latency audio processing.
# Platforms
- **macOS**: the Mach time-constraint scheduling policy.
- **Windows**: the Multimedia Class Scheduler Service (MMCSS), "Pro Audio" task.
- **Linux** (default, `dbus` feature enabled): rtkit, over D-Bus. This suits unprivileged,
sandboxed desktop processes, since rtkit performs the privileged scheduling change on their
behalf.
- **Linux** (`dbus` feature disabled): direct promotion with `pthread_setschedparam` and the
`SCHED_FIFO` policy. This needs no D-Bus daemon, and works whenever the process may request
real-time scheduling: running as root, holding `CAP_SYS_NICE`, or with an `RLIMIT_RTPRIO`
limit configured (e.g. systemd `LimitRTPRIO` or `/etc/security/limits.conf`). The requested
priority defaults to 10 and can be changed with `set_rt_priority` (Linux, no-`dbus` only).
- **Other platforms**: a no-op that reports success.
# Example
```rust
use audio_thread_priority::{promote_current_thread_to_real_time, demote_current_thread_from_real_time};
// ... on a thread that will compute audio and has to be real-time:
match promote_current_thread_to_real_time(512, 44100) {
Ok(h) => {
println!("this thread is now bumped to real-time priority.");
// Do some real-time work...
match demote_current_thread_from_real_time(h) {
Ok(_) => {
println!("this thread is now bumped back to normal.")
}
Err(_) => {
println!("Could not bring the thread back to normal priority.")
}
};
}
Err(e) => {
eprintln!("Error promoting thread to real-time: {}", e);
}
}
``` |
41871 |
- |
| rt_android.rs |
|
2310 |
- |
| rt_linux.rs |
Widely copied from dbus-rs/dbus/examples/rtkit.rs |
12576 |
- |
| rt_linux_native.rs |
Native Linux real-time promotion, used when the crate is built without the `dbus` feature.
Instead of asking rtkit over D-Bus, this promotes the thread directly with
`pthread_setschedparam(SCHED_FIFO)`. It needs no D-Bus and no rtkit daemon, and works whenever
the process is allowed to request real-time scheduling: running as root, holding `CAP_SYS_NICE`,
or with an `RLIMIT_RTPRIO` limit configured (e.g. systemd `LimitRTPRIO` or
`/etc/security/limits.conf`). This is the mechanism JACK and PipeWire's direct mode use. |
11348 |
- |
| rt_mach.rs |
|
5466 |
- |
| rt_win.rs |
|
7673 |
- |