diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-06-21 16:04:57 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-06-21 16:04:57 +0100 |
| commit | 99d72a19f9e5ebbbb36bbbb95164a15c165a6a42 (patch) | |
| tree | eecb904bb0c46a318bc0fc1d7aad70b7eaf72ff4 /src | |
| parent | de49deb8b65bad47fda93a04fab2e97b10d48a75 (diff) | |
Add some add() methods to Time classes.
Diffstat (limited to 'src')
| -rw-r--r-- | src/frame_time.cc | 44 | ||||
| -rw-r--r-- | src/frame_time.h | 8 | ||||
| -rw-r--r-- | src/metric_time.cc | 6 | ||||
| -rw-r--r-- | src/metric_time.h | 2 | ||||
| -rw-r--r-- | src/time_pair.cc | 10 | ||||
| -rw-r--r-- | src/time_pair.h | 2 |
6 files changed, 57 insertions, 15 deletions
diff --git a/src/frame_time.cc b/src/frame_time.cc index e9b72b7..da9973c 100644 --- a/src/frame_time.cc +++ b/src/frame_time.cc @@ -28,31 +28,31 @@ using namespace sub; bool sub::operator== (FrameTime const & a, FrameTime const & b) { - return a._hours == b._hours && a._minutes == b._minutes && a._seconds == b._seconds && a._frames == b._frames; + return a.hours() == b.hours() && a.minutes() == b.minutes() && a.seconds() == b.seconds() && a.frames() == b.frames(); } bool sub::operator< (FrameTime const & a, FrameTime const & b) { - if (a._hours != b._hours) { - return a._hours < b._hours; + if (a.hours() != b.hours()) { + return a.hours() < b.hours(); } - if (a._minutes != b._minutes) { - return a._minutes < b._minutes; + if (a.minutes() != b.minutes()) { + return a.minutes() < b.minutes(); } - if (a._seconds != b._seconds) { - return a._seconds < b._seconds; + if (a.seconds() != b.seconds()) { + return a.seconds() < b.seconds(); } - return a._frames < b._frames; + return a.frames() < b.frames(); } ostream& sub::operator<< (ostream& s, FrameTime const & t) { - s << t._hours << ":" << t._minutes << ":" << t._seconds << ":" << t._frames; + s << t.hours() << ":" << t.minutes() << ":" << t.seconds() << ":" << t.frames(); return s; } @@ -62,7 +62,7 @@ FrameTime::timecode () const return String::compose ("%1:%2:%3:%4", _hours, _minutes, _seconds, _frames); } -FrameTime::FrameTime (int64_t f, int fps) +FrameTime::FrameTime (int64_t f, float fps) { _hours = f / (60 * 60 * fps); f -= _hours * 60 * 60 * fps; @@ -72,3 +72,27 @@ FrameTime::FrameTime (int64_t f, int fps) f -= _seconds * fps; _frames = int (f); } + +void +FrameTime::add (FrameTime t, float fps) +{ + _frames += t.frames (); + if (_frames > fps) { + _frames -= fps; + _seconds++; + } + + _seconds += t.seconds (); + if (_seconds >= 60) { + _seconds -= 60; + ++_minutes; + } + + _minutes += t.minutes (); + if (_minutes >= 60) { + _minutes -= 60; + ++_hours; + } + + _hours += t.hours (); +} diff --git a/src/frame_time.h b/src/frame_time.h index e721a29..a260e95 100644 --- a/src/frame_time.h +++ b/src/frame_time.h @@ -41,7 +41,7 @@ public: /** @param f Number of frames. * @param fps Frames per second. */ - FrameTime (int64_t f, int fps); + FrameTime (int64_t f, float fps); FrameTime (int h, int m, int s, int f) : _hours (h) @@ -68,11 +68,9 @@ public: std::string timecode () const; + void add (FrameTime t, float fps); + private: - friend bool operator== (FrameTime const & a, FrameTime const & b); - friend bool operator< (FrameTime const & a, FrameTime const & b); - friend std::ostream& operator<< (std::ostream& s, FrameTime const & t); - int _hours; int _minutes; int _seconds; diff --git a/src/metric_time.cc b/src/metric_time.cc index d0755c3..72299d3 100644 --- a/src/metric_time.cc +++ b/src/metric_time.cc @@ -80,6 +80,12 @@ MetricTime::milliseconds () const return ms; } +void +MetricTime::add (MetricTime t) +{ + _ms += t._ms; +} + bool sub::operator== (MetricTime const & a, MetricTime const & b) { diff --git a/src/metric_time.h b/src/metric_time.h index 016d7c1..cae6755 100644 --- a/src/metric_time.h +++ b/src/metric_time.h @@ -41,6 +41,8 @@ public: int minutes () const; int seconds () const; int milliseconds () const; + + void add (MetricTime t); private: void split (int& h, int& m, int& s, int& ms) const; diff --git a/src/time_pair.cc b/src/time_pair.cc index 3ef2429..e6708cd 100644 --- a/src/time_pair.cc +++ b/src/time_pair.cc @@ -44,6 +44,16 @@ TimePair::metric (float frames_per_second) const return MetricTime (f.hours(), f.minutes(), f.seconds(), f.frames() * 1000 / frames_per_second); } +void +TimePair::add (FrameTime t, float fps) +{ + if (_frame) { + _frame.get().add (t, fps); + } else { + _metric.get().add (MetricTime (t.hours(), t.minutes(), t.seconds(), t.frames() * 1000 / fps)); + } +} + bool TimePair::operator== (TimePair const & other) const { diff --git a/src/time_pair.h b/src/time_pair.h index 85d79e5..deb46c0 100644 --- a/src/time_pair.h +++ b/src/time_pair.h @@ -53,6 +53,8 @@ public: FrameTime frame (float frames_per_second) const; MetricTime metric (float frames_per_second) const; + void add (FrameTime t, float frames_per_second); + bool operator== (TimePair const & other) const; private: |
