Remove a cast from float to double which seemingly causes
authorCarl Hetherington <cth@carlh.net>
Thu, 18 Jan 2018 01:27:35 +0000 (01:27 +0000)
committerCarl Hetherington <cth@carlh.net>
Thu, 18 Jan 2018 01:27:35 +0000 (01:27 +0000)
slight errors in Time::ceil().  Possibly related to #1174.

src/lib/dcpomatic_time.h
test/dcpomatic_time_test.cc

index 5f00807bdf2c3c4da605e577e3c18f7214d90391..204af3c1eb4cc6df8fbae1c290f9b98577f1e2ab 100644 (file)
@@ -117,12 +117,12 @@ public:
         *  at some sampling rate.
         *  @param r Sampling rate.
         */
-       Time<S, O> ceil (float r) const {
-               return Time<S, O> (llrint (HZ * frames_ceil(r) / double(r)));
+       Time<S, O> ceil (double r) const {
+               return Time<S, O> (llrint (HZ * frames_ceil(r) / r));
        }
 
-       Time<S, O> floor (float r) const {
-               return Time<S, O> (llrint (HZ * frames_floor(r) / double(r)));
+       Time<S, O> floor (double r) const {
+               return Time<S, O> (llrint (HZ * frames_floor(r) / r));
        }
 
        double seconds () const {
index 94d51503552f93018494b10c472644d33e1f7840..1637738ad7c7fb66c623f8c043f41e7e709100cc 100644 (file)
@@ -316,6 +316,9 @@ BOOST_AUTO_TEST_CASE (dcpomatic_time_ceil_test)
 
        /* Check that rounding up to non-integer frame rates works */
        BOOST_CHECK_EQUAL (DCPTime(45312).ceil(29.976).get(), 48038);
+
+       /* Check another tricky case that used to fail */
+       BOOST_CHECK_EQUAL (DCPTime(212256039).ceil(23.976).get(), 212256256);
 }
 
 /* Straightforward test of DCPTime::floor */