diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-05-02 22:16:03 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-05-02 22:16:03 +0100 |
| commit | 7b03aba8bc4e9df269430d79ce4ee2c6bd5f344c (patch) | |
| tree | 38f0a72117bbf1a3cade0f418355fa2715377091 /src | |
| parent | 0bfa05b5c0c23cb4df482ee64222ca176c0e1b90 (diff) | |
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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/dcp_time.cc | 20 |
1 files changed, 19 insertions, 1 deletions
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 <boost/algorithm/string.hpp> #include <boost/optional.hpp> #include <iostream> @@ -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_); } |
