diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-08-13 14:44:22 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-08-13 14:44:22 +0100 |
| commit | 5130dd409e92a7cdb868b2af85797afd286d8afa (patch) | |
| tree | 205c49ef4e1610bff85a9bc1bfb3882e0dcd23a8 | |
| parent | cadec42b9547665ac03a7180af374ebb40df7c78 (diff) | |
Time from frame.
| -rw-r--r-- | src/dcp_time.cc | 19 | ||||
| -rw-r--r-- | src/dcp_time.h | 1 | ||||
| -rw-r--r-- | test/tests.cc | 10 |
3 files changed, 29 insertions, 1 deletions
diff --git a/src/dcp_time.cc b/src/dcp_time.cc index 5e8bf801..6af653ad 100644 --- a/src/dcp_time.cc +++ b/src/dcp_time.cc @@ -18,9 +18,28 @@ */ #include <iostream> +#include <cmath> #include "dcp_time.h" using namespace std; +using namespace libdcp; + +Time::Time (int frame, int frames_per_second) +{ + float sec_float = float (frame) / frames_per_second; + ms = int (sec_float * 1000) % 1000; + s = floor (sec_float); + + if (s > 60) { + m = s / 60; + s -= m * 60; + } + + if (m > 60) { + h = m / 60; + m -= h * 60; + } +} bool libdcp::operator== (Time const & a, Time const & b) diff --git a/src/dcp_time.h b/src/dcp_time.h index 48560596..22dcec0f 100644 --- a/src/dcp_time.h +++ b/src/dcp_time.h @@ -26,6 +26,7 @@ class Time { public: Time () : h (0), m (0), s (0), ms (0) {} + Time (int frame, int frames_per_second); Time (int h_, int m_, int s_, int ms_) : h (h_) , m (m_) diff --git a/test/tests.cc b/test/tests.cc index cb180ec0..ccbf8787 100644 --- a/test/tests.cc +++ b/test/tests.cc @@ -129,4 +129,12 @@ BOOST_AUTO_TEST_CASE (subtitles) BOOST_CHECK_EQUAL (subs.subtitles_at (libdcp::Time (0, 0, 14, 042)).front()->text(), "And these are Roy Hattersley's jeans"); } - +BOOST_AUTO_TEST_CASE (dcp_time) +{ + libdcp::Time t (977143, 24); + + BOOST_CHECK_EQUAL (t.ms, 292); + BOOST_CHECK_EQUAL (t.s, 34); + BOOST_CHECK_EQUAL (t.m, 18); + BOOST_CHECK_EQUAL (t.h, 11); +} |
