Reset send timing if lag becomes too high

This happens always if the input stream stops (for example, if the MPD
is paused). If the timing is not reset in this case, the program starts
spamming the target with UDP packets, resulting in unpredictable
animation behaviour.
This commit is contained in:
Thomas Kolb 2021-04-04 17:59:46 +00:00
parent 898ebbecc7
commit c08f24f8dc

View file

@ -81,6 +81,8 @@ fn main()
let block_period = Duration::from_nanos((0.95 * (config::SAMPLES_PER_UPDATE as f32) * 1e9 / config::SAMP_RATE) as u64); let block_period = Duration::from_nanos((0.95 * (config::SAMPLES_PER_UPDATE as f32) * 1e9 / config::SAMP_RATE) as u64);
let send_period = Duration::from_nanos(1000000000 / 60); let send_period = Duration::from_nanos(1000000000 / 60);
let max_lag = Duration::from_millis(1000);
let mut next_block_instant = Instant::now() + block_period; let mut next_block_instant = Instant::now() + block_period;
let mut next_send_instant = Instant::now() + send_period; let mut next_send_instant = Instant::now() + send_period;
@ -166,8 +168,14 @@ fn main()
Err(e) => panic!(e), Err(e) => panic!(e),
} }
let now = Instant::now();
if now - next_send_instant > max_lag {
println!("Warning! Lag exceeds {:?}. Resetting sender timing.", max_lag);
next_send_instant = now + send_period;
} else {
next_send_instant += send_period; next_send_instant += send_period;
} }
}
let now = Instant::now(); let now = Instant::now();
if now < next_block_instant { if now < next_block_instant {