summaryrefslogtreecommitdiff
path: root/src/wx/timecode.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-03-21 12:36:17 +0000
committerCarl Hetherington <cth@carlh.net>2014-03-21 12:36:17 +0000
commite6f28e7cda23c1ba3c49cc1bf2dc1491c2f87160 (patch)
treeab7de2b131c3543d170b167c8b93ea2113ac112e /src/wx/timecode.cc
parent76f601f5edbdfceec91ff6f6ce4b310e0d3a6ce9 (diff)
parent4ec7a8070dfcda1fa327df6378eaab754f119f1b (diff)
Mostly-merge master.
Diffstat (limited to 'src/wx/timecode.cc')
-rw-r--r--src/wx/timecode.cc20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/wx/timecode.cc b/src/wx/timecode.cc
index 045327254..634a15625 100644
--- a/src/wx/timecode.cc
+++ b/src/wx/timecode.cc
@@ -85,20 +85,24 @@ Timecode::Timecode (wxWindow* parent)
void
Timecode::set (DCPTime t, int fps)
{
- int const h = t.seconds() / 3600;
- t -= DCPTime::from_seconds (h * 3600);
- int const m = t.seconds() / 60;
- t -= DCPTime::from_seconds (m * 60);
- int const s = t.seconds();
- t -= DCPTime::from_seconds (s);
- int const f = rint (t.seconds() * fps);
+ /* Do this calculation with frames so that we can round
+ to a frame boundary at the start rather than the end.
+ */
+ int64_t f = rint (t.seconds() * fps);
+
+ int const h = f / (3600 * fps);
+ f -= h * 3600 * fps;
+ int const m = f / (60 * fps);
+ f -= m * 60 * fps;
+ int const s = f / fps;
+ f -= s * fps;
checked_set (_hours, lexical_cast<string> (h));
checked_set (_minutes, lexical_cast<string> (m));
checked_set (_seconds, lexical_cast<string> (s));
checked_set (_frames, lexical_cast<string> (f));
- _fixed->SetLabel (wxString::Format ("%02d:%02d:%02d.%02d", h, m, s, f));
+ _fixed->SetLabel (wxString::Format ("%02d:%02d:%02d.%02ld", h, m, s, f));
}
DCPTime