Assorted image subtitle fixes.
[dcpomatic.git] / src / lib / dcpomatic_time.h
index a0bbad06aeaeeed6530d214551fcbd82ab3a4d4d..ae8f251996088814f507ff63f0b2c6427ea68d97 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);
        }
 
@@ -190,6 +193,7 @@ class ContentTimePeriod
 {
 public:
        ContentTimePeriod () {}
+       
        ContentTimePeriod (ContentTime f, ContentTime t)
                : from (f)
                , to (t)
@@ -279,7 +283,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);
        }