summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dcp_time.cc20
-rw-r--r--test/dcp_time_test.cc4
2 files changed, 22 insertions, 2 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_);
}
diff --git a/test/dcp_time_test.cc b/test/dcp_time_test.cc
index 48a35b5a..405640f8 100644
--- a/test/dcp_time_test.cc
+++ b/test/dcp_time_test.cc
@@ -102,7 +102,9 @@ BOOST_AUTO_TEST_CASE (dcp_time)
b = dcp::Time (9, 12, 41, 17, 99);
BOOST_CHECK_EQUAL (b.rebase(250), dcp::Time(9, 12, 41, 43, 250));
a = dcp::Time (0, 2, 57, 999, 1000);
- BOOST_CHECK_EQUAL (a.rebase(250), dcp::Time(0, 2, 57, 250, 250));
+ BOOST_CHECK_EQUAL (a.rebase(250), dcp::Time(0, 2, 58, 0, 250));
+ a = dcp::Time (0, 47, 9, 998, 1000);
+ BOOST_CHECK_EQUAL (a.rebase(250), dcp::Time(0, 47, 10, 0, 250));
/* Check some allowed constructions from string */