From 2c1f36201c1bef8d2c465a767f831a587f8b3778 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 30 Jun 2022 01:05:30 +0200 Subject: [PATCH] Fix timecnt_t modulo operation when mixing time-domains --- libs/temporal/timeline.cc | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/temporal/timeline.cc b/libs/temporal/timeline.cc index 16cb3503af..60aedb7a02 100644 --- a/libs/temporal/timeline.cc +++ b/libs/temporal/timeline.cc @@ -224,12 +224,28 @@ timecnt_t::operator/ (timecnt_t const & other) const timecnt_t timecnt_t::operator% (timecnt_t const & d) const { - return timecnt_t (_distance % d.distance(), _position); + if (time_domain() == d.time_domain()) { + return timecnt_t (_distance % d.distance(), _position); + } else if (time_domain() == AudioTime) { + timecnt_t dd = d; + dd.set_time_domain (AudioTime); + return timecnt_t (_distance % dd.distance(), _position); + } else { + assert (0); // This path should never be used because.. + timecnt_t self = *this; + self.set_time_domain (AudioTime); + timecnt_t rv (self.distance() % d.distance(), _position); + rv.set_time_domain (BeatTime); // it looses precision + return rv; + } } timecnt_t & timecnt_t::operator%= (timecnt_t const & d) { + if (time_domain() != d.time_domain()) { + assert (0); // TODO FIXME + } _distance %= d.distance(); return *this; }