summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-06-21 16:04:57 +0100
committerCarl Hetherington <cth@carlh.net>2014-06-21 16:04:57 +0100
commit99d72a19f9e5ebbbb36bbbb95164a15c165a6a42 (patch)
treeeecb904bb0c46a318bc0fc1d7aad70b7eaf72ff4 /src
parentde49deb8b65bad47fda93a04fab2e97b10d48a75 (diff)
Add some add() methods to Time classes.
Diffstat (limited to 'src')
-rw-r--r--src/frame_time.cc44
-rw-r--r--src/frame_time.h8
-rw-r--r--src/metric_time.cc6
-rw-r--r--src/metric_time.h2
-rw-r--r--src/time_pair.cc10
-rw-r--r--src/time_pair.h2
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: