X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_encoder.cc;h=f1e819083a1728ffbf603386e52f0b5b5253dfd4;hb=fa2c49210c9fcf0f26205927aec0aceb13ca69ce;hp=67235e5968e419c3c08a70c5301afeef5c955587;hpb=7686d48aab59eeca84b32c74606453628977d903;p=dcpomatic.git diff --git a/src/lib/dcp_encoder.cc b/src/lib/dcp_encoder.cc index 67235e596..f1e819083 100644 --- a/src/lib/dcp_encoder.cc +++ b/src/lib/dcp_encoder.cc @@ -56,11 +56,13 @@ using boost::dynamic_pointer_cast; */ DCPEncoder::DCPEncoder (shared_ptr film, weak_ptr job) : Encoder (film, job) - , _film (film) - , _job (job) , _finishing (false) , _non_burnt_subtitles (false) { + _player_video_connection = _player->Video.connect (bind (&DCPEncoder::video, this, _1, _2)); + _player_audio_connection = _player->Audio.connect (bind (&DCPEncoder::audio, this, _1, _2)); + _player_subtitle_connection = _player->Subtitle.connect (bind (&DCPEncoder::subtitle, this, _1, _2)); + BOOST_FOREACH (shared_ptr c, film->content ()) { if (c->subtitle && c->subtitle->use() && !c->subtitle->burn()) { _non_burnt_subtitles = true; @@ -92,7 +94,18 @@ DCPEncoder::go () } if (_non_burnt_subtitles) { - _writer->write (_player->get_subtitle_fonts ()); + list > fonts = _player->get_subtitle_fonts (); + + if (fonts.size() > 1 && _film->interop()) { + /* Interop will ignore second and subsequent s so don't even + write them as they upset some validators. + */ + shared_ptr first = fonts.front (); + fonts.clear (); + fonts.push_back (first); + } + + _writer->write (fonts); } while (!_player->pass ()) {} @@ -120,7 +133,7 @@ DCPEncoder::video (shared_ptr data, DCPTime time) void DCPEncoder::audio (shared_ptr data, DCPTime time) { - _writer->write (data); + _writer->write (data, time); shared_ptr job = _job.lock (); DCPOMATIC_ASSERT (job);