12using std::chrono::duration_cast;
13using namespace std::chrono_literals;
22#if __cplusplus <= 201703L
25 using days = duration<CHRONO_TYPE, ratio<86400>>;
26 using weeks = duration<CHRONO_TYPE, ratio<604800>>;
27 using months = duration<CHRONO_TYPE, ratio<2629746>>;
28 using years = duration<CHRONO_TYPE, ratio<31556952>>;
40using floatmsecs = std::chrono::duration<double, std::milli>;
41using floatusecs = std::chrono::duration<double, std::micro>;
46using av_duration = std::chrono::duration<int64_t,std::ratio<1,AV_TIME_BASE>>;
55 using pts = std::chrono::duration<CHRONO_TYPE, std::ratio<1, 90000>>;
57 namespace chrono_literals
79typename std::enable_if_t<std::is_floating_point_v<T>, std::chrono::seconds>
82 return std::chrono::seconds(
static_cast<int64_t
>(value));
90typename std::enable_if_t<std::is_floating_point_v<T>, std::chrono::milliseconds>
93 return std::chrono::milliseconds(
static_cast<int64_t
>(value));
101typename std::enable_if_t<std::is_floating_point_v<T>, std::chrono::microseconds>
104 return std::chrono::microseconds(
static_cast<int64_t
>(value));
110 int seconds = 0,
int milliseconds = 0)
112 return std::chrono::hours(hours)
113 + std::chrono::minutes(minutes)
114 + std::chrono::seconds(seconds)
115 + std::chrono::milliseconds(milliseconds);
128 std::chrono::microseconds value = std::chrono::seconds(
t.tv_sec) +
129 std::chrono::microseconds(
t.tv_usec);
130 if constexpr (std::is_same_v<T,std::chrono::microseconds>)
132 return duration_cast<T>(value);
145 auto usec_a = durationFromTimeval<std::chrono::microseconds>(a);
146 auto usec_b = durationFromTimeval<std::chrono::microseconds>(b);
147 if constexpr (std::is_same_v<T,std::chrono::microseconds>)
148 return usec_a - usec_b;
149 return duration_cast<T>(usec_a - usec_b);
162 std::chrono::nanoseconds nsec = std::chrono::seconds(time.tv_sec)
163 + std::chrono::nanoseconds(time.tv_nsec);
164 if constexpr (std::is_same_v<T,std::chrono::nanoseconds>)
166 return duration_cast<T>(nsec);
185 struct timeval now {};
186 struct timezone tz {};
187 gettimeofday(&now, &tz);
189 auto usecs = durationFromTimeval<std::chrono::microseconds>(now);
191 usecs -= std::chrono::minutes(tz.tz_minuteswest);
192 if constexpr (std::is_same_v<T,std::chrono::microseconds>)
194 return duration_cast<T>(usecs);
201 return T(std::llround(duration.count() * f));
207 return T(std::llround(duration.count() / f));
std::enable_if_t< std::is_floating_point_v< T >, std::chrono::milliseconds > millisecondsFromFloat(T value)
Helper function for convert a floating point number to a duration.
constexpr T durationFromTimevalDelta(timeval a, timeval b)
Compute delta between timevals and convert to a duration.
constexpr T durationFromTimespec(struct timespec time)
Convert a timespec to a duration.
std::chrono::seconds::rep CHRONO_TYPE
static constexpr T chronomult(T duration, double f)
Multiply a duration by a float, returning a duration.
std::enable_if_t< std::is_floating_point_v< T >, std::chrono::seconds > secondsFromFloat(T value)
Helper function for convert a floating point number to a duration.
constexpr T durationFromTimeval(timeval t)
Convert a timeval to a duration.
std::enable_if_t< std::is_floating_point_v< T >, std::chrono::microseconds > microsecondsFromFloat(T value)
Helper function for convert a floating point number to a duration.
std::chrono::system_clock SystemClock
T nowAsDuration(bool adjustForTZ=false)
Get the currenttime as a duration.
std::chrono::duration< double, std::micro > floatusecs
static constexpr T chronodivide(T duration, double f)
Divide a duration by a float, returning a duration.
std::chrono::duration< double > floatsecs
std::chrono::duration< double, std::milli > floatmsecs
std::chrono::time_point< SystemClock > SystemTime
Q_DECLARE_METATYPE(std::chrono::seconds)
static constexpr std::chrono::milliseconds millisecondsFromParts(int hours, int minutes=0, int seconds=0, int milliseconds=0)
Build a duration from separate minutes, seconds, etc.
std::chrono::duration< CHRONO_TYPE, std::ratio< 1, 90000 > > pts
duration< CHRONO_TYPE, ratio< 2629746 > > months
duration< CHRONO_TYPE, ratio< 604800 > > weeks
duration< CHRONO_TYPE, ratio< 31556952 > > years
duration< CHRONO_TYPE, ratio< 86400 > > days