fix(audio): defer host-stream drop on Stop to reuse device across track changes

This commit is contained in:
Afonso Jorge Ramos committed 2026-05-07 02:32:39 +02:00
1 parent 468a421e26
commit e93fcaec99
1 file changed
+10 -3
+10 -3
View File
@@ -2098,9 +2098,16 @@ impl Player {
.playback_start_millis .playback_start_millis
.store(0, Ordering::SeqCst); .store(0, Ordering::SeqCst);
thread_state.position_at_start.store(0, Ordering::SeqCst); thread_state.position_at_start.store(0, Ordering::SeqCst);
// Drop the stream to release the device and stop background CPU use. // Defer dropping the stream so a Play immediately following Stop
drop(stream_opt.take()); // (the frontend's track-change pattern is Stop → Play, not append)
*pause_suspend_deadline = None; // can reuse the open device. Tearing CoreAudio down between every
// track was producing the audible click on track change. The idle
// loop's pause-suspend handler (below) drops the stream when this
// deadline fires; Play / Resume / Seek / ReinitDevice all clear
// the deadline so they reuse or replace the stream as needed.
*pause_suspend_deadline = Some(
Instant::now() + Duration::from_millis(PAUSE_SUSPEND_DELAY_MS),
);
// Reset PipeWire clock if bit-perfect was active // Reset PipeWire clock if bit-perfect was active
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
if thread_settings if thread_settings