Skip to content

Commit 5ae0f37

Browse files
committed
optimize: move afe feed task to core1
1 parent 83f82fc commit 5ae0f37

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

src/audio.rs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,11 +407,35 @@ fn audio_task_run(
407407
rx: &mut tokio::sync::mpsc::UnboundedReceiver<AudioEvent>,
408408
fn_read: &mut dyn FnMut(&mut [i16]) -> Result<usize, esp_idf_svc::sys::EspError>,
409409
fn_write: &mut dyn FnMut(&[i16]) -> Result<usize, esp_idf_svc::sys::EspError>,
410-
afe_handle: &AFE,
410+
afe_handle: Arc<AFE>,
411411
) -> anyhow::Result<()> {
412+
let mut conf =
413+
esp_idf_svc::hal::task::thread::ThreadSpawnConfiguration::get().unwrap_or_default();
414+
conf.pin_to_core = Some(esp_idf_svc::hal::cpu::Core::Core1);
415+
let r = conf.set();
416+
if let Err(e) = r {
417+
log::error!("Failed to set thread stack alloc caps: {:?}", e);
418+
}
419+
420+
let (chunk_tx, chunk_rx) = std::sync::mpsc::sync_channel::<Vec<i16>>(64);
421+
412422
let feed_chunksize = afe_handle.feed_chunksize;
413423
log::info!("feed_chunksize: {}", feed_chunksize);
414424

425+
std::thread::Builder::new()
426+
.name("afe_feed".to_string())
427+
.stack_size(8 * 1024)
428+
.spawn(move || {
429+
log::info!(
430+
"AFE feed thread started, on core {:?}",
431+
esp_idf_svc::hal::cpu::core()
432+
);
433+
while let Ok(chunk) = chunk_rx.recv() {
434+
afe_handle.feed_i16(&chunk);
435+
}
436+
log::warn!("I2S AFE feed thread exited");
437+
})?;
438+
415439
let mut read_buffer = vec![0i16; feed_chunksize];
416440
let mut send_buffer = SendBuffer::new(feed_chunksize);
417441
let empty_buffer = vec![0i16; feed_chunksize];
@@ -504,7 +528,7 @@ fn audio_task_run(
504528
}
505529
}
506530

507-
afe_handle.feed_i16(&samples_with_ref);
531+
chunk_tx.send(samples_with_ref).unwrap();
508532
}
509533
ref_data_ = play_data_;
510534
}
@@ -589,7 +613,7 @@ impl BoxAudioWorker {
589613
}
590614
})?;
591615

592-
audio_task_run(&mut rx, &mut fn_read, &mut fn_write, &afe_handle)
616+
audio_task_run(&mut rx, &mut fn_read, &mut fn_write, afe_handle)
593617
}
594618
}
595619

@@ -681,7 +705,7 @@ impl BoardsAudioWorker {
681705
.stack_size(8 * 1024)
682706
.spawn(|| afe_worker(afe_handle_, tx, TRIGGER_MEAN_VALUE))?;
683707

684-
audio_task_run(&mut rx, &mut fn_read, &mut fn_write, &afe_handle)
708+
audio_task_run(&mut rx, &mut fn_read, &mut fn_write, afe_handle)
685709
}
686710
}
687711

0 commit comments

Comments
 (0)