X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcpomatic_time.h;h=55476d5b52ad6d5752344dd9a23b70d5f3770fe8;hb=391d85619ac19a2a93696ddc35c222eb9bb5d9d6;hp=4afc9ab40623e09a226965ce8cdfb7e7a77d7784;hpb=194615b5f673214b1e4fc4211364f95eeb96af15;p=dcpomatic.git diff --git a/src/lib/dcpomatic_time.h b/src/lib/dcpomatic_time.h index 4afc9ab40..55476d5b5 100644 --- a/src/lib/dcpomatic_time.h +++ b/src/lib/dcpomatic_time.h @@ -26,6 +26,7 @@ #include #include #include "frame_rate_change.h" +#include "safe_stringstream.h" class dcpomatic_round_up_test; @@ -39,13 +40,15 @@ public: : _t (0) {} - explicit Time (int64_t t) + typedef int64_t Type; + + explicit Time (Type t) : _t (t) {} virtual ~Time () {} - int64_t get () const { + Type get () const { return _t; } @@ -84,7 +87,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 << ":" @@ -95,9 +98,9 @@ public: } protected: - friend class dcptime_round_up_test; + friend struct dcptime_round_up_test; - int64_t _t; + Type _t; static const int HZ = 96000; }; @@ -107,8 +110,8 @@ class ContentTime : public Time { public: ContentTime () : Time () {} - explicit ContentTime (int64_t t) : Time (t) {} - ContentTime (int64_t n, int64_t d) : Time (n * HZ / d) {} + explicit ContentTime (Type t) : Time (t) {} + ContentTime (Type n, Type d) : Time (n * HZ / d) {} ContentTime (DCPTime d, FrameRateChange f); bool operator< (ContentTime const & o) const { @@ -162,8 +165,8 @@ public: * @param r Sampling rate. */ ContentTime round_up (float r) { - int64_t const n = rint (HZ / r); - int64_t const a = _t + n - 1; + Type const n = rint (HZ / r); + Type const a = _t + n - 1; return ContentTime (a - (a % n)); } @@ -201,13 +204,14 @@ public: } bool overlaps (ContentTimePeriod const & o) const; + bool contains (ContentTime const & o) const; }; class DCPTime : public Time { public: DCPTime () : Time () {} - explicit DCPTime (int64_t t) : Time (t) {} + explicit DCPTime (Type t) : Time (t) {} DCPTime (ContentTime t, FrameRateChange c) : Time (rint (t.get() / c.speed_up)) {} bool operator< (DCPTime const & o) const { @@ -261,8 +265,8 @@ public: * @param r Sampling rate. */ DCPTime round_up (float r) { - int64_t const n = rint (HZ / r); - int64_t const a = _t + n - 1; + Type const n = rint (HZ / r); + Type const a = _t + n - 1; return DCPTime (a - (a % n)); }