mirror of
https://github.com/zed-industries/zed.git
synced 2026-05-25 14:44:28 +00:00
livekit_client: Apply correct priority for audio threads (#51178)
Release Notes: - N/A Co-authored-by: Piotr Osiewicz <piotr@zed.dev>
This commit is contained in:
parent
8fa257bbe0
commit
f2586fbc19
1 changed files with 13 additions and 9 deletions
|
|
@ -29,7 +29,7 @@ use std::cell::RefCell;
|
|||
use std::sync::Weak;
|
||||
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
|
||||
use std::time::Duration;
|
||||
use std::{borrow::Cow, collections::VecDeque, sync::Arc, thread};
|
||||
use std::{borrow::Cow, collections::VecDeque, sync::Arc};
|
||||
use util::{ResultExt as _, maybe};
|
||||
|
||||
mod source;
|
||||
|
|
@ -139,8 +139,10 @@ impl AudioStack {
|
|||
let task = Arc::new(self.executor.spawn({
|
||||
let apm = self.apm.clone();
|
||||
let mixer = self.mixer.clone();
|
||||
let executor = self.executor.clone();
|
||||
async move {
|
||||
Self::play_output(
|
||||
executor,
|
||||
apm,
|
||||
mixer,
|
||||
LEGACY_SAMPLE_RATE.get(),
|
||||
|
|
@ -225,8 +227,10 @@ impl AudioStack {
|
|||
let input_audio_device =
|
||||
AudioSettings::try_read_global(cx, |settings| settings.input_audio_device.clone())
|
||||
.flatten();
|
||||
let executor = self.executor.clone();
|
||||
self.executor.spawn(async move {
|
||||
Self::capture_input(
|
||||
executor,
|
||||
apm,
|
||||
frame_tx,
|
||||
LEGACY_SAMPLE_RATE.get(),
|
||||
|
|
@ -250,6 +254,7 @@ impl AudioStack {
|
|||
}
|
||||
|
||||
async fn play_output(
|
||||
executor: BackgroundExecutor,
|
||||
apm: Arc<Mutex<apm::AudioProcessingModule>>,
|
||||
mixer: Arc<Mutex<audio_mixer::AudioMixer>>,
|
||||
sample_rate: u32,
|
||||
|
|
@ -271,9 +276,8 @@ impl AudioStack {
|
|||
let mut resampler = audio_resampler::AudioResampler::default();
|
||||
let mut buf = Vec::new();
|
||||
|
||||
thread::Builder::new()
|
||||
.name("AudioPlayback".to_owned())
|
||||
.spawn(move || {
|
||||
executor
|
||||
.spawn_with_priority(Priority::RealtimeAudio, async move {
|
||||
let output_stream = output_device.build_output_stream(
|
||||
&output_config.config(),
|
||||
{
|
||||
|
|
@ -324,7 +328,7 @@ impl AudioStack {
|
|||
// Block forever to keep the output stream alive
|
||||
end_on_drop_rx.recv().ok();
|
||||
})
|
||||
.unwrap();
|
||||
.detach();
|
||||
|
||||
device_change_listener.next().await;
|
||||
drop(end_on_drop_tx)
|
||||
|
|
@ -332,6 +336,7 @@ impl AudioStack {
|
|||
}
|
||||
|
||||
async fn capture_input(
|
||||
executor: BackgroundExecutor,
|
||||
apm: Arc<Mutex<apm::AudioProcessingModule>>,
|
||||
frame_tx: UnboundedSender<AudioFrame<'static>>,
|
||||
sample_rate: u32,
|
||||
|
|
@ -346,9 +351,8 @@ impl AudioStack {
|
|||
let frame_tx = frame_tx.clone();
|
||||
let mut resampler = audio_resampler::AudioResampler::default();
|
||||
|
||||
thread::Builder::new()
|
||||
.name("AudioCapture".to_owned())
|
||||
.spawn(move || {
|
||||
executor
|
||||
.spawn_with_priority(Priority::RealtimeAudio, async move {
|
||||
maybe!({
|
||||
if let Some(desc) = device.description().ok() {
|
||||
log::info!("Using microphone: {}", desc.name())
|
||||
|
|
@ -420,7 +424,7 @@ impl AudioStack {
|
|||
})
|
||||
.log_err();
|
||||
})
|
||||
.unwrap();
|
||||
.detach();
|
||||
|
||||
device_change_listener.next().await;
|
||||
drop(end_on_drop_tx)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue