X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcpomatic_time.h;h=e6ca493b2bb921e58fbe0fb5c7e7f3c23c9aaf4c;hb=97c1bc360f912d66d3fc0430b331214e4da79644;hp=90e79de0a7b4cec45cee0a495d63554f2a6fa2c6;hpb=6f23b55a7783f93549115a133ca2e6e938bd0cd1;p=dcpomatic.git diff --git a/src/lib/dcpomatic_time.h b/src/lib/dcpomatic_time.h index 90e79de0a..e6ca493b2 100644 --- a/src/lib/dcpomatic_time.h +++ b/src/lib/dcpomatic_time.h @@ -1,19 +1,20 @@ /* Copyright (C) 2014-2015 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ @@ -25,8 +26,8 @@ #define DCPOMATIC_TIME_H #include "frame_rate_change.h" -#include "safe_stringstream.h" #include "dcpomatic_assert.h" +#include #include #include #include @@ -132,7 +133,11 @@ public: template int64_t frames_round (T r) const { - return llrint (_t * r / HZ); + /* We must cast to double here otherwise if T is integer + the calculation will round down before we get the chance + to llrint(). + */ + return llrint (_t * double(r) / HZ); } template @@ -142,7 +147,11 @@ public: template int64_t frames_ceil (T r) const { - return ceil (_t * r / HZ); + /* We must cast to double here otherwise if T is integer + the calculation will round down before we get the chance + to ceil(). + */ + return ceil (_t * double(r) / HZ); } /** @param r Frames per second */ @@ -172,7 +181,7 @@ public: int f; split (r, h, m, s, f); - SafeStringStream o; + locked_stringstream o; o.width (2); o.fill ('0'); o << std::setw(2) << std::setfill('0') << h << ":" @@ -239,7 +248,9 @@ public: , to (t) {} + /** start time of sampling interval that the period is from */ T from; + /** start time of next sampling interval after the period */ T to; T duration () const {