# HG changeset patch # User Chris Cannam # Date 1538154365 -3600 # Node ID 6415ac3becb607b1aa9f6fc5a9a74459d9a5f9b8 # Parent 71207822a7e021d5d386f5409caa739dd84782a7 Use proper decimal delimiter diff -r 71207822a7e0 -r 6415ac3becb6 base/RealTime.h --- a/base/RealTime.h Thu Sep 27 15:53:34 2018 +0100 +++ b/base/RealTime.h Fri Sep 28 18:06:05 2018 +0100 @@ -57,8 +57,8 @@ sec(r.sec), nsec(r.nsec) { } static RealTime fromSeconds(double sec); - static RealTime fromMilliseconds(int msec); - static RealTime fromMicroseconds(int usec); + static RealTime fromMilliseconds(int64_t msec); + static RealTime fromMicroseconds(int64_t usec); static RealTime fromTimeval(const struct timeval &); static RealTime fromXsdDuration(std::string xsdd); @@ -172,7 +172,8 @@ * Unlike toText, this function does not depend on the application * preferences. */ - std::string toFrameText(int fps, bool hms) const; + std::string toFrameText(int fps, bool hms, + std::string frameDelimiter = ":") const; /** * Return a user-readable string to the nearest second, in H:M:S diff -r 71207822a7e0 -r 6415ac3becb6 base/RealTimeSV.cpp --- a/base/RealTimeSV.cpp Thu Sep 27 15:53:34 2018 +0100 +++ b/base/RealTimeSV.cpp Fri Sep 28 18:06:05 2018 +0100 @@ -61,15 +61,29 @@ } RealTime -RealTime::fromMilliseconds(int msec) +RealTime::fromMilliseconds(int64_t msec) { - return RealTime(msec / 1000, (msec % 1000) * 1000000); + int64_t sec = msec / 1000; + if (sec > INT_MAX || sec < INT_MIN) { + cerr << "WARNING: millisecond value out of range for RealTime, " + << "returning zero instead: " << msec << endl; + return RealTime::zeroTime; + } + + return RealTime(int(sec), int(msec % 1000) * 1000000); } RealTime -RealTime::fromMicroseconds(int usec) +RealTime::fromMicroseconds(int64_t usec) { - return RealTime(usec / 1000000, (usec % 1000000) * 1000); + int64_t sec = usec / 1000000; + if (sec > INT_MAX || sec < INT_MIN) { + cerr << "WARNING: microsecond value out of range for RealTime, " + << "returning zero instead: " << usec << endl; + return RealTime::zeroTime; + } + + return RealTime(int(sec), int(usec % 1000000) * 1000); } RealTime @@ -264,20 +278,27 @@ Preferences *p = Preferences::getInstance(); bool hms = true; + std::string frameDelimiter = ":"; if (p) { hms = p->getShowHMS(); int fps = 0; switch (p->getTimeToTextMode()) { - case Preferences::TimeToTextMs: break; - case Preferences::TimeToTextUs: fps = 1000000; break; + case Preferences::TimeToTextMs: + break; + case Preferences::TimeToTextUs: + fps = 1000000; + frameDelimiter = "."; + break; case Preferences::TimeToText24Frame: fps = 24; break; case Preferences::TimeToText25Frame: fps = 25; break; case Preferences::TimeToText30Frame: fps = 30; break; case Preferences::TimeToText50Frame: fps = 50; break; case Preferences::TimeToText60Frame: fps = 60; break; } - if (fps != 0) return toFrameText(fps, hms); + if (fps != 0) { + return toFrameText(fps, hms, frameDelimiter); + } } return toMSText(fixedDp, hms); @@ -344,9 +365,11 @@ } std::string -RealTime::toFrameText(int fps, bool hms) const +RealTime::toFrameText(int fps, bool hms, std::string frameDelimiter) const { - if (*this < RealTime::zeroTime) return "-" + (-*this).toFrameText(fps, hms); + if (*this < RealTime::zeroTime) { + return "-" + (-*this).toFrameText(fps, hms); + } std::stringstream out; @@ -363,7 +386,7 @@ div *= 10; } - out << ":"; + out << frameDelimiter; // cerr << "div = " << div << ", f = "<< f << endl;