12using std::chrono::duration_cast;
13using namespace std::chrono_literals;
29using floatmsecs = std::chrono::duration<double, std::milli>;
30using floatusecs = std::chrono::duration<double, std::micro>;
35using av_duration = std::chrono::duration<int64_t,std::ratio<1,AV_TIME_BASE>>;
44 using pts = std::chrono::duration<CHRONO_TYPE, std::ratio<1, 90000>>;
46 namespace chrono_literals
69requires (std::is_floating_point_v<T>)
71 return std::chrono::seconds(
static_cast<int64_t
>(value));
80requires (std::is_floating_point_v<T>)
82 return std::chrono::milliseconds(
static_cast<int64_t
>(value));
90std::chrono::microseconds
92requires (std::is_floating_point_v<T>)
94 return std::chrono::microseconds(
static_cast<int64_t
>(value));
100 int seconds = 0,
int milliseconds = 0)
102 return std::chrono::hours(hours)
103 + std::chrono::minutes(minutes)
104 + std::chrono::seconds(seconds)
105 + std::chrono::milliseconds(milliseconds);
118 std::chrono::microseconds value = std::chrono::seconds(
t.tv_sec) +
119 std::chrono::microseconds(
t.tv_usec);
120 if constexpr (std::is_same_v<T,std::chrono::microseconds>)
122 return duration_cast<T>(value);
135 auto usec_a = durationFromTimeval<std::chrono::microseconds>(a);
136 auto usec_b = durationFromTimeval<std::chrono::microseconds>(b);
137 if constexpr (std::is_same_v<T,std::chrono::microseconds>)
138 return usec_a - usec_b;
139 return duration_cast<T>(usec_a - usec_b);
152 std::chrono::nanoseconds nsec = std::chrono::seconds(time.tv_sec)
153 + std::chrono::nanoseconds(time.tv_nsec);
154 if constexpr (std::is_same_v<T,std::chrono::nanoseconds>)
156 return duration_cast<T>(nsec);
175 struct timeval now {};
176 struct timezone tz {};
177 gettimeofday(&now, &tz);
179 auto usecs = durationFromTimeval<std::chrono::microseconds>(now);
181 usecs -= std::chrono::minutes(tz.tz_minuteswest);
182 if constexpr (std::is_same_v<T,std::chrono::microseconds>)
184 return duration_cast<T>(usecs);
191 return T(std::llround(duration.count() * f));
197 return T(std::llround(duration.count() / f));
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::chrono::microseconds microsecondsFromFloat(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::chrono::system_clock SystemClock
T nowAsDuration(bool adjustForTZ=false)
Get the currenttime as a duration.
std::chrono::seconds secondsFromFloat(T value)
Helper function for convert a floating point number to 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)
std::chrono::milliseconds millisecondsFromFloat(T value)
Helper function for convert a floating point number to a duration.
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