X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_decoder.cc;h=3a187186390dcaa76330494f1e94410d51b87476;hb=37b29fdf9028e6848470a19d189697fc58278990;hp=7e2001e0ef9b75d4d145d89403048e351928b241;hpb=8b9888ed8247109dc3c09492302e865fa4731460;p=dcpomatic.git diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc index 7e2001e0e..3a1871863 100644 --- a/src/lib/dcp_decoder.cc +++ b/src/lib/dcp_decoder.cc @@ -23,6 +23,7 @@ #include "audio_content.h" #include "audio_decoder.h" #include "config.h" +#include "constants.h" #include "dcp_content.h" #include "dcp_decoder.h" #include "digester.h" @@ -136,6 +137,9 @@ DCPDecoder::DCPDecoder (shared_ptr film, shared_ptrsubtitle_standard() ); strings.clear (); } dcp::SubtitleString is_copy = *is; - is_copy.set_font(id_for_font_in_reel(is_copy.font().get_value_or(""), _reel - _reels.begin())); + is_copy.set_font(_font_id_allocator.font_id(_reel - _reels.begin(), asset->id(), is_copy.font().get_value_or(""))); strings.push_back(is_copy); } @@ -338,7 +343,8 @@ DCPDecoder::pass_texts ( ContentTime::from_frames(_offset - entry_point, vfr) + ContentTime::from_seconds(b.in().as_seconds()), ContentTime::from_frames(_offset - entry_point, vfr) + ContentTime::from_seconds(b.out().as_seconds()) ), - strings + strings, + asset->subtitle_standard() ); strings.clear (); } @@ -366,7 +372,7 @@ DCPDecoder::get_readers () return; } - if ((*_reel)->main_picture()) { + if (video && !video->ignore() && (*_reel)->main_picture()) { auto asset = (*_reel)->main_picture()->asset (); auto mono = dynamic_pointer_cast (asset); auto stereo = dynamic_pointer_cast (asset); @@ -385,7 +391,7 @@ DCPDecoder::get_readers () _stereo_reader.reset (); } - if ((*_reel)->main_sound()) { + if (audio && !audio->ignore() && (*_reel)->main_sound()) { _sound_reader = (*_reel)->main_sound()->asset()->start_read (); _sound_reader->set_check_hmac (false); } else { @@ -441,10 +447,12 @@ DCPDecoder::seek (ContentTime t, bool accurate) /* Pass texts in the pre-roll */ - auto const vfr = _dcp_content->active_video_frame_rate (film()); - for (int i = 0; i < pre_roll_seconds * vfr; ++i) { - pass_texts (pre, (*_reel)->main_picture()->asset()->size()); - pre += ContentTime::from_frames (1, vfr); + if (_reel != _reels.end()) { + auto const vfr = _dcp_content->active_video_frame_rate (film()); + for (int i = 0; i < pre_roll_seconds * vfr; ++i) { + pass_texts (pre, (*_reel)->main_picture()->asset()->size()); + pre += ContentTime::from_frames (1, vfr); + } } /* Seek to correct position */