From 338843002c42629dd42520db510823b9c6c0e64d Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 10 Oct 2016 23:55:59 +0100 Subject: Fix failure of DCPDecoder::text_subtitles_during to account for reels. --- src/lib/dcp_decoder.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/lib/dcp_decoder.cc') diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc index 156fba101..5d73a9bbf 100644 --- a/src/lib/dcp_decoder.cc +++ b/src/lib/dcp_decoder.cc @@ -251,27 +251,32 @@ DCPDecoder::text_subtitles_during (ContentTimePeriod period, bool starting) cons list ctp; double const vfr = _dcp_content->active_video_frame_rate (); + int offset = 0; + BOOST_FOREACH (shared_ptr r, _reels) { if (!r->main_subtitle ()) { + offset += r->main_picture()->duration(); continue; } int64_t const entry_point = r->main_subtitle()->entry_point (); list subs = r->main_subtitle()->asset()->subtitles_during ( - dcp::Time (period.from.seconds(), 1000) - dcp::Time (entry_point, vfr, vfr), - dcp::Time (period.to.seconds(), 1000) - dcp::Time (entry_point, vfr, vfr), + dcp::Time (period.from.seconds(), 1000) - dcp::Time (offset - entry_point, vfr, vfr), + dcp::Time (period.to.seconds(), 1000) - dcp::Time (offset - entry_point, vfr, vfr), starting ); BOOST_FOREACH (dcp::SubtitleString const & s, subs) { ctp.push_back ( ContentTimePeriod ( - ContentTime::from_seconds (s.in().as_seconds ()), - ContentTime::from_seconds (s.out().as_seconds ()) + ContentTime::from_seconds (s.in().as_seconds ()) + ContentTime::from_frames (offset - entry_point, vfr), + ContentTime::from_seconds (s.out().as_seconds ()) + ContentTime::from_frames (offset - entry_point, vfr) ) ); } + + offset += r->main_subtitle()->duration(); } return ctp; -- cgit v1.2.3