From 7b03aba8bc4e9df269430d79ce4ee2c6bd5f344c Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 2 May 2018 22:16:03 +0100 Subject: rebase() would round up and so it was possible for ticks to go out of range. Now it still rounds up but then copes with overflow. --- src/dcp_time.cc | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/dcp_time.cc b/src/dcp_time.cc index f0b7e231..acc9723f 100644 --- a/src/dcp_time.cc +++ b/src/dcp_time.cc @@ -39,6 +39,7 @@ #include "dcp_time.h" #include "exceptions.h" #include "compose.hpp" +#include "dcp_assert.h" #include #include #include @@ -356,5 +357,22 @@ Time::as_seconds () const Time Time::rebase (int tcr_) const { - return Time (h, m, s, lrintf (float (e) * tcr_ / tcr), tcr_); + long int e_ = lrintf (float (e) * tcr_ / tcr); + int s_ = s; + if (e_ >= tcr_) { + e_ -= tcr_; + ++s_; + } + int m_ = m; + if (s_ >= 60) { + s_ -= 60; + ++m_; + } + int h_ = h; + if (m_ >= 60) { + m_ -= 60; + ++h_; + } + + return Time (h_, m_, s_, e_, tcr_); } -- cgit v1.2.3