libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
mediatimestamp.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <promeki/namespace.h>
14#include <promeki/string.h>
15#include <promeki/timestamp.h>
16#include <promeki/duration.h>
17#include <promeki/clockdomain.h>
18#include <promeki/result.h>
19#include <promeki/datatype.h>
20
21PROMEKI_NAMESPACE_BEGIN
22
23class DataStream;
24
55class MediaTimeStamp {
56 public:
57 PROMEKI_DATATYPE(MediaTimeStamp, DataTypeMediaTimeStamp, 1)
58
59
60 Error writeToStream(DataStream &s) const;
62 template <uint32_t V> static Result<MediaTimeStamp> readFromStream(DataStream &s);
63
65 MediaTimeStamp() = default;
66
73 MediaTimeStamp(const TimeStamp &ts, const ClockDomain &domain, const Duration &offset = Duration::zero());
74
86 bool isValid() const { return _domain.isValid() && _timeStamp.isValid(); }
87
89 const TimeStamp &timeStamp() const { return _timeStamp; }
90
92 const ClockDomain &domain() const { return _domain; }
93
95 const Duration &offset() const { return _offset; }
96
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;
120 }
121
124 void setTimeStamp(const TimeStamp &ts) { _timeStamp = ts; }
125
128 void setDomain(const ClockDomain &domain) { _domain = domain; }
129
132 void setOffset(const Duration &offset) { _offset = offset; }
133
141 String toString() const;
142
148 static Result<MediaTimeStamp> fromString(const String &str);
149
151 bool operator==(const MediaTimeStamp &other) const;
152
154 bool operator!=(const MediaTimeStamp &other) const;
155
156 private:
157 TimeStamp _timeStamp;
158 ClockDomain _domain;
159 Duration _offset;
160};
161
162PROMEKI_NAMESPACE_END
163
164PROMEKI_FORMAT_VIA_TOSTRING(promeki::MediaTimeStamp);
165
166#endif // PROMEKI_ENABLE_CORE