diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index 94956bda2..ce6a95f90 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -638,11 +638,18 @@ static inline void copy_position(struct stream *impl, int64_t queued) impl->base_pos = p->clock.position - impl->time.ticks; impl->clock_id = p->clock.id; } - if (SPA_FLAG_IS_SET(p->clock.flags, SPA_IO_CLOCK_FLAG_NO_RATE)) - impl->time.ticks = p->clock.nsec * p->clock.rate.denom / - (SPA_NSEC_PER_SEC * p->clock.rate.num); - else + if (SPA_FLAG_IS_SET(p->clock.flags, SPA_IO_CLOCK_FLAG_NO_RATE)) { + if (p->clock.rate.num == 0 || p->clock.rate.denom == 0) { + impl->time.ticks = p->clock.nsec; + impl->time.rate.num = 1; + impl->time.rate.denom = SPA_NSEC_PER_SEC; + } else { + impl->time.ticks = p->clock.nsec * (p->clock.rate.denom / + (SPA_NSEC_PER_SEC * p->clock.rate.num)); + } + } else { impl->time.ticks = p->clock.position - impl->base_pos; + } impl->time.delay = 0; impl->time.queued = queued;