Logging improvements to allow prettier displays in the server GUI.
[dcpomatic.git] / src / lib / dcpomatic_time.h
index 0b78c5390557f03024bfac43f0b012159d4da68e..a5a0684e591b104656985e8dfcf427b19100c703 100644 (file)
@@ -30,7 +30,6 @@
 #include <stdint.h>
 #include <cmath>
 #include <ostream>
-#include <sstream>
 #include <iomanip>
 
 class dcpomatic_round_up_test;
@@ -62,7 +61,7 @@ public:
 
        /* Explicit conversion from type O */
        Time (Time<O, S> d, FrameRateChange f);
-       
+
        Type get () const {
                return _t;
        }
@@ -117,8 +116,8 @@ public:
         *  at some sampling rate.
         *  @param r Sampling rate.
         */
-       Time<S, O> round_up (float r) {
-               Type const n = rint (HZ / r);
+       Time<S, O> round_up (float r) const {
+               Type const n = llrintf (HZ / r);
                Type const a = _t + n - 1;
                return Time<S, O> (a - (a % n));
        }
@@ -132,8 +131,18 @@ public:
        }
 
        template <typename T>
-       int64_t frames (T r) const {
-               return rint (double (_t) * r / HZ);
+       int64_t frames_round (T r) const {
+               return llrint (_t * r / HZ);
+       }
+
+       template <typename T>
+       int64_t frames_floor (T r) const {
+               return floor (_t * r / HZ);
+       }
+
+       template <typename T>
+       int64_t frames_ceil (T r) const {
+               return ceil (_t * r / HZ);
        }
 
        /** @param r Frames per second */
@@ -143,8 +152,8 @@ public:
                /* Do this calculation with frames so that we can round
                   to a frame boundary at the start rather than the end.
                */
-               int64_t ff = frames (r);
-               
+               int64_t ff = frames_round (r);
+
                h = ff / (3600 * r);
                ff -= h * 3600 * r;
                m = ff / (60 * r);
@@ -173,9 +182,9 @@ public:
                return o.str ();
        }
 
-       
+
        static Time<S, O> from_seconds (double s) {
-               return Time<S, O> (s * HZ);
+               return Time<S, O> (llrint (s * HZ));
        }
 
        template <class T>
@@ -191,14 +200,14 @@ public:
        static Time<S, O> min () {
                return Time<S, O> (-INT64_MAX);
        }
-       
+
        static Time<S, O> max () {
                return Time<S, O> (INT64_MAX);
        }
-       
+
 private:
        friend struct dcptime_round_up_test;
-       
+
        Type _t;
        static const int HZ = 96000;
 };
@@ -223,7 +232,7 @@ class ContentTimePeriod
 {
 public:
        ContentTimePeriod () {}
-       
+
        ContentTimePeriod (ContentTime f, ContentTime t)
                : from (f)
                , to (t)
@@ -238,9 +247,16 @@ public:
 
        bool overlaps (ContentTimePeriod const & o) const;
        bool contains (ContentTime const & o) const;
+
+       bool operator== (ContentTimePeriod const & o) const {
+               return from == o.from && to == o.to;
+       }
 };
 
 DCPTime min (DCPTime a, DCPTime b);
+DCPTime max (DCPTime a, DCPTime b);
+ContentTime min (ContentTime a, ContentTime b);
+ContentTime max (ContentTime a, ContentTime b);
 std::ostream& operator<< (std::ostream& s, ContentTime t);
 std::ostream& operator<< (std::ostream& s, DCPTime t);