types.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: BSD-3-Clause
2 // SPDX-FileCopyrightText: Czech Technical University in Prague
3 
10 #pragma once
11 
12 #include <string>
13 
14 #include <ros/duration.h>
15 #include <ros/time.h>
16 
17 struct AVRational;
18 
19 namespace movie_publisher
20 {
25 {
26  int32_t numerator {0};
27  int32_t denominator {1};
28 
29  // ReSharper disable once CppNonExplicitConversionOperator
30  operator double() const; // NOLINT(*-explicit-constructor)
31 
32  // ReSharper disable once CppNonExplicitConversionOperator
33  operator float() const; // NOLINT(*-explicit-constructor)
34 
38  AVRational av_q() const;
39 };
40 
44 class StreamDuration : public ros::DurationBase<StreamDuration>
45 {
46 public:
48  StreamDuration(int32_t sec, int32_t nsec);
49  explicit StreamDuration(double t);
50  explicit StreamDuration(const ros::Duration& t);
51 
57  StreamDuration(int64_t streamPTS, const RationalNumber& timeBase);
58 
64  StreamDuration(int64_t streamPTS, const AVRational& timeBase);
65 
70 
76  int64_t toStreamPTS(const RationalNumber& timeBase) const;
77 
83  int64_t toStreamPTS(const AVRational& timeBase) const;
84 
85  StreamDuration operator+(const StreamDuration& rhs) const {return StreamDuration(this->d() + rhs.d());}
86  StreamDuration operator-(const StreamDuration& rhs) const {return StreamDuration(this->d() - rhs.d());}
87  StreamDuration operator-() const {return StreamDuration(-this->d());}
88  StreamDuration operator*(const double scale) const {return StreamDuration(this->d() * scale);}
90  {
91  auto dur = this->d(); dur += rhs.d(); *this = StreamDuration(dur); return *this;
92  }
93  StreamDuration& operator-=(const StreamDuration& rhs) { return *this += -rhs; }
94  StreamDuration& operator*=(const double scale)
95  {
96  auto dur = this->d(); dur *= scale; *this = StreamDuration(dur); return *this;
97  }
98  bool operator==(const StreamDuration& rhs) const {return this->d() == rhs.d();}
99  bool operator!=(const StreamDuration& rhs) const { return !(*this == rhs); }
100  bool operator>(const StreamDuration& rhs) const {return this->d() > rhs.d();}
101  bool operator<(const StreamDuration& rhs) const {return this->d() < rhs.d();}
102  bool operator>=(const StreamDuration& rhs) const {return this->d() >= rhs.d();}
103  bool operator<=(const StreamDuration& rhs) const {return this->d() <= rhs.d();}
104  bool isZero() const { return this->d().isZero(); }
105  double toSec() const { return this->d().toSec(); }
106  StreamDuration& fromSec(const double t) {*this = StreamDuration(ros::Duration().fromSec(t)); return *this;}
107  StreamDuration& fromNSec(const int64_t t) {*this = StreamDuration(ros::Duration().fromNSec(t)); return *this;}
108 private:
109  ros::Duration d() const {return this->toRosDuration();}
110 };
111 
115 class StreamTime : public ros::TimeBase<StreamTime, StreamDuration>
116 {
117 public:
118  StreamTime();
119  StreamTime(uint32_t sec, uint32_t nsec);
120  explicit StreamTime(double t);
121  explicit StreamTime(const ros::Time& t);
127  explicit StreamTime(const StreamDuration& duration);
133  StreamTime(int64_t streamPTS, const RationalNumber& timeBase);
139  StreamTime(int64_t streamPTS, const AVRational& timeBase);
140 
144  ros::Time toRosTime() const;
145 
151  StreamDuration toDuration() const;
152 
158  int64_t toStreamPTS(const RationalNumber& timeBase) const;
159 
165  int64_t toStreamPTS(const AVRational& timeBase) const;
166 
167  StreamDuration operator-(const StreamTime& rhs) const {return StreamDuration{this->t() - rhs.t()};}
168  StreamTime operator+(const StreamDuration& rhs) const {return StreamTime{this->t() + rhs.toRosDuration()};}
169  StreamTime operator-(const StreamDuration& rhs) const {return StreamTime{this->t() - rhs.toRosDuration()};}
171  {
172  auto time = this->t(); time += rhs.toRosDuration(); *this = StreamTime(time); return *this;
173  }
174  StreamTime& operator-=(const StreamDuration& rhs) {return *this += -rhs;}
175  bool operator==(const StreamTime& rhs) const {return this->t() == rhs.t();}
176  bool operator!=(const StreamTime& rhs) const { return !(*this == rhs); }
177  bool operator>(const StreamTime& rhs) const {return this->t() > rhs.t();}
178  bool operator<(const StreamTime& rhs) const {return this->t() < rhs.t();}
179  bool operator>=(const StreamTime& rhs) const {return this->t() >= rhs.t();}
180  bool operator<=(const StreamTime& rhs) const {return this->t() <= rhs.t();}
181  bool isZero() const { return this->t().isZero(); }
182  double toSec() const { return this->t().toSec(); }
183  StreamTime& fromSec(const double t){ *this = StreamTime(ros::Time().fromSec(t)); return *this; }
184  StreamTime& fromNSec(const uint64_t t) { *this = StreamTime(ros::Time().fromNSec(t)); return *this; }
185 private:
186  ros::Time t() const {return this->toRosTime();}
187 };
188 
192 enum class TimestampSource
193 {
194  AllZeros,
197  RosTime,
198  FromMetadata,
199 };
200 
201 }
202 
203 namespace cras
204 {
205 
206 std::string to_string(const movie_publisher::StreamTime& time);
207 std::string to_string(const movie_publisher::StreamDuration& duration);
208 
209 }
movie_publisher::StreamTime::isZero
bool isZero() const
Definition: types.h:181
movie_publisher::StreamDuration::d
ros::Duration d() const
Definition: types.h:109
movie_publisher::StreamTime::operator<
bool operator<(const StreamTime &rhs) const
Definition: types.h:178
cras
movie_publisher::StreamDuration::operator!=
bool operator!=(const StreamDuration &rhs) const
Definition: types.h:99
movie_publisher::StreamDuration::operator>
bool operator>(const StreamDuration &rhs) const
Definition: types.h:100
movie_publisher::StreamTime::StreamTime
StreamTime()
movie_publisher::StreamDuration::operator<=
bool operator<=(const StreamDuration &rhs) const
Definition: types.h:103
movie_publisher::StreamTime::operator+
StreamTime operator+(const StreamDuration &rhs) const
Definition: types.h:168
time.h
movie_publisher::StreamTime::operator+=
StreamTime & operator+=(const StreamDuration &rhs)
Definition: types.h:170
movie_publisher::StreamDuration::operator+=
StreamDuration & operator+=(const StreamDuration &rhs)
Definition: types.h:89
ros::DurationBase< StreamDuration >::nsec
int32_t nsec
TimeBase< Time, Duration >::toSec
double toSec() const
movie_publisher::StreamTime::toStreamPTS
int64_t toStreamPTS(const RationalNumber &timeBase) const
Convert this time to PTS.
movie_publisher::StreamDuration::toStreamPTS
int64_t toStreamPTS(const RationalNumber &timeBase) const
Convert this duration to PTS.
movie_publisher::StreamDuration::operator-
StreamDuration operator-(const StreamDuration &rhs) const
Definition: types.h:86
movie_publisher::StreamTime::operator<=
bool operator<=(const StreamTime &rhs) const
Definition: types.h:180
movie_publisher::StreamTime::toRosTime
ros::Time toRosTime() const
movie_publisher::StreamTime
Time type denoting movie stream time.
Definition: types.h:115
movie_publisher::StreamTime::operator!=
bool operator!=(const StreamTime &rhs) const
Definition: types.h:176
movie_publisher::TimestampSource
TimestampSource
How to compute ROS timestamps from movie frame presentation timestamp (PTS).
Definition: types.h:192
movie_publisher::StreamDuration::operator-=
StreamDuration & operator-=(const StreamDuration &rhs)
Definition: types.h:93
movie_publisher::StreamTime::operator>=
bool operator>=(const StreamTime &rhs) const
Definition: types.h:179
duration.h
movie_publisher::StreamTime::operator-
StreamTime operator-(const StreamDuration &rhs) const
Definition: types.h:169
movie_publisher::StreamTime::t
ros::Time t() const
Definition: types.h:186
movie_publisher::StreamDuration::toSec
double toSec() const
Definition: types.h:105
movie_publisher::TimestampSource::AbsoluteVideoTimecode
@ AbsoluteVideoTimecode
Just use the PTS as is.
movie_publisher::StreamTime::operator>
bool operator>(const StreamTime &rhs) const
Definition: types.h:177
ros::TimeBase
TimeBase< Time, Duration >::isZero
bool isZero() const
movie_publisher::StreamDuration::operator*=
StreamDuration & operator*=(const double scale)
Definition: types.h:94
movie_publisher::StreamDuration::operator==
bool operator==(const StreamDuration &rhs) const
Definition: types.h:98
movie_publisher::StreamTime::fromSec
StreamTime & fromSec(const double t)
Definition: types.h:183
movie_publisher::RationalNumber::av_q
AVRational av_q() const
movie_publisher::StreamDuration::operator-
StreamDuration operator-() const
Definition: types.h:87
ros::DurationBase
movie_publisher::StreamDuration::operator<
bool operator<(const StreamDuration &rhs) const
Definition: types.h:101
movie_publisher::StreamDuration::toRosDuration
ros::Duration toRosDuration() const
movie_publisher::StreamDuration::fromSec
StreamDuration & fromSec(const double t)
Definition: types.h:106
ros::TimeBase< StreamTime, StreamDuration >::sec
uint32_t sec
movie_publisher::TimestampSource::AllZeros
@ AllZeros
ROS timestamp is always 0.
ros::TimeBase< StreamTime, StreamDuration >::nsec
uint32_t nsec
movie_publisher::StreamTime::fromNSec
StreamTime & fromNSec(const uint64_t t)
Definition: types.h:184
movie_publisher::StreamTime::toSec
double toSec() const
Definition: types.h:182
movie_publisher::StreamDuration::operator+
StreamDuration operator+(const StreamDuration &rhs) const
Definition: types.h:85
movie_publisher::StreamTime::operator==
bool operator==(const StreamTime &rhs) const
Definition: types.h:175
ros::Time
movie_publisher
Definition: ExifBaseMetadataExtractor.h:27
movie_publisher::StreamTime::toDuration
StreamDuration toDuration() const
Convert this time value to duration.
movie_publisher::StreamTime::operator-=
StreamTime & operator-=(const StreamDuration &rhs)
Definition: types.h:174
movie_publisher::StreamDuration::fromNSec
StreamDuration & fromNSec(const int64_t t)
Definition: types.h:107
movie_publisher::StreamDuration::operator*
StreamDuration operator*(const double scale) const
Definition: types.h:88
movie_publisher::RationalNumber::numerator
int32_t numerator
Numerator.
Definition: types.h:26
movie_publisher::StreamDuration::StreamDuration
StreamDuration()
movie_publisher::StreamTime::operator-
StreamDuration operator-(const StreamTime &rhs) const
Definition: types.h:167
movie_publisher::RationalNumber::denominator
int32_t denominator
Denominator.
Definition: types.h:27
movie_publisher::RationalNumber
A simple representation of rational numbers of the form numerator/denominator.
Definition: types.h:24
movie_publisher::StreamDuration::operator>=
bool operator>=(const StreamDuration &rhs) const
Definition: types.h:102
movie_publisher::TimestampSource::FromMetadata
@ FromMetadata
Use PTS and offset it by the start time recorded in movie metadata.
DurationBase< Duration >::toSec
double toSec() const
movie_publisher::StreamDuration::isZero
bool isZero() const
Definition: types.h:104
movie_publisher::StreamDuration
Duration type denoting movie stream duration.
Definition: types.h:44
ros::Duration
movie_publisher::TimestampSource::RelativeVideoTimecode
@ RelativeVideoTimecode
Use PTS, but make it relative to the time set by last seek() call.
t
geometry_msgs::TransformStamped t
ros::DurationBase< StreamDuration >::sec
int32_t sec
DurationBase< Duration >::isZero
bool isZero() const
cras::to_string
inline ::std::string to_string(char *value)
movie_publisher::TimestampSource::RosTime
@ RosTime
Use current ROS time.


movie_publisher
Author(s): Martin Pecka
autogenerated on Wed May 28 2025 02:07:22