Skip to content

Commit b2e6030

Browse files
committed
Update from_timecode to work with 3-digit framerates
1 parent 1d454b6 commit b2e6030

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/opentime/rationalTime.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,14 @@ RationalTime::from_timecode(
246246
{
247247
// split the fields
248248
unsigned int last_pos = 0;
249-
for (unsigned int i = 0; i < 4; i++)
249+
for (unsigned int i = 0; i < 3; i++)
250250
{
251251
fields[i] = timecode.substr(last_pos, 2);
252252
last_pos = last_pos + 3;
253253
}
254254

255+
fields[3] = timecode.substr(last_pos, timecode.length() - last_pos);
256+
255257
hours = std::stoi(fields[0]);
256258
minutes = std::stoi(fields[1]);
257259
seconds = std::stoi(fields[2]);

tests/test_opentime.py

+17
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,23 @@ def test_to_timecode_120(self):
418418
t = otio.opentime.RationalTime(value=120, rate=120)
419419
self.assertEqual(timecode, otio.opentime.to_timecode(t, rate=120))
420420

421+
def test_from_timecode_120(self):
422+
timecode = "00:00:00:000"
423+
t = otio.opentime.RationalTime(value=0, rate=120)
424+
self.assertEqual(t, otio.opentime.from_timecode(timecode, rate=120))
425+
426+
timecode = "00:00:00:010"
427+
t = otio.opentime.RationalTime(value=10, rate=120)
428+
self.assertEqual(t, otio.opentime.from_timecode(timecode, rate=120))
429+
430+
timecode = "00:00:00:119"
431+
t = otio.opentime.RationalTime(value=119, rate=120)
432+
self.assertEqual(t, otio.opentime.from_timecode(timecode, rate=120))
433+
434+
timecode = "00:00:01:000"
435+
t = otio.opentime.RationalTime(value=120, rate=120)
436+
self.assertEqual(t, otio.opentime.from_timecode(timecode, rate=120))
437+
421438
def test_faulty_formatted_timecode_24(self):
422439
"""
423440
01:00:13;23 is drop-frame timecode, which only applies for

0 commit comments

Comments
 (0)