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:
parent
898ebbecc7
commit
c08f24f8dc
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue