Skip to content

Commit f41fa7b

Browse files
committed
Update from_timecode to work with 3-digit framerates
1 parent 4a74c1e commit f41fa7b

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
@@ -426,6 +426,23 @@ def test_to_timecode_120(self):
426426
t = otio.opentime.RationalTime(value=120, rate=120)
427427
self.assertEqual(timecode, otio.opentime.to_timecode(t, rate=120))
428428

429+
def test_from_timecode_120(self):
430+
timecode = "00:00:00:000"
431+
t = otio.opentime.RationalTime(value=0, rate=120)
432+
self.assertEqual(t, otio.opentime.from_timecode(timecode, rate=120))
433+
434+
timecode = "00:00:00:010"
435+
t = otio.opentime.RationalTime(value=10, rate=120)
436+
self.assertEqual(t, otio.opentime.from_timecode(timecode, rate=120))
437+
438+
timecode = "00:00:00:119"
439+
t = otio.opentime.RationalTime(value=119, rate=120)
440+
self.assertEqual(t, otio.opentime.from_timecode(timecode, rate=120))
441+
442+
timecode = "00:00:01:000"
443+
t = otio.opentime.RationalTime(value=120, rate=120)
444+
self.assertEqual(t, otio.opentime.from_timecode(timecode, rate=120))
445+
429446
def test_faulty_formatted_timecode_24(self):
430447
"""
431448
01:00:13;23 is drop-frame timecode, which only applies for

0 commit comments

Comments
 (0)