void change_master_speed(double new_master_speed, Instant now);
+ float in_master_speed(float speed) const {
+ return (!in_easing && fabs(master_speed - speed) < 1e-6);
+ }
+
// Instead of changing the speed instantly, change it over the course of
// about 200 ms. This is a simple linear ramp; I tried various forms of
// Bézier curves for more elegant/dramatic changing, but it seemed linear
next_frame_start = instant.wallclock_time;
float new_master_speed = change_master_speed.exchange(0.0f / 0.0f);
- if (!std::isnan(new_master_speed)) {
+ if (!std::isnan(new_master_speed) && !timeline.in_master_speed(new_master_speed)) {
timeline.start_easing(new_master_speed, instant);
}