Hand-apply 2ee558ec90623b570360e8e55c918b5bb37f9aac from master; various snapping...
[dcpomatic.git] / src / lib / dcpomatic_time.h
index a0bbad06aeaeeed6530d214551fcbd82ab3a4d4d..dc9b0cd8ac680c6e1a3803d7805c76cdd9d14b57 100644 (file)
 #ifndef DCPOMATIC_TIME_H
 #define DCPOMATIC_TIME_H
 
+#include "frame_rate_change.h"
+#include "safe_stringstream.h"
+#include "dcpomatic_assert.h"
+#include <stdint.h>
 #include <cmath>
 #include <ostream>
 #include <sstream>
 #include <iomanip>
-#include <stdint.h>
-#include "frame_rate_change.h"
 
 class dcpomatic_round_up_test;
 
@@ -57,9 +59,10 @@ public:
 
        template <typename T>
        int64_t frames (T r) const {
-               return rint (_t * r / HZ);
+               return rint (double (_t) * r / HZ);
        }
 
+       /** @param r Frames per second */
        template <typename T>
        void split (T r, int& h, int& m, int& s, int& f) const
        {
@@ -86,7 +89,7 @@ public:
                int f;
                split (r, h, m, s, f);
 
-               std::ostringstream o;
+               SafeStringStream o;
                o.width (2);
                o.fill ('0');
                o << std::setw(2) << std::setfill('0') << h << ":"
@@ -97,7 +100,7 @@ public:
        }
 
 protected:
-       friend class dcptime_round_up_test;
+       friend struct dcptime_round_up_test;
        
        Type _t;
        static const int HZ = 96000;
@@ -175,7 +178,7 @@ public:
 
        template <class T>
        static ContentTime from_frames (int64_t f, T r) {
-               assert (r > 0);
+               DCPOMATIC_ASSERT (r > 0);
                return ContentTime (f * HZ / r);
        }
 
@@ -279,7 +282,7 @@ public:
 
        template <class T>
        static DCPTime from_frames (int64_t f, T r) {
-               assert (r > 0);
+               DCPOMATIC_ASSERT (r > 0);
                return DCPTime (f * HZ / r);
        }