X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcpomatic_time.h;h=35ddd0199e448ae65420f17ad8bfd637fe24bdc3;hb=a78b741c43830c84bcb4d18e3147746f13a668e5;hp=6834ee099616a94c273175fa8323378f8372fd14;hpb=11ac33e140f3aa9d6e992880a1e1b3a4ca649355;p=dcpomatic.git diff --git a/src/lib/dcpomatic_time.h b/src/lib/dcpomatic_time.h index 6834ee099..35ddd0199 100644 --- a/src/lib/dcpomatic_time.h +++ b/src/lib/dcpomatic_time.h @@ -119,9 +119,11 @@ public: * @param r Sampling rate. */ Time ceil (float r) const { - Type const n = llrintf (HZ / r); - Type const a = _t + n - 1; - return Time (a - (a % n)); + return Time (llrint (HZ * frames_ceil(r) / double(r))); + } + + Time floor (float r) const { + return Time (llrint (HZ * frames_floor(r) / double(r))); } double seconds () const { @@ -143,7 +145,7 @@ public: template int64_t frames_floor (T r) const { - return floor (_t * r / HZ); + return ::floor (_t * r / HZ); } template @@ -212,6 +214,7 @@ public: private: friend struct dcptime_ceil_test; + friend struct dcptime_floor_test; Type _t; static const int HZ = 96000; @@ -257,7 +260,7 @@ public: return TimePeriod (from + o, to + o); } - boost::optional > overlap (TimePeriod const & other) { + boost::optional > overlap (TimePeriod const & other) const { T const max_from = std::max (from, other.from); T const min_to = std::min (to, other.to);