*/
DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> 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<const Content> c, film->content ()) {
if (c->subtitle && c->subtitle->use() && !c->subtitle->burn()) {
_non_burnt_subtitles = true;
}
if (_non_burnt_subtitles) {
- _writer->write (_player->get_subtitle_fonts ());
+ list<shared_ptr<Font> > fonts = _player->get_subtitle_fonts ();
+
+ if (fonts.size() > 1 && _film->interop()) {
+ /* Interop will ignore second and subsequent <LoadFont>s so don't even
+ write them as they upset some validators.
+ */
+ shared_ptr<Font> first = fonts.front ();
+ fonts.clear ();
+ fonts.push_back (first);
+ }
+
+ _writer->write (fonts);
}
while (!_player->pass ()) {}
void
DCPEncoder::audio (shared_ptr<AudioBuffers> data, DCPTime time)
{
- _writer->write (data);
+ _writer->write (data, time);
shared_ptr<Job> job = _job.lock ();
DCPOMATIC_ASSERT (job);