diff --git a/src/py-opentimelineio/opentimelineio/adapters/fcp_xml.py b/src/py-opentimelineio/opentimelineio/adapters/fcp_xml.py index 98e1fd11c..e32763c0a 100644 --- a/src/py-opentimelineio/opentimelineio/adapters/fcp_xml.py +++ b/src/py-opentimelineio/opentimelineio/adapters/fcp_xml.py @@ -1832,7 +1832,12 @@ def _build_marker(marker): marker_e, 'in', text=f'{marked_range.start_time.value:.0f}' ) - _append_new_sub_element(marker_e, 'out', text='-1') + _append_new_sub_element( + marker_e, 'out', + text='{:.0f}'.format( + marked_range.start_time.value + marked_range.duration.value + ) + ) return marker_e diff --git a/tests/test_fcp7_xml_adapter.py b/tests/test_fcp7_xml_adapter.py index e5a949d3b..4139e3469 100644 --- a/tests/test_fcp7_xml_adapter.py +++ b/tests/test_fcp7_xml_adapter.py @@ -1256,6 +1256,17 @@ def test_roundtrip_mem2disk2mem(self): ) ) + timeline.tracks.markers.append( + schema.Marker( + name='test_timeline_marker_range', + marked_range=opentime.TimeRange( + opentime.RationalTime(123, RATE), + opentime.RationalTime(11, RATE), + ), + metadata={'fcp_xml': {'comment': 'my_comment'}} + ) + ) + v1[1].markers.append( schema.Marker( name='test_clip_marker', @@ -1266,6 +1277,17 @@ def test_roundtrip_mem2disk2mem(self): ) ) + v1[1].markers.append( + schema.Marker( + name='test_clip_marker_range', + marked_range=opentime.TimeRange( + opentime.RationalTime(125, RATE), + opentime.RationalTime(6, RATE) + ), + metadata={'fcp_xml': {'comment': 'my_comment'}} + ) + ) + # make sure that global_start_time.rate survives the round trip timeline.global_start_time = opentime.RationalTime(100, RATE)