11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
21PROMEKI_NAMESPACE_BEGIN
57 PROMEKI_DATATYPE(MediaTimeStamp, DataTypeMediaTimeStamp, 1)
60 Error writeToStream(DataStream &s) const;
62 template <uint32_t V> static Result<MediaTimeStamp> readFromStream(DataStream &s);
65 MediaTimeStamp() = default;
73 MediaTimeStamp(const TimeStamp &ts, const ClockDomain &domain, const Duration &offset = Duration::zero());
86 bool isValid()
const {
return _domain.isValid() && _timeStamp.isValid(); }
89 const TimeStamp &timeStamp()
const {
return _timeStamp; }
92 const ClockDomain &domain()
const {
return _domain; }
95 const Duration &offset()
const {
return _offset; }
116 int64_t nanoseconds()
const {
117 if (!_timeStamp.isValid())
return TimeStamp::Invalid;
118 const int64_t offsetNs = _offset.isValid() ? _offset.nanoseconds() : 0;
119 return _timeStamp.nanoseconds() + offsetNs;
124 void setTimeStamp(
const TimeStamp &ts) { _timeStamp = ts; }
128 void setDomain(
const ClockDomain &domain) { _domain = domain; }
132 void setOffset(
const Duration &offset) { _offset = offset; }
141 String toString()
const;
148 static Result<MediaTimeStamp> fromString(
const String &str);
151 bool operator==(
const MediaTimeStamp &other)
const;
154 bool operator!=(
const MediaTimeStamp &other)
const;
157 TimeStamp _timeStamp;
164PROMEKI_FORMAT_VIA_TOSTRING(promeki::MediaTimeStamp);