X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcpomatic_time.h;h=792eb2c97cb9c793762a701d4a1cd5c32606ab51;hb=5b968bb948b7904cc41c254b7851880e451f6906;hp=df9c46c7157651fff9759b8f6e342c18b563ce2f;hpb=e60bb3e51bd1508b149e6b8f6608f09b5196ae26;p=dcpomatic.git diff --git a/src/lib/dcpomatic_time.h b/src/lib/dcpomatic_time.h index df9c46c71..792eb2c97 100644 --- a/src/lib/dcpomatic_time.h +++ b/src/lib/dcpomatic_time.h @@ -30,7 +30,6 @@ #include #include #include -#include #include class dcpomatic_round_up_test; @@ -118,7 +117,7 @@ public: * @param r Sampling rate. */ Time round_up (float r) { - Type const n = rint (HZ / r); + Type const n = llrintf (HZ / r); Type const a = _t + n - 1; return Time (a - (a % n)); } @@ -132,8 +131,13 @@ public: } template - 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 + int64_t frames_floor (T r) const { + return floor (_t * r / HZ); } /** @param r Frames per second */ @@ -143,7 +147,7 @@ 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; @@ -175,7 +179,7 @@ public: static Time from_seconds (double s) { - return Time (s * HZ); + return Time (llrint (s * HZ)); } template @@ -238,9 +242,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);