From: Carl Hetherington Date: Mon, 10 Oct 2016 22:55:59 +0000 (+0100) Subject: Fix failure of DCPDecoder::text_subtitles_during to account for reels. X-Git-Tag: v2.9.32~1 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=338843002c42629dd42520db510823b9c6c0e64d Fix failure of DCPDecoder::text_subtitles_during to account for reels. --- diff --git a/ChangeLog b/ChangeLog index a9f56492c..3fc747632 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2016-10-10 Carl Hetherington + + * Fix incorrect import of multi-reel DCPs with subtitles. + 2016-10-09 Carl Hetherington * Version 2.9.31 released. 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;