From 3aacc719b2b95335c732c184480551d21f8cee82 Mon Sep 17 00:00:00 2001 From: modula t Date: Tue, 25 May 2021 21:28:35 +0000 Subject: [PATCH] fix floating point exception when `s->clock.position' is less than `s->offset` --- pipewire-jack/src/pipewire-jack.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c index 0a621dde6..38d7755ca 100644 --- a/pipewire-jack/src/pipewire-jack.c +++ b/pipewire-jack/src/pipewire-jack.c @@ -1013,14 +1013,16 @@ static inline jack_transport_state_t position_to_jack(struct pw_node_activation d->usecs = s->clock.nsec / SPA_NSEC_PER_USEC; d->frame_rate = s->clock.rate.denom; - running = s->clock.position - s->offset; - - if (running >= seg->start && - (seg->duration == 0 || running < seg->start + seg->duration)) - d->frame = (running - seg->start) * seg->rate + seg->position; - else + if ((int64_t)s->clock.position < s->offset) { d->frame = seg->position; - + } else { + running = s->clock.position - s->offset; + if (running >= seg->start && + (seg->duration == 0 || running < seg->start + seg->duration)) + d->frame = (running - seg->start) * seg->rate + seg->position; + else + d->frame = seg->position; + } d->valid = 0; if (a->segment_owner[0] && SPA_FLAG_IS_SET(seg->bar.flags, SPA_IO_SEGMENT_BAR_FLAG_VALID)) { double abs_beat;