summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-07-15 14:28:16 +0100
committerCarl Hetherington <cth@carlh.net>2014-07-15 14:28:16 +0100
commitdc17395f3a4c19f5eea2590f1d2904e88365c67a (patch)
treec7d5a99ee538483b948b756bdf7bcbfbbb62ae2a /src
parent44a5e000d62230451cc35a239c7c3ba83d830bd7 (diff)
Add scale functions to time classes.
Diffstat (limited to 'src')
-rw-r--r--src/frame_time.cc15
-rw-r--r--src/frame_time.h3
-rw-r--r--src/metric_time.cc6
-rw-r--r--src/metric_time.h1
-rw-r--r--src/time_pair.cc18
-rw-r--r--src/time_pair.h7
6 files changed, 43 insertions, 7 deletions
diff --git a/src/frame_time.cc b/src/frame_time.cc
index da9973c..65996c0 100644
--- a/src/frame_time.cc
+++ b/src/frame_time.cc
@@ -64,6 +64,12 @@ FrameTime::timecode () const
FrameTime::FrameTime (int64_t f, float fps)
{
+ set_from_frames (f, fps);
+}
+
+void
+FrameTime::set_from_frames (int64_t f, float fps)
+{
_hours = f / (60 * 60 * fps);
f -= _hours * 60 * 60 * fps;
_minutes = f / (60 * fps);
@@ -96,3 +102,12 @@ FrameTime::add (FrameTime t, float fps)
_hours += t.hours ();
}
+
+void
+FrameTime::scale (float f, float frames_per_second)
+{
+ set_from_frames (
+ (((_hours * 3600 + _minutes * 60 + _seconds) * frames_per_second) + _frames) * f,
+ frames_per_second
+ );
+}
diff --git a/src/frame_time.h b/src/frame_time.h
index a260e95..ed5fc81 100644
--- a/src/frame_time.h
+++ b/src/frame_time.h
@@ -69,8 +69,11 @@ public:
std::string timecode () const;
void add (FrameTime t, float fps);
+ void scale (float f, float fps);
private:
+ void set_from_frames (int64_t f, float fps);
+
int _hours;
int _minutes;
int _seconds;
diff --git a/src/metric_time.cc b/src/metric_time.cc
index 72299d3..4fad390 100644
--- a/src/metric_time.cc
+++ b/src/metric_time.cc
@@ -86,6 +86,12 @@ MetricTime::add (MetricTime t)
_ms += t._ms;
}
+void
+MetricTime::scale (float f)
+{
+ _ms *= f;
+}
+
bool
sub::operator== (MetricTime const & a, MetricTime const & b)
{
diff --git a/src/metric_time.h b/src/metric_time.h
index cae6755..86c1923 100644
--- a/src/metric_time.h
+++ b/src/metric_time.h
@@ -43,6 +43,7 @@ public:
int milliseconds () const;
void add (MetricTime t);
+ void scale (float f);
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 e6708cd..9fc7974 100644
--- a/src/time_pair.cc
+++ b/src/time_pair.cc
@@ -23,25 +23,25 @@ using std::ostream;
using namespace sub;
FrameTime
-TimePair::frame (float frames_per_second) const
+TimePair::frame (float fps) const
{
if (_frame) {
return _frame.get ();
}
MetricTime const m = _metric.get ();
- return FrameTime (m.hours(), m.minutes(), m.seconds(), m.milliseconds() * frames_per_second / 1000);
+ return FrameTime (m.hours(), m.minutes(), m.seconds(), m.milliseconds() * fps / 1000);
}
MetricTime
-TimePair::metric (float frames_per_second) const
+TimePair::metric (float fps) const
{
if (_metric) {
return _metric.get ();
}
FrameTime const f = _frame.get ();
- return MetricTime (f.hours(), f.minutes(), f.seconds(), f.frames() * 1000 / frames_per_second);
+ return MetricTime (f.hours(), f.minutes(), f.seconds(), f.frames() * 1000 / fps);
}
void
@@ -54,6 +54,16 @@ TimePair::add (FrameTime t, float fps)
}
}
+void
+TimePair::scale (float f, float fps)
+{
+ if (_frame) {
+ _frame.get().scale (f, fps);
+ } else {
+ _metric.get().scale (f);
+ }
+}
+
bool
TimePair::operator== (TimePair const & other) const
{
diff --git a/src/time_pair.h b/src/time_pair.h
index deb46c0..a9c1a09 100644
--- a/src/time_pair.h
+++ b/src/time_pair.h
@@ -50,10 +50,11 @@ public:
return _metric;
}
- FrameTime frame (float frames_per_second) const;
- MetricTime metric (float frames_per_second) const;
+ FrameTime frame (float fps) const;
+ MetricTime metric (float fps) const;
- void add (FrameTime t, float frames_per_second);
+ void add (FrameTime t, float fps);
+ void scale (float f, float fps);
bool operator== (TimePair const & other) const;